数据结构:哈希表(根据数值查找的key-value容器)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构:哈希表(根据数值查找的key-value容器)相关的知识,希望对你有一定的参考价值。

参考技术A 哈希表(或散列表)是利用哈希函数(散列函数)把数据的存储位置与关键字码值关联后,直接根据关键字访问数据的数据结构。

链表、栈、队列、数组、字符串、树等数据结构根据数值访问任意元素都需要至少O(logn)的时间复杂度,缺少一种能够根据数值在O(1)的复杂度快速访问数据的数据结构。

根据关键字访问元素的效率很高;增删查操作的效率很高。

存在哈希冲突问题,需要设计合理的哈希函数;存储的数据是无序的,不适用于存储需要排序的数据;key不能重复,不适用于存储重复性高的数据。

设计关键字key到散列地址的线性函数。例如f(key)=a*key+b;

如果任意关键字key由多位数字组成,则从中提取若干分布均匀且差异明显的数字组成散列地址。

如果无法确定关键字key中分布均匀的数字,则先计算关键字key的平方值,再取平方值的中间几位组成散列地址。

如果关键字key的位数很多,则先将关键字分割为几个等长的部分,再取其叠加和的值(去除进位)组成散列地址。

先设置一个常数P,再对关键字key进行取余计算,余数key mod p作为散列地址。

选择某个随机函数计算关键字key的随机值作为散列地址。

设置增量的探测序列依次查找散列表中的散列地址,直到在序列中查找的值未哈希冲突,将该值作为新的散列地址。

增量序列形如1,2,3,...,m-1,m为散列表长。

增量序列为伪随机数序列。

将哈希冲突的散列地址存储在链表中。

[数据结构] 散列表(哈希表)

  散列表(哈希表)

  比较难理解的官方定义:散列表/哈希表(Hash table),是根据关键码值(Key value)而直接进行访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表

  举个例子,我们在查找中文字典时。假设我们要查找“翁weng”,我们根据weng找到了对应的页码233,这个过程就是根据关键码值映射得到了表中的位置。然后我们在字典这个散列表中,根据我们刚才得到的位置 233页,直接访问了“翁weng”。

  再举一个更详细一些的例子。我们现在的班级有二十三名学生。我们创建一个

 

 

 

 

 

 

未完。

以上是关于数据结构:哈希表(根据数值查找的key-value容器)的主要内容,如果未能解决你的问题,请参考以下文章

数据结构 哈希表

Java数据结构和算法(十三)——哈希表

数据结构和算法哈希表 HashTable

C函数学习:uthash哈希表

C函数学习:uthash哈希表

C函数学习:uthash哈希表