6.2 Поиск в глубину
Наш интерес к исследованиям Тремо объясняется тем обстоятельством, что этот метод непосредственно приводит к классической рекурсивной функции обхода графов: посетив конкретную вершину, мы помечаем ее специальной меткой, свидетельствующей о том, что она посещена, затем, в режиме рекурсии, мы посещаем все смежные с нею вершины, которые еще не были помечены. Этот метод носит название метода поиска в глубину (DFS - depth-firstsearch). Это один из наиболее важных алгоритмов, с которыми доведется столкнуться. Метод DFS обманчиво прост, поскольку в его основе лежит знакомая идея и его реализация не вызывает трудностей; фактически это очень гибкий и мощный алгоритм, который применяется для решения множества трудных задач обработки графов.
На рисунке 42 дается графическое представление процесса исследования лабиринта, для которого используются стандартные чертежи графа. Указанные рисунки служат иллюстрацией динамики рекурсивного метода DFS и его соответствия с исследованием лабиринта методом Тремо.
Рисунок 42
Данные диаграммы представляют собой графическое представление процесса поиска. Ребра графа, выделенные толстыми жирными линиями, соответствуют ребрам в дереве DFS, показанном справа от каждой диаграммы графа. Заштрихованные ребра — это ребра, намеченные для включения в дерево на следующих шагах. На ранних стадиях (слева) выполнения алгоритма дерево растет вниз в виде прямой линии, что соответствует рекурсивным вызовам для вершин 0,2, 6 и 4 (слева). Затем мы выполняем рекурсивные вызовы для вершины 3, затем для вершины 5 (справа, две верхних диаграммы), после чего возвращаемся из этих вызовов, чтобы сделать очередной рекурсивный вызов для вершины 7 из вершины 4 (справа, вторая снизу) и для 1 из 7 (справа снизу).
Подобно тому, как при обходе лабиринта мы дважды сталкиваемся с каждым коридором (по одному разу с каждого конца), так и в графе мы дважды сталкиваемся с каждым ребром (по одному разу в каждой его вершине). При проведении исследования Тремо мы открываем двери в обоих концах коридора. Применяя поиск в глубину к неориентированному графу, мы проверяем оба представления каждого ребра. Если мы встречаем ребро v-w, то либо совершаем рекурсивный поиск (если вершина w не помечена), либо пропускаем это ребро (если w помечена). Когда мы встретим это же ребро во второй раз, на этот раз с противоположной ориентацией, то есть w-v, мы его игнорируем, поскольку вершину назначения v мы уже определенно посещали (первый раз, когда сталкивались с этим ребром).
Одно из различий между поиском в глубину и исследованием Тремо заслуживает того, чтобы потратить некоторое время на его изучение, хотя во многих контекстах оно не играет никакой роли. Когда мы перемещаемся из вершины v в вершину w, мы не проверяем никаких ребер, ведущих из вершины w в другие вершины графа. В частности, мы знаем, что существует ребро из v в w и оно будет проигнорировано, когда мы на него выйдем (поскольку v помечена как посещенная вершина). Подобное решение приходится принимать в моменты, которые отличаются от ситуаций, имеющих место во время проведения исследований Тремо, когда мы открываем дверь, соответствующую ребру, идущему из v в w, когда мы попадаем в вершину w из v в первый раз. Если бы мы закрывали эти двери во время входа и открывали во время выхода (обозначив соответствующий коридор за счет протягивания вдоль него нити), то в этом случае мы бы имели точное соответствие между поиском в глубину и исследованием Тремо.
Алгоритм поиска в глубину посещает все ребра и все вершины, связанные с исходной вершиной, независимо от того, в какой последовательности он проверяет ребра, инцидентные каждой вершине. Этот факт есть прямое следствие свойства 6.1, поскольку доказательство этого свойства не зависит от порядка, в каком двери открываются на любом заданном перекрестке.
Yandex.RTB R-A-252273-3- Общие сведения Сведения об эумк
- Методические рекомендации по изучению дисциплины
- Рабочая учебная программа
- Протокол согласования учебной программы по изучаемой учебной дисциплине с другими дисциплинами специальности
- Пояснительная записка
- Содержание дисциплины
- 1. Наименование тем, их содержание
- Тема 5. Отношения на множествах
- Тема 6. Соответствие и функции
- Тема 7. Мультимножества
- Раздел 2. Теория графов
- Тема 8. Основные понятия теории графов
- Тема 9. Графы
- Тема 10. Орграфы
- 3. Литература
- Теоретический раздел
- 1.2 Способы задания множеств
- Глава 2. Операции над множествами
- 2.1 Сравнение множеств
- 2.2 Операции над множествами
- 2.3 Свойства операций над множествами
- 2.4 Примеры доказательств тождеств с множествами
- 2.5 Булеан
- Глава 3. Упорядоченные множества
- 3.1 Кортеж
- 3.2 Операция проекции
- 3.3 Декартово произведение множеств
- 3.4 Графики
- Глава 4. Отношения на множествах
- 4.1 Понятие отношения
- 4.2 Свойства отношений
- 4.3 Операции над отношениями
- 4.4 Отношение эквивалентности
- 4.5 Отношение порядка
- Глава 5. Соответствия и функции
- 5.1 Основные понятия соответствия
- 5.2 Операции над соответствиями
- 5.3 Свойства соответствий
- 5.4 Отображения множеств
- 5.5 Функция
- Глава 6. Мультимножества
- 6.1 Понятие мультимножества
- 6.2 Операции над мультимножествами
- Раздел 2. Теория графов Глава 1. Основные понятия
- 1.1 Определения и примеры
- 1.2 Способы задания графов
- Глава 2. Графы
- 2.1 Типы графов
- 2.2 Подграфы
- 2.3 Сильно связные графы и компоненты графа
- 2.4 Маршруты, цепи, пути и циклы
- 2.5 Связность и компоненты графа
- 2.6 Операции над графами
- 2.7 Матрица смежности и инцидентности
- Глава 3. Орграфы
- 3.1 Определения и примеры
- 3.2 Орграфы и матрицы
- 3.3 Ориентированные эйлеровы графы
- Глава 4. Ориентированные ациклические графы и деревья
- 4.1 Ориентированные ациклические графы
- 4.2 Деревья
- Глава 5. Планарность и двойственность
- 5.1 Планарные графы
- 5.2 Точки сочленения, мосты и блоки
- 5.3 Двойственные графы
- Глава 6. Поиск на графах
- 6.1 Исследование лабиринта
- 6.2 Поиск в глубину
- 6.3 Поиск в ширину
- 6.4 Нахождение кратчайшего пути (Алгоритм Дейкстры)
- Практический раздел Контрольные работы Указания по выбору варианта
- Варианты контрольных заданий
- Контрольная работа № 1 Теоретическая часть (вопросы)
- Практическая часть Контрольное задание №1.
- Контрольное задание №2.
- Контрольное задание №3.
- Контрольное задание №4.
- Контрольное задание №5.
- Контрольное задание №6.
- Теоретическая часть (вопросы)
- Контрольное задание №1.
- Контрольное задание №2.
- Контрольное задание №3.