【问题标题】:Minimum cut over all pairs of vertices in directed and strongly connected graph有向强连通图中所有顶点对的最小切割
【发布时间】:2016-02-27 16:19:15
【问题描述】:

我有一个图 G,它是一个有向且强连通的图,我被要求找到所有顶点对的最小割,这意味着图中的每一对 S 和 T。这应该在 O(m2 × n2) 时间内完成。

我想出的最好的方法是将所有顶点视为 S,并且对于每个 S,将所有其他顶点视为 T,并为每个顶点运行 Ford-Fulkerson 算法,然后找到最小割。但如果我没记错的话,这个算法的复杂度是 O(m2 × n2 × C)。

我怎样才能在 O(m2 × n2) 时间内完成这项任务?有可能吗?

【问题讨论】:

  • 感谢您的编辑 m69,现在我们等待答复:)
  • CS 180 是一场斗争
  • 呵呵,经过5个小时的试错,感觉这个算法实际上是做不到要求的时间复杂度的。
  • 你是说 O(m^2 × n^2 × C) = O(m^2 × n^2) 吗? C 不是常数,它是最大流量值。
  • 我认为我在复杂性方面犯了一个错误,最终的复杂性是 O(n^2 x m x C) 而不是 O(n^2 x m^2 x C)。但是,这仍然不是我们想要的复杂性。

标签: algorithm graph max-flow ford-fulkerson minimum-cut


【解决方案1】:

符号:
m:边数
n:节点数
c_max:最大单边容量
C:最大流量值。

Dinic's algorithm 可以用来解决手头的任务。它在O(m * n^2) 中运行。 O(n^2) min cut 计算的蛮力方法然后产生总共O(m * n^2 * n^2),这是m = O(n^2) 的期望结果。对于m = o(n^2) 的稀疏图,我找不到明确的结果;然而,对于m = O(n) this paper 给出O(n^2 + n^4 * log n) = O(m^2 * n^2 * log n) 的结果。

有几种算法可以计算复杂度低于O( m * n^2 ) 的有向图中的最小割(或等效的最大流)。 Wilf H.S., Algorithms and Complexity, 1st ed. 在第 65 页有一个调查。最容易使用的算法可能是 Dinic (O(m * n^2))。

虽然乍一看,Ford-Fulkerson 算法的时间复杂度高达O( m * C ),但它也有一些严重的缺点:

  • 时间复杂度仅对整数边容量有效。事实上,由于边缘容量不合理,该算法甚至不能保证完全终止,也不能收敛到最大流量(参见this paper 以获取可证明的最小反例;在维基百科文章中也引用了这篇论文)。

  • 时间复杂度取决于最大流量的值。

流量值的意义

最大流量值C 不一定是节点和边数的函数。即使是(取决于图拓扑),以下观察成立:any 图中的最大可能流值是边数乘以最大边容量,m * c_max 等于O(m).

这会将整数边容量的 Ford-Fulkerson 复杂度变为O(m^2),除非单个边的最大容量是图中节点或边数的函数,这是一个非标准假设。

对于其他算法没有影响,因为它的执行取决于图拓扑和相对于彼此的边容量,而不是绝对边容量(因此,也不是最大流量值的函数) .

【讨论】:

    猜你喜欢
    • 2010-12-04
    • 2011-05-08
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    相关资源
    最近更新 更多