您的位置:首页 > 其它

哈希表(散列表)

2012-09-04 10:03 288 查看
一.基本概念

1. 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

2. 冲突(碰撞): 对不同的关键字可能得到同一散列地址,即key1≠key2,而f(key1)=f(key2),这种现象称冲突。具有相同函数值的关键字对该散列函数来说称做同义词。

3. 直接寻址法:取关键字或关键字的某个线性函数值为散列地址。即H(key)=key或H(key) =a·key + b;一般适用于关键字的数域较小的情况。

二.碰撞解决:

1. 链接法(链地址法):把散列在同一槽中的所有元素都放在一个链中。

装填因子:a=n/m;一个链中平均存储的元素数。

2. 开放地址法::Hi=(H(key) + di) MOD m,i=1,2,…,k(k<=m-1),其中H(key)为散列函数,m为散列表长,di为增量序列,

2.1 di=1,2,3,…,m-1,称线性探测再散列;

2.2 di=1^2,-1^2,2^2,-2^2,⑶^2,…,±(k)^2,(k<=m/2)称二次探测再散列;

2.3 di=伪随机数序列,称伪随机探测再散列。

2.4 h(k,i) = (h1(k)+ ih2(k)) mod m;,称为双重散列;

三.散列函数:

1. 除法散列:h(k) = kmod m;

2. 乘法散列:h(k) = [m(kA mod 1)];

3. 全域散列:随机的选择散列函数,使之独立于要存储的关键字。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: