如果我有一个系统,其中哈希是由100万种可能性的总输入产生的。如果有10%的碰撞几率,我应该担心生成算法运行5次吗?
让我们再试一次:
我有一个类似于jsfiddle的系统,用户可以在我的服务器上“保存”文件。现在我使用的是'23456789abcdefghijkmnopqrstuvwxyz'
,它是33个字符,文件长度为4个字符,总共有1185921
个可能性。
“文件名”是随机生成的,如果发生冲突,它会重新运行以获取另一个文件名。使用birthday paradox calculator我可以看到,在我有500个条目后,我有10%的机会发生碰撞。
我连续碰撞的次数超过5次的几率是多少? 4呢?
有没有办法解决这个问题?我应该担心吗? 5000个条目后会发生什么?
那里有一个可以用任何输入解决这个问题的程序吗?
答案 0 :(得分:3)
我不认为生日悖论计算适用。 1185921中的500个随机数的概率差异,一旦有500个已知唯一数字,一个新数字的概率就不同。
如果您有500个已分配的号码并随机生成一个新号码,则碰撞的赔率为500/1185921。采用500个名称,连续4次碰撞的机会是(500/1185921) 4 < 10 -13 。使用5000个现有文件名,新名称是碰撞的几率是5000/1185921,并且连续4次碰撞的几率是< 10 -9
答案 1 :(得分:1)
我的数学有点生疏,所以请耐心等待 连续获得x次碰撞的可能性很简单:
chance of collision ^ x;
碰撞的可能性是:
entries/space (which is 500/1185921 or 0.04%).
上面你可以看到,随着条目越多,这种情况就越糟糕(并且空间越大越好)。
还要注意生日悖论可能不是你想要的。 10%的几率是任何两个条目碰撞的可能性,而不是下一个条目碰撞的可能性。