Содержание
Для каждой из вершин установим два числа — «время» входа и «время» выхода .
Модифицируем процедуру DFS так.
1. Увеличиваем «текущее время» на 1. .
2. Перекрашиваем вершину в серый цвет.
3. Для всякой вершины , смежной с вершиной и
окрашенной в белый цвет, выполняем
процедуру DFS(v) .
4. Перекрашиваем вершину в чёрный цвет.
5. Увеличиваем «текущее время» на 1. .
Считаем, что граф ориентированный. Очевидно, для любой вершины, из которой
мы не вышли в момент t, . Также невозможно скрёстное неравенство: .
Просматриваемые на шаге 3 дуги u→v могут быть:
. В момент выполнения шага 3 (обозначенный как t)
вершина v белая. В таком случае мы для
вершины v исполняем DFS, а дуга называется дугой
дерева поиска.
. В момент t вершина v чёрная,
сравнение entry говорит, что в v попали из u. Такая дуга
называется прямой.
. В момент t вершина v также чёрная, но
сравнение entry говорит, что в v попали в обход u.
Такая дуга называется перекрёстной.
. В момент t вершина v серая, то есть в u попали из v.
Имеем дело с обратной дугой.
Рёбра неориентированного графа могут быть рёбрами дерева и обратными, но не
прямыми и перекрёстными.[3] Чтобы различать рёбра неориентированного графа,
достаточно указанных выше трёх- или двухцветных отметок. Ребро, идущее в
белую вершину,— ребро дерева. В серую (чёрную в двухцветном варианте) —
обратное. В чёрную — такого не бывает.[4]
Алгоритм Косарайю требует сортировки вершин в обратном порядке по времени
выхода. Метка входа и типы рёбер нужны в алгоритмах поиска точек
сочленения и мостов. Метки выхода в обратном порядке — топологический
порядок вершин.
Применение[править | править код]
Поиск в глубину ограниченно применяется как собственно поиск, чаще всего на
древовидных структурах: когда расстояние между точками малó, поиск в глубину
может «плутать» где-то далеко.
Зато поиск в глубину — хороший инструмент для исследования топологических
свойств графов. Например:
Примечания[править | править код]
1. ↑ Cormen, 2005, p. 622.
2. ↑ Обход в глубину, цвета вершин — Викиконспекты
3. ↑ Если в сторону u→v оно прямое, то ранее его прошли в сторону
v→u как обратное. Если в сторону u→v оно перекрёстное, его
должны были пройти v→u как ребро дерева.
4. ↑ Cormen, 2005, с. 628—629.
Литература[править | править код]
Левитин А. В. Глава 5. Метод уменьшения размера
задачи: Поиск в глубину // Алгоритмы. Введение в
разработку и анализ — М.: Вильямс, 2006. — С. 212—
215. — 576 с. — ISBN 978-5-8459-0987-9
Кормен Т., Лейзерсон Ч., Ривест Р. Глава 22.
Элементарные алгоритмы для работы с графами //
Алгоритмы: построение и анализ(второе
издание). — М.: «Вильямс», 2005. — С. 622—632.
Ссылки[править | править код]
Имеется викиучебник по теме «Примеры
реализации поиска в глубину»
[скрыть]
Алгоритмы поиска на графах
ый поиск
n]
ечение
границ
му наилучшему совпадению
h[en]
итм
мана — Форда
стры
нсона
та
да — Уоршелла
вки
ма
кала
анского музея
ндса
Заглавная страница
Рубрикация
Указатель А — Я
Избранные статьи
Случайная страница
Текущие события
Участие
Сообщить об ошибке
Сообщество
Форум
Свежие правки
Новые страницы
Справка
Пожертвовать
Инструменты
Ссылки сюда
Связанные правки
Служебные страницы
Постоянная ссылка
Сведения о странице
Цитировать страницу
Печать/экспорт
Создать книгу
Скачать как PDF
Версия для печати
В других проектах
Викисклад
Элемент Викиданных
На других языках
العربية
Deutsch
English
Español
Français
हिन्दी
日本語
Português
中文
Ещё 29
Править ссылки
Эта страница в последний раз была отредактирована 13 марта 2021 в 07:50.
Текст доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать
дополнительные условия. Подробнее см. Условия использования.
Wikipedia® — зарегистрированный товарный знак некоммерческой организации Wikimedia Foundation, Inc.