哈希表的键,值,哈希和哈希函数

时间:2019-08-14 02:03:59

标签: hash hashset

我在理解哈希函数的作用以及不知道桶的确切含义时遇到了麻烦。

据我了解:

哈希表是使用哈希函数将键映射到值的数据结构。

HashFunction用于将数据从任意大小/未知大小的数组映射到固定大小的数据数组。

原始数据数组中可以有重复的值,但这无关紧要。

每个值都有一个唯一的键。因此,每个键的值都恰好为1。

HashFunction将为每个(值,键)对生成一个HashCode。但是,在多个(值,键)对映射到同一HashCode时,可能会发生冲突。

这可以通过使用链接/打开寻址方法来补救。

HashCode是指示值,该值指示存储桶数组中原始数据数组中特定条目的位置。

Bucket数组是构造的固定数据数组,它将包含原始数组中的条目。

我的问题:

如何为每个值生成密钥? HashFunction是否要为每个条目生成Key和HashCode值?因此,每个存储桶是否仅包含一个条目(假设使用Chaining实现补救碰撞)?

1 个答案:

答案 0 :(得分:0)

  

如何为每个值生成键?

密钥不会生成,而是由您提供的,并且用作哈希函数的输入,该哈希函数进而将该密钥转换为哈希表的索引。简单地说:

H(key)=index

所以您要寻找的值是:

hash_table[index] = value
  

HashFunction是否要为每个条目生成HashCode值?

这完全取决于哈希函数和哈希表的实现。一些哈希函数可能会根据提供的键生成哈希码,然后使用其modulo(size),其中size是哈希表的大小,以获取索引。其他人可能会将密钥直接转换为索引。无论哪种情况,哈希函数的最终目标都是在恒定时间内找到哈希表中搜索数据的位置。

  

每个存储桶是否只包含一个条目(假设使用Chaining实现补救碰撞)?

理想情况下,每个密钥都应映射到唯一索引,但是大多数情况并非如此,因为存储桶(即索引)的数量远小于密钥的数量,因此每个存储桶的平均链长(即碰撞次数)每个存储桶)为no.of keys/no.of indices

相关问题