Hash 为什么在这些哈希表示例中John Smith和Sandra dee之间会发生冲突?

Hash 为什么在这些哈希表示例中John Smith和Sandra dee之间会发生冲突?,hash,hashmap,hashtable,Hash,Hashmap,Hashtable,因此,在介绍哈希表或哈希函数时,一个非常流行的例子是John Smith等人的电话簿示例 我的问题是为什么约翰·史密斯和桑德拉·迪之间会发生冲突 看看这个例子 我认为(521+1234)mod256应该是152,这是很遥远的(它是219)。我知道这是为了演示碰撞,但为什么会有碰撞呢?散列函数中的公式是什么 编辑:还有另一个例子,它们都映射到2 这些示例中没有哈希函数,它们只是人为设计的示例。散列完全是虚构的 生成的源代码是 如果您查看的内部,选择\u keys\u和\u hashes您将看到以

因此,在介绍哈希表或哈希函数时,一个非常流行的例子是John Smith等人的电话簿示例

我的问题是为什么约翰·史密斯和桑德拉·迪之间会发生冲突

看看这个例子

我认为(521+1234)mod256应该是152,这是很遥远的(它是219)。我知道这是为了演示碰撞,但为什么会有碰撞呢?散列函数中的公式是什么

编辑:还有另一个例子,它们都映射到2


这些示例中没有哈希函数,它们只是人为设计的示例。散列完全是虚构的

生成的源代码是

如果您查看
的内部,选择\u keys\u和\u hashes
您将看到以下行:

tb.key_hsh = [ 152, 001, 254, 154, 153 ]
所以散列只是存储在一个数组中。接下来是几行:

if op.collisions :
  # Make "Sandra Dee" collide with "John Smith":
  tb.key_hsh[3] = tb.key_hsh[0]
所以“碰撞”完全是假的。第二个示例似乎是由同一个脚本生成的,其中nkeys=4

假装它比查找输入并使用哈希函数提供所需的输出要容易得多