multi-way merge vs 2-way merge

9

Wenn wir eine große Datei extern zusammenführen, sortieren wir sie in kleine, sortieren diese und fügen sie dann zusammen zurück in eine große sortierte Datei.

Beim Zusammenführen können wir entweder mehrere 2-Wege-Merge-Pässe oder eine Mehrwege-Merge durchführen.

Ich frage mich, welcher Ansatz besser ist? und warum?

    
KFL 04.08.2012, 06:22
quelle

1 Antwort

5

Eine Mehrwegezusammenführung ist im Allgemeinen besser. Betrachten Sie drei kleine Dateien:

%Vor%

und

%Vor%

und schließlich

%Vor%

Wenn Sie eine Zusammenführung mit a und b vornehmen, bleibt uns (sagen wir)

%Vor%

und

%Vor%

Eine endgültige Zusammenführung würde die sortierte Liste erstellen, aber beachten Sie, dass wir in dieser endgültigen Zusammenführung die Elemente a und b erneut aufrufen müssen. Es ist diese Wiedervereinigung, die bei der Kaskadierung von Zweiwege-Verschmelzungen verschwenderisch ist.

Was Sie stattdessen tun können, ist eine einzelne Mehrwege-Zusammenführung. Seien Sie jedoch vorsichtig, wie Sie es tun. Vermeiden Sie insbesondere die naive Doppelschleife, die jeden Cursor scannt, um zu sehen, welcher Wert den Mindestwert hat. Verwenden Sie stattdessen einen Min-Heap. Dies bringt die Komplexität zurück auf O(n log n) .

    
phs 04.08.2012, 06:39
quelle