Доказательство части алгоритма Беллмана-Форда - PullRequest
0 голосов
/ 24 мая 2018

Как я могу доказать это в алгоритме Беллмана-Форда:

Если нет циклов с отрицательным весом, то каждый кратчайший путь от источника s к стоку t имеет самое большее n-1 ребер, где n - количество вершин в графе.

Есть идеи?

1 Ответ

0 голосов
/ 25 мая 2018

Это дословное утверждение тривиально неверно: в графе, где все ребра имеют нулевой вес, нет циклов с отрицательным весом, но каждый путь самый короткий.То, что мы можем доказать, это следующая (но важная) другая версия:

Если нет циклов с отрицательным весом, то существует кратчайший путь от источника s краковина t, имеющая не более n - 1 ребер, где n - количество вершин в графе.


Вот доказательство.Предположим, что существует кратчайший путь из >= n ребер.Тогда этот путь имеет > n вершин.По принципу голубя, две вершины совпадают.Таким образом, мы можем удалить часть пути, преобразовав s -> (sequence-1) -> v -> (sequence-2) -> v -> (sequence-3) -> t в s -> (sequence-1) -> v -> (sequence-3) -> t.Длина цикла v -> (sequence-2) -> v была неотрицательной, поэтому наш новый путь не хуже старого.И поскольку старый утверждал, что он самый короткий, он тоже не может быть лучше.Вместе это означает, что мы удалили цикл с нулевым весом.

Важно то, что количество вершин уменьшилось во время нашей процедуры, поскольку мы удалили хотя бы одно вхождение v.Теперь повторяйте описанную выше процедуру до тех пор, пока путь не будет иметь ребер менее 1020 *.Это все еще кратчайший путь.Итак, мы доказали, что существует кратчайший путь с < n ребрами.

...