ajy720   3년 전

일단 문제 문제해결은 했는데요,, 

처음에 queue/PriorityQueue 모듈로 아무리 해도 시간 초과가 발생해서 조금 구글링을 해보니 heapq 모듈을 쓰기도 하더라구요

혹시나 해서 heapq 모듈로 해봤더니 같은 알고리즘인데도 시간 초과 없이 해결이 돼서 의문이 생겼습니다.

.

queue의 PriorityQueue 모듈에선 다음과 같은 코드를,

pq.put(-arr[i][1])

ans -= pq.get()


.

heapq 모듈에선 다음과 같은 코드를 사용했는데요,

heapq.heappush(pq,-arr[i][1])

ans -= heapq.heappop(pq)


.

PriorityQueue.put()과 heapq.heappush(), PriorityQueue.get()과 heapq.heappop()의 시간복잡도가 다른가요?

인터넷을 조금 찾아보니 PriorityQueue 모듈도 내부적으로 heap 모듈을 이용해 구현되어서,

네 함수 모두 O(logN)의 시간복잡도를 가지는 것 같은데 왜 이런 차이가 발생하는지 궁금합니다 ㅠㅠ

shg9411   3년 전

PriorityQueue는 동기화를 지원해서 더 느린 것으로 알고 있습니다.

시간 복잡도의 문제는 아니고요.

huozuyinshua   2년 전

다른 문제에서 heapq로 했더니 바로 됩니다. 감사합니다.

댓글을 작성하려면 로그인해야 합니다.