В идеале, хеш-таблица O(1)
.Проблема в том, что если два ключа не равны, но они приводят к одному и тому же хешу.
Например, представьте строки "это были лучшие времена, это были худшие времена" и «Зеленые яйца и ветчина» оба привели к значению хеша 123
.
Когда вставлена первая строка, она помещается в сегмент 123. Когда вставляется вторая строка,было бы видеть, что значение уже существует для сегмента 123
.Затем он сравнил бы новое значение с существующим значением и увидел бы, что они не равны.В этом случае для этого ключа создается массив или связанный список.На этом этапе извлечение этого значения становится O(n)
, поскольку хеш-таблица должна перебирать каждое значение в этом сегменте, чтобы найти желаемое.
По этой причине при использовании хеш-таблицы важно использоватьключ с действительно хорошей хэш-функцией, которая работает быстро и не всегда приводит к дублированию значений для различных объектов.
Имеет смысл?