Зараз я вивчаю найкоротші шляхи в спрямованих графіках. Існує безліч ефективних алгоритмів пошуку найкоротшого шляху в мережі, як-от dijkstra або bellman-ford. Але що робити, якщо графік динамічний? Під динамікою я маю на увазі, що ми можемо вставляти або видаляти вершини під час виконання програми. Я намагаюся знайти ефективний алгоритм оновлення найкоротших шляхів від вершини до кожної іншої вершини , після вставлення краю , не потрібно запускати алгоритм найкоротшого шляху в новому графіку. Як я можу це зробити? Заздалегідь спасибі.u
- Примітка: зміни можна здійснити після першої ітерації алгоритму
- Примітка [2]: вказано два вузли, джерело та ціль. Мені потрібно знайти найкоротший шлях між цими вузлами. Коли графік оновлюється, я повинен лише оновити , що є найкоротшим шляхом між та .
- Примітка [3]: Мене цікавить лише випадок крайового вставки.
Формальне визначення : Дано графік . Визначимо операцію поновлення , як 1) вставку кромки до або 2) аа видалення крайової з . Мета полягає в тому, щоб ефективно знайти вартість усіх пар найкоротших шляхів після операції оновлення. Під ефективністю ми маємо на увазі принаймні краще, ніж виконання алгоритму All-Pairs-Shortest-Path, такого як алгоритм Bellman-Ford, після кожної операції оновлення.
Редагувати: Нижче є спрощена версія проблеми:
Наведено зважений графік , що складається з односпрямованих ребер та двох критичних вершин і . Наведено також набір кандидатських двосторонніх ребер. Я повинен побудувати ребро щоб мінімізувати відстань від до .