1. 散列的概念
散列(Hash):既是一种存储方式,又是一种查找方法。又称作哈希查找。
散列表/哈希表:按散列存储方式构造的查找表,称之为~。
散列基本思想:以关键码为自变量,通过一定的函数关系计算出函数值,将函数值作为结点的存储地址,将结点存入计算得到的存储单元中。其函数则为散列函数。
散列搜索算法:主要由两部分组成:散列函数和冲突调节。
冲突调节:理想的情况是不同的关键字映射到同的地址,但经常会出现两个或多个关键字映射到同一个地址,即冲突。处理这种关键字的过程即为冲突调节。
例1-散列表:关键码序列为{2,5,8,6}存储到编号为0到4,表长为5的数组中,计算存储地址的散列函数采用模5的方法,即散列函数:H(key)=key%5
散列表计算过程:
2 % 5 =2
5 % 5 = 0 --> array[0] = 5;
8
6
即散列表的存储序列为 array[5]={5,6,2,8}
2.常用的散列函数
(1)直接地址法
(2)除留余法
(3)平方取中法
(4)数字分析法
(5)折叠法
3.处理冲突的方法
(1)开放地址法
(2)链地址法
例2-冲突调节:关键码集合为{47,7,29,11,16,92,22,8,3},散列表表长为11,散列函数为
H(key) = key % 11.写出分别使用线性探测再散列、二次探测再散列和链地址法的所得到的散列表。
(1)线性探性测再散列:Hi = ( H(key) + di ) % m
(2)二次探测再散列
(3)链地址法
参考:《数据结构》.王玉.2008.山东出版社