Post

데이터 구조(2)-heap

데이터 구조(2)-heap



힙( Heap )

- 힙은 그래프의 트리 구조 중 하나로 우선순위 큐를 구현할 때 사용된다

- 여러 개의 값 중에서 최솟값이나 최댓값을 빠르게 찾아내도록 만들어진 구조이다

- 힙트리에서는 중복을 허용한다

 

우선순위 큐: 우선순위의 개념을 큐에 더한 것이다

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

배열, 연결 리스트, 힙으로 구현 가능

 

힙 종류

최대 힙 (max heap)

- 부모 노드의 키값이 자식 노드의 키값보다 크거나 같은 완전 이진 트리

- 부모 노드 >= 자식 노드

 

최소 힙 (min heap)

- 부모 노드의 키값이 자식 노드의 키값보다 작거나 같은 완전 이진 트리

- 자식 노드 >= 부모 노드

 

힙 구현

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

- 배열의 0 인덱스는 사용 하지 않고 1부터 저장한다

- 노드 번호는 정보가 추가되거나 삭제되어도 변하지 않는다

- 힙에서 부모 노드와 자식 노드의 관계

▷ 왼쪽 자식의 인덱스 = 부모노드 인덱스 * 2

▷ 오른/쪽 자식의 인덱스 = (부모노드 인덱스 * 2) + 1

▷ 부모노드의 인덱스 = 자식노드 / 2



위 최소 힙을 배열로 저장하면

인덱스 0123456
136467



최소 힙으로 확인하면 노드2, 노드4, 노드5의 인덱스를 보면 위 에 자식과 부모 노드의 관계를 확인 가능하다

 

힙 삽입

- 힙 에 새로운 요소가 들어오면 새노드를 힙의 마지막 노드 뒤에 삽입한다

- 새 노드를 두고나서 부모노드와 교환한다



최소힙에서 삽입

  

힙 삭제

힙의 삭제에서는 최대 힙에서는 최대 힙 루트 노드(노드1), 최소 힙에서는 최소 힙 루트 노드가 삭제 된다

- 각각의 힙에서 루트 노드가 삭제된다

- 삭제된 노드에 힙의 마지막 노드 값을 가져온다

- 힙을 재구성 한다

 

이번 예시는 최대 힙




This post is licensed under CC BY 4.0 by the author.