9. 너비우선 탐색
2024. 10. 23. 13:14ㆍ파이썬(python)의 알고리즘
#1. 너비우선 탐색(Breadth-First Search)
* BFS : 대표적인 그래프 탐색 알고리즘
* 정점들과 같은 레벨에 있는 노드들(형제 노드들)을 먼저 우선 탐색하는 방식
* 한 단계씩 내려가면서 해당 노드와 같은 레벨에 있는 노드들(형제 노드들)을 먼저 순회함
graph = dict()
graph['A'] = ['B', 'C']
graph['B'] = ['A', 'D']
graph['C'] = ['A', 'G', 'H', 'I']
graph['D'] = ['B', 'E', 'F']
graph['E'] = ['D']
graph['F'] = ['D']
graph['G'] = ['C']
graph['H'] = ['C']
graph['I'] = ['C', 'J']
graph['J'] = ['I']
graph
-->
{'A': ['B', 'C'],
'B': ['A', 'D'],
'C': ['A', 'G', 'H', 'I'],
'D': ['B', 'E', 'F'],
'E': ['D'],
'F': ['D'],
'G': ['C'],
'H': ['C'],
'I': ['C', 'J'],
'J': ['I']}
* 방문했던 리스트
- A, B, C, D, G, H, I, E, F, J
* 방문 해야할 리스트
- A : B, C
- B : C, A, D
- C : A, D, A, G, H, I
- D : A, G, H, I, B, E, F
- G : H, I, B, E, F, C
- H : I, B, E, F, C, C
- I : B, E, F, C, C, C, J
- E : F, C, C, J, D, D
- J : D, D, I
예시
1)
data = [1,2,3,4]
data.pop()
print(data)
data.pop(0)
print(data)
temp = data.pop(0)
print(data, temp)
-->
[1, 2, 3]
[2, 3]
[3] 2
2)
data = [1,2,3,4]
data.extend([4,5])
print(data)
-->
[1, 2, 3, 4, 4, 5]
def bfs(graph, start_node):
visited, need_visit = list(), list()
need_visit.append(start_node)
while need_visit:
node = need_visit.pop(0)
if node not in visited:
visited.append(node)
need_visit.extend(graph[node])
return visited
bfs(graph, 'A')
-->
['A']
#2. 깊이 우선 탐색(Depth-first Search)
* DFS : 대표적인 그래프 탐색 알고리즘
* 정점의 자식들을 먼저 탐색하는 방식
* 한 노드의 자식을 타고 끝까지 순환한 후 다시 돌아와서 다른 형제들의 자식을 타고 내려가며 순회함
예시)
def dfs(data, start_node):
visited, need_visit = list(), list()
need_visit.append(start_node)
while need_visit:
node = need_visit.pop()
if node not in visited:
visited.append(node)
need_visit.extend(graph[node])
return visited
728x90
LIST
'파이썬(python)의 알고리즘' 카테고리의 다른 글
10. 탐욕 알고리즘 (0) | 2024.10.23 |
---|---|
8. 그래프(Graph) (2) | 2024.10.23 |
7. 순차 탐색과 이진탐색 (0) | 2024.10.23 |
7. 순차 탐색과 이진탐색 (1) | 2024.10.23 |
6. 병합정렬(Merge sort) (0) | 2024.10.23 |