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;

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


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" первой строки первого файла и ищем строку во втором файле, содержащую такие же элементы в соответствующих местах.


Страницы:   1 2

Наверх

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