首先,我想澄清一下我已经看到了:Finding 'bottleneck edges' in a graph
这不是重复的,只是一个不幸的巧合,那个人错误地将最小切割称为“瓶颈”。
瓶颈边缘是流网络中的边缘,当它增加时,会增加网络的最大流量。
所以这不一定是最小切割,就像在像 o-1->o-1->o 这样的图的情况下,我们没有瓶颈边缘,但我们确实有一个最小切割。
(在该示例中,o 是节点,边是 -*->,其中 * 是某个整数。)
无论如何,因此找到所有瓶颈显然可以在 O(V+E) 中完成,(假设图形以邻接表表示形式给出),我认为这样做的方法是创建两个大小为 V 的数组,其中我将调用 INCOMING 和 OUTGOING,然后遍历邻接列表的每个元素两次,第一次将 INCOMING[i] 增加进入每个节点的边的值,第二次增加 OUTGOING[j] 的值在每个节点中,其中 j 是我们正在读取的邻接列表的节点,而 i 是邻接列表中的边要到达它的节点。
我认为这在 O(V+E) 时间内有效,但我觉得我的解决方案肯定更加复杂且难以解释。有没有更好的解决方案(不比 O(V+E) 更好,但更简单?)