Показать сообщение отдельно
  #5  
Старый 11.11.2013, 18:26
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Если всё не упирается в долгое чтение/запись то можно оптимизировать следующим образом.
Во-первых список в котором ищется совпадение нужно либо отсортировать, либо вместо TStringList использовать что нибудь вроде THashedStringList. Тогда получим такое приращение: В несортированном списке из 20000 элементов прийдётся для поиска каждого из 2млн элементов выполнить в худшем случае 20000 сравнений или в среднем 10000 сравнений. В сортированном же списке нужно в худшем случае 15 сравнений или в среднем всего 8 сравнений. Если же использовать хэш-таблицу то при незначительном количестве коллизий нужно будет примерно 1-3 сравнения.

Во-вторых вместо того чтобы устраивать цикл из 2млн повторений в котором искать элемент из списка в 20000 элементов стоит по возможности переделать наоборот - устроить цикл из 20000 повторений в котором искать элементы из списка размером в 2млн (но сортированном или хэшированном).
Ответить с цитированием