![]() |
| ||
|
|
Новости |
Поиск |
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;
В результате получается очень большой цикл, на выполнение которого затрачивается очень много времени.
Подскажите, пожалуйста, алгоритм по которому можно организовать данный цикл быстрее.
admax_ (2010-08-10 11:26:00) [1]Понятно!
Всем большое спасибо за уделенное внимание!
Sha (2010-08-10 11:19:00) [2]> Поподробней, пожалуйста.
Можно, см. справку к TStringList.
admax_ (2010-08-10 11:17:00) [3]
> Тогда Strings загоняешь значения между раздетелем,а в Objects
> - номер строки, далее см. [1] или [3]
Поподробней, пожалуйста...
Sha (2010-08-10 11:14:00) [4]раздетель - это разделитель
Sha (2010-08-10 11:12:00) [5]> admax_ (10.08.10 11:02) [18]
> Именно некоторые.
Тогда Strings загоняешь значения между раздетелем,
а в Objects - номер строки, далее см. [1] или [3]
Юрий Зотов (2010-08-10 11:09:00) [6]
> admax_ (10.08.10 11:00) [17]
Hash и hash table - вещи несколько разные. Но в обоих случаях Delphi (как и любой другой язык) тут ни при чем. И если человек этого не понимает, то, значит, ему пока еще не следует высказывать свои оценки языков. Иначе получается известная басня Крылова.
Ega23 (2010-08-10 11:06:00) [7]
> Наверное под хэшем мы понимаем разные вещи. Для меня это
> некий массив, имеющий ключь и значение. Обьясните, пожалуйста,
> что здесь имеется ввиду.
http://ru.wikipedia.org/wiki/%D0%A5%D0%B5%D1%88-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F
brother (2010-08-10 11:05:00) [8]ТЗ я так и не понял...
Sha (2010-08-10 11:05:00) [9]> Наверное под хэшем мы понимаем разные вещи.
> Для меня это некий массив, имеющий ключь и значение.
Для остального мира это значение,
полученное в результате некоторых вычислений,
произведенных с данными.
admax_ (2010-08-10 11:02:00) [10]
> Это значит берем некоторые элементыили берем все элементы?
Именно некоторые.
admax_ (2010-08-10 11:00:00) [11]
> > Поподробней, пожалуйста...Что "поподробней"? Берёшь, считаешь
> хэш от твоих строк. Например crc32. И их уже после сравниваешь,
> что будет гораздо быстрее.
Наверное под хэшем мы понимаем разные вещи. Для меня это некий массив, имеющий ключь и значение. Обьясните, пожалуйста, что здесь имеется ввиду.
Sha (2010-08-10 10:59:00) [12]> берем элементы
Это значит берем некоторые элементы
или берем все элементы?
admax_ (2010-08-10 10:56:00) [13]
> Судьба остальных?Как это вяжется с > Необходимо построчно
> сравнить эти строки в каждом из файлов.
Извиняюсь, что изначально не так выразился. Я ведь дописал: "оесть, берем элементы (те что между ||) первой строки первого файла и сравниваем ее с элементыми каждой строки второго файла."
Sha (2010-08-10 10:55:00) [14]> admax_ (10.08.10 10:45) [8]
> Файл1:
> 2121|abc|c|2|hfg|fgh|7
> Берем элементы "abc" "hfg" "2121" первой строки первого файла...
Судьба остальных?
Как это вяжется с
> Необходимо построчно сравнить эти строки в каждом из файлов.
Ega23 (2010-08-10 10:53:00) [15]
> Поподробней, пожалуйста...
Что "поподробней"? Берёшь, считаешь хэш от твоих строк. Например crc32. И их уже после сравниваешь, что будет гораздо быстрее.
admax_ (2010-08-10 10:51:00) [16]
> > Или я где-то пропустил, что и здесь уже можно использовать
> > полноценные хеши.Н-да...
Поподробней, пожалуйста...
admax_ (2010-08-10 10:50:00) [17]
> диск меньше тыркать будет, что уже лучше
Попробовал загнать содержимое одного файла в массив строк, производительность не увеличилась.
Sha (2010-08-10 10:47:00) [18]> Юрий Зотов © (10.08.10 10:44) [7]
Скоро поколение пепси забудет, что батоны раньше ели.
Ega23 (2010-08-10 10:46:00) [19]
> Или я где-то пропустил, что и здесь уже можно использовать
> полноценные хеши.
Н-да...
admax_ (2010-08-10 10:45:00) [20]
> Если строки небольшие, их мало, или в них много повторений/совпадений1.
> переписать данные в array of string или TStringList2. сортировать3.
> сравнить
Опишу задачу более подробно.
Файл1:
2121|abc|c|2|hfg|fgh|7
2311|jhft|gfh|3|ddhfgcn|fghfgh|32
6543|hse|h|45|sfg|fghfg|2
8905|fgr|rte|342|fdg|fghf|43
...
Файл2:
2111|авп|c|2|hfg|fgh|7
2311|jhft|gfh|3|ddhfgcn|fghfgh|32
6543|hse|h|45|sfg|fghfg|2
6535|fgr|rte|342|fdg|fghf|43
...
Берем элементы "abc" "hfg" "2121" первой строки первого файла и ищем строку во втором файле, содержащую такие же элементы в соответствующих местах.