[アルゴリズム]BFS(幅優先ナビゲーション)
7712 ワード
BFS
BFSは、breadth-First-Searchであり、幅優先ナビゲーションと呼ばれる.
簡単に言えば、これは隣接ノードからナビゲーションを開始するアルゴリズムである.
DFSの動作が、可能な限り遠いノードを最初にブラウズする場合、BFSは逆である.
1.動作方式
BFS実装では、「第1入力第1出力」(First In First Out)を使用するキューリソース構造が慣例である.
アルゴリズムを記述して隣接ノードをキューに繰り返し入れると、最初に入ったノードは自動的に終了し、隣接ノードからナビゲートします.
2.例
グラフィックとキューがあるとします.キュー内の要素は上から下へです.
したがって、ナビゲーションの順序(キューに入る順序)は次のようになります.1->2->3->8->7->4->5->6.
幅優先ナビゲーションアルゴリズムBFSはキューリソース構造に基づいているので,非常に簡単に実現できる.
Pythonではdequeライブラリを使用することをお勧めします.ナビゲーションにはO(N)時間がかかります.通常、実際の実行時間はDFSよりも優れている.
3.コード
# queue를 구현하기 위한 deque 라이브러리 사용
from collections import deque
# BFS 메서드 정의
def bfs(graph, start, visited):
# 큐 구현을 위해 deque 라이브러리 사용
# 시작 노드로 deque 선언
queue = deque([start])
# 현재 노드 방문 처리
visited[start] = True
# 큐가 빌때까지 반복
while queue:
# 큐에서 하나씩 원소를 뽑아 출력
v = queue.popleft()
print(v, end=" ")
# 해당 원소와 연결된, 아직 방문하지 않은 원소들을 큐에 삽입
for i in graph[v]:
if not visited[i]:
queue.append(i)
visited[i] = True
# 각 노드가 연결된 정보를 리스트 자료형으로 표현(2차원 리스트)
graph = [
[],
[2,3,8],
[1,7],
[1,4,5],
[3,5],
[3,4],
[7],
[2,6,8],
[1,7]
]
# 각 노드가 방문된 정보를 리스트 자료형으로 표현(1차원 리스트)
visited = [False] * 9
# bfs수행(2차원 리스트, 시작 노드, 방문 처리를 확인하기 위한 리스트)
bfs(graph, 1, visited)
4.整理
様々な態様で実施することができるが、最も簡単な方法は、以下の表に示す態様を用いることである.
DFSSBFS動作原理スタックキューの実装方法キュー器として再帰関数を用いる
リファレンス
これは就職のためのコードテストです.
間違った部分にコメントを残したら修正します…!!推測を表す
Reference
この問題について([アルゴリズム]BFS(幅優先ナビゲーション)), 我々は、より多くの情報をここで見つけました https://velog.io/@changhee09/알고리즘-BFS너비-우선-탐색テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol