Алгоритм Тар’яна
Алгоритм Тар'яна
Алгоритм Тар'яна — алгоритм пошуку компонент сильної зв'язності (КСЦ) в орієнтованому графі, який працює за лінійний час. Алгоритм був розроблений Робертом Тар'яном у 1972 році.
Принцип роботи
Алгоритм Тар'яна використовує глибинний пошук (DFS) для обходу графа і виявлення КСЦ. Він працює за таким принципом:
- Присвоєння унікального номера кожній вершині графа.
- Присвоєння додаткового номера "низ" кожній вершині, що відповідає найнижчому номеру вершини, досяжної з неї через грані графа.
- Пошук вершин, у яких номери "низ" і номера вершин збігаються. Вершини в таких компонентах і є компонентами сильної зв'язності.
Алгоритм Тар'яна покроково
- Ініціалізація: Присвоїти кожній вершині графа унікальний номер і номер "низ" -1.
- DFS: Виконати глибинний пошук графа, використовуючи стек вершин. Коли вершину вибирають, присвоювати їй номер і номер "низ".
- Оновлення номерів "низ": Перебираючи вершини в зворотному порядку їх обходу, для кожної вершини оновлювати номер "низ", щоб він був найменшим із номерів "низ" усіх сусідніх вершин.
- Пошук КСЦ: Перебираючи вершини в порядку їх унікальних номерів, визначати вершини, у яких номери "низ" і унікальні номери збігаються. Ці вершини належать до КСЦ.
Складність алгоритму
- Часова складність: Лінійна, O(V + E), де V — кількість вершин, а E — кількість ребер у графі.
- Просторова складність: O(V), оскільки алгоритм використовує стек для зберігання вершин під час DFS.
Застосування
Алгоритм Тар'яна використовується в різних задачах на графах, зокрема:
- Виявлення циклів у графі
- Транзитивне замикання графа
- Обчислення найдовшого циклу в графі
Алгоритм Тар'яна — ефективний і широко використовуваний лінійний алгоритм для пошуку компонент сильної зв'язності в орієнтованому графі. Він простий в реалізації і має різноманітні застосування в задачах на графах.
Часті питання, що задаються
- Чи може алгоритм Тар'яна знаходити цикли в графі?
- Як оновити номер "низ" для вершин у графі?
- У чому перевага алгоритму Тар'яна порівняно з іншими алгоритмами KSC?
- Які застосування алгоритму Тар'яна, крім виявлення КСЦ?
- Яка складна тимчасова складність алгоритму Тар'яна?