Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Поискнаграфе






М

ы часто изучаем свойства графа, систематически ис­следуя каждую из его вершин и каждое ребро. Опре­деление некоторых простых свойств - например, вычисле­ние степеней всех его вершин - выполняется просто, если мы исследуем каждое ребро (в любом порядке). Многие дру­гие свойства графа имеют отношение к путям на графах, та­ким образом, естественный порядок их изучения состоит в переходе от одной вершине к другой вдоль ребер графа. Почти все алгоритмы обработки графов, которые мы приме­няем, используют эту базовую абстрактную модель. В данной главе мы рассматриваем фундаментальные алгоритмы поис­ка на графах (graph search), которые используются для пере­мещения по графам, с изучением по мере продвижения его структурных свойств.

Поиск на графе в таком виде эквивалентен исследованию лабиринта. Точнее, коридоры в лабиринте соответствуют ребрам графа, а точки, в которых коридоры в лабиринте пересекаются, соответствуют вершинам графа. Когда про­грамма меняет значение переменной при переходе от верши­ны v к вершине w, что обусловлено наличием ребра v-w, мы отождествляем его с передвижением человека из точки v в точку w. Мы начинаем эту главу с изучения методов систе­матического исследования лабиринтов. В соответствии с этим процессом, мы наглядно представляем себе, как базовые ал­горитмы поиска по графу проходит через каждое ребро и каждую вершину графа.

В частности, рекурсивный алгоритм DFS (depth-first search — поиск в глубину) точно соответствует конкретной стра­тегии исследования лабиринта, избранной в главе 18. Поиск в глубину представляет собой классический гибкий алго­ритм, который применяется для решения задачи связности и множества других задач обработки графов. Возможны две



Часть 5. Алгоритмы на графах


реализации этого базового алгоритма; одна в виде рекурсивной процедуры и другая — с использованием явно заданного стека. Замена стека очередью FIFO (First in First Out -первым пришел, первым обслужен) приводит к другому классическому алгоритму - к ал­горитму BFS (breadth-first search — поиск в ширину), который используется для решения дру­гих задач обработки графов, связанных с нахождением кратчайших путей.

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

В качестве иллюстрации применения этих базовых методов поиска на графах для ре­шения более сложных задач мы будем рассматривать алгоритмы поиска связных компо­нент, двусвязных компонент, остовных деревьев и кратчайших путей, а также алгоритмы решения множества других задач по обработке графов. Эти реализации являют собой при­меры подхода, который мы намерены использовать для решения более трудных задач в главах 19-22.

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






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.