Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ускорение цикла


Страницы:   1 2

admax_ ©   (2010-08-10 10:17:00) 

Добрый день, уважаемые форумчане!
Помогите, пожалуйста, в следующем вопросе.
Есть два файла структуры типа:
123|qwe|qwe|sdsf|dsfsf|1234...
Они содержат очень много строк.
Необходимо построчно сравнить эти строки в каждом из файлов.
Тоесть, берем  элементы (те что между ||) первой строки первого файла и сравниваем ее с элементыми каждой строки второго файла. Далее берем элементы 2 строки первого файла и сравниваем ее с элементами каждой строки второго файла...

While not EOF(f1) do
begin
 ReadLn(f1,st1);
 ...
While not EOF(f2) do
 begin
  ReadLn(f2,st2);
  ...
 end;
 end;

В результате получается очень большой цикл, на выполнение которого затрачивается очень много времени.
Подскажите, пожалуйста, алгоритм по которому можно организовать данный цикл быстрее.


Юрий Зотов   (2010-08-10 10:44:00) [21]

LOL


admax_   (2010-08-10 10:40:00) [22]


> Иначе можно попробовать использовать хеши вместо строк.

Хеши это конечно хорошо, но речи идеть о Делфи ;) Или я где-то пропустил, что и здесь уже можно использовать полноценные хеши.


12   (2010-08-10 10:30:00) [23]


> > Загрузить в списки, отсортировать, а потом сравнивать.
>
>
> В какие списки? И как это повлияет на производительность,
>  если к-во строк останется неизменным.

диск меньше тыркать будет, что уже лучше

а вообще,  наверное так:
Сначала в обоих файлах сделать преобразование элементов в числа
например, /123/ - три байта код символа 1 join код символа 2 join код символа 3
(если возможно, конечно)
и сравнивать integer числа


Sha   (2010-08-10 10:30:00) [24]

> admax_   (10.08.10 10:24) [2]
> В какие списки?
> И как это повлияет на производительность, если к-во строк останется неизменным.

Количество сравнений посчитай сначала.


Sha   (2010-08-10 10:28:00) [25]

Если строки небольшие, их мало, или в них много повторений/совпадений
1. переписать данные в array of string или TStringList
2. сортировать
3. сравнить
Иначе можно попробовать использовать хеши вместо строк.


admax_   (2010-08-10 10:24:00) [26]


> Загрузить в списки, отсортировать, а потом сравнивать.

В какие списки? И как это повлияет на производительность, если к-во строк останется неизменным.


Ega23   (2010-08-10 10:19:00) [27]


> В результате получается очень большой цикл, на выполнение
> которого затрачивается очень много времени.
> Подскажите, пожалуйста, алгоритм по которому можно организовать
> данный цикл быстрее.


Загрузить в списки, отсортировать, а потом сравнивать.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо