Само определение хеша состоит в том, что он создает повторяющиеся значения для некоторых значений, поскольку диапазон значений хеша меньше, чем пространство хешированных данных.
Теоретически, 32-битный хэш имеет достаточный диапазон, чтобы хэшировать все ~ 6 символьных строк (A-Z, a-z, только 0-9), не вызывая коллизии. На практике хеши не являются идеальной перестановкой входных данных. Учитывая 32-битный хеш, вы можете ожидать получения хеш-коллизий после хэширования ~ 16 битных случайных входов, из-за парадокса дня рождения .
Учитывая статический набор значений данных, всегда можно создать специально созданную для них хеш-функцию, которая никогда не будет конфликтовать с самим собой (разумеется, размер ее вывода будет не менее log(|data set|)
. Однако для этого требуется чтобы вы знали все возможные значения данных заранее, это называется идеальное хеширование .
При этом, здесь - это несколько альтернатив, которые должны помочь вам начать (они предназначены для минимизации столкновений)