Знайдіть прості цикли в спрямованому графіку


15

Ця проблема для мене виглядає дуже цікаво. Йшлося про пошук простого циклу (тобто циклу, де не є повторні вузли) у спрямованому графіку.

Моє рішення відбувається так, тобто цей графік є проблемою випадку: введіть тут опис зображення

Я знаю, що в графіку є цикл, коли ви можете знайти "зворотні краї" в глибинному першому пошуку (накресленому на моєму малюнку в DFSTree), і на мить я можу переконатися в декількох циклах, але не для все, прості цикли. Тому що спрямовані егдеси, такі важливі для циклу, тобто (0123)! = (0321)

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

Ось мій перелік простих циклів для моєї проблеми.

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


Відповіді:


13

Це питання видається дуже корисним для Google. Наприклад, вас може зацікавити алгоритм, представлений у цій роботі:

Знаходження всіх елементарних схем спрямованого графа . Дональд Б. Джонсон. SIAM J. COMPUT. Вип. 4, № 1, березень 1975 року

Анотація Представлений алгоритм, який знаходить усі елементарні схеми - спрямований графік у часі, обмеженому O((n + e)(c + 1))і обмеженим простором O(n + e), де в графі є nвершини, eребра та cелементарні схеми. Алгоритм нагадує алгоритми Тірнана і Тарджана, але він швидший, оскільки він розглядає кожне ребро щонайбільше двічі між будь-яким одним ланцюгом і наступним у вихідній послідовності.

У роботі є повний алгоритм.


Добре. Папір ідеальна, але чи можу я піти до кого завгодно зі своєю роботою чи просто подивитися папір? Я шукав, щоб ти познайомив мене з рішенням, що я забуваю зі своєю ідеєю?
jonaprieto

2
Ваша основна проблема полягає в тому, що дерево dfs не є унікальним (наприклад, замініть "1" на "3" у вашій діаграмі). Вам потрібно буде переглянути всі можливі дерева-файли dfs, щоб перерахувати всі цикли.
badroit

1
Якщо вам потрібна реалізація цього алгоритму в Java: github.com/1123/johnson
user152468

@badroit посилання розірвано ... :(
Хорхе Ернандес

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