C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Работа с большими файлами, Что делать если список строк >100мб
Ден
  Отправлено: 08.11.2005, 22:57


Не зарегистрирован







Имеем CB 6, надо отсортировать список размером более 100мб примерно 2000000 записей в формате .txt
Гружу это дело в ListBox, открывает часа 3. Простенький код сортировки по выкидыванию дублей работает сутки.
Какие есть методы оптимизации. Что можете посоветовать ?
Уж очень долго, это на железе AMD64 3000+ 1гб оперативы

Grigoriy
Отправлено: 09.11.2005, 02:51


Мастер участка

Группа: Участник
Сообщений: 381



QUOTE (Ден @ 08/11/2005, 22:57)
Имеем CB 6, надо отсортировать список размером более 100мб примерно 2000000 записей в формате .txt
Гружу это дело в ListBox, открывает часа 3. Простенький код сортировки по выкидыванию дублей работает сутки.
Какие есть методы оптимизации. Что можете посоветовать ?
Уж очень долго, это на железе AMD64 3000+ 1гб оперативы

Методом быстрой сортировки
Vlad
Отправлено: 09.11.2005, 08:51


Машинист паровоза

Группа: Участник
Сообщений: 231



Во первых не нужно грузить в ListBox! Сначала сортируешь, потом только уже выводишь в ListBox.
Георгий
Отправлено: 09.11.2005, 09:19


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



кошмар...

используя fstream грузим файл в массив строк
CODE
std::vector<std::string> и сортируем std::sort
а визуальные компоненты (вроде Listbox) для обработки данных не очень приспособлены
Gedeon
Отправлено: 09.11.2005, 13:45


Ветеран

Группа: Модератор
Сообщений: 1742



а мы легких путей не ищем

Думать навеное запретили
(Смайлика не хватает для выражения эмоций) а ашер женится предлагал от безделия, попробовал — не помогло.
Георгий
Отправлено: 09.11.2005, 23:20


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



кстати, если стоит задача сделать программу отсеивающую дублирующиеся номера (например из телефонного справичника), то можно сберечь 99.9MB ОЗУ и на 99,9% уменьшить время работы алгиритма. к сожалению время загрузки данных в ОЗУ не удастся уменьшить.
Asher
Отправлено: 10.11.2005, 09:46


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.

QUOTE
кстати, если стоит задача сделать программу отсеивающую дублирующиеся номера (например из телефонного справичника), то можно сберечь 99.9MB ОЗУ и на 99,9% уменьшить время работы алгиритма

'Жемчужины программирования" рулят biggrin.gif

QUOTE
ашер женится предлагал от безделия, попробовал — не помогло.

Это же только первая стадия к просветлению. wink.gif
Теперь надо заводить ребенка. biggrin.gif
Gedeon
Отправлено: 10.11.2005, 11:05


Ветеран

Группа: Модератор
Сообщений: 1742



Тоже не помогает biggrin.gif
Asher
Отправлено: 10.11.2005, 11:19


Мастер участка

Группа: Модератор
Сообщений: 550



QUOTE
Тоже не помогает

Даже не знаю что и сказать.
Наверное только одно — Повезло тебе. biggrin.gif biggrin.gif biggrin.gif
Георгий
Отправлено: 11.11.2005, 00:47


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



QUOTE (Asher @ 10/11/2005, 10:46)
QUOTE
кстати, если стоит задача сделать программу отсеивающую дублирующиеся номера (например из телефонного справичника), то можно сберечь 99.9MB ОЗУ и на 99,9% уменьшить время работы алгиритма

'Жемчужины программирования" рулят biggrin.gif

очень рулят — чуть больше года назад, под впечатлением этой книжки, сделал fifo буфер состоящий из уникальных элементов с постоянным временем вставки, удаления, проверки наличия элемента — совместил хэш, кольцевой список и массив biggrin.gif

кстати, Ден, посмотри "Жемчужины программирования" в ней очень эффективно решена твоя задача
Ден
Отправлено: 11.11.2005, 03:01


Не зарегистрирован







QUOTE (Георгий @ 09/11/2005, 09:19)
кошмар...

используя fstream грузим файл в массив строк
CODE
std::vector<std::string> и сортируем std::sort
а визуальные компоненты (вроде Listbox) для обработки данных не очень приспособлены

Не то чтобы я совсем не умел программировать, както к визульным привязался.
Но вот с таким положением дел не знаком std::vector , может кто подскажет где пример использования этих векторов можно посмотреть ?
vvoid
Отправлено: 11.11.2005, 14:14


Машинист паровоза

Группа: Участник
Сообщений: 171



Ребят, а где взять эти ваши "Жемчужини..." ?
Asher
Отправлено: 11.11.2005, 15:24


Мастер участка

Группа: Модератор
Сообщений: 550



Жемчужины программирования. 2-е издание.
Дж.Бентли
ISBN: 5-318-00715-5
Библиографическая информация: Спб.: Питер, 2002. — 272с.

У меня бумажная. Брал в книжном. wink.gif
vvoid
Отправлено: 11.11.2005, 17:06


Машинист паровоза

Группа: Участник
Сообщений: 171



Нашел электронную, но на английском, если кому надо — скажите, куда её деть.
Asher
Отправлено: 11.11.2005, 17:32


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.
Вот на русском.
Жемчужины программирования
Нашел навскидку, качество сканирования не смотрел.
Примеры лучше скачать с сайта издательства. Они там свободно лежат.
vvoid
Отправлено: 11.11.2005, 19:40


Машинист паровоза

Группа: Участник
Сообщений: 171



Классно!!! Похоже книга там совсем даже и не отсканеная, а в нормальном html smile.gif. Елси так — вытяну, и попробую склепать толковый *.chm.
Получится — поделюсь с желающими smile.gif

Вернуться в Вопросы программирования в C++Builder