哈希表(散列表)
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. 全域散列:随机的选择散列函数,使之独立于要存储的关键字。
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. 全域散列:随机的选择散列函数,使之独立于要存储的关键字。