开放地址法

王朝百科·作者佚名  2010-01-03
窄屏简体版  字體:   |    |    |  超大  

1.冲突处理方法一---开放地址法

当发生地址冲突后,求解下一个地址用:

ND =( D+di)%mi=1,2,…,k(k<= m-1)

其中: m为哈希表长度,di为增量序列。增量序列的不同取法,又构成不同的开放地址法。

(1)线性探测再散列

D = H(key);

ND = (D+di)%m;di取1,2,3,……,m-1

线性探测再散列处理冲突的基本思想:若数据元素在存储地址D发生冲突,则放到存储地址(D+1)%m;若又发生冲突则放到存储地址(D+2)%m;若再发生冲突则放到存储地址(D+3)%m;……;直到碰到第一个为空的存储地址(D+i)%m,则将数据元素存放在该存储空间。

(2)二次探测再散列

D = H(key);

ND = (D+di)%m;di取1*1,-1*1,2*2,-2*2,……,K*K,-K*K (K≤m/2)

(3)双散列法

首先使用第一个散列函数H1(key)及逆行那个散列,一旦发生冲突,则使用第二个函数H2(key)计算改项到达下一个存储地址的增量,其取值p和key有关,范围在1和m之间,并且与m互质的正整数。

D = H1(key);

p = H2(key);

ND = (D+p)%m;

值得提醒的是,对利用开放地址法查了冲突所产生的哈希表中删除一个元素,不能简单地直接删除,因为这样将截断其它具有相同哈希地址的元素的查找地址,所以应设定一个特殊的标志以表明该元素已被删除。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航