首先,我想澄清一下,我看到了这个链接: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)更好,而是更简单的解决方案?)
但这并不是重复问题,只是一个不幸的巧合,那位提问者错误地称最小割为“瓶颈”。
瓶颈边是流网络中的一条边,增加其流量可以增加网络的最大流量。
因此,在像o-1->o-1->o这样的图形中,可能没有瓶颈边,但我们会有一个最小割。
(在这个例子中,“o”表示节点,而一条边是“-*->”,其中*是某个整数。)
总之,查找所有瓶颈似乎可以在O(V+E)时间内完成(假定以邻接表表示给出图形)。 我认为要做的方法是创建两个大小为V的数组,分别称为INCOMING和OUTGOING,然后两次迭代遍历邻接列表的每个元素,第一次将INCOMING[i]增加到进入每个节点的边的值,第二次将OUTGOING[j]增加到从每个节点出去的边的值,其中j是我们正在读取邻接列表的节点,i是在邻接列表中指向它的边的节点。
我认为这需要O(V+E)的时间,但我觉得我的解决方案肯定更加复杂和难以解释。是否有更好的解决方案(不仅比O(V+E)更好,而是更简单的解决方案?)