Я пытаюсь проверить, идентичны ли две строки как можно быстрее.Могу ли я защитить себя от коллизий хешей, не сравнивая также всю строку?
У меня есть кэш элементов, которые имеют строковые ключи.Я храню хэш строки, длину строки и саму строку.(В настоящее время я использую djb2 для генерации хэша.)
Чтобы проверить, соответствует ли входная строка элементу в кэше, я вычисляю хэш ввода и сравниваю егок сохраненному хешу.Если это совпадает, я сравниваю длину ввода (которую я получил как побочный эффект вычисления хэша) с сохраненной длиной.Наконец, если это совпадает, я делаю полное сравнение строк ввода и сохраненной строки.
Нужно ли проводить полное сравнение строк?Например, существует ли алгоритм хеширования строк, который может математически гарантировать, что никакие две строки одинаковой длины не будут генерировать одинаковый хэш?Если нет, может ли алгоритм гарантировать, что две разные строки одинаковой длины будут генерировать разные хеш-коды, если какой-либо из первых N символов будет отличаться?
В принципе, любая схема сравнения строк, которая обеспечивает производительность O (1), когдастроки отличаются, но лучше, чем производительность O (n), когда они совпадают, было бы улучшением по сравнению с тем, что я делаю сейчас.