web-dev-qa-db-fra.com

Probabilité de collision lors de l'utilisation d'un hachage 32 bits

J'ai un champ clé de chaîne de 10 caractères dans une base de données. J'ai utilisé CRC32 pour hacher ce champ mais je m'inquiète des doublons. Quelqu'un pourrait-il me montrer la probabilité de collision dans cette situation?

p.s. mon champ de chaîne est unique dans la base de données. Si le nombre de champs de chaîne est de 1 million, quelle est la probabilité de collision?

34
nguyenngoc101
80
Adam Morris

Dans le cas que vous citez, au moins une collision est essentiellement garantie. La probabilité d'au moins une collision est d'environ 1 à 3 x 10-51. Le nombre moyen de collisions auquel vous vous attendez est d'environ 116.

En général, le nombre moyen de collisions dans k échantillons, chacun un choix aléatoire parmi n les valeurs possibles sont:

N(n,k)~=k(k-1)/(2n)

La probabilité d'au moins une collision est:

p(n,k)~=1-e^(-k(k-1)/(2n))

Dans votre cas, n = 232 et k = 106.

La probabilité d'une collision à trois voies dans votre cas est d'environ 0,01. Voir Problème d'anniversaire .

33
Mark Adler