728x90
Heap
힙은 특정한 규칙을 갖는 자료구조로, 최대값과 최소값을 찾는 연산을 빠르게 하기 위해 고안된 완전 이진 트리를 기본으로 한다.
언젠가 수업 들으면서 이중 트리에 대해 배운 것 같은데 기억이 휘발되었다…. 아마 가지치기 형태로 데이터를 구성한 다음 두 개씩 값을 비교하여 순서를 바꾸는 거였나….
- Heap의 좋은 점은 따로 정렬하지 않아도 가장 큰 값과 작은 값을 알아서 찾아준다는 것이다.
- 자식 노드의 최대 개수는 힙의 종류에 따라 다르지만 이진트리에서는 최대 2개로 한정한다.
- 최대 힙 (max heap)key(T.parent(v))≥key(v)
- 각 노드의 키 값이 그 자식 노드의 키 값보다 작지 않은 힙
- 최소 힙 (min heap)ket(T.parent(v))≤key(v)
- 각 노드의 키 값이 그 자식노드의 키 값보다 크지 않은 힙
- 시간 복잡도
- O(logN)
Heap의 연산
insert
- 삽입하고자 하는 값을 트리의 가장 마지막 원소에 추가
- 부모노드-자식노드 간의 대소관계를 비교하며 만족할 때까지 자리 교환 반복
delete
- 힙에서는 루트 노드만 삭제 가능 → 루트 노드 제거
- 가장 마지막 노드를 루트로 이동시킴
- 부모노드-자식노드 간의 대소관계를 비교하며 만족할 때까지 자리 교환 반복
구현 방법
파이썬에서 제공하는 힙큐 모듈을 사용한다. (min heap이 기본적이다)
module import
import heapq
node insert
heap = []
heapq.heappush(heap, value)
node delete
heapq.heappop(heap) # heap의 최소값 반환
값을 없애지 않고 접근만 하고 싶다면 기존 리스트와 같이 인덱스를 사용한다.
기존 리스트를 heap으로 만들고 싶다면
heapq.heapify(list_name)
728x90
'자료구조' 카테고리의 다른 글
자료구조 Stack - 정의, 특성, 구현 (0) | 2023.09.06 |
---|---|
자료구조 Array - 이차원 배열 (0) | 2023.08.26 |
자료구조 Array - 검색, 선택 정렬, 카운팅 정렬 (0) | 2023.08.24 |
자료구조 Array - 알고리즘, 배열, 버블 정렬 (0) | 2023.08.18 |
데이터 구조 큐(Queue) python (0) | 2023.04.07 |