Прошу прощения, если это повторялось ранее, но я не смог найти ни одного поста с выбранной мною формулировкой. Я готовлюсь к интервью, и я читал о внешней сортировке. Например, если вы хотите отсортировать несколько жестких дисков с 32-битными целыми числами, вы можете выполнить сортировку подсчетом и использовать 64-битные счетчики для подсчета 32-битных целых чисел. Затем для каждого возможного 32-битного целочисленного значения у вас будет счетчик, представляющий его. Вы также можете использовать внешнюю сортировку слиянием для аналогичных вещей, занимая время O (nlogn) вместо времени O (1). Тем не менее, я думал о случае, который, вероятно, очень распространен, но я не могу придумать лучший способ сделать это - добавить новые данные в кучу отсортированных файлов, возможно, на многих жестких дисках.
Если бы данные находились в памяти, можно было бы использовать кучу (приоритетную очередь) для выполнения этой вставки за время регистрации. Однако мы не можем создать кучу из пространства на жестком диске. Со списками вам придется использовать поиск O (logn), чтобы найти место данных (для бинарного поиска, отсортированного), а затем переместить остальные данные назад или вперед, или вам может не потребоваться что-либо сдвигать в зависимости от реализации контейнера (массивы, связанные списки и т. д.). Однако в мире жестких дисков операции чтения и записи намного дороже, чем в ОЗУ, поэтому вставка данных куда-либо, а затем смещение (перезапись) остальных данных кажется непомерно дорогим. Есть ли какие-нибудь техники для этого, которые кто-нибудь из вас мог бы мне порекомендовать? Я был бы рад прочитать сам, я просто не мог найти правильный способ сформулировать свой вопрос, чтобы найти какую-либо информацию. Спасибо!