Related to: Data Structure

Heap이란?

  • 완전 이진 트리의 일종으로 우선순위 큐를 위하여 만들어진 자료구조
  • 여러 개의 값들 중에서 최댓값이나 최솟값을 빠르게 찾아내도록 만들어진 자료구조
  • 힙은 일종의 반정렬 상태(느슨한 정렬 상태) 를 유지
  • 큰 값이 상위 레벨에 있고 작은 값이 하위 레벨에 있다는 정도
    • 부모 노드의 키 값이 자식 노드의 키 값보다 항상 크게(작게) 정렬한 이진 트리
  • 힙 트리에서는 중복된 값을 허용
    • 이진 탐색 트리에서는 중복된 값을 허용하지 않음

Heap의 종류

Untitled 56.png

  • 최대 힙(max heap)
    • 부모 노드의 키 값이 자식 노드의 키 값보다 크거나 같은 완전 이진 트리
    • key(부모 노드) >= key(자식 노드)
  • 최소 힙(min heap)
    • 부모 노드의 키 값이 자식 노드의 키 값보다 작거나 같은 완전 이진 트리
    • key(부모 노드) key(자식 노드)

Heap의 구현

Untitled 1 43.png

  • 힙을 저장하는 표준적인 자료구조는 배열

  • 구현을 쉽게 하기 위하여 배열의 첫 번째 인덱스인 0은 사용하지 않음

  • 특정 위치의 노드 번호는 새로운 노드가 추가되어도 변하지 않음

    • 예를 들어 루트 노드의 오른쪽 노드의 번호는 항상 3
  • 힙에서의 부모 노드와 자식 노드의 관계

    • 왼쪽 자식의 인덱스 = (부모의 인덱스) * 2
    • 오른쪽 자식의 인덱스 = (부모의 인덱스) * 2 + 1

참조

https://gmlwjd9405.github.io/2018/05/10/data-structure-heap.html