티스토리 뷰
728x90
힙은 Min Heap과 Max Heap으로 나눌 수 있다.
힙은 세 가지 특징을 가진다.
- Min Heap인 경우 루트노드가 항상 최소값, Max Heap인 경우 루트노드가 항상 최댓값을 가진다.
- Max Heap(Min) 내의 임의의 노드를 루트로 하는 서브트리 또한 Max Heap(Min)이다.
- 완전 이진 트리여야한다. 따라서 m 번 노드의 왼쪽 자식 노드는 2m+1번이고, 오른쪽 자식 노드는 2m+2번이다.
힙의 장점
삽입/삭제 연산이 BST보다 빠르다.
시간 복잡도는 O(log n)으로 동일하지만 힙은 무조건 완전이진트리이므로 모든 삭제/삽입 연산이 배열의 가장 끝에서 발생한다.
heapq 모듈 사용
heapq 모듈은 이진트리(Binary tree) 기반의 최소 힙(min heap) 자료구조를 제공한다.
min heap을 사용하면
원소들이 항상 정렬된 상태로 추가되고 삭제되며,
min heap에서 가장 작은 값 즉 이진 트리의 루트는 언제나 index 0에 위치한다.
모든 원소(m)은 항상 자식 원소들(2m+1, 2m+2)보다 크기가 작거나 같도록 원소가 추가되고 삭제된다.
모듈 임포트 및 최소 힙 생성
import heapq
heap = []
원소 추가
haeapq.heappush(heap, 3)
haeapq.heappush(heap, 1)
haeapq.heappush(heap, 10)
haeapq.heappush(heap, 2)
haeapq.heappush(heap, 8)
print(heap)
[1, 2, 3, 8, 10]
시간복잡도 O(logN)
원소 삭제
print(heapq.heappop(heap))
print(heap)
1
[2, 3, 8, 10]
시간복잡도 O(logN)
삭제하지 않고 얻기
print(heap[0])
2
인덱스로 접근 가능하다.
반응형
'Coding - Algo' 카테고리의 다른 글
[git hub] 깃허브 잔디밭안심어질 때 ! ! (0) | 2021.05.08 |
---|---|
최소신장트리 (0) | 2021.02.23 |
[자바스크립트] Javascript 항목 클릭 시 스크롤업 되는 애니메이션 (0) | 2020.08.14 |
[11399]백준 ATM 자바(java) (0) | 2020.08.12 |
java JavaFX 응용 프로그램 클래스는 javafx.application.Application을(를) 확장해야 합니다. 오류 해결법 (0) | 2020.08.12 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 파이썬 풀이
- 백준파이썬
- 더 맵게
- SWEA
- 백준 풀이
- 프로그래머스 더 맵게
- 백준 17144
- 타일링 자바
- ubuntu
- poker swea
- SSAFY
- 프로그래머스 자바
- 삼성청년SW아카데미
- swea 타일링 자바
- 1699 자바
- swea 1240
- 메뉴리뉴얼 풀이
- union-find
- 프로그래머스 파이썬
- 백준
- 파이썬
- 3996 자바
- 백준 dp 문제
- swea 4070 타일링
- 우분투
- yoloV3
- 프로그래머스
- swea 1240 자바
- swea 타일링
- 1240 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함