Heap

2024. 3. 7. 17:55
728x90

- 특수한 형태의 완전 이진 트리

 

1. Heap

- 완전 이진 트리의 어떤 노드 C와 부모 노드 P가 있을 때 C의 값보다 P의 값이 항상 크거나 / C의 값보다 P의 값이 항상 작을 때.

- 다양한 요소를 가지고 있는 집합에 대하여 가장 큰 값이나 가장 작은 값을 찾기 용이함.

- 우선순위 큐를 만드는데 유용하게 사용됨. 

 

 

1) 힙 삽입 연산

- 제일 오른쪽 아래에 원소를 삽입 

- 새로 삽입한 원소를 부모 노드와 비교 (힙의 조건을 만족시키지 못하게 배치된 경우 서로 교환)

- 새로 추가한 원소가 루트 원소가 되거나, 힙의 조건을 만족시킬 때까지 반복

\

 

2) 힙 삭제 연산

- 힙의 루트 원소를 제거

- 루트 원소의 위치에 힙의 마지막 원소를 배치 (완전 이진트리 조건)

 

 

2. Heap Sort

: Heap의 특성을 사용해서 정렬하는 알고리즘.

- 그냥 힙에 다 넣었다가 뺀다..

- 주어진 배열을 최대 힙으로 변환한 다음, 제일 큰 원소를 반복해서 뒤로 보낸다. 

- 추가 데이터 할당이 필요 없음. 

- 시간복잡도 : O(n log n)

 

36을 빼고, 10을 넣고 36을 배열 맨 뒤로 보낸다.

루트 원소10을 자식 원소들과 비교하여 힙의 조건을 만족시키도록 교환.

다시 루트 원소가 된 최댓값 22를 빼면서 9를 넣고, 22는 배열 맨 뒤로 보낸다. 

루트 원소9를 자식 원소들과 비교하여 힙의 조건을 만족시키도록 교환.

다시 루트원소가 된 최댓값 21을 빼면서 4를 넣고 21은 배열 맨뒤로 보낸다. ... 계속 반복하다보면 뒤에서부터 최댓값부터 정렬되어 순서대로 정렬되게 된다.

 

3. Heapify

: 주어진 배열을 힙의 형태로 변환하는 과정

- 자식을 가지고 있는 가장 높은 레벨의 노드의 위치부터 시작

- 노드와 자식 노드들의 관계가 힙 속성을 만족하도록 교환을 진행 (siftDown)

- 이후 보다 상위 노드들에서 반복

5-9 힙 속성을 만족하도록 교환

18-12 교환 불필요, 18-22 교환 필요

8-21 교환 

21-16 교환 불필요, 24-9 교환 불필요 24-22 교환 불필요

10-24 교환 

10-22 교환, 10-18 교환

 

728x90

'Coding test > Algorithm' 카테고리의 다른 글

Divide & Conquer 분할 정복  (0) 2024.03.12
Tree  (0) 2024.03.07
이항 계수  (0) 2023.12.29
DP(Dynamic Programming)  (0) 2023.12.28
Brute Force / 순열 / 조합 / 멱집합  (1) 2023.12.17

BELATED ARTICLES

more