@sadgod

Как сравнить несколько строчных массивов?

Нужно сравнить строчные массивы (количество строк более 10000) на различия.
Количество массивов более двух.
Есть варианты как это сделать наиболее быстро?
Желательно на Delphi.
  • Вопрос задан
  • 369 просмотров
Решения вопроса 1
@zedxxx
1. Вычислить хэши строк во всех массивах при помощи какой-нибудь быстрой функции, чтобы давала не очень большое число коллизий и на выходе был Integer или Int64, для скорости сравнения.

2. Далее уже сравнивать эти хэши, причём, при совпадении нужно выполнять полное сравнение строк. Заодно можно подсчитывать была коллизия или нет. Сравнивая число коллизий которые даёт выбранная хэш функция и время хэширования строк, можно будет сделать вывод о приемлемости той или иной функции.

В качестве хэш функции можно взять crc32с из фреймворка mORMot, говорят что она оптимизированная и очень быстрая: blog.synopse.info/post/2014/05/25/New-crc32c%28%29... Она у них используется для хэш таблиц по-умолчанию.

Вот тут есть сравнительные тесты: https://www.delphitools.info/2014/08/25/string-has...

Ещё можно взять библиотеку от гугла - CityHash она умеет считать хэши 32/64/128/256 бит. Тоже, говорят, быстрая. Используем для 64-битных хэшей, вот тут есть бинарники и обёртка для Delphi: https://bitbucket.org/sas_team/cityhash/src/7c7c73...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы