与 ASCII 值的常规求和相比,累积分量求和哈希码函数有什么好处?

What are the benefits of a cumulative component sum hashcode function over a regular summation of the ASCII values?

在常规哈希表编码文本的情况下。是不是因为数字范围大了,碰撞次数少了?

编辑: 累积分量和是 returns 字符串 ASCII 值的阶乘的函数。即 s="string" -> s[0] + (s[0]+s[1])+ (s[0]+s[1]+s[2]) ... 直到 len(s)。

常规总和就是 s[0]+s[1]+s[2]...

基本上 int(t) + int(h) + int(e) 对于 hashcode 是相同的是 eth 或 het。 这就是为什么累积分量和哈希码更好是更个性化的原因 != eht 当使用 hashcode 函数时。这减少了碰撞次数。

经常有几个英文单词使用完全相同的字母,但顺序不同。 (这些词彼此 anagrams)。 (例如,angel / angle / glean )。

因为在简单加法中顺序无关紧要,所以一个词的所有变位词具有相同的总和。 因此,当两个不同的键是彼此的字谜时,使用简单的求和作为哈希函数总是会导致冲突。

我从来没有听说过“累积分量和哈希码”这个词,但是从你的描述来看它和Fletcher's checksum的第二部分是一样的。

使用哈希函数以不同的顺序为相同的字母提供 不同的 结果,例如弗莱彻校验和的第二部分(或整个弗莱彻校验和),导致散列中的冲突更少 table.