최소 힙 (minimum heap)
최대 힙 (maximum heap)
- 각 부모 노드의 값은 자기 자식 노드의 값보다 크가(힙의 속성)
- 키가 클수록 더 높은 우선순위
- 루트 노드에는 최대값이 저장
삽입 노드와 자식 노드를 비교한다.
자식 노드와 삽입 노드를 교환.
# 힙 원소 추가
# 40,20,15,35,45,10
from heapq import heappush
heap = []
heappush(heap,40)
heappush(heap,20)
heappush(heap,15)
heappush(heap,35)
heappush(heap,45)
heappush(heap,10)
print(heap) -> [10, 35, 15, 40, 45, 20]
# 힙 원소 삭제
heappop(heap)
print(heap) -> [15, 35, 20, 40, 45]
# 기존 리스트를 힙으로 변환
from heapq import heapify
list = [40,10,20,50,70]
heapify(list)
print(list) -> [10, 40, 20, 50, 70]
import heapq
a = [54, 88, 77, 26, 93, 17, 49, 10, 11, 31, 22, 44, 20]
print('정렬 전:\t', a)
heapq.heapify(a) ## 최소 힙으로 변환
print('힙:\t', a)
s = []
while a: ## 오름차순 정렬 과정
s.append(heapq.heappop(a)) ## 반복문을 통해 최소 힙 루트에 있는 루트(최솟값)를 반복적으로 리스트에 저장
print('정렬 후:\t', s)
* 결과 *
정렬 전: [54, 88, 77, 26, 93, 17, 49, 10, 11, 31, 22, 44, 20]
힙: [10, 11, 17, 26, 22, 20, 49, 54, 88, 31, 93, 44, 77]
정렬 후: [10, 11, 17, 20, 22, 26, 31, 44, 49, 54, 77, 88, 93]
그래프는 정점(Vertex)과 간선(Edge)의 집합
G=(V,E)로 표현, V= 정점의 집합, E= 간선의 집합
그래프의 종류
그래프 용어
그래프 자료구조
그래프 구현
adj_list = [[2, 1], [3, 0], [3, 0], [9, 8, 2, 1],
[5], [7, 6, 4], [7, 5], [6, 5], [3], [3]]
n = len(adj_list) # 그래프 정점 수
visited = [False for _ in range(n)] # 방문되면 True 로 (list comperhension)
# for loop 로 표현 가능
# visited = []
# for _ in range(n): #visted list 안에 방문표시 false 값으로 다 넣어줌 초기값
# visited.append(False)
# print(visited)
def dfs(v):
visited[v] = True # 정점 v 방문
print(v, ' ', end='') # 정점 v 출력
for w in adj_list[v]: # 정점 v에 인접한 각 정점에 대해
if not visited[w]:
dfs(w) # v에 인접한 방문 안된 정점 순환 호출
print('DFS 방문 순서:')
for i in range(n):
if not visited[i]:
dfs(i)
adj_list = [[2, 1], [3, 0], [3, 0], [9, 8, 2, 1],
[5], [7, 6, 4], [7, 5], [6, 5], [3], [3]]
n = len(adj_list)
visited = [False for _ in range(n + 1)]
def bfs(v):
queue = [] # 리스트로 큐 선언
visited[v] = True
queue.append(v) # 큐에 시작점 삽입
while len(queue) != 0:
u = queue.pop(0) # 큐에서 정점 v를 가져옴
print(u, ' ', end='') # 정점 v 출력(방문)
for w in adj_list[u]: # 정점 v에 인접한 방문 안된 정점에 대해
if not visited[w]:
visited[w] = True
queue.append(w) # v에 인접한 정점을 큐에 삽입
print('BFS 방문 순서:')
for i in range(n):
if not visited[i]:
bfs(i)