import heapq
li = [45, 3, 2, 413, 978]
heapq.heapify(li)
heapq.heappop(li)
for i in li:
print(i)
이거 출력값 왜 그런지 설명좀 ;;
3
413
45
978
45가 먼저나와야하는거 아님?
import heapq
li = [45, 3, 2, 413, 978]
heapq.heapify(li)
heapq.heappop(li)
for i in li:
print(i)
이거 출력값 왜 그런지 설명좀 ;;
3
413
45
978
45가 먼저나와야하는거 아님?
포문 뒤에 인덴트 넣어야지 바부야
아 이거 복붙해서 그런거임
힙은 정렬해주는 자료구조가 아니라 pop할때 최소값을 반환해주는 자료구조임
단순히 오름차순으로 출력하고 싶은거라면 포문 안에 print(heap.heappop(li))를 넣어야됨
print만 바꾸면 3 45만 출력되는데
while li로 해야지
li로 포문 돌리는 중에 li에 있는 값을 빼낼 순 없자나
아 내가 뭘 잘못생각한지 알았음 ㄳㄳ
그리고 히피파이는 안 써도 됨 heappush랑 heappop만 쓰면 자동으로 해줌
츨력값 왜 그런지 설명좀(출력값은 자기만 앎)
아 안넣었네 추가함
힙은 삭제 삽입 연산 이후에 항상 히피파이 연산으로 트리조정을 해야함(내가 아는한 그럼).
히피파이 메서드가 있는거 보면 힙팝 메서드가 정렬까지 수행하지는 않는거 아님?
루트에서 하나 꺼내면 힙구조가 깨지고 다시 히피파이 해야지. 장점이 모든연산 무조건 로그n을 보장해줌
그러면 pop다음줄에 heapify를 한번 더 하면 된다는거임?
ㅇㅇ 저 메서드 안써봐서 모르는데 아마 그럴거임
해봤는데 안됨
아
45가 먼저나올 필요는없음 애초에 힙이 오름차순 정렬 자료구조가 아님 그냥 최소값을 1번에 오게하는거임.'
ㅇㅇ 잘못생각하고있었음
정정 0번. 힙팝 한번 더해보면 45가 맨앞에 올걸? 이유가, 힙을 리스트로 표현하면 인덱스에 따라 0 루트, 1 왼쪽자식, 2 오른쪽자식 이런식으로 할당암
화이팅
힙은 느슨한 정렬을 유지해준다. heappop 메서드로 모든 요소를 빼내면 항상 최솟값을 반환하지만 리스트 내부에서는 요소들이 반드시 정렬된 상태를 유지하지 않음