2013-02-14 70 views
1

所以我已经读了Hash functions上的维基百科页面,因为我目前正在玩一些。 在这个页面和我读过的其他来源都提到数据的分布会影响散列函数。了解数据分布对散列的影响

尽管有一些解释,我仍然不清楚这些影响究竟是什么,也许是为什么。所以我的问题:

  1. 只是为了确保我已经得到了它的权利,当他们提到 分布,这是每个单词的输入数据 集的频率是多少?
  2. 输入数据的分布对散列 函数有什么影响?特别感兴趣的是,散列算法产生的输出的速度和均匀性方面的散列性能。

编辑1: 我从一个更有活力的来源特别是维基百科英语语料库VS数据的思维,Twitter的鸣叫例子。

回答

2

通常,您没有尽可能多的输入数据集,因为您有可能的输入。因此,分配更具有可行性,即具有某些特征的特定输入将被挑选出来。 (基本上与你所说的相同,但是对于每个单词而不是一些计数n> 1)。如果您知道,输入的第一位始终为1,那么数据不是均匀分布的。

如果你的散列非常简单,例如。通过仅将第一个字节作为“散列”,那么这种非均匀分布将导致比预期更多的冲突。 (即使您预计会得到256个不同的值,也只能有128个值)

您可能通过名称知道的大多数(密码学)散列函数都足够好,因此您不必关心这一点。对于密码学来说,它甚至是一个明确的条件:只需查看哈希的差异,就不能判断输入中有多少位。这并不意味着这是不可能的。我可以隐约记得一篇论文,指出只有ascii字母和数字被散列时,md5的碰撞率会增加。我现在无法找到它,所以请小心使用这些信息 - 但即使我混淆了某些东西,这种情况也很容易实现。不管是md5还是其他算法,如果你确实有这样的关系,那么当然你的输入数据集的分布又是相关的。

+0

谢谢,这确实有帮助。当你提到数据的类型时,我更新了这个问题。 – zcourts 2013-02-14 19:20:12