关于哈希表的总结

以下是我对哈希表的总结,其中大部分概念性的东西来自严蔚敏的数据结构书上的,加了一些我个人的经验总结,这篇的主要目的

是方便我以后自己看,所以有点类似于提纲性的东西。

1.定义:根据设定的哈希函数H(key)和处理冲突的方法将一组关键字映像到一个有限的连续的地址集(区间)上,并以关键
            字在地址集中的“像”作为记录在表中的存储位置,这种表便称为哈希表,这一映像过程称为哈希造表或者散列
            所得存储位置称哈希地址或散列地址
    目的:在记录位置和关键字之间建立一个确定的对应关系,提高查找的速度
    案例:编译原理当中的符号表,状态机当中的状态查找等
    实现:可以有多种,根据实际情况而定,可以将存储和查找分开,一般情况下数据结构要么是插入快查找慢或者插入慢查找快,与其他
                数据结构配合可以实现插入和查找速度都达到满意的效果,但是一般需要占用内存。另外哈希表的查找速度并不是绝对的
                还和哈希函数的构造方法有关,同时也与冲突处理方法有关
2.哈希函数的构造方法:
(1)直接定址法
(2)数字分析法
(3)平方取中法
(4)折叠法
(5)除余留数法(最常用)
(6)随机数法
    以上这些方法可以组合着用,请注意有些哈希表也可以不是由程序动态生成的,也可以是手动生成的,多见于数据固定的应用当中
    ,手动生成的哈希表以直接定址法构造的居多,比如CINT脚本引擎的扩展函数查询采用的就是这种方法。
3.哈希函数考虑的因素有:
(1)计算哈希函数所需的时间
(2)关键字的长度
(3)哈希表的大小
(4)关键字的分布情况
(5)记录的查找频率
4.冲突处理方法
一般情况下,只能减少冲突,很难避免,因此冲突的处理是必要的,方法一般有如下几种
(1)开放定址法
(2)再哈希法
(3)链地址法
(4)建立一个公共溢出区
    一般情况下冲突的概率和装填因子有关,其中(3)和(4)经过一次处理就可以解决冲突问题,而(1)和(2)有可能需要多次,
    (1)的方法有些像试探法,冲突较多时(1)和(2)效率较低,    (4)这个方法比较消极,适合于冲突较少的情况,如果冲突较多,(4)的查找效率
    会明显降低。总之一切都要根据实际应用来进行选取。
5.几个概念
(1)均匀哈希函数:若对于关键字集合中的任一关键字,经哈希函数映像到地址的集合中的任何一个地址的概率是相等的,则称此类函数
         为均匀的哈希函数
(2)装填因子a=(表中填入的记录数)/(哈希表的长度),对装填因子的控制可以减少冲突
(3)冲突:k1!=k2,f(k1)=f(k2)

 


 

有空再补例子吧

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值