|
Заблокирован
|
||
Наиболее быстрый способ сортировки файла в 1 Тб при ограниченном объёме оперативной памяти29.07.2015, 16:30. Показов 30781. Ответов 85
Метки нет (Все метки)
Привет!
Какой есть наиболее быстрый способ сортировки файла, содержащего int-ы (по одному int-у на каждой строчке), размером в 1 террабайт, если на компе, к примеру, доступно всего 2 гб оперативки ... ? Ну файл с нитами типа:
![]() ![]() Добавлено через 1 час 11 минут Важная тема теряется... Up! ![]() Добавлено через 4 часа 45 минут Ну так что, никто не подскажет, как отсортировать 1 гиг в файле?
0
|
||
| 29.07.2015, 16:30 | |
|
Ответы с готовыми решениями:
85
Наиболее быстрый способ склеивания фрагментов файла Наиболее быстрый способ записи в консоль Наиболее быстрый способ забрать данные из html |
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|
| 30.07.2015, 08:20 | |
|
Инты какие? Если 32-битовые, то читаем исходный файл и одним проходом строим табличку "сколько раз встречаются числа от 0 до 2^28-1" (счетчики в табличке 64-битовые). Как раз два гига и выжираем. На основе таблицы строим выходной файл. Алгоритм повторяем с диапазонами 2^28-(2^28)*2-1, (2^28)*2-(2^28)*3-1... Итого, укладываемся в шестнадцать проходов.
3
|
|
|
56 / 54 / 33
Регистрация: 05.11.2014
Сообщений: 259
|
|
| 30.07.2015, 09:16 | |
|
Если в задаче нет ограничения на размер временных файлов и время выполнения, почему бы просто не работать с ними как с оперативной памятью?
1. Перегнать все числа в бинарный файл 2. Любым удобным вариантом сортировки генерировать новый файл на каждом шаге, а предыдущий удалять. 3. Преобразовать обратно в текстовый со строчным разделением. ОЗУ будет играть роль буфера, для ускорения процесса. Считал 2 ГБ значений, провел сравнения среди них, считал следующие.
1
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 30.07.2015, 09:22 | ||
|
1) Попытка прочитать с диска один байт влечет за собой чтение 512 байтового сектора. А то целого кластера таких секторов. И скорость работы алгоритма падает на порядки. 2) Это чтение еще и происходит на порядки медленнее чем из памяти. И скорость работы алгоритма падает еще на несколько порядков. В итоге алгоритм может работать аккурат до новогодних праздников. Оно нам надо?
1
|
||
|
Заблокирован
|
|||||
| 30.07.2015, 10:06 [ТС] | |||||
|
You have a 1TB file containing integers (one number per line). You have 2GB of memory. How do you sort this file as fast as possible? не ясно, ну пусть будут 32-х битные... Нельзя ли поподробнее: Но зачем чёрт возьми?Допустим, исходный файл: 3 56564 8 5556 8 3 5 Получаем: 3 - встречается 2 раза 56564 - встречается 1 раз 8 - встречается 2 раза 5556 - встречается 1 раз Ну и что это даёт?
0
|
|||||
|
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
|
||
| 30.07.2015, 11:21 | ||
|
мы можем для каждой возможной цифры подчитать сколько раз она встречается: [0, 2, 1, 2, 1, 3, 1, 0, 1, 1] вот на базе такой таблицы отсортированный массив восстанавливается элементарно. Но это только для случая, когда значения ограничены. Добавлено через 1 минуту Этот способ будет работать быстрее моего варианта, но нужно удостовериться, что инты ограничены.
1
|
||
|
Заблокирован
|
||
| 30.07.2015, 11:33 [ТС] | ||
|
А если в исходном террабайтном файле будут все инты одинаковые? Добавлено через 3 минуты Ааа ердить раскодрить, кажется меня осенило. Мы ж как бы восстанавливаем не исходный массив (а то бы это был наикрутейший способ архивирования ), а отсортированный массив ...
0
|
||
|
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
|
||||||
| 30.07.2015, 11:42 | ||||||
|
ОМГ. Задача-то школьная.
1
|
||||||
|
Заблокирован
|
|
| 30.07.2015, 11:43 [ТС] | |
|
Так, ну вот допустим, int-ы 32-х битные. Но как быть со счётчиками, всё в памяти я так полагаю опять же не удержишь ...
В случае 32-х битный интов, у нас значения от 0 до 2^32, то есть до 4294967296. В 1 террабайте могут быть и все одинаковые числа, так что максимальное кол-во повторов: 1 Тб = 1099511627776 байт 1 int нынче = 4 байта. максимальное кол-во int-ов в исходном файле: 1099511627776 / 4 = 274877906944 Для записи такого числа, нам необходима 64-х битная переменная. То есть фактический, для таблицы повторов нам нужно: 8 байт * 4294967296 (кол-во возможных цифр в 32-х битных интах) = 34359738368 байт = 32 гигабайта ... Вот и приплыли ...
0
|
|
|
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
|
|
| 30.07.2015, 11:46 | |
|
1
|
|
|
Заблокирован
|
|
| 30.07.2015, 11:50 [ТС] | |
|
Ну я понял, что нужно будет просто добирать до двух гигов и свопить на хард, потом опять и опять...
А потом эти файлы по очереди читать и восстанавливать отсортированный массив... Но скорость тут будет конечно... Ведь ты когда анализируешь исходный файл, там числа могут попадаться совершенно из разных диапазонов и тут, либо 32/2 = 16 раз пробегаться по всему файлу, либо мерджить файлы эти мелкие...
0
|
|
|
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
|
|
| 30.07.2015, 11:53 | |
|
1
|
|
|
Заблокирован
|
||
| 30.07.2015, 11:56 [ТС] | ||
|
Единственное что, как на ваш взгляд, это самый быстрый способ?
0
|
||
|
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
|
|
| 30.07.2015, 12:02 | |
|
0
|
|
|
Заблокирован
|
|
| 30.07.2015, 12:11 [ТС] | |
|
0
|
|
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
| 30.07.2015, 13:04 | |
|
Действительно, всего лишь 16 проходов... Итого читаем 16 Тб и пишем 1 Тб.
А в другом варианте - читаем 2 Тб и пишем 2 Тб (пусть и не совсем последовательно, но все равно блоками). И что быстрее? 16 проходов?
0
|
|
|
Заблокирован
|
||
| 30.07.2015, 13:12 [ТС] | ||
|
0
|
||
|
60 / 11 / 4
Регистрация: 09.09.2014
Сообщений: 183
|
|||
| 30.07.2015, 13:17 | |||
|
Второй проход 1 Тб: считать из блоков (1024 файловых стрима) с выборкой (очередное наименьшее значение из 1024) 1Тб и записать в 1 Тб Итого:
0
|
|||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
||
| 30.07.2015, 13:23 | ||
|
1) Читаем исходный файл пачками в 2 Гб. Сразу сортируем (сортировка быстрая, за О(n), как раз методом подсчета например). Пишем отсортированную пачку в файл. Получаем N=1Тб/2Гб файлов. 2) Одновременно читаем из N файлов пачками так, чтобы у нас были постоянно заняты 2 Гб. Сразу их сливаем и пишем в выходной файл. Все. Добавлено через 4 минуты Butt-Head, ты вообще представляешь, сколько времени займет 16 проходов 1 Тб файла на машине с 2 Гб ОЗУ? Так вот - просто дофига и больше. У нас в задаче узкое место совсем не сортировка, а чтение и запись с диска.
0
|
||
|
60 / 11 / 4
Регистрация: 09.09.2014
Сообщений: 183
|
||||
| 30.07.2015, 13:35 | ||||
|
Добавлено через 2 минуты
0
|
||||
|
Заблокирован
|
||||
| 30.07.2015, 13:38 [ТС] | ||||
0
|
||||
| 30.07.2015, 13:38 | |
|
Наиболее быстрый способ сравнения двух экземпляров структур на предмет одинаковости их полей Какой способ сортировки одномерного массива самый быстрый?
Наиболее рациональный способ распределения памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|