Отсортировать большой файл
От: makdak  
Дата: 16.01.17 10:53
Оценка:
Всем привет!
Как отсортировать файл 2TB с числами, размером в 32 бита, которые записаны в нём так, что каждое с новой строки, имея всего 2 ГБ оперативки??
Re: External sorting
От: Qbit86 Кипр
Дата: 16.01.17 10:57
Оценка: 1 (1)
Здравствуйте, makdak, Вы писали:

M>Как отсортировать файл 2TB с числами, размером в 32 бита, которые записаны в нём так, что каждое с новой строки, имея всего 2 ГБ оперативки??:???:


https://en.wikipedia.org/wiki/External_sorting
Глаза у меня добрые, но рубашка — смирительная!
Re: Отсортировать большой файл
От: LaptevVV Россия  
Дата: 16.01.17 11:08
Оценка: 3 (1) +1
M>Как отсортировать файл 2TB с числами, размером в 32 бита, которые записаны в нём так, что каждое с новой строки, имея всего 2 ГБ оперативки??
Дональд Кнут, том 3. Внешняя сортировка.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Отсортировать большой файл
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 16.01.17 11:16
Оценка: 3 (1)
Здравствуйте, makdak, Вы писали:

M>Всем привет!

M>Как отсортировать файл 2TB с числами, размером в 32 бита, которые записаны в нём так, что каждое с новой строки, имея всего 2 ГБ оперативки??

В Яндекс собеседование проходишь? Я, когда-то давным давно, так делал эту задачку решал. Сейчас, правда смотрю на это и понимаю что сделал бы иначе. Вообще интересно на свой старый код смотреть
Отредактировано 16.01.2017 11:19 kaa.python . Предыдущая версия .
Re: Отсортировать большой файл
От: uzhas Ниоткуда  
Дата: 16.01.17 12:27
Оценка:
Здравствуйте, makdak, Вы писали:

M>Как отсортировать файл 2TB с числами, размером в 32 бита


лучше гномиков посчитайте
гораздо полезнее и писать код не надо
Re: Отсортировать большой файл
От: kov_serg Россия  
Дата: 16.01.17 13:18
Оценка: 18 (2)
Здравствуйте, makdak, Вы писали:

M>Всем привет!

M>Как отсортировать файл 2TB с числами, размером в 32 бита, которые записаны в нём так, что каждое с новой строки, имея всего 2 ГБ оперативки??
Даные в текстовом файле через перевод строки от 2 до 11 байт... Если есть еще 2Тб для результата или хотя бы 20Гб для промежуточных данных то
сортировка подсчетом (40бит счетчики) справится. Делишь 20Гб по 2Гб получаешь ~10 чтений по исходному файлу и одна запись результата.
Re[2]: Отсортировать большой файл
От: makdak  
Дата: 16.01.17 13:52
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>В Яндекс собеседование проходишь?

почти, угадал. Бывшие работники Яндекса, как-то прислали вопросы, еще до собеседования, там вот этот вопрос и был. Для себя хочу знать.
А что, в Яндекс только сверхчеловеков берут только? вроде и студентов набирают.


Здравствуйте, uzhas, Вы писали:

U>лучше гномиков посчитайте

U>гораздо полезнее и писать код не надо

а если хочется код писать?
Re[3]: Отсортировать большой файл
От: Mihas  
Дата: 16.01.17 13:57
Оценка:
Здравствуйте, makdak, Вы писали:

M>А что, в Яндекс только сверхчеловеков берут только? вроде и студентов набирают.

Студентов, наверное, сперва через Академию Яндекса протаскивают.
Re[3]: Отсортировать большой файл
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 16.01.17 14:09
Оценка:
Здравствуйте, makdak, Вы писали:

M>почти, угадал. Бывшие работники Яндекса, как-то прислали вопросы, еще до собеседования, там вот этот вопрос и был. Для себя хочу знать.

M>А что, в Яндекс только сверхчеловеков берут только? вроде и студентов набирают.

В этой задачке ничего сверхчеловеческого нет, но она требует опыта в определенной сфере или как минимум практики пусть даже в на учебных задачах в чем-то похожем. Сходу, если учесть все их требования (их больше было чем ты привел) человек без нужного опыта врядли корректно решит. Насколько им действительно нужен такой опыт вопрос отдельный, но, видимо, важен. Либо просто очень большой поток желающих достаточно высокого качества и его нужно как-то фильтровать.
Re[4]: Отсортировать большой файл
От: makdak  
Дата: 16.01.17 14:26
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Здравствуйте, makdak, Вы писали:


M>>почти, угадал. Бывшие работники Яндекса, как-то прислали вопросы, еще до собеседования, там вот этот вопрос и был. Для себя хочу знать.

M>>А что, в Яндекс только сверхчеловеков берут только? вроде и студентов набирают.

KP>(их больше было чем ты привел) человек без нужного опыта врядли корректно решит.


вот:
Имеется 1TB файл состящий из целых чисел (одно число на строку). Как отсортировать этот файл самым быстрым образом, если есть только 2GB памяти?


а остальные вопросы почти все были элементарные.
Отредактировано 16.01.2017 14:41 makdak . Предыдущая версия .
Re: Counting sort
От: Qbit86 Кипр
Дата: 16.01.17 14:34
Оценка:
Здравствуйте, makdak, Вы писали:

M>Как отсортировать файл 2TB с числами, размером в 32 бита, которые записаны в нём так, что каждое с новой строки, имея всего 2 ГБ оперативки??:???:


Может, предполагается, что надо использовать что-то типа сортировки подсчётом?
Глаза у меня добрые, но рубашка — смирительная!
Re: Отсортировать большой файл
От: Слава  
Дата: 16.01.17 15:08
Оценка: 3 (1) -1 :))
Здравствуйте, makdak, Вы писали:

M>Всем привет!

M>Как отсортировать файл 2TB с числами, размером в 32 бита, которые записаны в нём так, что каждое с новой строки, имея всего 2 ГБ оперативки??

Взять библиотеку STXXL и не выдрючиваться.
Re[2]: Counting sort
От: LaptevVV Россия  
Дата: 16.01.17 15:11
Оценка: +1
M>>Как отсортировать файл 2TB с числами, размером в 32 бита, которые записаны в нём так, что каждое с новой строки, имея всего 2 ГБ оперативки??
Q>Может, предполагается, что надо использовать что-то типа сортировки подсчётом?
Это — само собой, ибо числа целые.
Но сортировка подсчетом работает только над отдельной порцией данных.
А потом все равно все порции — сливать.
А это внешняя сортировка (слиянием), о коих в 3 томе Кнута написано чуть ли не полкнижки.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Counting sort
От: night beast СССР  
Дата: 16.01.17 16:42
Оценка: +1
Здравствуйте, LaptevVV, Вы писали:

M>>>Как отсортировать файл 2TB с числами, размером в 32 бита, которые записаны в нём так, что каждое с новой строки, имея всего 2 ГБ оперативки??

Q>>Может, предполагается, что надо использовать что-то типа сортировки подсчётом?
LVV>Это — само собой, ибо числа целые.

больно разрядность большая. много Cache Miss будет.
Re[2]: Отсортировать большой файл
От: IID Россия  
Дата: 16.01.17 16:55
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Даные в текстовом файле через перевод строки от 2 до 11 байт... Если есть еще 2Тб для результата или хотя бы 20Гб для промежуточных данных то

_>сортировка подсчетом (40бит счетчики) справится. Делишь 20Гб по 2Гб получаешь ~10 чтений по исходному файлу и одна запись результата.

Счётчики можно сделать более хитрыми.

Например размером в байт.

Тогда если старший бит сброшен — счётчик находится прямо в этом байте. (0-127)
Если выставлен — младшие 7 бит означают номер корзины, в которой лежит внешний счётчик большого размера (хоть 64 бита). Большие счётчики создаются динамически, при переполнении встроенного. Проход по корзине произвольный, для начала можно даже линейный.

Скорее всего уложишься в один проход, с выделением памяти чуть больше 2гб.

Можно несколько алгоритмов придумать, для разного характера распределений чисел. И обрывать проход с перевыбором алгоритма, если статистика говорит что есть более оптимальный способ.
kalsarikännit
Re[2]: Counting sort
От: Кодт Россия  
Дата: 16.01.17 17:07
Оценка: 1 (1) +1
Здравствуйте, Qbit86, Вы писали:

Q>Может, предполагается, что надо использовать что-то типа сортировки подсчётом?


Не выйдет.
Для гистограммы над двордами нам потребуется 4 гига счётчиков, причём 40-битных (2 терабайта поделить на 2..16 байт в каждой строке). То есть, 20 гектар, если выжимать биты, и 32 гектара, если не выжимать.
А в нашем распоряжении только 2 гектара, то есть, по полбайта на счётчик.
Перекуём баги на фичи!
Отредактировано 16.01.2017 17:13 Кодт . Предыдущая версия .
Re[4]: Counting sort
От: LaptevVV Россия  
Дата: 16.01.17 17:59
Оценка: 3 (1)
Здравствуйте, night beast, Вы писали:

NB>Здравствуйте, LaptevVV, Вы писали:


M>>>>Как отсортировать файл 2TB с числами, размером в 32 бита, которые записаны в нём так, что каждое с новой строки, имея всего 2 ГБ оперативки??

Q>>>Может, предполагается, что надо использовать что-то типа сортировки подсчётом?
LVV>>Это — само собой, ибо числа целые.

NB>больно разрядность большая. много Cache Miss будет.

2 гига — это как раз для 32-битных знаковых целых подойдет.
Но есть еще поразрядная сортировка — прекрасно подойдет в данном слуучае
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Отсортировать большой файл
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.01.17 20:24
Оценка:
Здравствуйте, makdak, Вы писали:

M>А что, в Яндекс только сверхчеловеков берут только? вроде и студентов набирают.


Студенты у них должны уметь просыпаться среди ночи, и быстро поисковые запросы отрабатывать. Ну или там, такси искать, в зависимости от проекта. Тоже в своем роде сверхчеловеки.
Re[5]: Отсортировать большой файл
От: uzhas Ниоткуда  
Дата: 17.01.17 08:39
Оценка: 3 (1)
Здравствуйте, makdak, Вы писали:

M>вот:

M>
M>Имеется 1TB файл состящий из целых чисел (одно число на строку). Как отсортировать этот файл самым быстрым образом, если есть только 2GB памяти?
M>


что-то тут набросали ключевые слова и даже фамилии, а паззл лично у меня не сложился
давайте уточним задачу, а потом набросайте хоть примерную идею решения
1) есть текстовый файл размером 1TB (ну я бы сказал не более 1TB), в котором целые числа, умещающиеся в 32 бита перечислены в десятичном представлении. на каждой строке — одно число. между строками — newline (виндовый или линуксовый)
2) нужно в этом файле попереставлять строки так, чтобы числа были отсортированы (без ограничения общности, по возрастанию). то есть inplace
3) есть ограничение на рабочую память проги — 2GB. не забываем, что кроме огромного массива на 2GB могут быть еще рабочие переменные, так что огроменным массивом, который в точности занимает 2GB нам пользоваться нельзя. сколько там занимает рантайм нам побоку, считаем лишь рабочую память нашего алгоритма

не надо только отсылать к чтению томов Кнута, спасибо
Re[6]: Отсортировать большой файл
От: mogadanez Чехия  
Дата: 17.01.17 17:44
Оценка: 1 (1) +1
Здравствуйте, uzhas, Вы писали:

U>2) нужно в этом файле попереставлять строки так, чтобы числа были отсортированы (без ограничения общности, по возрастанию). то есть inplace


вот это условие откуда взялось?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.