为了证明调整权重策略是可行的,必须证明调整权重的两个性质都是正确的。gydF4y2Ba
性质1:保留最短路径gydF4y2Ba
第一个性质是任意两个顶点之间的最短路径,gydF4y2Ba
ugydF4y2Ba
,gydF4y2Ba
vgydF4y2Ba
u, vgydF4y2Ba
ugydF4y2Ba ,gydF4y2Ba vgydF4y2Ba 重新加权后应该保持最短路径。我们将开始证明下列方程保留最短路径。这个函数gydF4y2Ba
hgydF4y2Ba
(gydF4y2Ba
vgydF4y2Ba
)gydF4y2Ba
h (v)gydF4y2Ba
hgydF4y2Ba (gydF4y2Ba vgydF4y2Ba )gydF4y2Ba 将顶点映射到数字的函数。gydF4y2Ba
wgydF4y2Ba
egydF4y2Ba
我gydF4y2Ba
ggydF4y2Ba
hgydF4y2Ba
tgydF4y2Ba
′gydF4y2Ba
(gydF4y2Ba
ugydF4y2Ba
,gydF4y2Ba
vgydF4y2Ba
)gydF4y2Ba
=gydF4y2Ba
wgydF4y2Ba
egydF4y2Ba
我gydF4y2Ba
ggydF4y2Ba
hgydF4y2Ba
tgydF4y2Ba
(gydF4y2Ba
ugydF4y2Ba
,gydF4y2Ba
vgydF4y2Ba
)gydF4y2Ba
+gydF4y2Ba
hgydF4y2Ba
(gydF4y2Ba
ugydF4y2Ba
)gydF4y2Ba
−gydF4y2Ba
hgydF4y2Ba
(gydF4y2Ba
vgydF4y2Ba
)gydF4y2Ba
.gydF4y2Ba
体重^ {\ '}(u, v) =重量(u, v) + h (u) - h (v)。gydF4y2Ba
wgydF4y2Ba egydF4y2Ba 我gydF4y2Ba ggydF4y2Ba hgydF4y2Ba tgydF4y2Ba ′gydF4y2Ba (gydF4y2Ba ugydF4y2Ba ,gydF4y2Ba vgydF4y2Ba )gydF4y2Ba =gydF4y2Ba wgydF4y2Ba egydF4y2Ba 我gydF4y2Ba ggydF4y2Ba hgydF4y2Ba tgydF4y2Ba (gydF4y2Ba ugydF4y2Ba ,gydF4y2Ba vgydF4y2Ba )gydF4y2Ba +gydF4y2Ba hgydF4y2Ba (gydF4y2Ba ugydF4y2Ba )gydF4y2Ba −gydF4y2Ba hgydF4y2Ba (gydF4y2Ba vgydF4y2Ba )gydF4y2Ba .gydF4y2Ba
让gydF4y2Ba
pgydF4y2Ba
=gydF4y2Ba
vgydF4y2Ba
0gydF4y2Ba
,gydF4y2Ba
vgydF4y2Ba
1gydF4y2Ba
,gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
,gydF4y2Ba
vgydF4y2Ba
kgydF4y2Ba
P = {v_0, v_1,…, v_k}gydF4y2Ba
pgydF4y2Ba =gydF4y2Ba vgydF4y2Ba 0gydF4y2Ba ,gydF4y2Ba vgydF4y2Ba 1gydF4y2Ba ,gydF4y2Ba .gydF4y2Ba .gydF4y2Ba .gydF4y2Ba ,gydF4y2Ba vgydF4y2Ba kgydF4y2Ba 是一条路径gydF4y2Ba
vgydF4y2Ba
0gydF4y2Ba
v_0gydF4y2Ba
vgydF4y2Ba 0gydF4y2Ba 来gydF4y2Ba
vgydF4y2Ba
kgydF4y2Ba
v_kgydF4y2Ba
vgydF4y2Ba kgydF4y2Ba .所以,gydF4y2Ba
pgydF4y2Ba
pgydF4y2Ba
pgydF4y2Ba 是具有原始权重函数的最短路径当且仅当它是具有重加权函数的最短路径。我们有gydF4y2Ba
wgydF4y2Ba
egydF4y2Ba
我gydF4y2Ba
ggydF4y2Ba
hgydF4y2Ba
tgydF4y2Ba
′gydF4y2Ba
(gydF4y2Ba
pgydF4y2Ba
)gydF4y2Ba
=gydF4y2Ba
wgydF4y2Ba
egydF4y2Ba
我gydF4y2Ba
ggydF4y2Ba
hgydF4y2Ba
tgydF4y2Ba
(gydF4y2Ba
pgydF4y2Ba
)gydF4y2Ba
+gydF4y2Ba
hgydF4y2Ba
(gydF4y2Ba
vgydF4y2Ba
0gydF4y2Ba
)gydF4y2Ba
−gydF4y2Ba
hgydF4y2Ba
(gydF4y2Ba
vgydF4y2Ba
kgydF4y2Ba
)gydF4y2Ba
,gydF4y2Ba
体重^ {\ '}(p) =体重(p) + h (v_0) - h (v_k),gydF4y2Ba
wgydF4y2Ba egydF4y2Ba 我gydF4y2Ba ggydF4y2Ba hgydF4y2Ba tgydF4y2Ba ′gydF4y2Ba (gydF4y2Ba pgydF4y2Ba )gydF4y2Ba =gydF4y2Ba wgydF4y2Ba egydF4y2Ba 我gydF4y2Ba ggydF4y2Ba hgydF4y2Ba tgydF4y2Ba (gydF4y2Ba pgydF4y2Ba )gydF4y2Ba +gydF4y2Ba hgydF4y2Ba (gydF4y2Ba vgydF4y2Ba 0gydF4y2Ba )gydF4y2Ba −gydF4y2Ba hgydF4y2Ba (gydF4y2Ba vgydF4y2Ba kgydF4y2Ba )gydF4y2Ba ,gydF4y2Ba
=gydF4y2Ba
∑gydF4y2Ba
我gydF4y2Ba
kgydF4y2Ba
wgydF4y2Ba
egydF4y2Ba
我gydF4y2Ba
ggydF4y2Ba
hgydF4y2Ba
tgydF4y2Ba
′gydF4y2Ba
(gydF4y2Ba
vgydF4y2Ba
我gydF4y2Ba
−gydF4y2Ba
1gydF4y2Ba
,gydF4y2Ba
vgydF4y2Ba
我gydF4y2Ba
)gydF4y2Ba
,gydF4y2Ba
= \sum_{i}^{k}weight^{\prime}(v_{i-1}, v_i),gydF4y2Ba
=gydF4y2Ba 我gydF4y2Ba ∑gydF4y2Ba kgydF4y2Ba wgydF4y2Ba egydF4y2Ba 我gydF4y2Ba ggydF4y2Ba hgydF4y2Ba tgydF4y2Ba ′gydF4y2Ba (gydF4y2Ba vgydF4y2Ba 我gydF4y2Ba −gydF4y2Ba 1gydF4y2Ba ,gydF4y2Ba vgydF4y2Ba 我gydF4y2Ba )gydF4y2Ba ,gydF4y2Ba
=gydF4y2Ba
∑gydF4y2Ba
我gydF4y2Ba
kgydF4y2Ba
(gydF4y2Ba
wgydF4y2Ba
egydF4y2Ba
我gydF4y2Ba
ggydF4y2Ba
hgydF4y2Ba
tgydF4y2Ba
(gydF4y2Ba
vgydF4y2Ba
我gydF4y2Ba
−gydF4y2Ba
1gydF4y2Ba
,gydF4y2Ba
vgydF4y2Ba
我gydF4y2Ba
)gydF4y2Ba
+gydF4y2Ba
hgydF4y2Ba
(gydF4y2Ba
vgydF4y2Ba
我gydF4y2Ba
−gydF4y2Ba
1gydF4y2Ba
)gydF4y2Ba
−gydF4y2Ba
hgydF4y2Ba
(gydF4y2Ba
vgydF4y2Ba
我gydF4y2Ba
)gydF4y2Ba
)gydF4y2Ba
,gydF4y2Ba
= \ sum_{我}^ {k}(重量(v_张{},v_i) + h (v_张{})- h (v_i)),gydF4y2Ba
=gydF4y2Ba 我gydF4y2Ba ∑gydF4y2Ba kgydF4y2Ba (gydF4y2Ba wgydF4y2Ba egydF4y2Ba 我gydF4y2Ba ggydF4y2Ba hgydF4y2Ba tgydF4y2Ba (gydF4y2Ba vgydF4y2Ba 我gydF4y2Ba −gydF4y2Ba 1gydF4y2Ba ,gydF4y2Ba vgydF4y2Ba 我gydF4y2Ba )gydF4y2Ba +gydF4y2Ba hgydF4y2Ba (gydF4y2Ba vgydF4y2Ba 我gydF4y2Ba −gydF4y2Ba 1gydF4y2Ba )gydF4y2Ba −gydF4y2Ba hgydF4y2Ba (gydF4y2Ba vgydF4y2Ba 我gydF4y2Ba )gydF4y2Ba )gydF4y2Ba ,gydF4y2Ba 由于gydF4y2Ba可伸缩的资金gydF4y2Ba ,gydF4y2Ba
=gydF4y2Ba
wgydF4y2Ba
egydF4y2Ba
我gydF4y2Ba
ggydF4y2Ba
hgydF4y2Ba
tgydF4y2Ba
(gydF4y2Ba
pgydF4y2Ba
)gydF4y2Ba
+gydF4y2Ba
hgydF4y2Ba
(gydF4y2Ba
vgydF4y2Ba
0gydF4y2Ba
)gydF4y2Ba
−gydF4y2Ba
hgydF4y2Ba
(gydF4y2Ba
vgydF4y2Ba
kgydF4y2Ba
)gydF4y2Ba
.gydF4y2Ba
= weight(p) + h(v_0) - h(v_k)。gydF4y2Ba
=gydF4y2Ba wgydF4y2Ba egydF4y2Ba 我gydF4y2Ba ggydF4y2Ba hgydF4y2Ba tgydF4y2Ba (gydF4y2Ba pgydF4y2Ba )gydF4y2Ba +gydF4y2Ba hgydF4y2Ba (gydF4y2Ba vgydF4y2Ba 0gydF4y2Ba )gydF4y2Ba −gydF4y2Ba hgydF4y2Ba (gydF4y2Ba vgydF4y2Ba kgydF4y2Ba )gydF4y2Ba .gydF4y2Ba
任何路径gydF4y2Ba
vgydF4y2Ba
0gydF4y2Ba
v_0gydF4y2Ba
vgydF4y2Ba 0gydF4y2Ba 来gydF4y2Ba
vgydF4y2Ba
kgydF4y2Ba
v_kgydF4y2Ba
vgydF4y2Ba kgydF4y2Ba 这是使用原始权值函数的最短路径gydF4y2Ba
wgydF4y2Ba
egydF4y2Ba
我gydF4y2Ba
ggydF4y2Ba
hgydF4y2Ba
tgydF4y2Ba
(gydF4y2Ba
pgydF4y2Ba
)gydF4y2Ba
体重(p)gydF4y2Ba
wgydF4y2Ba egydF4y2Ba 我gydF4y2Ba ggydF4y2Ba hgydF4y2Ba tgydF4y2Ba (gydF4y2Ba pgydF4y2Ba )gydF4y2Ba 也是一个最短路径使用重加权函数gydF4y2Ba
wgydF4y2Ba
egydF4y2Ba
我gydF4y2Ba
ggydF4y2Ba
hgydF4y2Ba
tgydF4y2Ba
′gydF4y2Ba
(gydF4y2Ba
pgydF4y2Ba
)gydF4y2Ba
体重^ {\ '}(p)gydF4y2Ba
wgydF4y2Ba egydF4y2Ba 我gydF4y2Ba ggydF4y2Ba hgydF4y2Ba tgydF4y2Ba ′gydF4y2Ba (gydF4y2Ba pgydF4y2Ba )gydF4y2Ba .这是因为gydF4y2Ba
hgydF4y2Ba
(gydF4y2Ba
vgydF4y2Ba
0gydF4y2Ba
)gydF4y2Ba
h (v_0)gydF4y2Ba
hgydF4y2Ba (gydF4y2Ba vgydF4y2Ba 0gydF4y2Ba )gydF4y2Ba 而且gydF4y2Ba
hgydF4y2Ba
(gydF4y2Ba
vgydF4y2Ba
kgydF4y2Ba
)gydF4y2Ba
h (v_k)gydF4y2Ba
hgydF4y2Ba (gydF4y2Ba vgydF4y2Ba kgydF4y2Ba )gydF4y2Ba 不依赖于路径。gydF4y2Ba
在我们继续之前,证明任何路径都很重要gydF4y2Ba
pgydF4y2Ba
pgydF4y2Ba
pgydF4y2Ba 使用原始权值函数有一个负权循环,使用重权函数也有一个负权循环(因此我们可以在转换后检测到负权循环)。gydF4y2Ba
考虑到任何周期gydF4y2Ba
cgydF4y2Ba
cgydF4y2Ba
cgydF4y2Ba 我们刚刚在上面的步骤中证明了,gydF4y2Ba
wgydF4y2Ba
egydF4y2Ba
我gydF4y2Ba
ggydF4y2Ba
hgydF4y2Ba
tgydF4y2Ba
′gydF4y2Ba
(gydF4y2Ba
cgydF4y2Ba
)gydF4y2Ba
=gydF4y2Ba
wgydF4y2Ba
egydF4y2Ba
我gydF4y2Ba
ggydF4y2Ba
hgydF4y2Ba
tgydF4y2Ba
(gydF4y2Ba
cgydF4y2Ba
)gydF4y2Ba
+gydF4y2Ba
hgydF4y2Ba
(gydF4y2Ba
vgydF4y2Ba
0gydF4y2Ba
)gydF4y2Ba
−gydF4y2Ba
hgydF4y2Ba
(gydF4y2Ba
vgydF4y2Ba
kgydF4y2Ba
)gydF4y2Ba
,gydF4y2Ba
体重^ {\ '}(c) =重量(c) + h (v_0) - h (v_k),gydF4y2Ba
wgydF4y2Ba egydF4y2Ba 我gydF4y2Ba ggydF4y2Ba hgydF4y2Ba tgydF4y2Ba ′gydF4y2Ba (gydF4y2Ba cgydF4y2Ba )gydF4y2Ba =gydF4y2Ba wgydF4y2Ba egydF4y2Ba 我gydF4y2Ba ggydF4y2Ba hgydF4y2Ba tgydF4y2Ba (gydF4y2Ba cgydF4y2Ba )gydF4y2Ba +gydF4y2Ba hgydF4y2Ba (gydF4y2Ba vgydF4y2Ba 0gydF4y2Ba )gydF4y2Ba −gydF4y2Ba hgydF4y2Ba (gydF4y2Ba vgydF4y2Ba kgydF4y2Ba )gydF4y2Ba ,gydF4y2Ba
=gydF4y2Ba
wgydF4y2Ba
egydF4y2Ba
我gydF4y2Ba
ggydF4y2Ba
hgydF4y2Ba
tgydF4y2Ba
(gydF4y2Ba
cgydF4y2Ba
)gydF4y2Ba
.gydF4y2Ba
=重量(c)。gydF4y2Ba
=gydF4y2Ba wgydF4y2Ba egydF4y2Ba 我gydF4y2Ba ggydF4y2Ba hgydF4y2Ba tgydF4y2Ba (gydF4y2Ba cgydF4y2Ba )gydF4y2Ba .gydF4y2Ba
所以,任何循环gydF4y2Ba
cgydF4y2Ba
cgydF4y2Ba
cgydF4y2Ba 在转换之前有一个负权重值的,在重新加权之后也会有一个。gydF4y2Ba
性质2:所有重加权边必须有一个非负值gydF4y2Ba
还记得在这个算法的第一步,我们构造了一个新图,gydF4y2Ba
GgydF4y2Ba
′gydF4y2Ba
G ^ {\ '}gydF4y2Ba
GgydF4y2Ba ′gydF4y2Ba 它有一些重要的性质?它有一个额外的顶点,gydF4y2Ba
年代gydF4y2Ba
年代gydF4y2Ba
年代gydF4y2Ba 它有从它到所有其他顶点的边,而且每条边的权值都为零。这样做的一个重要结果是,这个新图中的所有最短路径将只包含gydF4y2Ba
年代gydF4y2Ba
年代gydF4y2Ba
年代gydF4y2Ba 如果gydF4y2Ba
年代gydF4y2Ba
年代gydF4y2Ba
年代gydF4y2Ba 源是(因为没有边进去gydF4y2Ba
年代gydF4y2Ba
年代gydF4y2Ba
年代gydF4y2Ba ).gydF4y2Ba
现在,假设gydF4y2Ba
GgydF4y2Ba
′gydF4y2Ba
G ^ {\ '}gydF4y2Ba
GgydF4y2Ba ′gydF4y2Ba 没有负权环(因为我们知道如果有的话),我们可以定义gydF4y2Ba
hgydF4y2Ba
(gydF4y2Ba
vgydF4y2Ba
)gydF4y2Ba
=gydF4y2Ba
dgydF4y2Ba
我gydF4y2Ba
年代gydF4y2Ba
tgydF4y2Ba
一个gydF4y2Ba
ngydF4y2Ba
cgydF4y2Ba
egydF4y2Ba
(gydF4y2Ba
年代gydF4y2Ba
,gydF4y2Ba
vgydF4y2Ba
)gydF4y2Ba
H (v) =距离(s, v)gydF4y2Ba
hgydF4y2Ba (gydF4y2Ba vgydF4y2Ba )gydF4y2Ba =gydF4y2Ba dgydF4y2Ba 我gydF4y2Ba 年代gydF4y2Ba tgydF4y2Ba 一个gydF4y2Ba ngydF4y2Ba cgydF4y2Ba egydF4y2Ba (gydF4y2Ba 年代gydF4y2Ba ,gydF4y2Ba vgydF4y2Ba )gydF4y2Ba 对所有gydF4y2Ba
vgydF4y2Ba
vgydF4y2Ba
vgydF4y2Ba 在gydF4y2Ba
GgydF4y2Ba
′gydF4y2Ba
.gydF4y2Ba
VgydF4y2Ba
G ^{\ '}。VgydF4y2Ba
GgydF4y2Ba ′gydF4y2Ba .gydF4y2Ba VgydF4y2Ba .由gydF4y2Ba三角不等式gydF4y2Ba ,我们有gydF4y2Ba
hgydF4y2Ba
(gydF4y2Ba
vgydF4y2Ba
)gydF4y2Ba
≤gydF4y2Ba
hgydF4y2Ba
(gydF4y2Ba
ugydF4y2Ba
)gydF4y2Ba
+gydF4y2Ba
wgydF4y2Ba
egydF4y2Ba
我gydF4y2Ba
ggydF4y2Ba
hgydF4y2Ba
tgydF4y2Ba
(gydF4y2Ba
ugydF4y2Ba
,gydF4y2Ba
vgydF4y2Ba
)gydF4y2Ba
,gydF4y2Ba
H (v) \leq H (u) + weight(u, v),gydF4y2Ba
hgydF4y2Ba (gydF4y2Ba vgydF4y2Ba )gydF4y2Ba ≤gydF4y2Ba hgydF4y2Ba (gydF4y2Ba ugydF4y2Ba )gydF4y2Ba +gydF4y2Ba wgydF4y2Ba egydF4y2Ba 我gydF4y2Ba ggydF4y2Ba hgydF4y2Ba tgydF4y2Ba (gydF4y2Ba ugydF4y2Ba ,gydF4y2Ba vgydF4y2Ba )gydF4y2Ba ,gydF4y2Ba
对于所有的边gydF4y2Ba
GgydF4y2Ba
′gydF4y2Ba
.gydF4y2Ba
EgydF4y2Ba
G ^{\ '}。EgydF4y2Ba
GgydF4y2Ba ′gydF4y2Ba .gydF4y2Ba EgydF4y2Ba .所以,如果我们简单地定义我们的重加权方程为gydF4y2Ba
wgydF4y2Ba
egydF4y2Ba
我gydF4y2Ba
ggydF4y2Ba
hgydF4y2Ba
tgydF4y2Ba
′gydF4y2Ba
(gydF4y2Ba
ugydF4y2Ba
,gydF4y2Ba
vgydF4y2Ba
)gydF4y2Ba
=gydF4y2Ba
wgydF4y2Ba
egydF4y2Ba
我gydF4y2Ba
ggydF4y2Ba
hgydF4y2Ba
tgydF4y2Ba
(gydF4y2Ba
ugydF4y2Ba
,gydF4y2Ba
vgydF4y2Ba
)gydF4y2Ba
+gydF4y2Ba
hgydF4y2Ba
(gydF4y2Ba
ugydF4y2Ba
)gydF4y2Ba
−gydF4y2Ba
hgydF4y2Ba
(gydF4y2Ba
vgydF4y2Ba
)gydF4y2Ba
≥gydF4y2Ba
0gydF4y2Ba
,gydF4y2Ba
体重^ {\ '}(u, v) =重量(u, v) + h (u) - h (v) \组0,gydF4y2Ba
wgydF4y2Ba egydF4y2Ba 我gydF4y2Ba ggydF4y2Ba hgydF4y2Ba tgydF4y2Ba ′gydF4y2Ba (gydF4y2Ba ugydF4y2Ba ,gydF4y2Ba vgydF4y2Ba )gydF4y2Ba =gydF4y2Ba wgydF4y2Ba egydF4y2Ba 我gydF4y2Ba ggydF4y2Ba hgydF4y2Ba tgydF4y2Ba (gydF4y2Ba ugydF4y2Ba ,gydF4y2Ba vgydF4y2Ba )gydF4y2Ba +gydF4y2Ba hgydF4y2Ba (gydF4y2Ba ugydF4y2Ba )gydF4y2Ba −gydF4y2Ba hgydF4y2Ba (gydF4y2Ba vgydF4y2Ba )gydF4y2Ba ≥gydF4y2Ba 0gydF4y2Ba ,gydF4y2Ba
那么第二个性质就满足了。gydF4y2Ba
{gydF4y2Ba
一个gydF4y2Ba
,gydF4y2Ba
BgydF4y2Ba
,gydF4y2Ba
DgydF4y2Ba
}gydF4y2Ba
{a, b, d \}gydF4y2Ba
{gydF4y2Ba 一个gydF4y2Ba ,gydF4y2Ba BgydF4y2Ba ,gydF4y2Ba DgydF4y2Ba }gydF4y2Ba
{gydF4y2Ba
一个gydF4y2Ba
,gydF4y2Ba
CgydF4y2Ba
,gydF4y2Ba
DgydF4y2Ba
}gydF4y2Ba
{a, c, d \}gydF4y2Ba
{gydF4y2Ba 一个gydF4y2Ba ,gydF4y2Ba CgydF4y2Ba ,gydF4y2Ba DgydF4y2Ba }gydF4y2Ba
{gydF4y2Ba
一个gydF4y2Ba
,gydF4y2Ba
BgydF4y2Ba
,gydF4y2Ba
CgydF4y2Ba
,gydF4y2Ba
DgydF4y2Ba
}gydF4y2Ba
\{a, b, c, d \}gydF4y2Ba
{gydF4y2Ba 一个gydF4y2Ba ,gydF4y2Ba BgydF4y2Ba ,gydF4y2Ba CgydF4y2Ba ,gydF4y2Ba DgydF4y2Ba }gydF4y2Ba
{gydF4y2Ba
一个gydF4y2Ba
,gydF4y2Ba
CgydF4y2Ba
,gydF4y2Ba
BgydF4y2Ba
,gydF4y2Ba
DgydF4y2Ba
}gydF4y2Ba
\{a, c, b, d \}gydF4y2Ba
{gydF4y2Ba 一个gydF4y2Ba ,gydF4y2Ba CgydF4y2Ba ,gydF4y2Ba BgydF4y2Ba ,gydF4y2Ba DgydF4y2Ba }gydF4y2Ba
请看下面的图表。哪条路径是最短路径gydF4y2Ba
一个gydF4y2Ba
一个gydF4y2Ba
一个gydF4y2Ba 来gydF4y2Ba
DgydF4y2Ba
DgydF4y2Ba
DgydF4y2Ba 在用约翰逊算法重新加权之后?gydF4y2Ba
4个顶点的图gydF4y2Ba
提交你的答案gydF4y2Ba
请看下面的图表。从A到D的最短路径用约翰逊算法重新加权后的路径长度是多少?gydF4y2Ba
4个顶点的图gydF4y2Ba