[c++] 이진 힙(Binary Heap)

이진 힙은 부모 노드의 키 값이 자식 노드의 키 값보다 작을 때 최소 힙이라고 하며, 그 반대일 때 최대 힙이라고 합니다. 각 노드는 하나의 값과 두 개의 자식을 갖습니다. 왼쪽 자식의 값은 부모 노드의 값보다 작거나 같고 오른쪽 자식의 값은 부모 노드의 값보다 크거나 같습니다.

이진 힙은 삽입, 삭제, 최소/최대 값 검색과 같은 연산을 O(log n)의 시간 복잡도로 수행할 수 있어 매우 효율적으로 동작합니다.

이진 힙은 주로 배열을 사용하여 저장되며, 각 노드에 대한 인덱스 연산을 통해 효율적인 구현이 가능합니다. 추가로, 이진 힙에 대한 구현은 C++의 STL(Standard Template Library)에서 제공되는 priority_queue를 활용하여 간단하게 구현할 수 있습니다.

#include <iostream>
#include <queue>

int main() {
    std::priority_queue<int> minHeap;
    std::priority_queue<int, std::vector<int>, std::greater<int>> maxHeap;

    minHeap.push(3);
    minHeap.push(1);
    minHeap.push(4);

    std::cout << minHeap.top() << std::endl;  // 1

    maxHeap.push(3);
    maxHeap.push(1);
    maxHeap.push(4);

    std::cout << maxHeap.top() << std::endl;  // 4

    return 0;
}

위 코드는 C++에서 priority_queue를 사용하여 최소 힙과 최대 힙을 구현하는 간단한 예시를 나타냅니다. 여기서 std::priority_queue는 기본적으로 최대 힙을 구현하며, std::greater를 사용하여 최소 힙을 구현할 수 있습니다.

더 자세한 내용은 Binary Heap - GeeksforGeeks를 참고하시기 바랍니다.