전체 목록
자료구조Medium#171

Heap 자료구조는 어떤 상황에서 유용한가요?

#자료구조#Heap#PriorityQueue#복잡도

답변 포인트

최우선 원소 추출과 우선순위 큐를 기준으로 정의, 장점, 한계, 예시를 함께 설명해보세요.

정답 및 해설

빠른 요약

Heap은 최솟값이나 최댓값을 빠르게 확인하고 삽입/삭제를 O(log n)에 처리합니다. 우선순위 큐, 스케줄링, 다익스트라 알고리즘에 자주 사용됩니다.

Heap은 부모 노드가 자식 노드보다 항상 우선순위가 높거나 낮도록 유지하는 완전 이진 트리 기반 자료구조입니다. 최솟값 또는 최댓값을 반복해서 빠르게 꺼내야 하는 상황에서 매우 유용합니다.

핵심 개념

  • Min Heap은 루트가 항상 최솟값, Max Heap은 루트가 항상 최댓값입니다.
  • 삽입과 삭제는 heapify 과정을 통해 O(log n)에 수행됩니다.
  • 배열로 구현할 수 있으며, 인덱스 i의 자식은 2i+1, 2i+2입니다.

동작 방식 또는 판단 기준

이 주제를 이해할 때는 다음 순서로 보면 실무 적용이 쉬워집니다.

  1. 무엇을 해결하려는가: 성능, 표현력, 안정성, 접근성 중 어떤 문제를 줄이려는지 확인합니다.
  2. 전제 조건은 무엇인가: 정렬 여부, 브라우저 지원, 네트워크 특성, 동시성 조건처럼 성립해야 하는 조건을 점검합니다.
  3. 비용은 어디서 발생하는가: 시간 복잡도, 메모리, 캐시, 재시도, 렌더링 비용처럼 병목 지점을 나눠 봅니다.
  4. 실패 시 어떤 문제가 생기는가: 잘못 적용했을 때의 버그나 운영 리스크를 함께 고려합니다.

실제 예시

Text
Min Heap
        1
      /        3     5
    / \   /
   7   9 8

pop(): 1  ->     ->   
JavaScript
// 활용 예: 우선순위가 낮은 숫자부터 처리하는 작업 큐
// 실제 프로젝트에서는 검증된 priority queue 라이브러리 사용 권장

실무에서 주의할 점

  • Heap은 전체 정렬 구조가 아닙니다. 루트만 최솟값/최댓값임을 보장합니다.
  • 임의 원소 삭제나 특정 값 검색은 효율적이지 않습니다.
  • 우선순위가 같은 원소의 안정성(stability)이 필요하면 별도 sequence number를 함께 저장해야 합니다.

실무 적용 가이드

  • Top K, 스케줄러, 다익스트라, 이벤트 시뮬레이션에 자주 사용합니다.
  • 데이터가 계속 들어오는 스트림에서 상위 K개만 유지할 때 heap이 메모리 효율적입니다.
  • 정렬이 목적이면 heap sort보다 언어 내장 sort가 더 실용적인 경우가 많습니다.

함께 연결해서 보면 좋은 키워드

Heap, Priority Queue, Top K, Dijkstra

정리

Heap은 부모 노드가 자식 노드보다 항상 우선순위가 높거나 낮도록 유지하는 완전 이진 트리 기반 자료구조입니다. 다만 개념 자체보다 중요한 것은 적용 조건과 한계를 함께 이해하는 것입니다. 작은 예제에서는 단순해 보여도 실제 서비스에서는 성능, 보안, 유지보수성, 접근성 요구사항이 함께 얽히므로, 문제의 성격을 먼저 파악한 뒤 적절한 도구로 선택하는 것이 좋습니다.

관련 질문

같은 카테고리/태그 기준