배열의 모든 요소가 왼쪽에서 오른쪽으로 올바른 위치에서 최대 k 위치 떨어져있는 익숙한 문제에서, 최소 힙 구현은 다음과 같습니다.힙을 사용하여 O (1) 공간에서 k-messed-array 정렬을 수행 할 수 있습니까?
내 질문이있다크기 k + 1의 최소 힙을 생성하십시오. 따라서 min 힙의 루트는 정렬 된 배열의 가장 작은 요소 인 입니다. 나머지 n (k + 1) 요소의 경우 각 반복에서 이미 힙에있는 요소 [i]와 사이에 선택됩니다. 따라서 힙에 [i]를 넣고 heapify하고 min을 추출하십시오. 이렇게하면 정렬 된 배열의 요소 인 [i-k] 이 계속 채워집니다.
시간 복잡도 : O (K) + O (NK) .LOG (K)
공간 복잡도 : O (K)
이이 O를 사용하여 수행 할 수 있습니다 (1) 공간 복잡성?
접근 방식은 here이지만 발견 할 수는 없습니다. 누군가가 정교 할 수 있을까요?
이 작업을 수행 할 수 있습니다. 맨 끝에서 시작하여 최소 힙 대신 최대 힙 을 사용하십시오. 그 2K 요소의 마지막 블록 을 적절히 확장하십시오. 추출 된 첫 번째 요소를 변수에 저장합니다. 후속 요소는 heapsort와 비슷한 2k (힙 구조 포함) 블록의 최종 블록 바로 앞의 비워진 위치로 이동합니다. 단지 1 블록 만 남았을 때, 그것을 제자리에 둡니다. 최종 최종 블록을 초기 블록 블록으로 "회전"하려면 O (n) 패스가 필요합니다. 회전은 간단하지 않지만 O (n) 및 O (1) 공간에서 수행 할 수 있습니다.