Лучшие вопросы
Таймлайн
Чат
Перспективы
Топологическая сортировка
упорядочивание вершин бесконтурного ориентированного графа согласно частичному порядку, заданному ребрами орграфа на множестве его верш Из Википедии, свободной энциклопедии
Remove ads
Топологическая сортировка — упорядочивание вершин ациклического ориентированного графа согласно частичному порядку, заданному рёбрами орграфа на множестве его вершин.
Например, для графа:
существует несколько согласованных последовательностей его вершин, которые могут быть получены при помощи топологической сортировки, в частности:
В последовательности могут быть переставлены любые две стоящие рядом вершины, которые не входят в отношение частичного порядка .

Топологическая сортировка широко применяется в различных отраслях например, с её помощью можно построить последовательность прохождения учебных курсов студентами, последовательность установки программ при помощи пакетного менеджера, последовательность сборки исходных текстов программ по данным сборочных файлов, можно построить список отображения объектов в изометрической проекции зная парные порядковые отношения между объектами (какой из двух объектов должен быть прорисован раньше).
Remove ads
Алгоритм Кана
Суммиров вкратце
Перспектива
Один из первых алгоритмов, и наиболее приспособленный к исполнению вручную разработан Артуром Каном в 1962 году.
Пусть дан ациклический ориентированный простой граф . Через обозначим множество таких вершин , что . То есть — множество всех вершин, из которых есть дуга в вершину . Пусть — искомая последовательность вершин.
пока выбрать любую вершину такую, что и удалить из всех
Наличие хотя бы одного цикла в графе приведёт к тому, что на определённой итерации цикла не удастся выбрать новую вершину .

Например, если задан граф:
- ,
алгоритм выполнится следующим образом:
На втором шаге вместо может быть выбрана вершина , поскольку порядок между и не задан.
Remove ads
Алгоритм Тарьяна
Суммиров вкратце
Перспектива
С использованием вычислительной техники топологическую сортировку можно выполнить за времени и памяти, если обойти все вершины, используя поиск в глубину, и выводить вершины в момент выхода из неё — алгоритм разработан Робертом Тарьяном в 1976 году.
Изначально все вершины помечаются как белые, для каждой вершины осуществляется шаг алгоритма:
- если вершина чёрная, ничего делать не надо,
- если вершина серая — найден цикл, топологическая сортировка невозможна,
- если вершина белая, то:
- красится в серый,
- применяется шаг алгоритма для всех вершин, в которые можно попасть из текущей,
- вершина красится в чёрный и помещается в начало окончательного списка.
Например, на графе:
с порядком обхода алгоритм отрабатывает следующим образом:
Remove ads
См. также
Литература
- Левитин А. В. Глава 5. Метод уменьшения размера задачи: Топологическая сортировка // Алгоритмы. Введение в разработку и анализ — М.: Вильямс, 2006. — С. 220—224. — 576 с. — ISBN 978-5-8459-0987-9
- Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Глава 22.4. Топологическая сортировка // Алгоритмы: построение и анализ = Introduction to Algorithms / Под ред. И. В. Красикова. — 2-е изд. — М.: Вильямс, 2005. — С. 632—635. — ISBN 5-8459-0857-4.
Remove ads
Ссылки
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads