무엇인가를 차곡차곡 쌓아올린 더미'라는 뜻
void insert_max_heap(int x)
{
maxHeap[++heapSize] = x;
for(int i = heapSize; i > 1; i /= 2)
{
// 부모노드와 자기 자신비교해 부모가 작으면 swap
if(maxHeap[i/2] < maxHeap[i])
{
swap(i/2, i);
}
else
break;
}
}
int delete_max_heap()
{
if(heapSize == 0)
return 0;
int node = maxHeap[1];
maxHeap[1] = maxHeap[heapSize];
maxHeap[heapSize--] = 0;
for(int i = 1; i * 2 <= heapSize;)
{
// 마지막 노드가 왼쪽, 오른쪽 자식 노드보다 크면 끝
if(maxHeap[i] > maxHeap[i*2] && maxHeap[i] > maxHeap[i*2+1])
break;
// 왼쪽이 큰 경우
else if(maxHeap[i*2] > maxHeap[i*2+1])
{
swap(i, i * 2);
i = i*2;
}
// 오른쪽이 큰 경우
else
{
swap(i, i * 2 + 1);
i = i * 2 + 1;
}
}
}
- 불변성을 유지해야 하기 때문에 초기화가 어렵고 효율적이지 않으나 비어있는 힙에 하나씩 원소를 삽입하는 것
- 힙 생성 알고리즘을 사용
-> 전체 트리의 아래쪽 서브 트리부터 힙 불변성을 만족하도록 힙을 업데이트하는 방식
-> C++ 표준은 배열 또는 벡터의 반복자를 인자로 받아 힙을 구성하는 std::make_heap() 함수를 제공
[자료구조] Stack (0) | 2024.02.29 |
---|---|
[자료구조] Heap (0) | 2024.02.29 |
[자료구조] List (1) | 2024.02.29 |