Для сортировки 10 ГБ данных с помощью только 1 ГБ RAM:
- Read 1 ГБ данных в оперативной памяти и виде при помощи quicksort.
- Запись отсортированные данные к диску.
- Повторные шаги 1 и 2 до всех данных находятся в отсортированных блоках на 1 ГБ (существует 10 ГБ / 1 ГБ = 10 блоков), который теперь должен быть объединен в один единственный выходной файл.
- Read первые 90 МБ каждого отсортированного блока (1 ГБ) во входные буферы в оперативной памяти и выделяют остающихся 100 МБ для буфера вывода. (Для лучшей производительности мы можем взять больше буфер вывода и немного меньшие входные буферы.)
- Выполняют слияние с 10 путями и хранят результат в буфере вывода.
- Каждый раз, когда буфер вывода заполняется, запишите, что он к финалу отсортировал файл, и освободите его. Каждый раз, когда любой из пустых входных буферов на 90 МБ, заполнитесь, это со следующими 90 МБ его связанного 1 ГБ отсортировало блок, пока больше данных из блока не доступно.
Это - внешний подход сортировки слиянием, который работает внешне.
ответ дан 30 November 2019 в 21:17
поделиться