![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Часть 5. Алгоритмы на графах. e = Q.get(); st[e.w] = e.v; typename Graph::adjIterator A(G, e.w); for (int t = A.beg(); !A.end() ; t = A.nxt()) if (ord[t] == -1)
e = Q.get(); st[e.w] = e.v; typename Graph:: adjIterator A(G, e.w); for (int t = A.beg();! A.end(); t = A.nxt()) if (ord[t] == -1) { Q.put(Edge(e.w, t)); ord[t] = cnt++; } > }
Свойство 18.11. Поиск в ширину посещает все вершины и ребра графа за время, пропорциональное V2, в случае представления графа в виде матрицы смежности, и за время, пропорциональное V + Е, в случае представления графа в виде списков смежных вершин. Доказательство: Подобно тому, как мы поступали при доказательстве аналогичных свойств поиска в глубину, путем анализа программного кода мы обнаруживаем, что проверяем каждый элемент строки матрицы смежности или списка смежных вершин в точности один раз для каждой вершины, которую мы посещаем, следовательно, достаточно показать, что мы посетили каждую вершину. Теперь же для каждой связной компоненты рассматриваемый алгоритм сохраняет следующие инварианты: все вершины, на которые можно выйти из исходной вершины, (i) включены в дерево BFS, (ii) поставлены в очередь или (iii) достижимы из одной из вершин, установленных в очередь. Каждая вершина перемещается из (iii) в (ii) и в (i), а число вершин в (i) увеличивается при каждой итерации цикла; таким образом, в конечном итоге дерево BFS будет содержать все вершины, на которые можно выйти из исходной вершины. Это дает нам, как и в случае поиска в глубину, основание утверждать, что поиск в ширину представляет собой алгоритм, линейный по времени выполнения. ■ С помощью поиска в ширину мы можем решить задачи обнаружения остовного дерева, связных компонент, поиска вершин и ряд других базовых задач связности, которые были сформулированы и описаны в разделе 18.4, поскольку рассмотренные решения зависят только от способности алгоритма поиска анализировать каждый узел и каждое ребро, связанное с исходной точкой. Как мы скоре убедимся, поиски в ширину и в глубину
|