【发布时间】:2012-04-30 02:52:04
【问题描述】:
如果我有一个系统,其中哈希是从 100 万种可能性的总排列中生成的。如果有 10% 的机会发生碰撞,我应该担心生成算法运行 5 次吗?
- 我有一个类似于 jsfiddle 的系统,用户可以在我的服务器上“保存”一个文件。现在我使用的是
'23456789abcdefghijkmnopqrstuvwxyz',它是 33 个字符,文件长度是 4 个字符,总共有33^4 = 1,185,921的可能性。 - “文件名”是随机生成的,如果发生冲突,它会重新运行以获取另一个文件名。使用 birthday paradox calculator 我可以看到,在我有 500 个条目后,我有 10% 的机会发生冲突。
- 我连续 5 次以上发生碰撞的可能性有多大? 4 呢?
- 有没有办法解决这个问题?我应该担心吗? 5000 个条目后会发生什么?
- 是否有任何程序可以通过任意输入来解决这个问题?
【问题讨论】:
-
在我看来你的keyspace太小了,为什么只有4个字符?对于短网址?
-
嗯 - 你不能使用生日悖论,用可能的哈希数替换 365 来得到你的结果吗?我想这会给你机会 - 对于 5000 个哈希,你会赌钱。
-
@ExternalUse 我认为这就是 OP 所做的。如果您将 365 替换为 1185921 并尝试生成 500 个值,则两者相同的几率不到 10%。
-
哦 - 我误读了这个问题。他想知道它连续发生的概率。为此,我的回答是:几率是一样的。
-
@ExternalUse 硬币落在一侧的机会是 1/2,但它两次落在一侧的概率是 (1/2)^2 = 1/4
标签: php algorithm hash probability hash-collision