[Python] sort vs heapq

정재욱·2023년 5월 12일
0

Algorithm

목록 보기
26/33

코딩테스트 문제를 풀던 중, 다른 사람의 풀이에서 정렬을 할 때 sort를 사용하는 대신 heapq를 사용하는것을 보았다.

내가 알기론 heapq.heappushheapq.heappop은 둘 다 O(logn)의 시간이 걸린다.

그렇다면 heapq.heappush의 경우 처음부터 데이터를 하나씩 받아와 넣는다면, n개의 데이터를 heapq.heappush하므로 총 O(nlogn)이 걸려야 하는게 아닌가?


pop의 경우는 heappop이 훨씬 느리다.
heappopO(logN)이 걸리는 반면, 일반 popO(1)이 거리므로 heappop이 훨씬 느리다.

게다가 N번 수행하는거면 O(NlogN) vs O(N)으로 일반 pop이 훨씬 빠르다.


그렇다면 heapq는 언제 사용하면 좋을까?

코딩테스트 상황처럼 빈 리스트에 새 원소들을 추가하며 최종적으로 정렬된 리스트를 얻어야 하는 상황보다는 새로운 데이터가 추가되어도 항상 정렬 상태를 유지해야 하는 상황이거나, 이미 정렬되어있는 리스트에 새 원소를 추가하는 경우에 유용하게 쓰일 수 있을 것 같다.


즉,

heapq는 새로운 데이터가 추가되어도 항상 정렬된 상태를 유지하게 하거나, 이미 정렬되어 있는 상태를 이용하기 위해 사용하는것이지, 정렬을 빠르게 하는 것과는 일반 sort와 크게 차이가 없는 것 같다.....

데이터를 모두 입력받은 뒤 사용은 나중에 할 것이라면 heapq를 쓰느니 sort()를 쓰는게 더 낫다.

profile
AI 서비스 엔지니어를 목표로 공부하고 있습니다.

0개의 댓글