Hashing 在映射键值对时如何防止碰撞?

How can Hashing prevent collision when mapping key-value pairs?

如果散列的目的是防止键值对(映射)发生冲突,那么散列如何实现这一点?如果你给一个哈希算法命名为“Jon Smith”,它不会每次都给你相同的结果吗?因此,仅使用“John Smith”而不对字符串进行哈希处理有什么区别,例如,如果我们有两个具有不同值的不同 John Smith,我们怎么知道为什么我们应该选择一个,因为链接基本上只是将一个桶中的所有 john smiths,这两个 john smiths 可能 return 不同的值,我们需要知道它是哪一个。

我试过谷歌搜索,但找不到好的答案,非常感谢您的解释。

提前致谢!

我想你理解错误的想法。通常,每次使用散列函数时,它应该return相同的值,换句话说,它应该是确定性的。

哈希还有其他好处:

  • 它可用于计算对象的索引,然后可用于例如哈希集或哈希映射中。散列映射计算键的散列,然后将与该键关联的值存储在数组中散列的位置。
  • 如果包含重复项,可以更轻松地比较大量对象
  • 您可以存储密码的散列值而不是密码本身。当用户想要登录时,您检查它是否产生与您最初存储的相同的哈希值。

如果将两个不同的输入映射到相同的哈希值,则会发生冲突。换句话说,散列函数不是 injective。理想情况下,没有哈希值比其他哈希值更频繁地生成,这意味着结果值是均匀分布的。