35
правок
Изменения
→Код (окончательный)
|proof=
После инициализации все неравенства, очевидно, выполняются. Далее, массив <tex> d </tex> может измениться только в строчке 5. Докажем оба неравенства индукцией по итерациям алгоритма. Пусть также <tex>d'_{uv}</tex> - значение <tex>d_{uv}</tex> сразу после <tex>i - 1</tex> итерации.
Пусть также <tex>d'_{uv}</tex> - значение <tex>d_{uv}</tex> сразу после <tex>i - 1</tex> итерации.
<tex> d_{uv} \le d_{uv}^{(i)} </tex>.
Рассмотрим два случая:
* Значение <tex> d_{uv}^{(i)} </tex> стало меньше, чем <tex> d_{uv}^{(i - 1)} </tex>. Тогда <tex> d_{uv}^{(i)} = d_{ui}^{(i-1)} + d_{iv}^{(i-1)} \ge </tex> (выполняется на шаге <tex> i - 1 </tex>, по индукционному предположению) <tex> \ge d'_{ui} + d'_{iv} \ge</tex> (в силу выполнения 7-ой строчки алгоритма на <tex>i</tex>-ой итерации и невозрастания элементов массива <tex> d </tex>) <tex>\ge d_{uv}</tex>.
* В ином случае всё очевидно: <tex> d_{uv}^{(i)} = d_{uv}^{(i - 1)} \ge d_{uv} </tex>, и неравенство тривиально.
'''Докажем первое неравнство от противного.'''
Пусть неравенство было нарушено. рассмотрим момент, когда оно было нарушено впервые. Пусть это была <tex>i</tex>-ая итерация и в этот момент изменилось значение <tex>d_{uv}</tex> и выполнилось <tex>\rho(u,v) > d_{uv}</tex>. Так как <tex>d_{uv}</tex> изменилось, то <tex>d_{uv} = d_{ui} + d_{iv} \ge</tex> (так как ранее <tex>\forall u, v \in V: \rho(u,v) \le d_{uv}</tex>) <tex>\ge \rho(u, i) + \rho(i, v) \ge</tex> (по неравенству треугольника) <tex>\ge \rho(u, v)</tex>.
Итак <tex>d_{uv} \ge \rho(u,v)</tex> {{---}} противоречие.
}}