Найти - Пользователи
Полная версия: сортировка большого объема данных в текстовом файле
Начало » Python для новичков » сортировка большого объема данных в текстовом файле
1 2 3
esal
Собственно вопрос вот:
Есть текстовый файл. В нем содержится около 1 млрд чисел. Нужно отсортировать числа по убыванию. Кто нибудь может подсказать какими методами сортировки воспользоваться? Понятное дело, что такие кол-ва информации обычным способом не отсортируешь. Может нужно разбить файл на части, работать с ними, а потом эти результаты объединять как - то (метод merge подойдет?). У кого какие идеи?
appetito
esal
Собственно вопрос вот:
Есть текстовый файл. В нем содержится около 1 млрд чисел. Нужно отсортировать числа по убыванию. Кто нибудь может подсказать какими методами сортировки воспользоваться? Понятное дело, что такие кол-ва информации обычным способом не отсортируешь. Может нужно разбить файл на части, работать с ними, а потом эти результаты объединять как - то (метод merge подойдет?). У кого какие идеи?
если диапазон чисел ограничен и невелик по сравнению с их количеством - то “сортировка подсчетом”
esal
диапозон чисел от 0.01 до 1.0
а подробнее можно узнать об этом методе “сортировка подсчетом” ? Он точно подходит для такого огромного количества double чисел ?
o7412369815963
какова разрядность чисел, т.е. не более 2-х знаков после запятой?
если так, то все просто. числа варьируются от 1 до 100 (умножив на 100).
делаем массив arr = range(101), и за 1 проход просчитываем кол-во каждого числа в куче. arr += 1
в итоге весь миллиард будет зажат в 400 байт (или около того). по этому массиву легко вычислить значение по индексу.
o7412369815963
если разрядность неограниченная, то можно такой вариант: за 1 проход раскидываем все числа например на 1000 куч, и потом каждую кучу сортируем, в первую кучу числа от 0,01 до 0,02, вот 2-ю от 0,02- 0,03 и т.д.
tmt
Думаю вам стоит присмотреться к “Сортировке слиянием”
Zubchick
питончую сортировку слияниями :) http://algolist.manual.ru/sort/faq/q10.php

или сильно оптимизированный вариант, но более сложная реализация http://algolist.manual.ru/sort/faq/q13.php
esal
o7412369815963
какова разрядность чисел, т.е. не более 2-х знаков после запятой?
числа например могут быть такие 0.1785623711 (10 знаков после запятой)
sypper-pit
esal
самый простой способ обработка через if и отсортировать по кускам от 0,01-0,02 затем когда закончишь собирать куски , заливай всё в 1 фаил , есть правда еще альтернатива к примеру sql использовать
o7412369815963
Zubchick
питончую сортировку слияниями :) http://algolist.manual.ru/sort/faq/q10.php

или сильно оптимизированный вариант, но более сложная реализация http://algolist.manual.ru/sort/faq/q13.php
туфта и надувательство, эта ф-ия не делает ничего:
list-type mergesort (list-type L; int n)  { 
if (n = 1) return (L) else {
разделить L на две половины L1 и L2;
return (merge (mergesort (L1,n/2), mergesort (L2,n/2)) );
}
}
merge() - функция слияния.
и пример там не рабочий
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB