📅  最后修改于: 2023-12-03 15:42:16.748000             🧑  作者: Mango
给定一个有向图 $G = (V, E)$,在 $G$ 中,从源顶点 $s$ 可以到达所有其他顶点。考虑一个权重函数 $w : E → R$,对于一条边 $e \in E$,$w(e)$ 是其权重。在 $G$ 中定义了一个权重函数 $\omega : V → R$,对于一个顶点 $v \in V$,$\omega(v)$ 是从 $s$ 到 $v$ 的最短路径的权重。给定 $w$ 和 $\omega$,请考虑下面的算法,以找到从 $s$ 可以到达的所有顶点之间最小的 $\omega$ 值。
for i = 1 to |V|
for each edge (u, v) with weight w(uv)
if ∞ = ω(u)
then ω(v) = min{ω(v),∞}
else ω(v) = min{ω(v),ω(u)+ w(uv)}
return ω
此处,$∞$ 表示无穷大。 选择正确的选项。
(A) 算法计算从 $s$ 可以到达所有顶点之间最小的距离 (B) 算法计算从 $s$ 可以到达所有顶点之间最小的 $\omega$ 值 (C) 如果 $G$ 中存在一个权重为负的环,则算法进入无限循环 (D) 如果 $G$ 中存在一个权重为负的环,则算法给出错误的结果
这个算法实现了从 $s$ 到其他所有顶点的最短路径算法,因此选项 (A) 是不正确的。
根据题意,$\omega(v)$ 是从 $s$ 到 $v$ 的最短路径的权重,因此算法计算的是从 $s$ 可以到达所有顶点之间最小的 $\omega$ 值,因此选项 (B) 是正确的。
如果 $G$ 中存在一个权重为负的环,则算法会进入无限循环。这是因为算法每次都可以通过权重更小的边来更新 $\omega(v)$ 的值,因此会无限循环下去。因此选项 (C) 是正确的。
但是选项 (D) 是不正确的,因为算法在计算某个结点 $v$ 的 $\omega$ 值时,最多只会考虑 $v$ 的所有入边中权重最小的那条边 $e$,如果 $e$ 的起点 $u$ 的 $\omega$ 值为无穷大,则算法会使 $v$ 的 $\omega$ 值也为无穷大,而如果 $e$ 的起点 $u$ 的 $\omega$ 值不为无穷大,则算法会通过 $e$ 更新 $v$ 的 $\omega$ 值,此时 $v$ 的 $\omega$ 值肯定是正确的。因此,选项 (D) 是错误的。
(B) 算法计算从 $s$ 可以到达所有顶点之间最小的 $\omega$ 值 (C) 如果 $G$ 中存在一个权重为负的环,则算法进入无限循环