jet1125   3년 전

예제 코드 돌려보면 잘 나오고 코드도 퀵소트가 아닌 힙소트로 짰는데 왜 시간초과가 뜨는지 모르겠습니다.

혹시 아시는 분 도와주세요ㅜㅜ

djm03178   3년 전

build_heap은 힙이 아닌 상태의 배열을 힙으로 만드는 것이고, O(nlogn) 시간이 걸립니다. 다만, 이 경우 이미 '거의' 힙이 만들어진 상태에서 호출되기 때문에 O(n) 시간이 걸리고, 그래서 총 O(n^2) 시간이 걸립니다.

힙소트를 할 때 루트에 있는 원소를 제거한 뒤에는 heapify 하나면 힙 상태를 복구하는 데에 충분하고, 이를 O(logn) 시간에 할 수 있습니다.

djm03178   3년 전

또한 heapify의 구현도 잘못되었습니다. heapify는 지정된 원소가 더 위로 올라가거나 아래로 내려갈 필요가 없을 때까지 반복해서 원소를 이동해야 하는 것이고, 지금처럼 1회만 움직이는 것이 아닙니다.

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