[자료구조] 비선형 자료구조 - 힙 (Heap)

최영환·2023년 5월 5일
0

자료구조

목록 보기
5/6

Heap 기본

  • 완전 이진 트리의 일종으로, 우선순위 큐(Priority Queue)를 위해 만들어진 자료구조
    • 우선순위 큐(Priority Queue)?
      • 데이터들이 우선순위를 가지고 있으며, 우선순위가 높은 데이터가 먼저 나가는 는 자료구조
      • 참고로 Java 와 Python 은 최소 힙(Min Heap) 을 사용하여 우선순위 큐가 구현되어있음
  • 여러 개의 값들 중에서 최댓값이나 최솟값을 빠르게 찾아내도록 만들어진 자료구조
  • 일종의 반정렬 상태(느슨한 정렬 상태)를 유지함
    • 큰 값이 상위 레벨에 있고 작은 값이 하위 레벨에 있음
    • 부모 노드의 키 값이 자식 노드의 키 값보다 항상 크거나 작은 이진트리
  • 중복 값을 허용함(이진 탐색 트리는 중복 값을 허용하지 않음)

Heap 의 종류

  • 최대 힙(Max Heap)
    • 부모 노드의 키 값이 자식 노드의 키 값보다 크거나 같은 완전 이진 트리
  • 최소 힙(Min Heap)
    • 부모 노드의 키 값이 자식 노드의 키 값보다 작거나 같은 완전 이진 트리


Heap 삽입

  • 힙에 새로운 요소가 들어오면, 새로운 노드를 힙의 마지막 노드에 이어서 삽입
  • 새로운 노드를 부모 노드들과 교환해서 힙의 성질을 만족시킴
  • 최대 힙 삽입 예시


Heap 삭제

  • 최대 힙에서 최댓값은 루트 노드이므로, 루트 노드가 삭제됨
    • 최대 힙에서 삭제 연산은 최댓값을 가진 요소를 삭제하는 것
  • 삭제된 루트 노드에 힙의 마지막 노드를 가져온 뒤 힙을 재구성함
  • 최대 힙 삭제 예시


profile
조금 느릴게요~

0개의 댓글