Другой вопрос о SO поднял возможности на некоторых языках для хеширования строк, чтобы они могли быстро искать их в таблице. Два примера этого - словарь <> в .NET и структура хранения {} в Python. Другие языки, безусловно, поддерживают такой механизм. У C ++ есть своя карта, у LISP есть эквивалент, как и у большинства других современных языков.
В ответах на вопрос утверждалось, что алгоритмы хеширования в строках могут выполняться в постоянном времени с одним членом SO, который имеет 25-летний опыт программирования, утверждая, что все можно хэшировать в постоянном времени. Я лично утверждаю, что это не так, если только ваше конкретное приложение не ограничивает длину строки. Это означает, что некоторая константа K будет определять максимальную длину строки.
Я знаком с алгоритмом Рабина-Карпа, который использует хэш-функцию для своей работы, но этот алгоритм не диктует использование конкретной хеш-функции, и автор предложил O (m), где m - это длина строки хеширования.
Я вижу некоторые другие страницы, такие как эта (http://www.cse.yorku.ca/~oz/hash.html)), которые отображают некоторые алгоритмы хеширования, но кажется, что каждая из них выполняет итерацию по всей длине строки, чтобы получить свое значение.
Из моего сравнительно ограниченного прочтения на эту тему выяснилось, что большинство ассоциативных массивов для строковых типов фактически создаются с использованием хеш-функции, которая работает с каким-то деревом под капотом. Это может быть дерево AVL или красное / черное дерево, которое указывает на расположение элемента значения в паре ключ / значение.
Даже при такой древовидной структуре, если мы хотим остаться в порядке тета (log (n)), а n - это число элементов в дереве, нам нужен алгоритм хеширования с постоянным временем. В противном случае у нас есть аддитивное наказание итерации по строке. Даже если theta (m) затмевается тэтой (log (n)) для индексов, содержащих много строк, мы не можем игнорировать это, если мы находимся в такой области, что тексты, по которым мы ищем, будут очень большими.
Мне известно, что суффиксные деревья / массивы и Aho-Corasick могут сократить поиск до тета (m) для увеличения затрат в памяти, но я специально спрашиваю, существует ли метод хеширования с постоянным временем для строк произвольных длины, заявленные другим членом SO.
Спасибо.