1. 개요
우선순위 큐는 쉬움.
Max Heap이란 부모가 자식보다 값이 더 큰 우선순위 큐.
Min Heap이란 부모가 자식보다 값이 더 작은 우선순위 큐.
우선순위 큐는 완전이진트리임. 그러므로 부모와 자식 인덱스를 쉽고 빠르게 찾기 위해 자료구조 배열 사용하는 것이 좋음.
Index X의 자식은 Left: (X*2)+1, Right: (X*2)+2.
Index X의 부모는 (X-1)/2. 예를들어, (7-1)/2 == (8-1)/2 == 3. 인덱스 7과 8의 부모는 3으로 같다.
Heap의 규칙
(1) 모든 삽입은 맨 마지막 자리에 들어감.
그 뒤, Heap 거슬러 오르며 부모와 값을 비교하여 Max/Min Heap 규칙에 맞게 자리를 찾아감.
(2) 모든 삭제는 가장 최상위 노드(즉, Index 0)에서 빠져나옴.
그 뒤, 맨 마지막 노드 값을 최상의 노드 값으로 채움. 그 후, 아래로 내려가며 Max/Min Heap 규칙에 맞게 자리 찾음.
2. 문제
우선순위 큐 (Heap)을 설계하시오. 생성, 삽입, 삭제 기능을 추가하시오.
(메모리 꽉 차면, 자동으로 데이터 크기 조절 함수도 만드시오.)
3. 출력
3-1) 함수 및 구조체 선언
3-2) 메인
3-3) 부모 및 자식 인덱스 추출 함수
3-4) 힙 생성
3-5) 크기 조절
3-6) 삽입
3-7) 삭제
3-8) 출력(Min/Max)
4. 정리
기억해야 할 것.
(1) 힙의 삽입은 언제나 맨 끝에서 이뤄진다.
(2) 힙의 삭제는 언제나 맨 앞에서 이뤄진다.
(3) 완전이진트리 내부에서 조정되기 때문에 하나의 삽입과 삭제는 O(logn)의 시간이 소요.
(4) 부모와 자식의 값의 비교로만 움직인다.
'테크 > 알고리즘' 카테고리의 다른 글
29. 가장 긴 공통 부분 문자열(LCS, Longest Common Subsequence) 찾기 알고리즘 (0) | 2016.07.09 |
---|---|
28. 피보나치 수열( 재귀, 동적 프로그래밍, 반복) 모든 방식 알고리즘 (0) | 2016.07.01 |
26. BST (Binary Search Tree, 이진탐색트리) 알고리즘 (0) | 2016.06.18 |
25. 리커젼 (Recursion)에 대한 고찰 2 (0) | 2016.06.18 |
24. 크루스칼(Kruskal) 알고리즘 (10) | 2016.06.05 |