在图表中查找“瓶颈边缘”

时间:2011-04-27 21:16:32

标签: algorithm graph complexity-theory

给定一个随机的单向图,我必须找到“瓶颈边缘”才能从一个顶点到另一个顶点。

我称之为'瓶颈边缘'(必须有更好的名称!) - 假设我有以下单向图:

    A
  / | \
 B--C--D
 |     |
 E--F--G
  \ | /
    H

要从A到H独立于所选路径边缘,必须始终遍历BE和DG,因此会产生“瓶颈”。

这是否有多项式时间算法?

编辑:是的,这个名字是“最小限度”,因为我的意思是“瓶颈边缘”。

2 个答案:

答案 0 :(得分:12)

听起来你需要最小的切割,最小的边缘去除组合将你的图形分成两部分。

http://en.wikipedia.org/wiki/Minimum_cut

答案 1 :(得分:4)

您要找的是cut。给定一个图形,切割是一组边缘,将顶点划分为两个不相交的子集。

假设您尝试获得最小的剪切,这是典型的 min-cut 问题。这是Ford-fulkerson算法的伪代码版本,为您的案例(未定向,未加权的图形)重新编写。我很确定它应该有用,但我不确定我是否是最有效/惯用的。

reorganize your graph into a directed graph,
  with two directed edges (u->v, v->u) for each original edge (u-v)

while there is a path P from A to H:
  (hint: use breadth first search to find paths - long story here)
  //augment the path P:
  for each edge (u->v) in P:
    remove (u->v) from the graph and add (v->u) to it
    (if v->u isn't there already)

Label all vertices as reacheable or not reacheable from A.

The bottleneck edges is the set of edges
  that connect a reacheable and a unreacheable vertex

例如,在您的情况下,BFS会给我们路径A-B-E-H。在移除这些边缘之后,我们仍然能够找到路径A-D-G-H。在移除这些边之后,将图划分为可达到的顶点{A,B,C,D}和不可缓存的{E,F,G,H}。从每个(B-E和D-G)集合中具有顶点的边缘是瓶颈边缘。