Алгоритм КосараджуАлгоритм Косараджу (англ. kosaraju algorithm) — алгоритм для знаходження компонент сильної зв’язності орієнтованого графа. Ахо, Хопкрофт і Ульман приписують його до неоприлюдненого паперу Косараджу від 1978. Він використовує факт, що транспонований граф (той самий граф з оберненими напрямками ребер) має ті самі компоненти сильної зв'язності, що й початковий граф. Алгоритм Косараджу працює так:
ЛемаРозглянемо дві суміжні компоненти сильної зв'язності в G (зображення праворуч). Нехай f(v) — порядок завершення для вершини v в DFS-циклі. Тоді: Доведення послуговується фактом, що мета-граф (ущільнений граф) такий, в якому всі компоненти сильної зв'язності стягнуті до однієї вершини є ациклічним. Наслідок: найбільше значення f матиме в компоненті-джерелі (англ. source SCC), тобто вершина лежатиме на верхівці стека. СкладністьЯкщо на вході граф описаний за допомогою списком суміжності[en], алгоритм виконує два повних обходи графа, отже виконується за Θ(V+E) (лінійний) час, який є оптимальним, бо збігається з нижньою межею (кожен алгоритм повинен обійти всі вершини і ребра). Це концептуально найпростіший ефективний алгоритм, але не настільки швидкий як алгоритм Тарджана і алгоритм компонент сильної зв'язності по шляхах, які виконують лише один обхід графа. Якщо граф представлено через матрицю суміжності, алгоритм потребує час Ο(V2). Посилання
|