공학/자료구조&알고리즘
우선순위 큐 & 힙
둥둥잇
2014. 11. 21. 02:08
우선순위 큐?
데이터의 입출력 때 최소한의 비용으로 최우선순위의 데이터를 Head에 위치시키는 알고리즘의 효율을 고민해보쟝!!
- 일단 큐와 같지만 '우선순위' 속성을 갖는 데이터를 다룸!!
그 우선순위는 프로그래머 마음!
- 연산도 큐 처럼 삽입/삭제
* 힙 Heap
- 자유 저장소의 힙은 아니래!ㅋㅋ
- 힙 순서 속성을 만족하는 완전 이진 트리! (모든 깊이의 노드들이 완전히 채워져 있는 이진 트리)
- 힙 순서 속성 : 트리 내 모든 노드가 부모 노드보다 커야 함!
- 힙에서 루트 노드는 가장 작은 데이터를 갖는 노드!!!!!
- 연산 : 노드 삽입 / 최소값 삭제(루트 삭제)
항상 연산 후에는 힙 순서 속성을 유지하도록!!!!
힙의 구현은 배열을 이용해서!!!
=> 각 노드의 위치나 부모/자식 관계 등을 배열의 인덱스로 파악 가능ㅋㅋ
깊이 순으로 노드 나열ㅋㅋㅋ
typedef int ElementType;
노드
typedef struct tageHeapNode {
ElementType Data;
} HeapNode;
힙 구조체
typedef struct tagHeap {
HeapNode* Nodes;
int Capacity;
int UsedSize;
} Heap;
책에서능 우선순위 큐를 구현할 때 우선순위를 최소값일 수록 높게 잡아놔서
힙을 이용하면 최소값을 얻을 때 효율적!!ㅋㅋ
출처 : 뇌를 자극하는 알고리즘 (한빛미디어)