了解数据分布对散列的影响

时间:2013-02-14 14:03:54

标签: performance hash distribution non-uniform-distribution

所以我已经阅读了Hash functions上的维基百科页面,因为我正在玩一些。 在该页面和我读过的其他资料中都提到数据的分布会影响散列函数。

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

  1. 当他们提到时,只是为了确保我做对了 分布是输入数据中每个单词的频率 设置?
  2. 输入数据的分布对哈希有什么影响 功能?特别感兴趣的是散列的性能 函数,就哈希算法产生的输出的速度和均匀性而言。
  3. 编辑1: 我正在考虑维基百科英语语料库与更动态的数据,例如Twitter的推文。

1 个答案:

答案 0 :(得分:2)

通常,您没有可能输入的输入数据集。因此,分布更具有可支持性,即将选择具有某些特征的特定输入。 (基本上与你说的相同,但每个单词的p <1而不是一些计数n> 1)例如。如果你知道,输入的第一位总是1,那么数据不是均匀分布的。

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

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