우선순위에 따라 요소 순서를 결정하는 FIFO가 아닌 큐
구현 방법 : 우선순위를 키로 정의해서 큐를 만든다
UnsortedPriorityQueue
i) Enqueue : 리스트 끝에 새로운 (키, 값) 추가
ii) Dequeue : 매번 리스트에서 최소 키 아이템을 찾음
기본 연산 성능
SortedPrioritQueue
i) Enqueue : 리스트가 정렬되도록 (키, 값)을 추가할 위치 찾음
ii) Dequeue : 리스트의 첫 아이템
기본 연산 성능
HeapPriorityQueue
i) Enqueue : 힙 성질을 유지하도록 (키, 값) 추가
ii) Dequeue : 힙 성질을 유지하도록 루드 노드를 꺼냄
기본 연산 성능
부모가 자식보다 작은 키 값을 갖는 완전 이진 트리
힙 순서 속성 : 루트를 제외한 모든 키는 부모의 키보다 크거나 같다
완전 이진 트리 속성 : 레벨 i에는 2^i 노드가 있고 레벨 h는 노드가 왼쪽에 몰려있다
힙의 높이 : n개의 요소를 저장하는 힙 T의 높이 h는 log n(내림) 이다
예) (2,T)를 추가
힙을 배열로 구현하면 새로운 아이템을 마지막 노드에 추가할 때 편리하다
O(n)에 힙을 구성할 수 있다.
힙을 구성할 때 n번 add()를 호출해서 구성한다면 시간복잡도 = O(nlogn). 힙을 아래서부터 위로 구성하는 하-상향식 힙 구성으로 O(n)에 힙을 구성할 수 있다. 여러개의 작은 힙을 요소를 추가하며 점점 합쳐 하나의 힙을 구성하는 방식으로 작동한다.
반복 후
리스트에 우선순위 큐로 이동 후 다시 리스트로 이동해서 정렬할 수 있다.
임의의 아이템을 큐에서 제거하거나 우선순위가 변경되는 큐
(키, 값, 인덱스)를 관리하는 Locator 구조로 임의 아이템 제거와 우선순위 변경을 할 수 있다