Графік має два / три різних мінімальних простягаються дерева?


15

Я намагаюся знайти ефективний метод виявлення, чи є у даного графа G два різних мінімальних дерева. Я також намагаюся знайти метод, щоб перевірити, чи є у нього 3 різних мінімальних дерев. Наївне рішення, про яке я хотів би, - це запустити алгоритм Крускала один раз і знайти загальну вагу дерева мінімального розміру. Пізніше вийміть край графіка та запустіть алгоритм Крускала і знову перевіряйте, чи є вага нового дерева вагою оригінального дерева мінімального розміру, і так для кожного краю графіка. Час виконання - це O (| V || E | log | V |), що зовсім не добре, і я думаю, що є кращий спосіб зробити це.

Будь-яка пропозиція буде корисною, заздалегідь дякую


Такого алгоритму було б непогано, але ця актуальна проблема не вирішить
itamar

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

Ці питання один і два вже відповідають на ваше запитання?
Juho

Дивіться проблему 23-1 у CLRS щодо того, як знайти другий кращий MST в . О(н2)
Каве

Відповіді:


7

Kapoor & Ramesh ( належна версія SIAM J. Comput. , Безкоштовна (?) Версія для персонального веб-сайту ) дають алгоритм для перерахування всіх мінімальних розмірів дерев як у зваженому, так і у невагомому графіках.

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

Для зваженого випадку вони дають час для переліку всіх мінімально розміщених дерев де - кількість таких розкиданих дерев. Він перераховує їх у порядку збільшення ваги, і моє поточне (побіжне) розуміння дозволяє припустити, що алгоритм цілком можливо припинити після того, як він створив задану кількість дерев (оскільки він тільки починається з MST і виробляє їх послідовно).NО(N|V|)N


к

1
@Raphael, я не встиг реально впоратися з цим (маркування присвоєння), але, з мого грубого розуміння, це повинно бути можливим - він починається з деякого MST, а потім генерує інші по одному.
Люк Матьєсон

1
нн-2

1
О(|V|)

1
Після швидкого читання зважений алгоритм генерує дерева у збільшенні вагового порядку (очевидно, починаючи з MST). Так це повинно бути для цілей ОП.
Люк Матьєсон

2

Можна показати, що алгоритм Крускала може знайти кожне дерево, що мінімально охоплюється; дивіться тут .

кк


5
ккК1,5

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

1

Щоб побачити, чи існує більше одного MST, розглянемо, наприклад, алгоритм Крускала. Єдиний спосіб, коли він міг би сконструювати різні MST, - це залишити краї, вибравши інший, коли є кілька з однаковою вагою. Але ці ж вагові кромки могли бути виключені, оскільки вони утворювали цикл із більш легкими краями ...

Тож вам слід запустити алгоритм Крускала, і коли є кілька ребер з однаковою вагою для розгляду, додайте всі вони, які можна додати, не створюючи циклів. Якщо залишився край цієї ваги, і він не закриває цикл з будь-яким із ребер із меншими вагами (які були додані раніше), існує більше одного MST. Перевірка наявності рівно 2 чи 3 і більше тощо виглядає набагато складніше ...


0

Моделювання алгоритму Крускала: При упорядкуванні країв, краї кластера мають однакову вагу. Тепер, коли ви обробляєте краї по порядку, кожен раз, коли ви досягаєте нового кластеру, спочатку перевіряйте всі краї окремо і виймайте з кластера ті, які закривали б цикл, враховуючи, що було побудовано до кластеру. Потім запустіть усі решта країв кластера, намагаючись додати їх до MST. Якщо будь-який із них закриває цикл, то це було обов'язково через інші краї того ж кластера, вставлені раніше, це означає, що у вас є більше одного MST.

Це рішення зберігає складність алгоритму Крускала, лише збільшує час для кожного обробленого краю.


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