Отримання найкоротшого шляху динамічного графіка


24

Зараз я вивчаю найкоротші шляхи в спрямованих графіках. Існує безліч ефективних алгоритмів пошуку найкоротшого шляху в мережі, як-от dijkstra або bellman-ford. Але що робити, якщо графік динамічний? Під динамікою я маю на увазі, що ми можемо вставляти або видаляти вершини під час виконання програми. Я намагаюся знайти ефективний алгоритм оновлення найкоротших шляхів від вершини до кожної іншої вершини , після вставлення краю , не потрібно запускати алгоритм найкоротшого шляху в новому графіку. Як я можу це зробити? Заздалегідь спасибі.uvуе

  • Примітка: зміни можна здійснити після першої ітерації алгоритму
  • Примітка [2]: вказано два вузли, джерело та ціль. Мені потрібно знайти найкоротший шлях між цими вузлами. Коли графік оновлюється, я повинен лише оновити , що є найкоротшим шляхом між та .стπ(с,т)ст
  • Примітка [3]: Мене цікавить лише випадок крайового вставки.

Формальне визначення : Дано графік . Визначимо операцію поновлення , як 1) вставку кромки до або 2) аа видалення крайової з . Мета полягає в тому, щоб ефективно знайти вартість усіх пар найкоротших шляхів після операції оновлення. Під ефективністю ми маємо на увазі принаймні краще, ніж виконання алгоритму All-Pairs-Shortest-Path, такого як алгоритм Bellman-Ford, після кожної операції оновлення.Г=(V,Е)еЕеЕ


Редагувати: Нижче є спрощена версія проблеми:

Наведено зважений графік , що складається з односпрямованих ребер та двох критичних вершин і . Наведено також набір кандидатських двосторонніх ребер. Я повинен побудувати ребро щоб мінімізувати відстань від до .Г(V,Е)стС(у,v)Сст


Більше запитань щодо уточнення: чи залишаються кінцеві точки шляху щоразу виправлені? Вас цікавить лише випадок крайового вставки або довільні зміни графіка? Я думаю, що є дослідження, які відповідають на ваше запитання, але, на жаль, я не знаю, де його шукати. Швидкий пошук Google виявляє ці слайди, які здаються дуже корисними, і ця стаття: "найкоротші шляхи на динамічних графіках" (сподіваємось, що посилання працює). (у,v)
usul

Відповіді:


14

Проблема, як ви, напевно, помітили, є досить складною проблемою. Перевірка в Інтернеті призведе до складних випадків, які, ймовірно, вам не знадобляться. Ось рішення - як потрібно (тобто вам не потрібно перераховувати все з нуля).

у випадку додавання ребра - використовуючи вже матрицю вже вбудованої відстані - зробіть наступне:(у,v)

Для кожної пари вузлів і перевірте, чи - це можна зробити в оскільки ви порівнюєте кожну пару вузлів.y d ( ( x , u ) ) + c ( ( u , v ) ) + d ( ( v , y ) ) < d ( ( x , y ) ) O ( n 2 )хуг((х,у))+c((у,v))+г((v,у))<г((х,у))О(н2)

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

Якщо знаходиться у найкоротшому дереві шляху , то для кожного вузла таким, що найкоротший шлях включає , шляхи змінюватимуться. Тому обчисліть найкоротший шлях від до . Тепер повторіть попередній для кожного вузла - це не найкраще рішення. Насправді, в гіршому випадку, це асимптотично рівнозначно робити кожну справу з нуля, але в середньому може бути кращою. u v π ( u , v ) e u vеуvπ(у,v)еуv

якщо ви хочете отримати кращі результати, ніж це, то подивіться на:

  1. Деметреску, Каміль та Джузеппе Ф. Італіано. "Новий підхід до динамічних всіх пар найкоротших шляхів." Журнал ACM (JACM) 51.6 (2004): 968-992. (його можна знайти вільно від Google)

  2. або подивіться на це добре написане опитування


17

Проблема, яку ви просите, - це відомі алгоритмічні проблеми. Насправді все ще відкрито, наскільки складно ця проблема. Крім того, ви повинні знати, що існують різні втілення цієї проблеми. На відміну від того, про що ви просите, зазвичай повертаються лише відстані, тоді як ви запитуєте фактично найкоротші шляхи. Зауважте, що ці шляхи можуть бути вже дуже довгими. Алгоритми динамічного графіка розрізняють лише крайові делеції (алгоритми декрементальних даг), лише вставки ребер (алгоритми інкрементальних даг) та вставки та видалення ребер (повністю динамічні алгоритми dg). Таким чином, вас цікавлять додаткові алгоритми.

Алгоритми, згадані на посаді AJed, трохи застаріли. Є новіші результати від Thorup, дивіться тут, на сторінці 8 для короткого опитування. Наразі найкращий повністю динамічний точний алгоритм APSP від ​​Thorup (для запитів на відстані, а не для шляху) потребує амортизованого час оновлення, підтримуючи O ( 1 ) найгірший час запиту. Зауважте, що якщо у вас є O ( n log n )O(n2(logn+log2(1+m/н))О(1)О(нжурналн)країв, тоді ви могли просто перерахувати з нуля за допомогою Dijkstra і Fibach-купи і отримати той же час роботи, що і в алгоритмі Thorup. Тож якщо ваші графіки не є щільними, я б рекомендував використовувати Dijkstra.

Я не знаю жодного кращого додаткового алгоритму. Але слід здійснити пошук в Інтернеті, якщо існують новіші результати для цієї спеціалізованої проблеми.


Мені не потрібно оновлювати всі найкоротші шляхи в графіку, а лише між заданою парою . Чи є для цього щось краще? (с,т)
Ронтогіаніс Арістофаніс

@RondogiannisAristophanes насправді те, що було запропоновано поки що, є якось найкращим. Подивіться на цей документ, який стверджує, що: "додаткові та декрементовані проблеми з одним джерелом найкоротших шляхів для зважених спрямованих чи непрямих графіків є у сильному сенсі як мінімум настільки ж важкими, як статичні всі парні найкоротші шляхи". проблема ". (якщо чесно, я читав лише го вступ). який конкретний сценарій? що ти робив поки що? - можливо, ми можемо допомогти вам краще.
AJed

@RondogiannisAristophanes, чим краща продуктивність, тим складніше її реалізувати (в більшості випадків), а іноді і в практичних програмах вам не потрібно все таке покращення продуктивності.
AJed

@AJed Я відредагував своє повідомлення, щоб включити спрощений опис проблеми.
Rontogiannis Aristofanis

5

Я вірю, що алгоритм AD * може вам допомогти.

http://www.cs.cmu.edu/~ggordon/likhachev-etal.anytime-dstar.pdf

Коли отримується оновлена ​​інформація стосовно основного графіка, алгоритм поступово відновлює попереднє рішення. Результатом є підхід, який поєднує в собі переваги будь-якого та додаткового планувальників, щоб забезпечити ефективне рішення складних, динамічних проблем пошуку.

AD * підкреслює: це "в будь-який час", а це означає, що може дати вам "неоптимальне рішення" дуже швидко, хоча це може бути не найкращим. Зважаючи на достатньо часу, воно поверне оптимальне рішення. Крім того, ви можете обмежити неоптимальне рішення не гіршим за оптимальне рішення деякою визначеною користувачем постійною. Це дає вам можливість використовувати це в сценарії планування в реальному часі, коли мати нормальне рішення (де теоретично обмежене) краще, ніж взагалі немає рішення.

http://www.cs.cmu.edu/~maxim/software.html

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