Поиск в ширину

Поиск в ширину
Порядок обхода дерева в ширину

Поиск в ширину (BFS, Breadth-first search) — метод обхода и разметки вершин графа.

Поиск в ширину выполняется в следующем порядке: началу обхода s приписывается метка 0, смежным с ней вершинам — метка 1. Затем поочередно рассматривается окружение всех вершин с метками 1, и каждой из входящих в эти окружения вершин приписываем метку 2 и т. д.

Если исходный граф связный, то поиск в ширину пометит все его вершины. Дуги вида (i, i+1) порождают остовный бесконтурный орграф, содержащий в качестве своей части остовное ордерево, называемое поисковым деревом.

Легко увидеть, что с помощью поиска в ширину можно также занумеровать вершины, нумеруя вначале вершины с меткой 1, затем с меткой 2 и т. д.

Содержание

Реализация

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

Пример реализации на Python для любого графа

Аргументами функции BFS(G, s) является граф G, представленный в виде [N,E], где N — количество узлов в графе, E — список ребер в виде [[a,b], [b, c]…], где не важно как обозначаются узлы — строками или числами, и s — название вершины из которой начинаем поиск. Функция возвращает кортеж из двух списков: p — содержит имена родительских элементов для узлов в дереве поиска в ширину, d — содержит расстояния от узла s.

def BFS(G, s):
        color, d, p = {}, {}, {}
        for u in [x for x in range(G[0]) if x != s]:
                color[u], d[u], p[u] = "white", "inf", None
        color[s], d[s], p[s] = "gray", 0, None
        Q = [] # queue
        Q.append(s)
        while Q != []:
                u = Q.pop(0)
                for v in [x[1] for x in G[1] if x[0] == u]:
                        if color[v] == "white":
                                color[v], d[v], p[v] = "gray", d[u] + 1, u
                                Q.append(v)
                color[u] = "black"
        return (p, d)
Алгоритмы поиска на графах


Практические применения

Ссылки

Литература

  • Ананий В. Левитин Глава 5. Метод уменьшения размера задачи: Поиск в ширину // Алгоритмы: введение в разработку и анализ = Introduction to The Design and Analysis of Aigorithms. — М.: «Вильямс», 2006. — С. 215-218. — ISBN 0-201-74395-7
  • Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн Алгоритмы: построение и анализ = Introduction to Algorithms. — 2-е изд. — М.: «Вильямс», 2006. — С. 1296. — ISBN 0-07-013151-1

Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Полезное


Смотреть что такое "Поиск в ширину" в других словарях:

  • поиск в ширину — В ИИ алгоритм поиска в пространстве решений, при котором сначала анализируются все вершины одного уровня, а затем вершины следующих уровней. [http://www.morepc.ru/dict/] Тематики информационные технологии в целом EN breadth first search …   Справочник технического переводчика

  • Поиск в глубину — Порядок обхода дерева в глубину Поиск в глубину (англ. Depth first search, DFS)  один из методов обхода графа. Алгоритм поиска описывается следующим образом: для каждой непройденной вершины необходимо найти все не пройденные смежные… …   Википедия

  • Поиск по первому наилучшему совпадению — Алгоритмы поиска на графах A* B* Алгоритм Беллмана Форда Двунаправленный поиск Алгоритм Дейкстры Алгоритм Джонсона Поиск в ширину Поиск в глубину Поиск с ограничением глубины Поиск по первому наилучшему совпадению Алгоритм Флойда Уоршелла Поиск… …   Википедия

  • Поиск пути — Эквивалентные пути между A и B в двухмерном пространстве …   Википедия

  • поиск преимущественно в ширину — — [http://www.iks media.ru/glossary/index.html?glossid=2400324] Тематики электросвязь, основные понятия EN breadth first search …   Справочник технического переводчика

  • Двунаправленный поиск — Для улучшения этой статьи по информационным технологиям желательно?: Добавить иллюстрации. Проставив сноски, внести более точные указания на источники …   Википедия

  • Алгоритм поиска A* — Алгоритмы поиска на графах A* B* Алгоритм Беллмана Форда Двунаправленный поиск Алгоритм Дейкстры Алгоритм Джонсона Поиск в ширину Поиск в глубину Поиск с ограничением глубины Поиск по первому наилучшему совпадению Алгоритм Флойда Уоршелла Поиск… …   Википедия

  • А* — Алгоритмы поиска на графах A* B* Поиск в ширину Поиск в глубину Алгоритм Дейкстры Двунаправленный поиск Поиск с ограничением глубины Поиск по первому наилучшему совпадению Поиск A* (произносится «А звездочка») в информатике и математике, алгоритм …   Википедия

  • Алгоритм Эдмондса — Карпа — Алгоритм Эдмондса  Карпа решает задачу нахождения максимального потока в транспортной сети. Алгоритм представляет собой частный случай метода Форда  Фалкерсона и работает за время O(VE2). Впервые был опубликован в 1970 году советским… …   Википедия

  • Алгоритм Эдмондса — Алгоритм Эдмондса  Карпа решает задачу нахождения максимального потока в транспортной сети. Алгоритм представляет собой частный случай метода Форда  Фалкерсона и работает за время . Впервые был опубликован в 1970 году советским учёным Е …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»