哈希键和值

杨秀贤

我很好奇为什么哈希既需要哈希键又需要哈希值。

  1. 如果哈希键是int,则将哈希键更改为哈希码,该哈希码是哈希的索引。但是,哈希值与哈希键相同,不是吗?因此,当我将int用于哈希键时,不需要将哈希值作为参数(与哈希键重复)。

  2. 如果我将哈希键作为字符串,则哈希键也将更改为哈希码。然后,哈希值是我想要与字符串匹配的某个数字?还是字符串的指针?

我不明白为什么需要哈希值。

紫罗兰色

让我们首先弄清楚一些术语,因为您似乎对它们感到困惑1

在哈希中,实际上只有两件事:项目(从脚注开始,可能是您的哈希值/键)和哈希码。您将输入项传递给哈希函数并获取哈希码。这是一般情况,但请确保您已阅读脚注-可能有正当的理由区分完整的项目和关键部分。

关于为什么需要哈希值和代码的原因,例如,您要保留地球上所有超智能,英俊的人(以及他们的狗的名字)的记录,因此您需要添加字符串paxdiablo:lilly

因此,您将该字符串放入您的哈希函数中,并以42的哈希码结束(根据来计算paxdiablo),这就是它所在的存储桶。

但是,由于散列函数几乎总是多对一的操作(许多其他字符串也将散列为42),因此无法paxdiablo仅基于散列码就知道它实际上在您的数据结构中。

实际上,我的大敌军犬是paxangelo所有事物中都被称为猫的猫fluffybunnykins,是您可能不希望见到的最愚蠢,最丑陋的生命形式之一,并且还会生成42的哈希码。因此,在查找时出谁在42个存储桶中,除非原始字符串在其中,否则您将如何区分两者之间的区别?

哈希码决定了一个项目使用哪个存储桶,但是您仍然必须将该项目实际放入存储桶中。


1我尝试了大约十分钟,但是我对自己的想法仍然不完全满意。据我所知,您正在使用:

  • 散列值作为要存储的整个项目。
  • 哈希键是用于哈希的哈希值的那部分。
  • 哈希值作为哈希函数的结果。

我倾向于不将前两个区别开来只是因为我认为实际上没有任何收获。我通常将整个项目传递给散列函数,但是可以想象到,您可以设计一种只需要键部分的解决方案,特别是如果您想在不同的记录布局上使用散列函数(键位于不同的位置)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章