저는 메모리에 맞지 않는 거대한 데이터 세트를 효율적으로 정렬하는 방법을 찾으려고합니다. 높은 수준의 분명한 대답은 몇 가지 표준 알고리즘을 사용하여 메모리에 들어있는 모든 묶음을 정렬하고이를 디스크에 쓴 다음 병합하는 것입니다. 그들을 합병하는 것이 문제입니다.효율적인 Out-Of-Core 정렬
데이터를 C 청크로 나눠서 병합 할 C 파일이 있다고 가정 해 보겠습니다. 한 패스에서 C-way 병합을 수행하면 기술적으로 O (N^2) 알고리즘을 사용하지만 O (N)을 수행해야만 한 알고리즘은 디스크에 씁니다. 반복적으로 C/2 파일, C/4 파일 등으로 병합하면 O (N log N) 알고리즘을 사용하지만 O (N log N)을 수행해야하는 디스크는 디스크에 씁니다. a 거대한 상수.
이 수수께끼의 전형적인 해결책은 무엇입니까? 어떤 좋은 것이 있습니까?
아주 좋은 솔루션처럼 들립니다. 참조하는 힙은 http://en.wikipedia.org/wiki/Heap_%28data_structure%29에 설명 된 데이터 구조이며 동적 메모리 할당을 위해 C에서 사용 된 힙이 아니라는 점을 언급 할 필요가 있습니다. 또한, 알고리즘의 근원을 아는 것이 좋을 것입니다 - 그것은 당신의 발명입니까? – gooli