哈希表:根据设定的哈希函数H(key)和处理冲突的方法将一组关键字映射到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“像”(H(key))作为记录在表中的存储位置,这种表便称为哈希表。所得存储位置称为哈希地址或散列地址。
在记录的关键字和其存储位置之间建立一个确定的函数关系f,即将关键字为key的记录存储在f(key)的存储位置上,则对于给定值kval,若存在关键字等于kval的记录,则必在f(kval)的存储位置上。通常是设置一个一维数组来存放各个记录,f(key)便为数组下标。
以地区名的汉语拼音字母作为关键字构造哈希表。首先将它们转化为数字。
哈希函数选择:
1、取关键字中第一个字母在字母表中的序号作为哈希函数。
2、先求关键字的第一个和最后一个字母在字母表中的序号之和,然后判别这个值,若比30大,则减去30.
key | BEIJING | TIANJING | HEBEI | SHANXI | SHANGHAI | SHANDONG | HENAN | SICHUAN |
f1(key) | 02 | 20 | 08 | 19 | 19 | 19 | 08 | 19 |
f2(key) | 09 | 04 | 17 | 28 | 28 | 26 | 22 | 03 |
函数f1、f2为哈希函数。哈希函数可设定为对关键字作简单的算术运算或逻辑运算。
对不同的关键字,却产生相同的哈希地址,这种现象称为冲突。
在构造哈希表时,不仅要设定一个哈希函数,还需要一个解决冲突的方法。