Использование обхода в глубину для топологической сортировки — различия между версиями
м (→Алгоритм) |
м |
||
Строка 29: | Строка 29: | ||
<tex>\mathtt{ans}.\mathtt{reverse}() </tex> | <tex>\mathtt{ans}.\mathtt{reverse}() </tex> | ||
− | '''function''' | + | '''function''' <tex>\mathtt{dfs}(u):</tex> |
<tex>\mathtt{visited}[u] = true </tex> | <tex>\mathtt{visited}[u] = true </tex> | ||
'''for''' <tex>uv \in E(G)</tex> | '''for''' <tex>uv \in E(G)</tex> | ||
Строка 38: | Строка 38: | ||
Время работы этого алгоритма соответствует времени работы алгоритма поиска в глубину, то есть равно <tex>O(V+E)</tex>. | Время работы этого алгоритма соответствует времени работы алгоритма поиска в глубину, то есть равно <tex>O(V+E)</tex>. | ||
+ | |||
+ | ==См. также== | ||
+ | * [[Использование обхода в глубину для поиска цикла]] | ||
== Источники == | == Источники == | ||
− | * Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн | + | *Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн — Алгоритмы: построение и анализ, 2-е издание. Пер. с англ. — М.:Издательский дом "Вильямс", 2010. — с.653 — 656.— ISBN 978-5-8459-0857-5 (рус.) |
* [http://habrahabr.ru/blogs/algorithm/100953/#habracut Топологическая сортировка на habrahabr] | * [http://habrahabr.ru/blogs/algorithm/100953/#habracut Топологическая сортировка на habrahabr] | ||
+ | * [http://e-maxx.ru/algo/finding_cycle MAXimal :: algo {{---}} «Топологическая сортировка»] | ||
[[Категория: Алгоритмы и структуры данных]] | [[Категория: Алгоритмы и структуры данных]] | ||
[[Категория: Обход в глубину]] | [[Категория: Обход в глубину]] |
Версия 20:15, 11 января 2015
Топологическая сортировка ориентированного ациклического графа представляет собой упорядочение вершин таким образом, что для любого ребра номер вершины меньше номера вершины .
Применение
Топологическая сортировка применяется в самых разных ситуациях, например при создании параллельных алгоритмов, когда по некоторому описанию алгоритма нужно составить граф зависимостей его операций и, отсортировав его топологически, определить, какие из операций являются независимыми и могут выполняться параллельно (одновременно). Примером использования топологической сортировки может служить создание карты сайта, где имеет место древовидная система разделов. Также топологическая сортировка применяется при обработке исходного кода программы в некоторых компиляторах и IDE, где строится граф зависимостей между сущностями, после чего они инициализируются в нужном порядке, либо выдается ошибка о циклической зависимости.
Постановка задачи
Теорема: | ||||||
— ациклический ориентированный граф, тогда | ||||||
Доказательство: | ||||||
Определим алгоритма dfs. Рассмотрим функцию . Очевидно, что такая функция подходит под критерий функции из условия теоремы, если выполняется следующее утверждение: как порядковый номер окраски вершины в черный цвет в результате работы
| ||||||
Алгоритм
Из определения функции
мгновенно следует алгоритм топологической сортировки://— исходный граф function проверить граф на ацикличность for if not function for if not
Время работы этого алгоритма соответствует времени работы алгоритма поиска в глубину, то есть равно .
См. также
Источники
- Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн — Алгоритмы: построение и анализ, 2-е издание. Пер. с англ. — М.:Издательский дом "Вильямс", 2010. — с.653 — 656.— ISBN 978-5-8459-0857-5 (рус.)
- Топологическая сортировка на habrahabr
- MAXimal :: algo — «Топологическая сортировка»