Vince Jiang

CSCI3160 / 作业与题解 · 本站更新

CSCI3160 Special 11:Johnson 重赋权与传递闭包

原件:Sp11 题目(本地课件) p.1,箭头与权重已视觉核对。 每题先题解后解析;以下是自行题解,不是官方答案。

Problem 1:全部重赋权结果

题解

超级源点到所有原点加零边后,势函数h按a,b,c,d,e,f顺序为0、0、−1、0、−3、−7。新权重如下:

有向边 原权重w h(u)−h(v) 新权重
a→c 6 1 7
a→e 3 3 6
b→d 4 0 4
c→b 2 −1 1
c→d 7 −1 6
c→f −6 6 0
d→e −3 3 0
e→c 2 −2 0
f→d 10 −7 3

具体解析

原图横向底边是f→d,不能读成d→f;e→c的箭头指向c。从超级源点所有点初始候选0。边d→e给e=−3,接e→c得到c=−1,再接c→f得到f=−7;这三条负向改善足以给最优势。a、b、d仍为0,因为其他到它们的候选不更小,例如c→b给1,f→d给3。

逐边代入 w′=w+h(u)−h(v)w'=w+h(u)-h(v)。例如c→f为−6−1−(−7)=0;f→d为10−7−0=3。所有新边非负也是自检;若读反箭头或写反势差,通常会出现负的新权重。

完整性核验:表中每条边均满足h(v)≤h(u)+w(u,v),且每个负h值都由上述源路径达到,因此它们确为最短距离,不只是“迭代似乎稳定”的数。

再用一条完整路径检查势差的符号。 原图路径 a→e→c→f 长度为 3+2−6=−13+2-6=-1;重赋权后是 6+0+0=66+0+0=6。差值 6−(−1)=76-(-1)=7 正是 h(a)−h(f)=0−(−7)h(a)-h(f)=0-(-7)。所以把新距离换回原距离必须是 d(a,f)=d′(a,f)−h(a)+h(f)=6−0−7=−1d(a,f)=d'(a,f)-h(a)+h(f)=6-0-7=-1。本图到 f 只能由 c 进入,按表中非负新权重可核对 a→e→c→f 已达最短新距离 6,故这里也核对了一对真正最短距离。

自测:若新最短距离为无穷,应照样做减势加势吗?

含义上仍是不可达,重赋权没有加删原图的边。实现时直接保留不可达标记,不对整数无穷哨兵做普通算术,以免溢出成假距离。

Problem 2:所有边加同一常数不保持最短路径

题解

自取边s→t=1、s→a=−2、a→t=2。最小边权z=−2,原图经a路线长0,优于直达1;统一加2后直达3,经a路线0+4=4,最短路线反转。

具体解析

加常数c会让一条含k条边的路径增加kc。不同路线的边数不同,增加量不一致,足以改变相对大小。这个反例是DAG,不受负环干扰,新权重都非负,却没有保住原问题的解。

Johnson增加的是首尾势差:路径中间顶点抵消,因此同起终点的所有路径增加同一个数。这才是它与统一常数平移的本质区别。

Problem 3:任意势函数都保持负环

题解

对环v₀→v₁→…→vₖ=v₀,求新边权之和,势差逐项抵消:

∑i=0k−1w′(vi,vi+1)=∑i=0k−1w(vi,vi+1)+h(v0)−h(vk)=∑i=0k−1w(vi,vi+1). \sum_{i=0}^{k-1}w'(v_i,v_{i+1}) =\sum_{i=0}^{k-1}w(v_i,v_{i+1})+h(v_0)-h(v_k) =\sum_{i=0}^{k-1}w(v_i,v_{i+1}).

每个环总权重完全不变,所以负环存在当且仅当重赋权后仍存在。

具体解析

结论对任意h成立,不要求h来自最短路;但任意h不保证所有边非负。只有选Johnson的最短距离势,才额外满足那条最短路不等式。

自取三环边权−3、1、1,总和−1;选顶点势2、−1、4,新边为0、−4、3,总和仍−1。某些边可能变正、某些更负,环整体的符号却不变。因此不能靠势函数“消灭”一个真实负环。

Problem 4:传递闭包

题解

对每个顶点i独立做一次DFS或BFS,令M[i,j]=1当且仅当本次访问到j,其他为0。每次搜索O(n+m),n次共O(n(n+m));输出矩阵O(n²)空间。

具体解析

每次换源点都重置访问标记;不能沿用上一个源点已访问的集合,否则把“别人能到达”误当成“当前能到达”。课程允许长度零路径,因此M[i,i]=1。若采用仅正长度可达的不同定义,对角线需另行判断环,不能混用。

自取a→b、b→c:按a,b,c排列,矩阵为三行[1,1,1]、[0,1,1]、[0,0,1]。搜索算法正好枚举所有可达点,既不会凭顶点编号添边,也不会遗漏经过多条边的间接可达。

来源与证据

Sp11 p.1。原图9条有向边、势函数与重赋权表已独立计算核验;反例与闭包小图为本文自取。