Хэш таблица не будет иметь вообще взаимно-однозначное отображение между а значение и хэш. Ожидается, что хеш-таблица столкнется. То есть ожидается, что домен хеш-функции будет больше, чем диапазон (т. Е. Значение хэш-функции). Однако общая идея заключается в том, что вы придумываете хеш-функцию, где вероятность столкновения резко мала. Если ваша хеш-функция однородна, т. Е. Если вы ее сконструировали так, чтобы каждое возможное хэш-значение имело ту же вероятность генерации, то вы можете минимизировать конфликты таким образом.
Получение столкновения - это не конец света. Это означает, что вам нужно искать список значений для этого хэша. Если ваша хеширующая функция хороша, в целом ваша производительность для поиска должна быть O (1).
Генерация функций хэширования является самостоятельным предметом, и ответа нет. Но хорошим местом для начала может быть работа с побитовыми представлениями символов в строке и выполнение на них каких-то операций свертки (поворот, сдвиг, XOR). Вы можете выполнить их каким-то образом на основе некоторого начального значения семени, а затем использовать вывод первого шага хеширования в качестве семени для следующего шага. Таким образом, вы можете в конечном итоге увеличить эффект от свертки.
Например, вы получите символ A
, который равен 41
в шестнадцатеричном формате или 0100 0001
в двоичном формате. Вы можете обозначить каждый бит для обозначения некоторой операции (возможно, бит 0 является ROR, когда он равен 0, а ROL - 1, бит 1 - OR, когда он равен 0, а XOR, когда он равен 1 и т. Д.), , Вы даже можете решить, сколько сверток вы хотите сделать, основываясь на самом значении. Например, вы могли бы сказать, что нижний полубайт указывает, сколько правильного поворота вы сделаете, а верхний полубайт определяет, сколько вы будете вращать влево. Затем, как только вы получите окончательное значение, вы будете использовать это как семя для следующего символа. Это всего лишь некоторые идеи. Используйте свое воображение, чтобы узнать, что вы получаете!
Вы можете использовать положение букв в словах для улучшения хеш-функции. – Wazaaaap
его нормально, если несколько слов создают один и тот же хэш. хеш не должен быть уникальным.на самом деле он не может быть уникальным, если хэширование данных больше, чем хеш. хэш определяет, в каком ведре хранится ключ, но тогда проверка равенства выполняется, чтобы быть уверенным, что – slipperyseal
, если вы удваиваете размер массива каждый раз при добавлении нового ключа, добавление 32 ключей приведет к массиву в 4 миллиарда записей в ширину :/- возможно, они означают двойной размер каждый раз, когда он заполняется – slipperyseal