티스토리 뷰
priority queue
Queue
자료구조는 먼저 집어 넣은 데이터가 먼저 나오는 선입선출(FIFO
) 구조로 저장하는 형식이다. 이와 다르게 우선순위큐(priority queue
)는 들어간 순서에 상관없이 우선순위가 높은 데이터가 먼저 나온다.
Queue
의 operation 시간복잡도는 enquque
O(1), dequeue
O(1)이고,priority queue
는 push
O(logn), pop
O(logn)으로, 이는 이진완전트리를 활용한 Heap
자료구조의 push
와 pop
과 동일하다.
Heap
Heap
은 완전이진트리 구조이며, 우선순위큐의 구현과 일치한다.
이러한 Heap
이 되기 위한 조건은 아래와 같다.
Max Heap
root node
에 저장된 값이 가장 큰 값이며, 각 node
에 저장된 값은 child node
들에 저장된 값보다 크거나 같다.

Min Heap
root node
에 저장된 값이 가장 작은 값이며, 각 node
에 저장된 값은 child node
들에 저장된 값보다 작거나 같다.

Heap 구현
트리는 보통 Linked List
로 구현한다. 하지만 Heap
은 tree
임에도 불구하고, array
를 기반으로 구현해야 한다. 새로운 node
를 힙의 마지막 위치에 추가해야 하는데, 이때 array
기반으로 구현해야 이 과정이 수월하기 때문이다.
구현의 편의를 위해 array의 0번째 index는 사용하지 않고, 완전이진트리의 특성을 활용하여 array의 index만으로 부모 자식간의 관계를 정의한다.
- n번 째 node의 왼쪽 자식 노드 = 2n
- n번 째 node의 오른쪽 자식 노드 = 2n + 1
- n번 째 node의 부모 노드 = n/2

Heap pust - O(logn)
heap tree의 높이는 logn이다.push()
했을 때, swap하는 과정이 최대 logn번 반복되기 때문에 시간복잡도는 O(logn)이다.
Heap pop - O(logn)
pop()
했을 때, swap하는 과정이 최대 logn번 반복되기 때문에 시간복잡도는 O(logn)이다.
'Study' 카테고리의 다른 글
[자료구조] Hash table collision (0) | 2022.08.08 |
---|---|
[자료구조] Hash table (0) | 2022.08.02 |
[자료구조] Linked List (0) | 2022.07.31 |
[Design Pattern] 템플릿 콜백 패턴 (0) | 2022.05.09 |
[Design Pattern] 전략 패턴 (0) | 2022.05.08 |
- Total
- Today
- Yesterday
- 코틀린
- 코테
- 데이터베이스
- mysql 8.0
- 백준
- kotlin
- 정렬
- 노마드코더
- 릿코드
- webflux
- 그리디
- MySQL
- 북클럽
- Algorithm
- 김영한
- spring boot
- leetcode
- 알고리즘
- 문자열
- 스프링부트
- 구현
- 자료구조
- Spring
- 파이썬
- 인프런
- 노마드
- 스프링 부트
- 리팩토링
- 스프링
- Real MySQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |