Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Структуры данных.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.58 Mб
Скачать

[Править]Время работы

Оценим время работы обхода в глубину. Процедура   вызывается от каждой вершины не более одного раза, а внутри процедуры рассматриваются все такие ребра  . Всего таких ребер для всех вершин в графе  , следовательно, время работы алгоритма оценивается как  .

[Править]Цвета вершин

Зачастую, простой информации "были/не были в вершине" не хватает для конкретных целей. Поэтому в процессе алгоритма вершинам задают некоторые цвета:

если вершина белая, значит, мы в ней еще не были, вершина не пройдена;

серая — вершина проходится в текущей процедуре  ;

черная — вершина пройдена, все итерации   от нее завершены.

Такие "метки" в основном используются при поиске цикла.

  1. Топологическая сортировка и сильно связные компоненты

    Определение топологической сортировки

Упорядочивание вершин бесконтурного ориентированного графа согласно частичному порядку, заданному ребрами орграфа на множестве его вершин.

Топологическая сортировка (Topological sort) — один из основных алгоритмов на графах, который применяется для решения множества более сложных задач.  Задача топологической сортировки графа состоит в следующем: указать такой линейный порядок на его вершинах, чтобы любое ребро вело от вершины с меньшим номером к вершине с большим номером. Очевидно, что если в графе есть циклы, то такого порядка не существует.  Ориентированной сетью (или просто сетью) называют бесконтурный ориентированный граф. В задачах подобного плана рассматриваются только конечные сети. 

↑ Пример ориентированного неотсортированного графа, к которому применима топологическая сортировка

Из рисунка видно, что граф не отсортирован, так как ребро из вершины с номером 4 ведет в вершину с меньшим номером (2). Существует несколько способов топологической сортировки — из наиболее известных:

  • Алгоритм Демукрона

  • Метод сортировки для представления графа в виде нескольких уровней

  • Метод топологической сортировки с помощью обхода в глубину

Я остановлюсь на рассмотрении последнего, поскольку он наиболее популярен, нагляден и прост в реализации. 

    Алгоритм построения топологической сортировки

Один из первых алгоритмов, и наиболее приспособленный к исполнению вручную.

Пусть дан бесконтурный ориентированный простой граф  . Через   обозначим множество вершин таких, что  . То есть,   — множество всех вершин, из которых есть дуга в вершину  . Пусть   — искомая последовательность вершин.

пока

выбрать любую вершину такую, что и

удалить из всех

Наличие хотя бы одного контура в графе приведёт к тому, что на определённой итерации цикла не удастся выбрать новую вершину  .

Пример работы алгоритма[править | править вики-текст]

Пусть задан граф  . В таком случае алгоритм выполнится следующим образом:

шаг

0

1

2

3

4

5

На втором шаге вместо   может быть выбрана вершина  , поскольку порядок между   и   не задан.

    Доказательство корректности работы алгоритма топологической сортировки

    На каких графах можно построить топологическую сортировку

    Определение сильно связных компонентов

Орграф называется сильно связным (англ. strongly connected), если любые две его вершины сильно связны. Две вершины s и t любого графа сильно связны, если существует ориентированный путь из s в t и ориентированный путь из t в s. Компонентами сильной связности орграфа называются его максимальные по включению сильно связные подграфы.

    Алгоритм построения сильно связных компонентов

Орграф, не принадлежащий к классу сильно связных графов, содержит некоторый набор сильно связных компонент, и некоторый набор ориентированных ребер, идущих от одной компоненты к другой.

Любая вершина орграфа сильно связна сама с собой.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]