Мінімальне нальотове дерево проти найкоротшого шляху


44

Яка різниця між алгоритмом мінімального прольотного дерева та алгоритмом найкоротшого шляху?

У моєму класі структур даних ми охопили два алгоритми мінімального прольотного дерева (Прима та Крускала) та один алгоритм найкоротшого шляху (Діккстра).

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

Чого я не розумію, так як дерево, що має мінімальний розмір, має мінімальну загальну вагу, чи не будуть шляхи на дереві найкоротшими шляхами? Хтось може пояснити, чого я пропускаю?

Будь-яка допомога вдячна.


Ось мій приклад аналогічного запитання, яке доводить, що мінімальне простягається дерево не збігається з найкоротшим шляхом. cs.stackexchange.com/a/43327/34363
atayenel

Також це може бути цікавим. Максимальне нальотове дерево має шляхи між вузлами, де кожен шлях є вузьким місцем, тобто замість мінімізації суми ви максимізуєте мінімальну вагу. Можливо, існує подібне співвідношення між деревом, що мінімально охоплює.
Євген

Відповіді:


37

Розглянемо графік трикутника з одиничними вагами - він має три вершини , а всі три ребра { x , y } , { x , z } , { y , z } мають вагу 1 . Найкоротший шлях між будь-якими двома вершинами - це прямий шлях, але якщо скласти їх усі разом, ви отримаєте трикутник, а не дерево. Кожна колекція з двох ребер утворює мінімальну діапазон дерева в цьому графіку, але якщо (наприклад) ви вибрали { x , y } , { y ,x,y,z{x,y},{x,z},{y,z}1 , тоді ви пропускаєте найкоротший шлях { x , z } .{x,y},{y,z}{x,z}

На закінчення, якщо ви складете всі найкоротші шляхи разом, не обов’язково вийде дерево.


32

Ви праві, що два алгоритми Dijkstra (найкоротші шляхи від одного вузла запуску) та Prim (дерево мінімальної ваги, що починається від заданого вузла) мають дуже схожу структуру. Вони обидва жадібні (візьміть кращий край із теперішньої точки зору) і будують дерево, що охоплює графік.

Однак значення, яке вони мінімізують, різне. Dijkstra вибирає в якості наступного краю той, який веде від дерева до вузла, ще не вибраного найближчим до початкового вузла. (Тоді при цьому виборі перераховуються відстані.) Прайм вибирає як край найкоротший, який веде з дерева, побудованого дотепер. Отже, обидва алгоритми обрали «мінімальний край». Основна відмінність - значення, вибране як мінімальне. Для Dijkstra це довжина повного шляху від стартового вузла до вузла-кандидата, для Prim це лише вага цього одного краю.

x,y,z{x,y}{x,z}{y,z}x{x,y}{x,z}{x,y}{y,z}

дерева: Дейкстра проти Крускала

Щодо Крускала , то це дещо інакше. Він вирішує мінімально розтягнуте дерево, але під час виконання вибирає край, який може не утворювати дерево, вони просто уникають циклів. Тому часткові рішення можуть бути відключені. Зрештою ви отримуєте дерево.


12

Хоча обчислення алгоритмів мінімального обертового дерева та найкоротшого шляху виглядають схоже, вони зосереджуються на двох різних вимогах.

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

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

Ось приклад для уточнення, чому MST не обов'язково дає найкоротший шлях між двома вершинами.

(A)----5---(B)----5---(C)
 |                     |
 |----------7----------| 

У випадку MST ребра AB. BC буде на MST загальною вагою 10. Отже, вартість досягнення A до C у MST становить 10.

Але у випадку найкоротшого шляху найкоротший шлях між А до С - це зміна, яке дорівнює 7. АС ніколи не було на MST.


4

Різниця полягає в тому, що є кінцевою метою цього алгоритму -

Діжкстра - тут мета - досягти від початку до кінця. Вас турбують лише ці два пункти і відповідно оптимізуйте свій шлях.

Крусал - Тут ви можете почати з будь-якої точки і відвідати всі інші точки в графіку. Отже, ви не завжди можете вибрати найкоротший шлях для будь-яких двох точок. Натомість фокус полягає у виборі шляху, який призведе вас до коротшого шляху для всіх інших точок.


1

Я думаю, що приклад зробить це зрозумілішим.

введіть тут опис зображення

Дерево, що перекидається, виглядає як нижче. Це тому, що якщо скласти ребра в цій конфігурації, ми отримаємо найменшу можливу загальну вартість : 2 + 5 + 14 + 4 = 25.

(1)   (4)
  \   /
   (2)
  /   \
(3)   (5)

Окуляризуючи розтягнуте дерево, ви можете помилково подумати, що воно дає вам найкоротші шляхи, але на практиці це не так. Наприклад, якби ми хотіли перейти від вузла (1)до (4)цього, це коштувало б нам 7. Однак, якщо ми використали алгоритм Діккстри на початковому графіку, ми виявили б, що ми можемо перейти безпосередньо від вузла (1)до (4)вартості 5.


-1

Практичний приклад, щоб показати різницю>

Припустимо, ви приїхали на поїзді в місто і хочете дістатися до свого готелю.

Варіант 1: Отримайте таксі: таксі пройде за найменший шлях до готелю від станції. Якщо водій повинен слідувати шляхом по найкоротшому дереву шляху, зосередженому на станції.

Варіант 2: сісти на автобус. Автобусна компанія хоче задовольнити людей, а не тільки вас. Ідеальний шлях зайняв би всі ключові моменти міста. Таким чином, він буде проходити (*) шляхом вздовж дерева, що мінімально охоплює. Ось чому автобус повільніше, але в міру розподілу витрат він дешевший.

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


1
Ласкаво просимо на сайт. Я не думаю, що ваша аналогія є гарною, оскільки маршрут, проїжджаний автобусом, не має великого відношення до дерев, що розкидаються. Зокрема, він не охоплює (не відвідує кожну точку міста) і не є деревом. Скоріше, це якийсь шлях (або цикл), який відвідує або проходить близько до стільки значущих точок, скільки є розумним, так що маршрут є корисним для досить великої кількості людей.
Девід Річербі,

-1

Вони засновані на двох різних властивостях. Мінімальне нахилене дерево базується на властивості зрізу, тоді як найкоротший шлях заснований на релаксації краю.

Зріз розділяє графік на дві складові. Він може включати кілька країв. У MST вибираємо край з найменшою вагою.

Розслабляючий край говорить про те, що якщо я знаю відстань між A і B: dist (a, b) і dist from A and C: dist (a, c), якщо dist (a, b) + edge (b, c) менше, ніж dist (a, c), тоді я можу розслабити край (ac). Розслабивши всі краї, ми отримуємо найкоротший шлях.

Я настійно рекомендую переглянути відео за графіковими алгоритмами від професора Роберта Седжевіка.

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