Алгоритм Беллмана-Форда - Чому краї можна оновлювати не в порядку?


14

Алгоритм Беллмана-Форда визначає найкоротший шлях від джерела с до всіх інших вершин. Спочатку відстань між с та всіма іншими вершинами встановлюється на . Тоді обчислюється найкоротший шлях від до кожної вершини; це продовжується для ітерацій. Мої запитання:с|V|1

  • Чому потрібні ітерації?|V|1
  • Було б важливо, якби я перевірив краї в іншому порядку?
    Скажіть, якщо я спочатку перевіряю ребра 1,2,3, але потім на другій ітерації я перевіряю 2,3,1.

Професор Еріт Еріт сказав, що порядок не має значення, але це бентежить мене: чи не буде алгоритм неправильно оновлювати вузол на базі краю якщо його значення залежало від краю але оновлюється після ?x 1 x 1 x 2x2x1x1x2


Яку реалізацію ви вважаєте? Динамічне програмування, очевидно, не має проблем з порядком; для інших це може бути нетривіально.
Рафаель

Відповіді:


15

Розглянемо найкоротший шлях від до t , s , v 1 , v 2 , , v k , t . Цей шлях складається з максимум | V | -sts,v1,v2,,vk,t край, тому що повторення вершини найкоротшим шляхом завжди погана ідея (або принаймні є найкоротший шлях, який не повторює вершини), якщо у нас немає негативних циклів ваги.|V|1

У першому раунді ми знаємо, що край буде розслабленим, тому оцінка відстані для v 1 буде правильною після цього раунду. Зауважте, що ми не маємо уявлення про те, що v 1 знаходиться в цій точці, але, як ми розслабили всі ребра, ми повинні також розслабити цей. У другому раунді ми розслабляємось ( v 1 , v 2 ) в якийсь момент. Ми все ще не маємо уявлення, що таке v 1 або v 2 , але ми знаємо, що їх відстані є правильними.(s,v1)v1v1(v1,v2)v1v2

Повторюючи це, після деякого кругового ми розслабилися ( v k , t ) , після чого оцінка відстані для t правильна. Ми не маємо уявлення, що kk+1(vk,t)tк , поки весь алгоритм не закінчиться, але ми знаємо, що це станеться в якийсь момент (якщо не мати негативних циклів ваги).

Отже, вирішальне спостереження полягає в тому, що після кругового , i -го вузла найкоротшого шляху повинен мати свою відстань, встановлену на правильне значення. Оскільки шлях є максимум | V | - 1 край завдовжки, | V | - 1 раунда достатньо, щоб знайти цей найкоротший шлях. Якщо a | V | У цьому раунді все-таки щось змінюється, то відбувається щось дивне: всі шляхи вже повинні бути "врегульовані" до їх кінцевих значень, тому ми повинні мати ситуацію, що існує певний негативний цикл ваги.ii|V|-1|V|1|V|


У мене тут є невеликі сумніви. Я вважаю, що | v | -1 - це найгірший випадок кількості раундів, після яких обчислюється найкоротший шлях від s до t. Припустимо, у нас є вершини s, v1, v2..vn, t. Якщо краї вибираються в такому порядку, наприклад, (s, v1), (v1, v2) .. (vn, t), тоді в одній самій ітерації ми матимемо найкоротший шлях від s до t. Це просто для розуміння та Практичні терміни, ми не знаємо порядок вибору ребер і, отже, | v | -1 раундів. Я прав?
whokares

1
@whokares: так, можливо, вам пощастить і знайдете найкоротший шлях до першого раунду. До останнього раунду ви точно не знаєте, що дійсно знайдене вами значення - це найкоротший шлях, але це може бути. Алгоритм Дейкстри по суті "спричиняє" це: якщо всі ребра мають негативні ваги, то черга пріоритетів, що використовується в алгоритмі Діккстри, "прогнозує" порядок, в якому слід розслабити краї, щоб ви знайшли всі найкоротші шляхи у своєму першому раунді розслаблень.
Олексій десять Брінк

Дякую за оновлення. Я отримав це. В одному з матеріалів, який згадується як «Слайд 6: Поганий вибір порядку релаксації може призвести до експоненціальної кількості розслаблень: <br> Слайд 8:« Розумний »порядок крайових релаксацій <br>
whokares

Незалежно від порядку ребер у кожній ітерації, найкоротші шляхи будуть обчислені в | v | -1 ітераціях, правильно? Чому він каже експоненціальний? Він має на увазі, якщо ми вибрали однаковий порядок для всіх ітерацій, які ми зазвичай робимо, код ослаблення буде викликано, але оновлення мітки для вершини може трапитися лише в меншій кількості разів через замовлення, тим самим заощаджуючи процесор час?
whokares

1
@whokares: перший алгоритм, який вони представляють (який може мати експоненціальний час роботи), не розслабляє всі краї в круглі, а натомість знаходить деяку грань, для якої операція релаксації щось змінить, і розслабляє цей край. Якщо ви продовжуєте це робити і немає негативного циклу ваги, то з часом жодні краї більше не допоможуть вам, і ви зупинитесь. Однак, оскільки у вас немає жодних раундів і не встановлено замовлення, на якому краї слід розслабитися далі, ви, можливо, зробите експоненціальну кількість розслаблень. Удосконалений алгоритм, який вони представляють, - це Беллман-Форд, який має раунди.
Олексій десять Брінк

3

Найдовший шлях може бути без жодних циклів |V|. Ми починаємо з джерела, тому у нас вже є шлях довжиною 1, тому нам потрібен|V| - 1 більше вузлів, щоб отримати найдовший шлях.

Порядок не має значення, оскільки кожен порядок підтримуватиме інваріант: після nітерацій значення для кожного вузла менше або дорівнює вартості шляху мінімальної вартості від sдо вузла, що містить щонайбільшеn ребер.

Якщо на початку ітерації вартість правильна до nвузлів, то в кінці ітерації вона відповідає n+1правилам. Переупорядкування може призвести до того, що деякі вузли мають меншу вартість, перш ніж вони нормально оновлюються, але вони з часом все одно будуть оновлені.


Я не знаю, чи це просто я, або я не можу реально легко уявити ці факти. Мені все ще здається, що можуть бути деякі вузли, які не оновлюються в рамках ітерацій V-1.
user1675999

Ні, у вас є | E | = | V | -1 краю, коли у вас є | V | вузли, з'єднані простим шляхом без циклів. І у вас є | V | -1 повторення, видаліть свою відповідь, оскільки це неправильно.
Сем

@sam Хто ти і що все, що ти кажеш, має відношення до відповіді?
fgb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.