Ну, это интересный вопрос для собеседования ... почти все подобные вопросы предназначены для проверки ваших навыков и, к счастью, не относятся непосредственно к реальным примерам.Это похоже на один, так что давайте углубимся в головоломку
Когда ваш интервьюер спрашивает «лучший», я думаю, что он / она говорит только о производительности.30 Гб строк - это много данных.Все алгоритмы сравнения-обмена Omega(n logn)
, так что это займет много времени.Хотя существуют алгоритмы O(n)
, такие как сортировка по счету, их нет на месте, поэтому вы будете умножать 30 ГБ, и у вас будет только 4 ГБ ОЗУ (учитывая объем обмена ...), поэтому я бы выбрал быстрая сортировка
Ответ 2 (частичный)
Начните думать о подсчете сортировки.Вы можете сначала разбить строки на группы (используя метод сортировки по кругу), по одной на каждую букву.Вы можете отсканировать файл и для каждой начальной буквы переместить строку (поэтому копируйте и удаляйте, не тратя места) во временный файл.Вы можете повторить процесс для первых 2, 3 или 4 символов каждой строки.Затем, чтобы уменьшить сложность сортировки большого количества файлов, вы можете отдельно отсортировать строку внутри каждого (используя быструю сортировку сейчас) и, наконец, объединить все файлы по порядку.Таким образом, у вас все еще будет O(n logn)
, но на довольно низком n