Правильность алгоритма Bellman-Ford, мы можем все еще лучше?

StackOverflow https://stackoverflow.com//questions/20024294

Вопрос

Я узнал, что алгоритм Bellman-Ford имеет время работы O (| E | * | V |), в котором E - количество ребер и V количества вершин.Предположим, что график не имеет никаких отрицательных взвешенных циклов.

Мой первый вопрос в том, что как мы докажем, что внутри (| V | -1) итераций (каждая итерация проверяет каждый край в E), он обновляет кратчайший путь к каждому возможному узлу, учитывая определенный узел Start?Возможно ли, что мы имеем итерацию (| V | -1) раз, но все еще не заканчивающиеся с короткими путями к каждому узлу?

Предположим правильность алгоритма, мы можем на самом деле сделать лучше, чем это?Это происходит для меня, что не все края негативно взвешены в определенном графике.Алгоритм Bellman-Ford кажется дорогим, поскольку каждая итерация проходит через все края.

Это было полезно?

Решение

Самый длинный возможный путь от источника к любой вершине привлек для всех остальных вершин на графике. Другими словами - у вас не будет пути, который проходит через тот же вершин более одного раза, поскольку это обязательно увеличит вес (это верно только благодаря тому, что нет отрицательных циклов). На каждой итерации вы будете обновлять максимальный максимальный путь на следующую вершину на этом пути, до тех пор, пока после регистрации V | -1 итерации Ваши обновления должны были бы достичь конца этого пути. После этого не будет никаких вершин с неимпустыми значениями, поскольку ваше обновление накрыло все кратчайшие пути до этой длины.

Эта сложность жесткая (по крайней мере, для BF), подумайте о длинной линии подключенных вершин. Выберите левый в качестве источника - ваш процесс обновления должен был бы работать оттуда на другую сторону, когда-то вершины за раз. Теперь вы можете утверждать, что вам не нужно проверять каждый край, так что давайте бросим несколько случайных краев с очень большим весом (N> | V | * Max-Weight) - они не могут помочь вам, но Ваш алгоритм не может знать это точно, так что если должен пройти процесс обновления вершин с этими весами (они все еще лучше, чем исходная бесконечность).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top