heap : 특정 규칙을 갖는 완전 이진 트리
힙의 특징
- 힙은 각 노드가 하위 노드보다 큰(or작은) 우선 순위를 가진다.
- 최대 힙에서는 부모 노드가 자식 노드보다 항상 크고,
최소 힙에서는 부모 노드가 자식 노드보다 항상 작다.- 우선순위 큐 구현에 사용되는 자료구조
우선순위 큐는 삽입 순서에 상관 없이 우선순위가 높은 데이터가 먼저 나가는 형태의 자료구조.
heapq
모듈을 통해 힙을 쉽게 구현할 수 있다.import heapq
# 최소 힙
min_heap = []
heapq.heappush(min_heap, 5)
heapq.heappush(min_heap, 1)
heapq.heappush(min_heap, 3)
print(heapq.heappop(min_heap)) # 1
# 최대 힙
max_heap = []
heapq.heappush(max_heap, -5)
heapq.heappush(max_heap, -1)
heapq.heappush(max_heap, -3)
print(-heapq.heappop(max_heap)) # 5
# heapq는 최소 힙을 기반으로 만들어졌기 때문에 양수를 사용하면 최소 힙
음수를 사용하면 최대 힙을 구현할 수 있다.
해시 테이블은 키(Key)를 값(Value)에 매핑할 수 있는 구조로, 데이터를 빠르게 검색, 추가, 삭제가 가능하다.
# 해시 테이블 생성
hash_table = {}
# 삽입 (Insert)
hash_table["apple"] = "사과"
hash_table["banana"] = "바나나"
hash_table["grape"] = "포도"
print("현재 해시 테이블:", hash_table)
# 검색 (Search)
print("apple의 값:", hash_table.get("apple"))
print("banana의 값:", hash_table.get("banana"))
# 삭제 (Delete)
hash_table.pop("grape", None)
print("현재 해시 테이블:", hash_table)