![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ускорение цикла
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]
> В результате получается очень большой цикл, на выполнение
> которого затрачивается очень много времени.
> Подскажите, пожалуйста, алгоритм по которому можно организовать
> данный цикл быстрее.
Загрузить в списки, отсортировать, а потом сравнивать.