C ++ Qt WordCount и большие наборы данных - PullRequest
0 голосов
/ 08 декабря 2010

Я хочу считать слова вхождения в набор простых текстовых файлов. Прямо как здесь http://doc.trolltech.com/4.5/qtconcurrent-wordcount-main-cpp.html

Проблема в том, что мне нужно обработать очень большое количество простых текстовых файлов - поэтому мой результат, сохраненный в QMap, не помещается в памяти.

Я погуглил алгоритм сортировки слиянием с использованием внешней памяти (на основе файлов), но я слишком ленив, чтобы реализовать себя. Поэтому я хочу разделить набор результатов по частям, чтобы уместить каждый из них в память. Затем сохраните эти части в файлах на диске. Затем вызовите магическую функцию mergeSort (QList, result_file) и получите окончательный результат в result_file.

Кто-нибудь знает Qt-совместимую реализацию этого алгоритма?

Короче, я ищу питонов heapq.merge (http://docs.python.org/library/heapq.html#heapq.merge) аналог, но для контейнеров Qt.

Ответы [ 2 ]

0 голосов
/ 08 декабря 2010

Я полагаю, что карта содержит связь между словом и количеством вхождений. В таком случае, почему вы говорите, что у вас такое значительное потребление памяти? Сколько разных слов и форм у вас может быть и каково среднее потребление памяти на одно слово?

Учитывая 1 000 000 слов с потреблением 1 КБ памяти на слово (которое включает в себя текст слова, конкретное хранилище QMap), это приведет к (приблизительно) 1 ГБ памяти, что ... кажется, не так уж много я.

0 голосов
/ 08 декабря 2010

Возможно, вы захотите проверить это: http://stxxl.sourceforge.net/

Это не совсем то, что вы ищете (хотя достаточно близко), но я думаю, вы не найдете именно то, что вы хотите, работая со списками Qt.Поскольку вы реализуете алгоритм создания этого списка, изменение его типа не должно быть проблемой.Насколько я помню, в этом списке вы можете использовать стандартные алгоритмы сортировки stl.Единственной проблемой остается преформанс.

...