dijkstra算法证明

本文通过数学归纳法,详细证明了在寻找最短路径问题中,从起点sss到终点vvv的距离d(v)等于实际最短距离δ(v)。利用反证法,推翻了假设的最短路径长度小于d(u),确保了找到的点集合S中的每个点距离都是最短的。
摘要由CSDN通过智能技术生成

假设 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 ) xS,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 ) xS,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 xS,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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nightmare004

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值