티스토리 뷰

Programming/자료구조

[자료구조] 힙

RosyPark 2022. 5. 3. 15:13

 Heap

 

힙 자료구조 

힙이란? 특정한 규칙을 가지는 트리로, 최댓값과 최솟값을 찾는 연산을 빠르게 하기 위해 고안된 완전 이진트리를 기본으로함

배열에 데이터를 넣고, 최대값과 최솟값을 빠르게 찾기 위해서는 O(n)이 걸리지만, 힙에 데이터를 넣고 최댓값과 최솟값을 찾으면 O(logn)이 걸림 

 

힙 property?

최소 힙? 부모 노드의 키값이 자식 노드의 키값보다 항상 작은 힙

최대 힙? 부모 노드의 키 값이 자식 노드의 키값보다 항상 큰 힙 

-> 이러한 속성으로 힙에서는 가장 낮거나 높은 우선순위를 가지는 노드가 항상 루트에 오게됨 

-> 이를 통해 우선순위큐와 같은 추상적 자료형을 구현할 수 있음 

 

힙 함수 활용하기

heapq.heappush(heap, item): item을 heap에 추가

heapq.heappop(heap) : heap에서 가장 작은 원소를 pop & 리턴, 비어 있는 경우 IndexError 호출

heapq.heapfy(x) : 리스트 x 즉각적으로 heap으로 변환 O(N) 

 

1) 최소힙 예제 

- pyhon은 기본적으로 최소힙으로 구성되어 있음 

heap = [30,5,50,10,20]
heapq.heapify(heap)
print(heap) #[5, 10, 50, 30, 20]
print(heapq.heappop(heap)) #5

 

2) 최대힙 예제

- 최대힙을 사용하려면 _heapify_max 사용 필요

 heap = [30,5,50,10,20]
heapq._heapify_max(heap);
print(heap) #[50, 20, 30, 10, 5]
print(heapq._heappop_max(heap)) #50

 

3) heappush 예제

heap = [3,1,4,4,6,7,2];
heapq.heapify(heap);
print(heapq.heappop(heap)) #1 
print(heap) # [2, 3, 4, 4, 6, 7]

heapq.heappush(heap,-1);
print(heap) #[-1, 3, 2, 4, 6, 7, 4]

 

'Programming > 자료구조' 카테고리의 다른 글

[자료구조/코테] 그래프  (0) 2022.05.03
[자료구조] 정렬  (0) 2022.04.17
[자료구조] Queue & Stack  (0) 2022.04.02
[자료구조/코테] Hash Table  (0) 2022.03.01
[자료구조/코테] Math  (0) 2022.03.01
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/02   »
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
글 보관함