赞
踩
目录
定义:根据设定的哈希函数及处理冲突的方法将查找表中各数据元素存储在一段有限的连续空间中,即得哈希表
哈希表是根据key,value来进行访问的数据结构
在一般的查找过程中,都是进行关键字值的比较,如果不等就移到下一个位置,直到找到相等的位置
而在哈希表中,我们希望通过一种确定函数关系,只需要进行运算就可以查找到存储地址了
此刻有一个表M,存在一个函数f(key),对任意给定的关键字值key,带入函数能得到包含该关键字记录在表中的地址,函数f(key)称为哈希函数(散列函数)
哈希冲突:对于不同的关键字可能会得到同一散列地址,即k1≠k2,而f(k1)=f(k2)
2.1直接定值法
取关键字或关键字的某个线性函数值为散列地址。即H(key)=key或H(key) = a·key + b
若其中H(key)中已经有值了,就往下一个找,直到H(key)中没有值了,就放进去。
2.2数字分析法
分析一组数据,找差别比较大的几位数字来构成散列地址,则冲突的几率会明显降低。因此数字分析法就是找出数字的规律,尽可能利用这些数据来构造冲突几率较低的散列地址。
2.3平方取中法
当无法确定关键字中哪几位分布较均匀时,可以先求出关键字的平方值,然后按需要取平方值的中间几位作为哈希地址。这是因为:平方后中间几位和关键字中每一位都相关,故不同关键字会以较高的概率产生不同的哈希地址
2.4折叠法
将关键字分割成位数相同的几部分,最后一部分位数可以不同,然后取这几部分的叠加和(去除进位)作为散列地址。数位叠加可以有移位叠加和间界叠加两种方法。移位叠加是将分割后的每一部分的最低位对齐,然后相加;间界叠加是从一端向另一端沿分割界来回折叠,然后对齐相加。
2.5除留余数法
取关键字被某个不大于散列表表长m的数p除后所得的余数为散列地址。即 H(key) = key MOD p,p<=m。不仅可以对关键字直接取模,也可在折叠、平方取中等运算之后取模。对p的选择很重要,一般取素数或m,若p选的不好,容易产生同义词
3.1开放定址法
令Hi = (H(key)+di)%m,i = 1,2,........,m-1,其中H(key)为哈希函数,m为哈希表长,di为增量序列
若取di = 1,2,3,........,m-1,则称线性探测再散列
若取di = 1^2,-1^2,2^2,-2^2.......,+-k^2,则称为二次探测再散列
若取di = 伪随机数序列,则称伪随机探测再散列
3.2链地址法
根据关键字,计算出地址,如果发生冲突,那么就在对应的链表插入新节点
例子:
3.3公共溢出区
例子:
方法:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。