Как определить оптимальный размер файла для сортировки слиянием? - PullRequest
3 голосов
/ 04 декабря 2010

Большинство из вас поймет это, но для меня это стало неожиданностью: гораздо быстрее отсортировать (например) 96 файлов размером 4 МБ каждый, чем 6 файлов объемом 64 МБ, используя сортировку слиянием (сохраняя общий объем информации постоянной).Я наткнулся на эту находку случайно.Таким образом, возникает вопрос: каков оптимальный размер входного файла для сортировки слиянием?

Я предполагаю, что между временем сортировки (ось Y) и количеством файлов (ось X) будет иметься криволинейная форма.Есть ли алгоритм, это больше эмпирическое правило или просто попробовать пару файлов разных размеров?Очевидные факторы, которые повлияют на это: * максимальное количество файлов, которые ОС может открыть одновременно.
* скорость чтения / записи жесткого диска

Любые ссылки приветствуются!

1 Ответ

0 голосов
/ 13 декабря 2010

Если ваша сортировка включает в себя перемещение файлов, то обычные меры для «самого быстрого» алгоритма сортировки на самом деле не применяются.Для перемещения файлов более быстрый алгоритм сортировки будет состоять из минимизации количества записей в файле.

Можно использовать сортировку выбора, и она очень близка к минимально возможному количеству свопов, но опять же, в худшем случае,каждый файл должен быть записан дважды: один раз, когда его поменяли, чтобы освободить место для принадлежащего ему файла, и один раз поменяли на место, где он должен быть, когда придет его время.

Существуеталгоритм, который выполняет не более n + 1 присваиваний.«Обмен» (который используется большинством алгоритмов сортировки) включает в себя три присваивания (с использованием временной переменной).Это работает в значительной степени, делая сортировку выбора, фактически не меняя ничего.Путем записи каждого выбранного элемента в новую память или сохранения порядка сортировки в памяти, а затем реорганизации файлов в том же пространстве памяти после факта (стиль дефрагментации).Этот алгоритм действительно будет минимальным с точки зрения копирования данных.Это идеально, когда копирование элементов стоит дорого (сортировка данных на диске).

...