给定一个随机的单向图,我必须找到“瓶颈边缘”才能从一个顶点到另一个顶点。
我称之为'瓶颈边缘'(必须有更好的名称!) - 假设我有以下单向图:
A
/ | \
B--C--D
| |
E--F--G
\ | /
H
要从A到H独立于所选路径边缘,必须始终遍历BE和DG,因此会产生“瓶颈”。
这是否有多项式时间算法?
编辑:是的,这个名字是“最小限度”,因为我的意思是“瓶颈边缘”。
答案 0 :(得分:12)
听起来你需要最小的切割,最小的边缘去除组合将你的图形分成两部分。
答案 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)集合中具有顶点的边缘是瓶颈边缘。