Hash 我们讨论散列的目的

Hash 我们讨论散列的目的,hash,Hash,我们使用散列函数的目的不是随机性吗?那么,我们为什么不使用rand函数而不是对元素进行操作呢?比如hashVal=37*hashVal+key[i]?hash函数用于映射而不是随机数。所以我们不能在hash使用的地方使用随机函数。哈希值在给定输入上总是唯一的。 哈希函数的主要目标是加速表查找或数据比较任务 区别: key=hash有效输入,key为确定性输出 num=random一个有效的输入,num是不确定的输出哈希函数用于映射而不是随机数。所以我们不能在hash使用的地方使用随机函数。哈希值

我们使用散列函数的目的不是随机性吗?那么,我们为什么不使用rand函数而不是对元素进行操作呢?比如hashVal=37*hashVal+key[i]?

hash函数用于映射而不是随机数。所以我们不能在hash使用的地方使用随机函数。哈希值在给定输入上总是唯一的。 哈希函数的主要目标是加速表查找或数据比较任务

区别:

key=hash有效输入,key为确定性输出


num=random一个有效的输入,num是不确定的输出

哈希函数用于映射而不是随机数。所以我们不能在hash使用的地方使用随机函数。哈希值在给定输入上总是唯一的。 哈希函数的主要目标是加速表查找或数据比较任务

区别:

key=hash有效输入,key为确定性输出


num=randomA有效输入,num为待定输出

随机函数和散列函数之间有相似之处,都有确定的种子并返回值

散列是根据对象的数据返回一个数字。所以是的,它通常提供一个非常大的数字,但是这个数字是基于对象本身的


具有相同数据的相同对象(取决于哈希函数)将返回相同的值。因此,就“随机性”而言,散列不是返回唯一数字的理想方法。

随机函数和散列函数之间有相似之处,它们都有一个确定的种子并返回一个值

散列是根据对象的数据返回一个数字。所以是的,它通常提供一个非常大的数字,但是这个数字是基于对象本身的


具有相同数据的相同对象(取决于哈希函数)将返回相同的值。正因为如此,就“随机性”而言,散列不是返回唯一数字的理想方法。

好问题。这取决于随机的含义

散列将键映射到任意值-理想情况下映射到没有明显模式的值。例如:

'A' => 15
'B' => 97
'C' => 43
'D' => 60
'E' => 41
但是,哈希总是将相同的键映射到相同的值。因此:

"BED"  => [97 41 60]
"BEDE" => [97 41 60 41]
每次给散列一个“E”,它总是将其散列为41,而不是另一个值

附加说明

重要的是,哈希不需要提供唯一的值,尽管这是本次讨论的次要内容。例如,这是可能的:

'F' => 41
因此,给定散列值41,无法确定键是“E”还是“F”


所有这些自然地暗示了一个问题:好吧。但是散列是用来做什么的呢?不过,这将是下一次的另一个问题,而不是OP提出的问题。

好问题。这取决于随机的含义

散列将键映射到任意值-理想情况下映射到没有明显模式的值。例如:

'A' => 15
'B' => 97
'C' => 43
'D' => 60
'E' => 41
但是,哈希总是将相同的键映射到相同的值。因此:

"BED"  => [97 41 60]
"BEDE" => [97 41 60 41]
每次给散列一个“E”,它总是将其散列为41,而不是另一个值

附加说明

重要的是,哈希不需要提供唯一的值,尽管这是本次讨论的次要内容。例如,这是可能的:

'F' => 41
因此,给定散列值41,无法确定键是“E”还是“F”

所有这些自然地暗示了一个问题:好吧。但是散列是用来做什么的呢?然而,这将是下一次的另一个问题,而不是OP提出的问题

我们使用散列函数的目的不是随机性吗

不。从技术上讲,我们使用散列函数的目的是将一组称为键的大型数据值映射到一组称为散列的值。散列函数可能不是唯一的,也就是说,多个键可能映射到同一个散列。但是,它必须始终将特定密钥映射到同一散列

例如,如果hashHello,world=5,那么无论对字符串进行多少次哈希,它都必须始终为5。因此,按照您建议的方式使用rand是行不通的,因为它每次都会将同一个键映射到不同的散列

然而,一个好的散列函数确实会尝试将其键映射到随机散列。这与随机数不同。这意味着,平均而言,每个散列的预散列数大致相等。但是,每一次,每个键仍然映射到它自己的散列

泰铢的回答也说明了这一点

我们使用散列函数的目的不是随机性吗

不。从技术上讲,我们使用散列函数的目的是将一组称为键的大型数据值映射到一组称为散列的值。散列函数可能不是唯一的,也就是说,多个键可能映射到同一个散列。但是,它必须始终将特定密钥映射到同一散列

例如,如果hashHello,world=5,那么无论对字符串进行多少次哈希,它都必须始终为5。因此,在 您建议的方法行不通,因为它每次都会将同一个键映射到不同的散列

然而,一个好的散列函数确实会尝试将其键映射到随机散列。这与随机数不同。这意味着,平均而言,每个散列的预散列数大致相等。但是,每一次,每个键仍然映射到它自己的散列


thb的回答也说明了这一点。

因为哈希与随机性无关。事实上,情况恰恰相反。散列是一个值的压缩表示,即1024个字符字符串的散列是一个4字节的整数大小,例如,它取决于每个字符。当然,HASH不能保证唯一性,但它与random正好相反。伟人花了大量时间思考如何在最小的散列大小中压缩最大的信息。把散列看作校验和或CRC。它是一小块数据,依赖于用于传输质量控制的较大数据块,因为散列与随机性无关。事实上,情况恰恰相反。散列是一个值的压缩表示,即1024个字符字符串的散列是一个4字节的整数大小,例如,它取决于每个字符。当然,HASH不能保证唯一性,但它与random正好相反。伟人花了大量时间思考如何在最小的散列大小中压缩最大的信息。把散列看作校验和或CRC。它是一小块数据,依赖于用于传输质量控制的较大数据块