数据结构6--哈希表

     在结构中查找数据的时候需要进行一系列和关键字作比较的动作,这种查找建立在比较的基础上。查找的效率和比较的次数密切相关,我们希望能直接找到我们想要的数据。因此必须在数据的存储位置和关键字之间建立一个确定的对应关系,使得每一个关键字和结构中的唯一储存的位置对应,这个对应关系称为哈希函数,这个思想建立的表称为哈希表。

1.哈希表

    哈希表(hash table)也叫散列表,是根据关键码值(key value)而直接进行访问的数据结构

   哈希表将所有的数据元素放在一串被称作桶的线性表中(一个顺序存储的线性表,底层数组),如图中的T,散列分布的关键字集合如图中的U,以关键字K为自变量通过一个确定的方法哈希方法来计算返回对应的值hashkey(也可以理解为数组的下标,这个值是一个存储单位的地址,指向线性表T的索引从而可以确定一个数据元素

                                    

 

                                     

          现在的问题就是这个计hashkey或者计算数组下边的哈希方法怎么来确定???

         原则:一个好的哈希方法映射到存储单元的地址应该是随机的,以便使一组哈希地址的关键字均匀分布,从而减少冲突,所以哈希表的选择标准是简单,均匀。

2.哈希表常用的方法

  1. 直接寻址法
  2. 数字分析法
  3. 平方取中法
  4. 折叠法
  5. 除留余数法

  1.直接寻址法

            h(k)=key*a+b

           Key为集合U中关键字,a,b为常数,h(k)就是我们的哈希地址

  2.数字分析法:是取关键字中取值比较分散的数字作为哈希地址,比如下面这串key,前面两位分布比较集中,不适合做哈希地址,所以取后面两位作为哈希地址

                                

     3.平方取中法 :当关键字的位数比较多,每位关键字分散比较集中,哈希地址的位数比较少的时候用此方法,他是取关键字的平方的中间几位作为哈希地址。

                            

     4.叠加法:叠加法是将哈希表中的关键字分割成位数相等的几段,然后将他们叠加求和作为哈希地址的方法。

     5.除留余数法:p小于哈希表的长度并接近哈希表的长度

           h(k)=key%p

3.冲突

    即便有这么多的哈希方法,也难免会不同的key会算出相同用的hashkey,不同的key就被映射到表的同一位置了。

    解决冲突的办法有三种

  1.  开放寻址法
  2.  再哈希法

  3. 链地址法

1.开放寻址法:

      线性寻址法的优点:只要哈希表未满,就一定能找到一个不冲突的哈希的地址,缺点:容易产生数据元素聚集的现象

                                 

 2.再哈希法  :虽然没有产生聚集,但是增加了计算时间

                 

                              

 3.链地址法:

                            

 

                     

                   当key为16或27时,查找就会遇到下面的问题

                       

                          循环历遍链表找到与关键字匹配即可

 

 

   4.练习:

          

            错误,因为哈希表的节点中,key会通过指针指向数据元素

            

            

     

      

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时空恋旅人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值