Hw 7 Graph Algorithm
- 1 Edge detection
- 2 Reachability
- 3 Bitonic shortest paths
1 Edge detection
-
由
Cut Property
可知:如果e
是从某个集合S
到补集V−S
的开销最小的边,则e
一定所有最小生成树中。 -
由
Cycle Property
可知:如果e
是某个环C
上开销最大的边,则e
一定不在最小生成树中。
所以,根据以上两点可以知道判断边 e = (v, w)
是否属于 G
最小生成树的条件:
当且仅当 v
和 w
可以通过完全由比 e
开销更小的边组成的路径连接时,边 e
不属于 G
的最小生成树。
基于此设计算法:
- 从图
G
中删除所有开销大于等于e
的所有边,形成图G'
。这一步骤的运行时间是 O ( m + n ) O(m+n) O(m+n) - 通过
BFS
或DFS
确定在G'
中是否存在从v
到w
的路径。这一步骤的运行时间是 O ( m + n ) O(m+n) O(m+n)- 若没有这样的路径,边
e
属于G
的最小生成树。 - 若有这样的路径,边
e
不属于G
的最小生成树。
- 若没有这样的路径,边
通过以上算法可以判断 e
是否属于 G
的最小生成树,且运行时间是 O ( m + n ) O(m+n) O(m+n)
2 Reachability
-
先通过强连通分支算法获取图
G
的连通分支图G'
,并将G'
内所有点的值标记为G'
中 点的最小值。运行时间是 O ( V + E ) O(V+E) O(V+E) -
对于图
G'
,执行以下函数,该函数至多被执行 V + E V+E V+E 次。运行时间是 O ( V + E ) O(V+E) O(V+E)
REACHABILITY(u)u.min = u.labelfor each v ∈ Adj[u]u.min = min(u.min, REACHABILITY(v))return u.min
- 对于图
G
,min(u)
的值为:G'
图中的min(u')
3 Bitonic shortest paths
根据 Bellman-Ford
算法进行改进,以执行更少的松弛操作。
在任何一个双调路径中,最多有两个不同的递增序列和两个不同的递减序列。因此,通过路径松弛性质,按照权重递增的顺序松弛边两次,再按照权重递减的顺序松弛边两次,就可以确保对于 ∀ v ∈ V \forall v \in V ∀v∈V, v . d = δ ( s , v ) v.d=\delta(s, v) v.d=δ(s,v)。
此时有运行时间:
- 对边进行排序: O ( E lg E ) O(E\lg E) O(ElgE)
- 总共四次松弛: O ( E ) O(E) O(E)
所以,总共的运行时间是 O ( E lg E ) + O ( E ) = O ( E lg E ) O(E\lg E) + O(E) = O(E\lg E) O(ElgE)+O(E)=O(ElgE),相比普通 Bellman-Ford
算法的 O ( V E ) O(VE) O(VE) 更快。