散列(hash)是存储数据的又一种方法,同顺序、链接和索引一样。
散列存储的基本思想
以数组中的每个元素的关键字K为自变量,通过一种函数h(K)计算出函数值,
把这个值解释为一块连续存储空间(即数组空间或文件空间)的单元地址(即下标),将该元素存储到这个单元中。
散列存储中使用的函数h(K),称为散列函数或哈希函数,它实现关键字到存储地址的映射(或称转换),h(K)的值称为散列地址或哈希地址;
使用的数组空间是数据进行散列存储的地址空间,所以被称之为散列表或哈希表(hash list或hash table)。
在散列表上进行查找时,首先根据给定的关键字K,用与散列存储时使用的同一散列函数h(K)计算出散列地址,然后按此地址从散列表中取出对应的元素。
为了散列存储集合,假定选取的散列函数为:
h(K)=K % m
如集合s={56,45,34,44,78,13,14,17,43,54,90,46};
那么 h(56)=56 % 13
h(45)=45 %13
h(34)=34 % 13
h(44)=44 % 13
h(78)=78 % 13
h(13)=13 % 13
h(14)=14 %13
h(17)=17 % 13=17
h(43)=43 %13=4
h(54)=54 % 13=2
h(90)=90 %13=12
h(46)=46 % 13=7
散列函数
- 直接定址法
h(K)=K+C
2. 除留余数法
除留余数法是用关键字K除以散列表长度m所得余数作为散列地址的方法。对应的散列函数h(K)为:
h(K) = K % m
3. 数字分析法
数字分析法是取关键字中某些取值较分散的数字位做为散列地址的方法。
4. 平方取中法
平方取中法是取关键字平方的中间几位作为散列地址的方法,具体取多少位视实际要求而定。