Как реализовать поиск в ширину в Python

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

Алгоритм

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

Реализация

Рассмотрим график, который реализован в коде ниже:

 graph = {'A'  : ['B', 'C'], 'B': ['D', 'E'], 'C': ['F'], 'D': [], 'E': ['F'  ], 'F': []} loaded = [] # Список для отслеживания посещенных узлов .queue = [] # Инициализация queuedef bfs (посещено, граф,  узел): visit.append (узел) queue.append (узел) while queue: s = queue.pop (0) print (s, end = "") для соседа в графе [s]: если сосед не в посещенном: посещенный  .append (сосед) queue.append (сосед) # Код драйвера bfs (посещенный, граф, 'A') 

Пояснение

  • Строки 3-10 : иллюстрированный график представлен с помощью списка смежности . Простой способ сделать это в Python — использовать структуру данных словаря , где каждая вершина имеет сохраненный список своих смежных узлов.

  • Строка 12 : посещено — это список, который используется для отслеживания посещенных узлов.

  • Строка 13 : queue — это список, который используется для отслеживания узлов, находящихся в настоящее время в очереди.

  • Строка 29 : аргументы функции bfs — это посещенный список, граф в виде словаря и начальный узел A.

  • Строки 15-26 : bfs следует алгоритму, описанному выше:

    1. Он проверяет и добавляет начальный узел в список посещенных и в очередь ..
    2. Затем, пока очередь содержит элементы, она продолжает извлекать узлы из очереди, добавляет соседей этого узла в очередь, если они не посещены, и отмечает их как посещенные.
    3. Это продолжается до тех пор, пока очередь не станет пустой.

Сложность времени

Поскольку все посещаются узлы и вершины, временная сложность для BFS на графе составляет O ( V+E) O (V + E) O (V + E); где VV V — это количество вершин и EE E — количество ребер.

Оцените статью
nanomode.ru
Добавить комментарий