파이썬을 사용한 깊이 첫 번째 검색 알고리즘

친애하는 독자,이 문서에서 나는 깊이 첫 번째 검색의 개념을 통해 당신을 안내합니다. 이것은 많은 경쟁 코딩 시험에서 공통적 인 문제 인 그래프 개념입니다. 파이썬을 사용하여 순회를 만드는 것을 살펴 보겠습니다.

목차

깊이 첫 번째 검색은 무엇입니까?

깊이 우선 검색은 스택 데이터 구조를 사용하여 그래프와 트리를 탐색하는 알고리즘입니다. 깊이 우선 검색의 개념은”깊이”라는 단어에서 비롯됩니다. 트리는 분기 깊이까지 순회 한 다음 나머지 노드로 다시 순회합니다.

각 반복에 대해 방문한 노드가 포함 된 빈”스택”을 고려하십시오. 여기에 우리의 작업은 다음과 같습니다:

  1. 루트 노드에서 시작하여 스택에 밀어 넣습니다.
  2. 트리의 인접한 노드를 확인하고 하나의 노드를 선택합니다.
  3. 선택한 노드의 전체 분기를 트래버스하고 모든 노드를 스택으로 푸시합니다.
  4. 분기(더 이상 인접한 노드가 없음)의 끝에 도달하면,즉 잎 노드,단일 단계로 뒤로 이동하고 인접한 노드를 찾습니다.
  5. 인접 노드가있는 경우 엔-1 번째 노드,해당 분기를 트래버스하고 노드를 스택으로 푸시합니다.

깊이 첫 번째 검색 개념

아래 예제 그래프를 살펴 보겠습니다:

이미지 8
예제 그래프

는 루트 노드입니다. 그래서 이후 방문,우리는 스택에 이것을 밀어.

Stack : A

그래서 우리는 비로 가서 스택에 밀어 넣습니다.

Stack : A B

이제,우리는 우리의 끝에 왔습니다 에이-비 분기 그리고 우리는로 이동 엔-1 노드 이는 에이. 지금 당신은 통과해야 에스-씨-디 지점,깊이까지 즉,개까지 디 과 마크 에스,씨,디 방문한.

Stack: A B S C D

이후 디 다른 인접 노드가 없으므로 다시 이동 씨 그리고 인접한 분기를 횡단하십시오.

Stack : A B S C D E H G

에 도달 디,하나의 인접한 노드 만 있습니다. 또한 스택에 밀어 넣습니다.

Stack : A B S C D E H G F

이 스택 자체는 다음과 같습니다.

파이썬 코딩 깊이 첫 번째 검색 알고리즘

당신이 알고 있어야하므로,인접 목록 및 인접 행렬 인 그래프를 나타내는 많은 방법이 있습니다.

다음 예제에서는 그래프의 각 노드에 대한 인접성 목록을 정의했습니다.

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

참고: 이 인접 목록은 사용자로부터 입력 할 수 있으며 하드 코딩 할 필요가 없습니다.

이제 그래프(인접 목록),노드 및 방문한 노드 목록의 3 가지 매개 변수를 입력으로 사용하는 함수를 정의합니다.

현재 노드가 방문되지 않은 경우,즉 방문 목록에 존재하지 않는 경우,방문한 것으로 표시하고 방문한 목록에 추가합니다.

다음 노드로 이동한 다음 이 노드를 재귀적으로 디프에이션 함수로 전달합니다. 이 방법으로 각 노드는 깊이까지 이동하여 출력합니다.

def dfs(graph, node, visited): if node not in visited: visited.append(node) for k in graph: dfs(graph,k, visited) return visitedvisited = dfs(graph1,'A', )print(visited)

완전한 코드 및 출력

graph1 = { 'A' : , 'B' : , 'C' : , 'D' : , 'E' : , 'F' : , 'G' : , 'H' : , 'S' : }def dfs(graph, node, visited): if node not in visited: visited.append(node) for k in graph: dfs(graph,k, visited) return visitedvisited = dfs(graph1,'A', )print(visited)

위 코드의 출력은 다음과 같습니다:


결론

이 자습서를 따라 코드 및 예제를 이해할 수 있기를 바랍니다. 더 나은 통과를 이해하기 위해 당신 옆에 펜과 종이를 사용하여 그것을 밖으로 시도 마십시오.

답글 남기기

이메일 주소는 공개되지 않습니다.

More: