1

所以我已经阅读了关于哈希函数的维基百科页面,因为我目前正在玩一些。在该页面和我读过的其他来源中都提到数据的分布会影响散列函数。

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

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

编辑 1: 我正在特别考虑维基百科英语语料库与来自更动态来源的数据,例如 Twitter 的推文。

4

1 回答 1

2

通常你没有尽可能多的输入数据集。因此,分布更多的是一种概率,即会选择具有某些特征的某个输入。(基本上与您所说的相同,但每个单词的 p<1 而不是某些计数 n>1)例如,如果您知道输入的第一位将始终为 1,则数据不是均匀分布的。

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

您可能通过名称知道的大多数(加密)哈希函数都足够好,因此您不必关心这一点。对于密码学来说,它甚至是一个明确的条件:您不能仅通过查看哈希值的差异来判断输入中有多少位发生了变化。但这并不意味着这是不可能的。我隐约记得一篇论文指出,当只对 ascii 字母和数字进行哈希处理时,md5 的冲突率会增加。我现在找不到它,所以请小心地享受这条信息——但即使我混淆了一些东西,这种情况也很容易发生。而且不管是md5还是其他算法,如果你真的有这样的关系,那么你输入数据集的分布肯定又是相关的。

于 2013-02-14T16:31:25.870 回答