Цель хэша не в том, чтобы гарантировать уникальность, а в том, чтобы обеспечить разумную вероятность уникальности, когда «доказательство», которое вам в противном случае понадобилось бы, больше, чем пространство, в котором вы его храните.
Единственный действительно уникальный способ сохранить уникальную пару (sid, pid)
- это привить их друг к другу, через строку, кортеж и т. Д. Но если sid
и pid
если бы каждый, скажем, 4 байта, вам понадобится минимум 8 байтов для этого. Если вы хотите использовать только 4 байта, вы можете использовать 4-байтовый хэш (sid, pid)
- но поскольку вы встраиваете возможные варианты более чем в 4 байта только в 4 байта, существует определенная вероятность дублирования. Математически это называется принципом pigeonhole .
Если вы используете базу данных, возможно, существует способ обозначить составной ключ , который включает в себя оба столбца,так что вместе они обеспечивают первичный ключ для остальной части строки. Если вы используете хеш-таблицу на соответствующем языке (например, python dict
), то эта структура данных будет отслеживать дубликаты хешей и учитывать их, чтобы они не возвращали одно и то же значение.
Если вы используете хеш и сами управляете им, то вы должны принять возможность конфликта.
Не видя, в частности, ваш набор данных, мы не сможем устранить неполадки почему вы можете увидеть дубликаты хэшей, однако.