그래서 이번 주 목표 : gym 휴무 날을 빼고 무조건 간다!
다행히 이곳은 9시 30분 한타임 더 운영함
그리고 오늘…. 9시 반 타임 들어가서 운동 + 추가 줄넘기 250개를 채우고 집에 왔다
씻고나니 12시 실화냐
인덱스 0 부터 시작해 k 번째 원소가
항상 자식원소들(leaf) == (2k+1, 2k+2)
보다 작거나 같은 Minimum Heap
호출:
import heaq
from heaq import heaqpush,heappop...
heap = []
힙 정렬 :
for i in range(1,6):
heapq.heappush(heap,i)
힙 출력 :
for i in range(5):
print(heapq.heappop(heap))
부모 노드의 값이 자식 노드의 키값 보다 항상 크거나 같다
key(부모) >= key(자식)
부호를 변경하는 방식으로 최대힙 구현.
내림 차순 구현용
max_heap= []
heap_item=[1,3,5,7,9]
for item in heap_items:
heapq.heappush(max_heap, (-item,item))
print(max_heap)
[(-9,9), (-7.7), (-3,3),(-1,1),(-5,5)]
for i in range(5):
print(-heapq.heappop(heap))
5 ,4, 3, 2 ,1
max_item = heapq.heapop(max_heap)[1]
print(max_item)
9
heapq.heappush(heap,item) :item을 heap 추가
heapq.heappop(heap) :
heap.heapify(x) : 리스트 x를 즉석으로 heap으로 변환한다 `O(n)
힙 생성 :
import heapq
heap1 = []
# 원소 삽입
heapq.heappush(heap1, 50)
heapq.headpush(heap1,10)
heapq.heappush(heap1,20)
# 원소 삭제
result = heapq.heappop(heap1)
print(result)
print (heap)
# 10
# [50,20]
heap2 = [50,10,20]
heapq.heapify(heap2)
print(heap2) #[10,50,20]
queue :FIFO
먼저 들어오는 데이터 X
우선순위 높은 데이터 먼저 나가는 구조
push, pop 두가지 연산이 지원되어야 함.
같은 우선순위일 경우 먼저 들어온 원소 처리
호출 :
from queue import PriorityQueue
q = PriorityQueue()
q1 =PriorityQueue(maxsize=10) # maxsize를 통한 크기 제한 가능
put(item)
q.put(3)
q.put(4)
q1.put((1, 'applp')) # 우선순위, 값
q.get() # 원소를 갖고온다
q1.get()[1] #우선순위, 값 의 형태에서 값 반환