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) 更快。