Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2017-12-26 17:09:52 ЛС | профиль | цитата
3042 писал(а):
А как же это:
А это мое утверждение, оно как бы -- асимптотическое.
Вариант оригинала (и Ваш - тоже) имеет асимптотику (предположим, для файла "без повторов") O(N^2), а "делением пополам" - O(N*ln(N)). Результат сравнения этих асимптотик достаточно очевиден...
В Вашем случае ускорение получается потому, что отсутствует операция динамического создания/уничтожения копии строки. Это динамическое созидание делает TStrList.Items. А TStrList.IndexOf просто сравнивает строки, как разыменованные PChar-ы.
Так мне показалось...

3042 писал(а):
Ну, вот сделал для примера разные файлы по 10 000 строк
В принципе -- разумно... Без повторов, по одному повтору, очень-очень много повторов.

3042 писал(а):
какой алгоритм следует оставить в компоненте?
Это требует обсуждения... Нет обратной совместимости: массив с нижней точки теперь уже отсортирован. И пока только для строк.
Если на Ваших тестах "быстрее по-любому", тогда эта модификация разумна. Если "обратная несовместимость" не напрягает...
И, конечно же, во многом разумность теряется, если не сделать аналогичное для Integer и Real.



В общем, возиться надо.
карма: 9

0
Редактировалось 4 раз(а), последний 2017-12-26 17:12:20