hash(散列表)基本概念

哈希:


散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。
散列函数: 一个把查找表中的关键字映射成该关键字对应的地址的函数,为Hash(key)=Addr 。(地址可以是  数组下表 索引 或者 内存地址)
可能把两个或者两个以上的不同的关键字 映射到同一地址,称这种情况为冲突


哈希表 根据关键字 直接进行访问的数据结构,建立了  关键字 与 存储地址之间的一种直接映射关系。
哈希函数的构造方法:
1.直接定址法: 直接取某个线性函数值为散列地址,散列函数为: H(key)=a*key+b  不会产生冲突,适合分布基本连续的情况
2.除留余数法:
最经常用到,假定散列表表长为m,取一个不大于m  但是基本接近于等于 m的质数 p,
h(key)=key%p,除留余数法的关键是选好p
3.数字分析法 
4.平方取中法  取关键词平方值的中间几位,作为散列地址。  适用于 每一位取值都不够均匀
5.折叠法关键字 分割为位数相同的几部分,然后这几部分进行叠加


处理冲突的方法:




数学递推公式:
Hi= (h(key)+di)% m
m表示散列表表长,di为增量序列
1.开放定址法1)线性探测法: 当di 为自然数序列,为线性探测法。顺序的查看下一个单元(顺序的往后推)
            2)平方探测发:di=1的平方,-1的平方,2的平方,-2的平方又称二次探测法。缺点是不能探测哈希表上的所有单元但是至少能探测一半的单元。

            3)再散列法:di=Hash2(key),又称为双散列法,需要两个散列函数

            4)伪随机序列法:di为伪随机序列 

 

2.拉链法

把所有的同义词,通过散列函数映射到同一地址,放在线性链表中


猜你喜欢

转载自blog.csdn.net/pmdream/article/details/79053137