![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ведь всего-то 300 метров
tippa © (2010-06-19 10:21:00)Подскажите пожалуйта.
Имеется файл размером 300 мегабайт, состоящий из 30 миллионов строк, при попытке его загрузки в StringList выскакивает ошибка, мол нехватает памяти. Оперативы 1 гигабайт. Это нормально?
Как можно провести сортировку строк в таком файле?
RWolf (2010-06-19 19:12:00) [21]но вообще, для быстрого поиска надо использовать специально предназначенные для этого структуры, а именно — хэш-таблицы.
RWolf (2010-06-19 19:03:00) [22]
> tippa © (19.06.10 18:57) [12]
> Но в итоге эти два стринглиста опять не влезут в память.
я так думаю, слов в тексте не сто миллионов, отчего же не влезут.
tippa (2010-06-19 18:57:00) [23]да, одна строка - одно слово. На выходе должно получиться что-то вроде
1слово-n
2слово-m
3слово-k
...
где m, n и k - число вхождений.
Ну а если без сортировки и без Stringlista. Читаю весь файл в строку. Затем создаю два стинглиста, один для уникальных слов, второй - для числа вхождений. Начинаю перебирать слова, каждое новое слово добавляю в первый стринглист, а если оно там уже есть - увеличиваю соответствующий счетчик во втором стринглисте. Но в итоге эти два стринглиста опять не влезут в память. А если вместо стринглистов использовать 2 массива, или массивы так же как и стринглисты будут всю память занимать?
[true]trix (2010-06-19 18:46:00) [24]tippa, это уже реализовано почти. исправь код. работает оч быстро.
Алгоритм составления словаря всех уникальных слов встречающихся в текстовом файле.
По результатам тестирования: обработка файла объемом 3 Мб (уникальных слов ~63 тысячи)
занимает около 3 секунд. (Можно, конечно, и еще ускорить, но уж лениво сильно ;)
Размер архива: 4 073 байт
http://rouse.drkb.ru/files/dict.zip
RWolf (2010-06-19 18:28:00) [25]
> Anatoly Podgoretsky © (19.06.10 17:58) [9]
> строку придется делить на слова
судя по соотношению «размер файла — число строк», автор забыл уточнить, что на одну строку приходится только одно слово.
Anatoly Podgoretsky (2010-06-19 17:58:00) [26]
> задача - сделать статистический анализ этого файла, а именно
> подсчитать сколько раз каждое слово встречается в файле.
> Вот я и думал сначала отсортировать, а потом в один проход
> подсчитать число вхождений для каждого слова.
Тут уже получится на 30 000 000 строк, а много больше, поскольку по данному алгоритму строку придется делить на слова, Тут уже сразу можно вешаться. Это задача не для файла, а для базы
RWolf (2010-06-19 17:46:00) [27]а чтобы подсчитать число вхождений каждого слова в один проход, обязательно сортировать строки?
кстати, это будет уже второй проход.
tippa (2010-06-19 17:17:00) [28]задача - сделать статистический анализ этого файла, а именно подсчитать сколько раз каждое слово встречается в файле. Вот я и думал сначала отсортировать, а потом в один проход подсчитать число вхождений для каждого слова.
[true]TRIx (2010-06-19 16:56:00) [29]Даже 100 мб загруженной в программу может тратить 2 гига оперативы, если ты работаешь с этими строками. Тут не важно сколько у тебя памяти, вся память будет занята.
Palladin (2010-06-19 16:34:00) [30]
> Как можно провести сортировку строк в таком файле?
а тебе его весь обязательно в память читать? а вообще надо ли его сортировать? а вообще может уже сортированным формировать? а может вообще СУБД какую нибудь попользовать? как-бэ 30 миллионов это тебе не хухры мухры
Игорь Шевченко (2010-06-19 11:32:00) [31]
> Как можно провести сортировку строк в таком файле?
sort infile >outfile
Anatoly Podgoretsky (2010-06-19 11:18:00) [32]> tippa (19.06.2010 10:21:00) [0]
300 мб ерунда, а вот 30 000 000 строк это много, ведь даже для строки из
одного символа надо от 13 до 17 байт, кроме того память выделятся кратными
блоками. Но тебе не нужен StringList для сортировки. Примеры быстрой
сортировки поставляются вместе с Дельфи.
Дмитрий Белькевич (2010-06-19 10:46:00) [33]ээээ.... не стринглистом конечно же :) Когда же уже будет редактирование на форуме :)
Дмитрий Белькевич (2010-06-19 10:42:00) [34]О сколько нам открытий чудных...
Это нормально. Не стрингрдом единым жив сортировщик.