Heap

완전 이진 트리 기반으로 부모-자식 간 대소 관계를 항상 유지하는 자료구조로, 최솟값/최댓값을 O(log n)에 삽입하고 O(1)에 조회할 수 있습니다.

핵심 특징

구조

[ Min Heap ]

        1
       / \
      3    2
     / \  / \
    7   4 5   6

배열: [1, 3, 2, 7, 4, 5, 6]

주요 연산

연산시간복잡도설명
peekO(1)루트(최솟값/최댓값) 조회
offerO(log n)삽입 후 위로 heapify
pollO(log n)루트 제거 후 아래로 heapify
힙 생성O(n)배열 → 힙 변환

Java에서의 Heap — PriorityQueue

// Min Heap (기본)
PriorityQueue<Integer> minHeap = new PriorityQueue<>();

// Max Heap
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());

minHeap.offer(3);
minHeap.offer(1);
minHeap.offer(2);

minHeap.peek();   // 1 (제거 안 함)
minHeap.poll();   // 1 (제거)

Heap vs 다른 자료구조

Heap정렬된 배열BST
최솟값 조회O(1)O(1)O(log n)
삽입O(log n)O(n)O(log n)
임의 검색O(n)O(log n)O(log n)

주요 활용

CSLOG에서 보기