Я пытаюсь решить, как эффективно сортировать огромный набор данных, который не поместится в памяти. Очевидный ответ на высоком уровне состоит в том, чтобы отсортировать целую кучу кусков, которые подходят в памяти с использованием стандартного алгоритма, записать их на диск и затем объединить. Слияние их - проблема.
Скажем, данные делятся на куски C, поэтому у меня есть файлы C для слияния. Если я делаю слияние C-way за один проход, то технически у меня есть алгоритм O (N ^ 2), хотя тот, который должен выполнять O (N), записывать на диск. Если я итеративно объединять их в файлы C/2, затем файлы C/4 и т.д., Тогда у меня есть алгоритм O (N log N), но тот, который должен выполнить O (N log N), записывать на диск и, следовательно, a огромный постоянный термин.
Каково типичное решение этой головоломки? Есть ли хороший?