-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
b27466f
commit 86b8d28
Showing
1 changed file
with
61 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
# 이진 힙 | ||
|
||
이진검색트리와 유사하지만 다른 규칙이 존재한다. | ||
|
||
- 최대이진힙(MaxBinaryHeap)에서는, 부모노드가 자식노드보다 항상 크다. | ||
- 최소이진힙(MinBinaryHeap)에서는, 부모노드가 자식노드보다 항상 작다. | ||
- 각 노드의 자식은 왼쪽부터 채워지며 가능한 모두 채워야 한다. | ||
|
||
<br/> | ||
|
||
## 사용처 | ||
|
||
- 자료구조에서 흔히 사용되는 우선순위 큐를 구현하는데 사용한다. | ||
- 그래프 순회 알고리즘에서도 꽤 사용된다. | ||
|
||
<br/> | ||
|
||
## 표현 | ||
|
||
배열로 표현할 수 있다. | ||
|
||
- 어느 n번째 인덱스 노드의 자식노드 중 왼쪽은 `2n + 1` 인덱스에, 오른쪽은 `2n + 2`에 존재한다. | ||
- 어느 n번째 인덱스 노드의 부모노드는 `(n-1)/2`에 존재한다. (소수점 버림) | ||
|
||
<br/> | ||
|
||
## 최대이진힙에 추가하기 | ||
|
||
1. 배열의 맨 끝에 추가한다. | ||
2. 부모와 비교하며 자신이 더 작을 때까지 끌어올린다. | ||
|
||
<br/> | ||
|
||
## 최댓값 추출하기 | ||
|
||
1. 배열의 첫 값과 마지막 값을 교환하고 배열의 마지막 요소를 뽑아 반환 값으로 한다. | ||
2. 새로운 루트 노드를 자식과 비교하여 본인의 위치까지 끌어내린다. | ||
1. 왼쪽과 오른쪽 자식 값을 찾는다. (`2n + 1`, `2n + 2`) | ||
2. 현재 노드보다 큰 자식과 위치를 바꾼다. | ||
3. 두 자식이 모두 크다면 더 큰 자식쪽으로 위치를 바꾼다. | ||
|
||
<br/> | ||
|
||
## 최소이진힙 | ||
|
||
- 최대이진힙의 추가, 추출의 반대로 진행 (작은게 루트 쪽으로) | ||
|
||
<br/> | ||
|
||
## 이진힙의 시간복잡도 | ||
|
||
- 삽입: O(log N) | ||
- 삭제: O(log N) | ||
- 검색: O(N) | ||
|
||
--- | ||
|
||
## 우선순위 큐 | ||
|
||
각 요소들이 우선순위를 가지는 자료구조이다. 우선순위가 높은 요소가 그렇지 않은 요소보다 먼저 위치한다. | ||
최대이진힙 또는 최소이진힙으로 구현한다. |