摘要:
先分析Dijkstra算法的本质要求:1. 有最优子结构2. 函数Len(s, v0, v1, ..., vk)定义了路径(s,v0, v1, ..., vk)的长度,要求任选一点vk+1属于V,则Len(s, v0, v1, ...,vk, vk+1) >=Len(s, v0, v1, ..., vk) 即以路径的角度来看Len是单调递增的;方法1:边的权重设置为w(u,v)=1/r[u,v], 求最短路径,路径长度的定义为Len(s, v0, ... ,vk) = w(s,v0)*w(v0,v1)*...*w(vk-1,vk), Len(s)=1; 松弛的时候使用乘法方法2:边的权重 阅读全文
摘要:
将所有d[v]初始化为0, 然后对边(u,v)松弛的时候,d[v] = min{ d[v], d[u]+weight(u,v) }可以证明δ*[v]同样满足三角不等式、上界性质、收敛性质和路径松弛性质 阅读全文
摘要:
Bellman-Ford进行VE次松弛之后,该负权环中必然有一个点不满足三角不等式,而且π[v]也在该环路中注意:上面的算法要求是只有一个负权环路,多个的话可能计算出的环路数可能小于实际值 阅读全文
摘要:
Bellman-Fort(G, w, s) 第七行替换为DFS-Mark(v)DFS-Mark(v)以v为定点进行深度遍历,将所有的点都标记为负无穷正确性证明:根据定理24.4的证明,可以推导出Bellman-Ford结束之后在所有负权环中必然有一个点v不满足三角不等式 阅读全文