所以我已经阅读了Hash functions上的维基百科页面,因为我正在玩一些。 在该页面和我读过的其他资料中都提到数据的分布会影响散列函数。
尽管有一些解释,我仍然不清楚这些影响究竟是什么,也许是为什么。所以我的问题是:
编辑1: 我正在考虑维基百科英语语料库与更动态的数据,例如Twitter的推文。
答案 0 :(得分:2)
通常,您没有可能输入的输入数据集。因此,分布更具有可支持性,即将选择具有某些特征的特定输入。 (基本上与你说的相同,但每个单词的p <1而不是一些计数n> 1)例如。如果你知道,输入的第一位总是1,那么数据不是均匀分布的。
如果您的哈希非常简单,例如。通过仅将第一个字节作为“散列”,那么这种非均匀分布将导致比预期更多的冲突。 (即使您希望得到256个不同的值,也只能有128个值)
您可能知道的大多数(加密)哈希函数都足够好,因此您不必关心这一点。对于加密,它甚至是一个明确的条件:通过查看散列的差异,您必须无法分辨输入中有多少位。但这并不意味着它是不可能的。我可以依稀记得一篇文章,说明当只有ascii字母和数字被哈希时,md5的碰撞率会增加。我现在找不到它,所以要小心享受这条信息 - 但即使我混淆了某些东西,这种情况也很容易实现。无论是md5还是其他算法,如果你真的有这样的关系,那么输入数据集的分布肯定会再次相关。