Заблокирован
|
|
1 | |
Наиболее быстрый способ сортировки файла в 1 Тб при ограниченном объёме оперативной памяти29.07.2015, 16:30. Показов 25251. Ответов 85
Метки нет (Все метки)
Привет!
Какой есть наиболее быстрый способ сортировки файла, содержащего int-ы (по одному int-у на каждой строчке), размером в 1 террабайт, если на компе, к примеру, доступно всего 2 гб оперативки ... ? Ну файл с нитами типа: Добавлено через 1 час 11 минут Важная тема теряется... Up! Добавлено через 4 часа 45 минут Ну так что, никто не подскажет, как отсортировать 1 гиг в файле?
0
|
29.07.2015, 16:30 | |
Ответы с готовыми решениями:
85
Наиболее быстрый способ склеивания фрагментов файла Наиболее быстрый способ записи в консоль Наиболее быстрый способ забрать данные из html Наиболее быстрый способ работы с файлом Excel (около 20000 строк) |
2 / 2 / 0
Регистрация: 21.01.2015
Сообщений: 90
|
|
30.07.2015, 15:29 | 61 |
Короче идея такая: создаём переменную, где хранится максимальное значение входного файла (typename max_num например), создаём массив , который заполняет все 2 гига (от 0 до N).
Затем обходим весь входной файл и заносим кол-во соответствующих значений в массив (т.е. значению 0 соответствует нулевой элемент. Допустим нулей у нас 100, тогда заносим туда 100), при первом обходе заносим максимальное число в max_num. Затем записываем в выходной файл последовательно соответствующие значения столько раз, сколько указано в счётчике в массиве. Потом обнуляем массив и совершаем ещё один проход, но теперь ячейки соответствуют значениям от N+1 до 2*N+1. Записываем в выходной файл и т.д. И так до тех пор, пока последний элемент массива не будет соответствовать max_num.
0
|
1375 / 519 / 72
Регистрация: 21.07.2015
Сообщений: 1,304
|
|
30.07.2015, 15:37 | 62 |
Ага, и на этом этапе мы уже записали 1 Тб памяти о чем я и сказал...
Добавлено через 4 минуты Niko Demin, уже предлагалось. Добавлено через 2 минуты Да и еще плюсом операция чтения 1Тб и записи 1Тб. Причем чтение будет производится последовательно из разных участков диска, что тоже не прибавит скорости...
0
|
Заблокирован
|
|
30.07.2015, 15:42 [ТС] | 63 |
Ну где мне может потребоваться сортировка террабайтного файла? Вопрос этого треда был из одного теста на одну вакансию и не более... Вот сейчас на работе сижу и пишу код одной системы управления предприятием на Qt и в ус не дую, где мне тут потребуются всякие студентческие выпендрёжные хитрости
Согласен. Но в предыдущем способе было необходимо 16-и кратное чтение всего файла в 1 тб, что наверное медленнее...
0
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
30.07.2015, 15:47 | 64 |
Речь о поразрядной сортировке и слиянии. Откуда ты взял сортировку слиянием?
Если кому-то смешно, то пусть подучит матчасть Я уже про все это написал. Прочитай внимательно еще раз.
0
|
1375 / 519 / 72
Регистрация: 21.07.2015
Сообщений: 1,304
|
|
30.07.2015, 15:56 | 65 |
Хорошо.
Мне не смешно, но вот как можно отсортировать массив произвольных (путь даже 32хбитовых) чисел за O(N) и ограничиться 2 Гб памяти (без лишних шуршаний диском) мне непонятно.
0
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
30.07.2015, 15:58 | 66 |
Можно, потому что в их основе не лежат сравнения и дерево решений, которые ограничивают нас асимптотикой n * lоg n.
https://en.wikipedia.org/wiki/Sorting_algorithm - найди раздел Non-comparison sorts
0
|
1375 / 519 / 72
Регистрация: 21.07.2015
Сообщений: 1,304
|
|
30.07.2015, 16:24 | 67 |
А конкретнее, какой из них подойдет для данной задачи?
Добавлено через 14 минут Зато они требуют много дополнительной памяти. Есть и другие варианты, но они хорошо работают только на определенных данных...
0
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
30.07.2015, 16:43 | 69 |
Я упоминал radix sort.
Почему много? Есть которые больше, есть которые меньше... А например в radix sort зависит от того, в какой системе счисления ты представишь числа. Добавлено через 1 минуту Э, а ты вообще чего ждешь, уже давно бы написал оба варианта и посмотрел Добавлено через 2 минуты Кстати по поводу диска - а фиг там его знает, может у нас вообще RAID SSD
0
|
70 / 64 / 40
Регистрация: 17.02.2014
Сообщений: 265
|
|
30.07.2015, 18:02 | 71 |
Хмм , а что если использовать дерево, например RB ? Обход дерева можно замутить с помощью стека без рекурсии.Тогда схема достаточна проста будет файл->память->дерево.
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
30.07.2015, 18:06 | 72 |
Ну, терабайтного - не терабайтного, но давайте согласимся, что о сортировке слиянием таки надо иметь представление.
0
|
Заблокирован
|
|
30.07.2015, 18:20 [ТС] | 74 |
Конкретней, на примере и с учётом наших условий - файл размером в 1 Тб с 32-х битными интами, размер оперативки - 2 Гб.
Зачем? Я запостил на форум, мне сказали, что такая сортировка есть, в википедии посмторел, как она реализована - всё Вот видишь, в принципе, тут даже этого знать не обязательно и для того, что бы засорят мозг, достаточно знать, что вообще есть какая - то сортировка и что можно что - то отсортировать, всё остальное несложно узнать на в интернете
0
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
30.07.2015, 18:29 | 75 |
Неоднозачно? А какие варианты неоднозначности? Все равно сложность линейная. А как насчет того, что есть модификации к увеличению локальности кэша и распараллеливанию?
https://ieeexplore.ieee.org/xp... ber=994310 http://dl.acm.org/citation.cfm?id=377792.377816
0
|
30.07.2015, 18:33 | 76 |
Повлияет только на скорость. Проецируемые файлы решают эту задачу, как на первой странице.
Хочу напомнить всем любителям метода "Считаем в память, а потом..." что придётся оптимизировать доступ к памяти, учитывать кэш-линии и прочее. Для совсем озадаченных - CUDA. Даже есть уже готовые библиотеки для параллельной сортировки, только данные успевай подавать.
0
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
30.07.2015, 18:40 | 77 |
shmkv, кстати как насчет того, что числа не факт, что 32битные? А если 64битные, то тогда что?
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
30.07.2015, 18:42 | 78 |
Не согласен. Программист творит с помощью интуиции. А чтобы она работала, необходимо в подсознание загрузить необходимую информацию.
Собственно, специалист - это человек с загруженной в подсознание специальной информацией и с опытом оперирования ею на сознательном и подсознательном уровне.
0
|
Заблокирован
|
|
30.07.2015, 20:15 [ТС] | 79 |
Да, но это не кроссово. Да и потом, если честно, я не понимаю, что из себя конкретно представляют это проецируемые файлы... Почему они так мало памяти занимают... Может пояснишь?
В нашем случае, камнем предкновения будет харддиск, а не процессор, так что GPGPU и не потребуется... Интуиция - это мнимое понятие, фактический в биологических нейронных сетях головного мозга её нет, есть только опыт, то есть память. А для того, что бы импульс действия прошёл туда, куда надо, необязательно пускать его по дебрям подробностей, достаточно достичь цели, а подробности можно будет вытащить отдельно позже. Говоря языком программирования, достаточно хедер файлов, с описанием своих знаний, а реализацию можно посмотреть в интернете
0
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
30.07.2015, 22:13 | 80 |
Диапазон адресов, чтение/запись в которые эквивалентна чтению/записи с диска. То есть, никакой ускоряющей магии там не происходит, просто более понтовый способ вызвать fread/fwrite. Со всеми плюсами и минусами использования fread/fwrite.
0
|
30.07.2015, 22:13 | |
30.07.2015, 22:13 | |
Помогаю со студенческими работами здесь
80
Наиболее быстрый способ сравнения двух экземпляров структур на предмет одинаковости их полей Какой способ сортировки одномерного массива самый быстрый? Memory shift или самый быстрый способ перемещения блока памяти Наиболее рациональный способ распределения памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |