假设
s
s
s为起点
设我们找到的从
s
s
s到
v
v
v的距离为
d
(
v
)
d\left ( v \right )
d(v)
设
s
s
s到
v
v
v的实际最短距离为
δ
(
v
)
\delta \left(v \right )
δ(v)、
设
l
(
Q
)
l\left(Q \right )
l(Q)为路径
Q
Q
Q的距离
设找到的点为集合
S
S
S
我们要证明
∀
x
∈
S
,
d
(
x
)
=
δ
(
x
)
\forall x \in S,d\left(x \right ) = \delta \left(x \right )
∀x∈S,d(x)=δ(x)
使用数学归纳法
证明:
当
S
=
{
s
}
时
,
d
(
s
)
=
0
=
δ
(
s
)
S=\left \{ s \right \}时,d\left( s \right )= 0 = \delta \left( s \right )
S={s}时,d(s)=0=δ(s) ,成立
假设迭代了
k
k
k轮之后依然成立
设我们在第
k
k
k轮时算法找到了
u
u
u
令
S
′
=
S
⋃
{
u
}
S' = S\bigcup \left \{ u \right \}
S′=S⋃{u}
由假设,
∀
x
∈
S
′
,
x
≠
u
,
d
(
x
)
=
δ
(
x
)
\forall x \in S^{'} ,x \neq u , d\left(x \right ) = \delta \left( x \right )
∀x∈S′,x=u,d(x)=δ(x)
现在要证明
d
(
u
)
=
δ
(
u
)
d\left(u \right ) = \delta \left( u \right )
d(u)=δ(u)
使用反证法
假设
s
s
s到
u
u
u真正的最短路径为
Q
Q
Q
l
(
Q
)
<
d
(
u
)
l \left(Q \right ) < d\left(u \right )
l(Q)<d(u)
我们知道,
Q
Q
Q一定不会在这一轮结束(因为结束了这轮就不会选择
u
u
u),
但是
Q
Q
Q路径上有一部分是在
S
′
S'
S′中的
假设
x
y
xy
xy是一条边,
x
∈
S
′
,
y
∉
S
′
,
x
≠
u
x \in S',y \notin S',x \neq u
x∈S′,y∈/S′,x=u
设
Q
x
Q_{x}
Qx为顶点
x
x
x结束时
Q
Q
Q的子路径,
有
l
(
Q
x
)
+
l
(
x
y
)
≤
l
(
Q
)
l\left(Q_{x} \right )+ l\left(xy \right ) \leq l\left(Q \right )
l(Qx)+l(xy)≤l(Q)
由于这一轮选的是
u
u
u而不是
x
x
x,说明之前就选过
x
x
x,因为
x
y
xy
xy是一条边,所以
y
y
y一定是被更新过的
d
(
y
)
≤
d
(
x
)
+
l
(
x
y
)
d\left(y \right ) \leq d\left(x \right ) + l\left(xy \right )
d(y)≤d(x)+l(xy) (
s
s
s到
y
y
y的最短路径一定
≤
\le
≤其他从s到y的路径)
∴
d
(
y
)
≤
l
(
Q
x
)
+
l
(
x
y
)
≤
l
(
Q
)
\therefore d\left(y \right ) \leq l\left( Q_{x} \right )+ l\left(xy \right ) \leq l\left(Q \right )
∴d(y)≤l(Qx)+l(xy)≤l(Q)
又
∵
y
∉
S
′
\because y \notin S'
∵y∈/S′
∴
d
(
u
)
≤
d
(
y
)
\therefore d\left(u \right ) \leq d\left(y \right )
∴d(u)≤d(y)(因为每次选择最小的尚未被访问过的迭代)
又因为假设了
l
(
Q
)
<
d
(
u
)
l \left(Q \right ) < d\left(u \right )
l(Q)<d(u)
则
l
(
Q
)
<
d
(
u
)
≤
d
(
y
)
≤
l
(
Q
)
l\left(Q \right ) < d\left(u \right ) \leq d\left(y \right ) \leq l\left(Q \right )
l(Q)<d(u)≤d(y)≤l(Q)
即
l
(
Q
)
<
l
(
Q
)
l\left(Q \right ) < l\left(Q \right )
l(Q)<l(Q)
矛盾
∴
d
(
u
)
=
δ
(
u
)
\therefore d\left(u \right ) = \delta \left(u \right )
∴d(u)=δ(u)
dijkstra算法证明
最新推荐文章于 2024-01-09 17:36:04 发布
本文通过数学归纳法,详细证明了在寻找最短路径问题中,从起点sss到终点vvv的距离d(v)等于实际最短距离δ(v)。利用反证法,推翻了假设的最短路径长度小于d(u),确保了找到的点集合S中的每个点距离都是最短的。
摘要由CSDN通过智能技术生成