Jveloper

힙(Heap) 본문

자료구조/시간복잡도 & 공간복잡도

힙(Heap)

Jveloper 2019. 12. 16. 12:37
우선순위 큐를 위하여 만들어진 자료구조

우선순위 큐 : 우선순위의 개념을 큐에 도입한 자료구조

  • 데이터들이 우선순위를 가지고 있고 우선순위가 높은 데이터가 먼저 나간다.

  • 우선순위 큐는 배열, 연결리스트, 힙으로 구현이 가능하다.
    이 중에서 힙으로 구현하는것이 가장 효율적이다.

자료구조 '힙(Heap)'이란?

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

힙(Heap)의 구현

  • 힙을 저장하는 표준적인 자료구조는 배열이다.
  • 구현을 쉽게 하기 위하여 배열의 첫 번째 인덱스인 0은 사용되지 않는다.
  • 특정 위치의 노드 번호는 새로운 노드가 추가되어도 변하지 않는다.
    (예를 들어 루트 노드의 오른쪽 노드의 번호는 항상 3이다)

힙(Heap)의 삽입

  1. 힙에 새로운 요소가 들어오면, 일단 새로운 노드를 힙의 마지막 노드에 이어서 삽입한다.
  2. 새로운 노드를 부모 노드들과 교환해서 힙의 성질을 만족시킨다.

힙(Heap)의 삭제

  1. 최대 힙에서 최댓값은 루트 노드이므로 루트 노드가 삭제된다.
    - 최대 힙에서 삭제 연산은 최댓값을 가진 요소를 삭제하는 것이다
  2. 삭제된 루트 노드에는 힙의 마지막 노드를 가져온다.
  3. 힙을 재구성한다.
Comments