힙 (Heap)
완전 이진 트리 형태의 자료구조
일반적으로 그룹을 정렬하거나 입력된 데이터 안에서 최소/최대 값을 찾을 때 사용한다.
또한, 우선순위 큐를 구현할 때에도 힙 자료구조를 사용한다.
데이터의 삽입과 삭제가 빠르며 각각의 수행시간은 \(O(logN)\) 이다.
- 최소 힙 (Min Heap) : 부모 노드의 키 값이 자식 노드의 키 값보다 항상 작다.
- 최대 힙 (Max Heap) : 부모 노드의 키 값이 자식 노드의 키 값보다 항상 크다.
힙의 삽입 연산
- 트리의 가장 마지막 위치에 노드를 삽입한다.
- 추가된 노드와 그 부모 노드가 힙 조건을 만족하는지 확인한다.
- 만족하지 않다면 부모와 자식의 키 값을 바꾼다.
- 조건에 만족하거나 추가된 노드가 루트에 도달할 때까지 2번~3번을 반복한다.
힙의 삭제 연산
- 힙의 삭제 연산은 항상 루트 노드를 삭제한다.
- 트리의 가장 마지막 노드를 루트 자리로 삽입한다.
- 바꾼 위치의 노드와 그 자식 노드가 힙 조건을 만족하는지 확인한다.
- 만족하지 않다면 왼쪽 자식과 오른쪽 자식 중 적합한 노드와 키 값을 바꾼다.
- 조건을 만족하거나 리프 노드에 도달할 때까지 3번~4번을 반복한다.
728x90
반응형
'알고리즘 > 자료구조' 카테고리의 다른 글
[CS] 트라이 (0) | 2023.02.27 |
---|---|
[CS] 인덱스 트리와 구현 (JAVA) (0) | 2023.02.27 |
[CS] 이진 트리 (0) | 2023.02.24 |
[백준] 1202번 보석 도둑 (JAVA) (0) | 2023.02.23 |
[CS] 우선순위 큐 (JAVA) (0) | 2023.02.23 |