Автор оригинала: Pankaj Kumar.
Depth-first поиск алгоритм (DFS) с помощью Python
Уважаемые читатели, в этой статье я пойду через концепцию первого поиска глубины (DFS). Это графическая концепция, которая является общей проблемой во многих конкурентных кодирующих экзаменах. Итак, давайте посмотрим на создание Traversal DFS, используя Python.
Оглавление
- Что такое глубинная первая поиск?
- Концепция глубины первого поиска проиллюстрирована
- Глубина кодирования первого алгоритма поиска в Python
- Полный код и вывод
- Заключение
Что такое глубинная первая поиск?
Глубинный поиск – это алгоритм, который использует структуру данных стека для прохождения графов и деревьев. Концепция поиска по глубине первого происходит от слова «Глубина». Дерево проходит до глубины ветки, а затем обратно пересекает на остальные узлы.
Рассмотрим пустой «стек», который содержит посещенные узлы для каждой итерации. Наша задача здесь следующая:
- Начните на корневом узле и нажать на стек.
- Проверьте наличие соседних узлов дерева и выберите один узел.
- Перейти всю ветвь выбранного узла и нажмите все узлы в стек.
- При достижении конца филиала (не более соседних узлов), то есть NT-листового узла, движутся назад на один шаг и ищите соседние узлы N-1-го узла.
- Если есть соседние узлы для N-1-го узла, пересекайте эти ветви и нажимные узлы на стек.
Концепция глубины первого поиска проиллюстрирована
Давайте посмотрим на наш примерный график ниже:
А является корневым узлом. Так что, поскольку 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 и смогли понять код и а также пример. Попробуйте, используя ручку и бумагу рядом с вами, чтобы лучше понять обход.