Двухстороннее слияние широко изучается как часть алгоритма Mergesort. Но мне интересно узнать, как можно наилучшим образом выполнить слияние N-way?
Скажем, у меня есть файлы N
, которые отсортировали по 1 миллиону целых чисел.
Я должен объединить их в один файл, который будет содержать эти 100 миллионов отсортированных целых чисел.
Пожалуйста, имейте в виду, что прецедент для этой проблемы - это фактически внешняя сортировка, основанная на дисках. Поэтому в реальных сценариях также будет ограничение памяти. Таким образом, наивный подход к объединению 2 файлов за раз (99 раз) не будет работать. Допустим, у нас есть только небольшое скользящее окно памяти, доступное для каждого массива.
Я не уверен, есть ли стандартное решение для этого слияния N-way. (Гуглинг много не рассказывал).
Но если вы знаете, хороший алгоритм слияния n-way, отправьте сообщение algo/link.
Сложность времени: Если мы значительно увеличим количество файлов (N
), которые будут объединены, как это повлияет на временную сложность вашего алгоритма?
Спасибо за ваши ответы.
Меня нигде не спрашивали, но я чувствовал, что это может быть интересный вопрос для интервью. Поэтому помечены.