학습 일자 : 2023.04.24
부모 노드의 우선순위가 자식 노드보다 특정 규칙에서 우위를 차지하는 형태를 유지하는 완전 이진트리 형태의 자료구조
부모 노드는 최대 2개의 자식 노드를 가질 수 있음
메모리의 힙영역과는 전혀 상관이 없음. 단순히 이름만 같은 것.
우선순위를 입력 받아 우선순위가 높은 순서대로 반환하는 자료구조
보통 행동의 우선순위대로 실행해야 할 때 사용함.
ex.게임에서 플레이어 행동 우선순위 정의
✌HEAP✌을 이용한 어덥터 패턴으로 구현 한것 바로 PriorityQueue(우선순위 큐)임
PriorityQueue<string, int> priorityQ = new PriorityQueue<string, int>();
priorityQ.Enqueue("감자", 3);
priorityQ.Enqueue("당근11", 1);
priorityQ.Enqueue("당근22", 1);
priorityQ.Enqueue("토마토", 2);
while(priorityQ.Count > 0)
{
Console.WriteLine(priorityQ.Dequeue()); //우선수위가 높은 순서대로 출력 됨.
}
| [output] 당근11 → 우선순위가 동일한 경우, 먼저 들어간 데이터가 먼저 출력 됨. (기본 구조가 큐이기 때문임) 당근22 토마토
감자 |
---|
[우선순위를 내림차순으로 정렬]
(HEAP은 기본적으로 오름차순으로 데이터가 나옴.)
PriorityQueue 선언 시점에 생성자에 Comparer 조건을 넣어주면 됨!
PriorityQueue<string, int> desc = new PriorityQueue<string, int>(Comparer<int>.Create((a, b) => (b -a)));
| [output] 양파 마늘 감자 토마토 당근11
당근22 |
---|
탐색 | O(1) |
---|---|
추가 | O(logN) |
삭제 | O(logN) |