Рубрики
Без рубрики

Depth-first поиск алгоритм (DFS) с помощью Python

Уважаемые читатели, в этой статье я пойду через концепцию первого поиска глубины (DFS). Это графическая концепция, которая является распространенной проблемой во многих

Автор оригинала: Pankaj Kumar.

Depth-first поиск алгоритм (DFS) с помощью Python

Уважаемые читатели, в этой статье я пойду через концепцию первого поиска глубины (DFS). Это графическая концепция, которая является общей проблемой во многих конкурентных кодирующих экзаменах. Итак, давайте посмотрим на создание Traversal DFS, используя Python.

Оглавление

  • Что такое глубинная первая поиск?
  • Концепция глубины первого поиска проиллюстрирована
  • Глубина кодирования первого алгоритма поиска в Python
  • Полный код и вывод
  • Заключение

Что такое глубинная первая поиск?

Глубинный поиск – это алгоритм, который использует структуру данных стека для прохождения графов и деревьев. Концепция поиска по глубине первого происходит от слова «Глубина». Дерево проходит до глубины ветки, а затем обратно пересекает на остальные узлы.

Рассмотрим пустой «стек», который содержит посещенные узлы для каждой итерации. Наша задача здесь следующая:

  1. Начните на корневом узле и нажать на стек.
  2. Проверьте наличие соседних узлов дерева и выберите один узел.
  3. Перейти всю ветвь выбранного узла и нажмите все узлы в стек.
  4. При достижении конца филиала (не более соседних узлов), то есть NT-листового узла, движутся назад на один шаг и ищите соседние узлы N-1-го узла.
  5. Если есть соседние узлы для N-1-го узла, пересекайте эти ветви и нажимные узлы на стек.

Концепция глубины первого поиска проиллюстрирована

Давайте посмотрим на наш примерный график ниже:

Изображение 8.

А является корневым узлом. Так что, поскольку A посещается, мы нажимаем это на стек.

Stack : A

Пойдем в ветку A-B. B не посещается, поэтому мы ходим в B и Push B на стек.

Stack : A B

Теперь мы пришли к концу нашей ветви A-B, и мы переходим к N-1-м узлу, который a. Теперь мы посмотрим на соседний узел, который представляет собой S. Vision S и подтолкнуть его на стек. Теперь вам нужно пройти ветку S-C-D, до глубины то есть до D и Mark S, C, D, как посещено.

Stack: A B S C D

Поскольку D не имеет других соседних узлов, возвращайтесь к C и пройдите соседнюю ветку E-H-G на глубину и нажимайте их на стек.

Stack : A B S C D E H G

При достижении D существует только один соседний узел, т.е. f, который не посещается. Нажмите F на стек.

Stack : A B S C D E H G F

Сам этот стек – это обход DFS.

Глубина кодирования первого алгоритма поиска в Python

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

Таким образом, в следующем примере я определил список соседних для каждого из узлов на нашем графике.

graph1 = {
    'A' : ['B','S'],
    'B' : ['A'],
    'C' : ['D','E','F','S'],
    'D' : ['C'],
    'E' : ['C','H'],
    'F' : ['C','G'],
    'G' : ['F','S'],
    'H' : ['E','G'],
    'S' : ['A','C','G']
}

Примечание: Этот список соседних может быть введен от пользователя и не должен быть жестко закодирован.

Теперь мы определим нашу функцию DFS, которая принимает 3 параметра в качестве ввода – график (список сменок), узел и список посещенных узлов.

Если текущий узел не посещается, т.е. не присутствует в посещенном списке, отметьте его, как посещаемое и добавьте его в посещенный список.

Перейдите к следующему узлу, а затем рекурсивно пропустите этот узел в функцию DFS. Таким образом, каждый узел перемещается до глубины и печатает его в качестве вывода DFS.

def dfs(graph, node, visited):
    if node not in visited:
        visited.append(node)
        for k in graph[node]:
            dfs(graph,k, visited)
    return visited

visited = dfs(graph1,'A', [])
print(visited)

Полный код и вывод

graph1 = {
    'A' : ['B','S'],
    'B' : ['A'],
    'C' : ['D','E','F','S'],
    'D' : ['C'],
    'E' : ['C','H'],
    'F' : ['C','G'],
    'G' : ['F','S'],
    'H' : ['E','G'],
    'S' : ['A','C','G']
}

def dfs(graph, node, visited):
    if node not in visited:
        visited.append(node)
        for k in graph[node]:
            dfs(graph,k, visited)
    return visited

visited = dfs(graph1,'A', [])
print(visited)

Выход вышеуказанного кода выглядит следующим образом:

['A', 'B', 'S', 'C', 'D', 'E', 'H', 'G', 'F']

Заключение

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