힙
우선순위 큐
로, 완전 이진 트리
라는 구조를 사용한다.부모-자식
관계로 매달린 것을 말한다.트리
그래프 이론에서 "싸이클을 만들지 않는 연결된 그래프"
맨 위의 노드는 루트
라고 한다.
이진 트리
이진 트리 예시
모든 노드가 2개 이하의 자식을 갖는 트리
포화 이진 트리
리프 노드
완전 이진 트리
완전 이진 트리
힙 특성 만족
모든 노드는 값을 갖는다.
모든 노드는 자식 노드(들) 값보다 크다.
- 힙 특성을 만족하면 우선순위가 가장 큰 원소가 루트에 자리하게 된다. (
최대 힙
)- 위와 반대인
최소 힙
도 존재한다.리스트
는 기초적인 자료구조지만완전 이진 트리
를 표현하는 데는 안성맞춤이다.
- 리스트가
A[0]
로 시작된다면 자식은A[2k+1]
과A[2k+2]
이다.- 완전 이진 트리라 중간에 빠지는 노드가 없이 자식들을 꽉 채우는 성질로 인해 이처럼 리스트의 인덱스로 간단히 계산할 수 있다.
__A[]
🠔 힙을 저장하는 리스트
insert()
🠔 힙에 원소 x를 삽입한다.deleteMax()
🠔 힙의 최대 원소를 알려주면서 삭제한다.max()
🠔 힙의 최대 원소를 알려준다.buildHeap()
🠔 리스트 A[]를 힙으로 만든다.isEmpty()
🠔 힙이 비었는지 알려준다.clear()
🠔 힙을 깨끗이 청소한다.
원소 삽입
원소 삭제
힙 생성