Post

Heap

1
2
3
4
5
6
7
8
9
10
11
12
목차

🎱힙 자료구조?
	잠깐! 완전 이진트리란?

1. 힙 자료구조는 언제 사용?
2. 힙 자료구조의 종류
3. 최소 힙 자료구조 동작 과정
	1) 데이터 삽입
	2) 데이터 삭제
4. 구현 실험(python)

🎱힙 자료구조?

가장 높거나 가장 낮은 우선순위 예시로 최대 or 최소값 을 가지는 노드를 찾아내기 위해 고안된 *완전 이진트리(Complete Binary Tree)에 기반한 자료구조다

따라서 가장 높거나 가장 낮은 우선순위를 가지는 노드가 루트노드(가장 최상단)에 온다.

잠깐! 완전 이진트리란?

  • 각 노드가 최대 최대 2개의 자식노드를 갖는 트리 형태의 자료구조
  • 최하단을 제외한 모든 노드는 채워져있어야 한다
  • 노드를 삽입할 때 최하단 좌측부터 삽입해야한다.

1. 힙 자료구조는 언제 사용?

  • N개의 데이터가 저장된 리스트에서 최댓값 또는 최솟값을 탐색하려면 O(N) 만큼의 시간이 필요한데, 반면 힙 자료구조는 ***O(logN)*** 만큼의 시간이 필요하다.
  • 최댓값 or 최솟값을 빠르게 탐색해야 하는 우선순위 큐, 최단 경로 알고리즘 등을 구현할 때 좋다

2. 힙 자료구조의 종류

  • 최대 힙: 부모 노드 값 > 자식 노드 값
  • 최소 힙: 부모 노드 값 < 자식 노드 값

3. 최소 힙 자료구조 동작과정

1) 데이터 삽입

Desktop View

2) 데이터 삭제

Desktop View

4. 구현 실험(python)

  • heapq 세팅
1
2
3
4
5
import heapq
# 파이썬에 내장된 heapq 라이브러리로 최소 힙 자료구조 구현 가능

joonhwan_heap = []
# 힙 생성
  • 힙 데이터 삽입 heappush
1
2
3
4
5
6
7
8
9
10
11
12
13
heapq.heappush([ 이름], [추가할 원소])
# heappush를 사용하면 최소 힙 자료구조를 유지하면서 새로운 원소를 추가할 수 있다.

#------------ 아래는 예시 ----------------------------------------------
heapq.heappush(joonhwan_heap, '2')
heapq.heappush(joonhwan_heap, '5')
heapq.heappush(joonhwan_heap, '1')
heapq.heappush(joonhwan_heap, '3')
heapq.heappush(joonhwan_heap, '6')
heapq.heappush(joonhwan_heap, '4')

print(joonhwan_heap)
# 결과: ['1', '3', '2', '5', '6', '4']

Desktop View

  • 힙 데이터 삭제
1
2
3
4
5
6
7
8
heapq.heappop([ 이름])
# 우선순위가 가장 높은 데이터를 삭제한다. --> 여기서는 최소 힙이라 루트노드를 삭제할 것이다.

print(heapq.heappop(joonhwan_heap))
# 결과: 1

print(joonhwan_heap)
# 결과: ['2', '3', '4', '5', '6']

Desktop View

참고

https://heytech.tistory.com/69

This post is licensed under CC BY 4.0 by the author.
3D GIF