Ich versuche herauszufinden, wie man einen riesigen Datensatz, der nicht in den Speicher passt, effizient sortiert. Die naheliegende Antwort auf einer hohen Ebene besteht darin, eine ganze Reihe von Chunks zu sortieren, die mit einem Standardalgorithmus in den Speicher passen, diese auf die Festplatte zu schreiben und sie dann zusammenzuführen. Zusammenführen ist das Problem.Effiziente Out-Of-Core-Sortierung
Angenommen, die Daten werden in C-Chunks aufgeteilt, sodass ich C-Dateien zusammenführen muss. Wenn ich einen C-Weg-Merge in einem Durchgang mache, dann habe ich technisch einen O (N^2) -Algorithmus, obwohl dieser nur O (N) -Schreibvorgänge auf dem Datenträger ausführen muss. Wenn ich sie iterativ in C/2-Dateien, dann C/4-Dateien usw. zusammenführe, dann habe ich einen O (N log N) -Algorithmus, aber einen, der O (N log N) schreibt, schreibt auf Platte und hat daher ein riesiger konstanter Begriff.
Was ist die typische Lösung für dieses Rätsel? Gibt es einen guten?
Klingt nach einer sehr guten Lösung. Es ist erwähnenswert, dass der Heap, auf den Sie sich beziehen, die Datenstruktur ist, die in http://en.wikipedia.org/wiki/Heap_%28data_structure%29 beschrieben ist, und nicht der Heap, der in d. H. C für die dynamische Speicherzuweisung verwendet wird. Es wäre auch schön, den Ursprung des Algorithmus zu kennen - ist es deine eigene Erfindung? – gooli