Jump to content

Обход графа

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

Избыточность [ править ]

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

Таким образом, обычно необходимо помнить, какие вершины уже были исследованы алгоритмом, чтобы вершины посещались как можно реже (или, в худшем случае, чтобы обход не продолжался бесконечно). Этого можно достичь путем связывания каждой вершины графа с состоянием «цвета» или «посещения» во время обхода, которое затем проверяется и обновляется по мере посещения алгоритмом каждой вершины. Если вершина уже была посещена, она игнорируется и путь дальше не продолжается; в противном случае алгоритм проверяет/обновляет вершину и продолжает движение по текущему пути.

Некоторые частные случаи графов предполагают посещение других вершин в их структуре и, таким образом, не требуют явной записи посещения во время обхода. Важным примером этого является дерево: при обходе можно предположить, что все «предковые» вершины текущей вершины (и другие в зависимости от алгоритма) уже посещены. как в глубину, так и Поиск в графе в ширину представляет собой адаптацию древовидных алгоритмов, отличающихся, прежде всего, отсутствием структурно определенной «корневой» вершины и добавлением структуры данных для записи состояния посещения.

Алгоритмы обхода графа [ править ]

Примечание. — Если каждая вершина графа должна быть пройдена с помощью древовидного алгоритма (например, DFS или BFS), то этот алгоритм должен быть вызван хотя бы один раз для каждого связного компонента графа. Этого легко достичь, перебирая все вершины графа, выполняя алгоритм для каждой вершины, которая еще не посещена при проверке.

Поиск в глубину [ править ]

Поиск в глубину (DFS) — это алгоритм обхода конечного графа. DFS посещает дочерние вершины перед посещением родственных вершин; то есть он пересекает глубину любого конкретного пути, прежде чем исследовать его ширину. программы Стек (часто стек вызовов через рекурсию ) обычно используется при реализации алгоритма.

Алгоритм начинается с выбранной «корневой» вершины; Затем он итеративно переходит от текущей вершины к соседней, непосещенной вершине, пока не перестанет находить неисследованную вершину для перехода из ее текущего местоположения. Затем алгоритм возвращается к ранее посещенным вершинам, пока не найдет вершину, связанную с еще более неизведанной территорией. Затем он продолжит идти по новому пути, как и раньше, возвращаясь назад, когда сталкивается с тупиками, и заканчивая только тогда, когда алгоритм вернулся за исходную «корневую» вершину с самого первого шага.

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

Псевдокод [ править ]

  • Входные данные граф G и вершина v графа G. :
  • Выходные данные : Маркировка ребер в компоненте связности v как ребра открытия и задние ребра.
procedure DFS(G, v) is
    label v as explored
    for all edges e in G.incidentEdges(v) do
        if edge e is unexplored then
            wG.adjacentVertex(v, e)
            if vertex w is unexplored then
                label e as a discovered edge
                recursively call DFS(G, w)
            else
               label e as a back edge

Поиск в ширину [ править ]

Поиск в ширину (BFS) — это еще один метод обхода конечного графа. BFS посещает одноуровневые вершины перед посещением дочерних вершин, и очередь в процессе поиска используется . Этот алгоритм часто используется для поиска кратчайшего пути от одной вершины к другой.

Псевдокод [ править ]

  • Входные данные граф G и вершина v графа G. :
  • Выходные данные : ближайшая к v вершина , удовлетворяющая некоторым условиям, или ноль, если такой вершины не существует.
procedure BFS(G, v) is
    create a queue Q
    enqueue v onto Q
    mark v
    while Q is not empty do
        wQ.dequeue()
        if w is what we are looking for then
            return w
        for all edges e in G.adjacentEdges(w) do
            xG.adjacentVertex(w, e)
            if x is not marked then
                mark x
                enqueue x onto Q
    return null

Приложения [ править ]

Поиск в ширину можно использовать для решения многих задач теории графов, например:

Исследование графа [ править ]

Задачу исследования графа можно рассматривать как вариант обхода графа. Это онлайн-задача , а это означает, что информация о графе раскрывается только во время выполнения алгоритма. Общая модель выглядит следующим образом: задан связный граф G = ( V , E ) с неотрицательными весами ребер. Алгоритм начинается с некоторой вершины и знает все инцидентные исходящие ребра и вершины на концах этих ребер, но не более того. При посещении новой вершины снова известны все инцидентные исходящие ребра и вершины в конце. Цель — посетить все n вершин и вернуться в начальную вершину, но сумма весов тура должна быть как можно меньше. Задачу также можно понимать как конкретную версию задачи о коммивояжере , где продавцу приходится на ходу находить граф.

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

  • В неориентированном случае жадный обход не более чем в O (ln n ) раз длиннее оптимального. [1] Наилучшая нижняя граница, известная для любого детерминированного онлайн-алгоритма, равна 10/3. [2]
    • Неориентированные графы единичного веса можно исследовать с конкурентным коэффициентом 2 − ε , [3] что уже является жесткой границей для графов головастиков . [4]
  • В направленном случае жадный тур не более чем в ( n − 1 ) раз длиннее оптимального тура. Это соответствует нижней границе n − 1 . [5] Аналогичная конкурентная нижняя граница Ω ( n ) также справедлива для рандомизированных алгоритмов, которым известны координаты каждого узла в геометрическом вложении. Если вместо посещения всех узлов необходимо найти только один узел «сокровища», конкурентные границы равны Θ ( n 2 ) на ориентированных графах с единичным весом как для детерминированных, так и для рандомизированных алгоритмов.

обхода Универсальные последовательности

Универсальная последовательность обхода — это последовательность инструкций, содержащая обход любого регулярного графа с заданным количеством вершин и для любой начальной вершины. Вероятностное доказательство было использовано Алелиунасом и др. чтобы показать, что существует универсальная последовательность обхода с числом инструкций, пропорциональным O ( n 5 ) для любого регулярного графа с n вершинами. [6] Шаги, указанные в последовательности, относятся к текущему узлу, а не абсолютно. Например, если текущий узел — v j , а v j имеет d соседей, то последовательность обхода будет указывать следующий узел для посещения, v j +1 , как i й сосед v j , где 1 ≤ i d .

См. также [ править ]

Ссылки [ править ]

  1. ^ Розенкранц, Дэниел Дж.; Стернс, Ричард Э.; Льюис, II, Филип М. (1977). «Анализ нескольких эвристик для задачи коммивояжера». SIAM Journal по вычислительной технике . 6 (3): 563–581. дои : 10.1137/0206041 . S2CID   14764079 .
  2. ^ Биркс, Александр; Диссер, Янн; Хопп, Александр В.; Карусату, Кристина (май 2021 г.). «Улучшенная нижняя граница для исследования конкурентных графов». Теоретическая информатика . 868 : 65–86. arXiv : 2002.10958 . дои : 10.1016/j.tcs.2021.04.003 . S2CID   211296296 .
  3. ^ Миядзаки, Шуичи; Моримото, Наоюки; Окабе, Ясуо (2009). «Проблема онлайн-исследования графов на ограниченных графах». IEICE Транзакции по информации и системам . Е92-Д (9): 1620–1627. Бибкод : 2009ИЕИТИ..92.1620М . дои : 10.1587/transinf.E92.D.1620 . HDL : 2433/226939 . S2CID   8355092 .
  4. ^ Брандт, Себастьян; Ферстер, Клаус-Тихо; Маурер, Джонатан; Ваттенхофер, Роджер (ноябрь 2020 г.). «Онлайн-исследование графов ограниченного класса графов: оптимальные решения для графов-головастиков». Теоретическая информатика . 839 : 176–185. arXiv : 1903.00581 . дои : 10.1016/j.tcs.2020.06.007 . S2CID   67856035 .
  5. ^ Ферстер, Клаус-Тихо; Ваттенхофер, Роджер (декабрь 2016 г.). «Нижняя и верхняя конкурентные границы для онлайн-исследования направленных графов» . Теоретическая информатика . 655 : 15–29. дои : 10.1016/j.tcs.2015.11.017 .
  6. ^ Алелюнас, Р.; Карп, Р.; Липтон, Р.; Ловас, Л.; Ракофф, К. (1979). «Случайные блуждания, универсальные последовательности обхода и сложность задач лабиринта». 20-й ежегодный симпозиум по основам информатики (SFCS, 1979) : 218–223. дои : 10.1109/SFCS.1979.34 . S2CID   18719861 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 4dc8a9c3fabb80d9c0e66ffd39b68634__1706893740
URL1:https://arc.ask3.ru/arc/aa/4d/34/4dc8a9c3fabb80d9c0e66ffd39b68634.html
Заголовок, (Title) документа по адресу, URL1:
Graph traversal - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)