第6天:散列HASH(三)冲突解决办法之非线性再散列法
2013-12-31 22:15
218 查看
非线性再散列法
之前讨论过线性再散列法的优缺点,现在我们再来看一下非线性再散列法。与线性再散列法顺序遍历散列表不同,非线性再散列法会重新计算一个散列Key,并通过它跳转到表中一个完全不同的部分。其思想是希望通过跳转到表中不同的部分,可以避免相似值的聚集。如果再散列函数跳转到的槽已经被占用了,则继续执行新一轮的再散列和跳转。如果散列表快满了,那么可能会出现多次再散列的情况。为了避免这个问题,仅当散列表中使用的空间不太可能超过50%时,才应该使用此再散列算法。
再散列的两种算法:
(1)计算散列值的一种实用方法是先计算出一个数字,然后用它除以表的Size。这个除法运算的余数(模)就是散列值。与之对应的一种再散列的方法是利用除法运算产生的商,而不是余数。然后可以用这个商乘以输入字符串的长度以及第二个字符(假设存在第二个字符)所对应的数值。
(2)另一种方法可能有点慢,但非常有效,其原理是使用C语言随机数生成器。使用rand()函数通过一个种子生成伪随机数,并使用返回的随机数作为新的散列值。rand()函数对于给定的种子(通过srand()函数设定)会生成固定的伪随机序列,这是它能够用于再散列的理论基础。
一个对散列表性能影响很大的概念称为负载因子(load factor)。负载因子(α)是指插入到表中的元素个数(n)除以可用槽的总数所得到的的结果。因此;
α = n / tablesize
当负载因子增大时,散列表的性能也会随之下降。经过测试,当负载因子大于0.50时,再散列将不是一种切实可行的解决方案。
结论:只应该在快速而又随机性强的情况下或者快速原型化的环境中使用再散列方法。它的主要优点是:很容易进行动态编码,在确保表负载较低并且不太可能执行删除操作的情况下它的速度足够快。对于其他需求,应该使用外部拉链法。
之前讨论过线性再散列法的优缺点,现在我们再来看一下非线性再散列法。与线性再散列法顺序遍历散列表不同,非线性再散列法会重新计算一个散列Key,并通过它跳转到表中一个完全不同的部分。其思想是希望通过跳转到表中不同的部分,可以避免相似值的聚集。如果再散列函数跳转到的槽已经被占用了,则继续执行新一轮的再散列和跳转。如果散列表快满了,那么可能会出现多次再散列的情况。为了避免这个问题,仅当散列表中使用的空间不太可能超过50%时,才应该使用此再散列算法。
再散列的两种算法:
(1)计算散列值的一种实用方法是先计算出一个数字,然后用它除以表的Size。这个除法运算的余数(模)就是散列值。与之对应的一种再散列的方法是利用除法运算产生的商,而不是余数。然后可以用这个商乘以输入字符串的长度以及第二个字符(假设存在第二个字符)所对应的数值。
(2)另一种方法可能有点慢,但非常有效,其原理是使用C语言随机数生成器。使用rand()函数通过一个种子生成伪随机数,并使用返回的随机数作为新的散列值。rand()函数对于给定的种子(通过srand()函数设定)会生成固定的伪随机序列,这是它能够用于再散列的理论基础。
一个对散列表性能影响很大的概念称为负载因子(load factor)。负载因子(α)是指插入到表中的元素个数(n)除以可用槽的总数所得到的的结果。因此;
α = n / tablesize
当负载因子增大时,散列表的性能也会随之下降。经过测试,当负载因子大于0.50时,再散列将不是一种切实可行的解决方案。
结论:只应该在快速而又随机性强的情况下或者快速原型化的环境中使用再散列方法。它的主要优点是:很容易进行动态编码,在确保表负载较低并且不太可能执行删除操作的情况下它的速度足够快。对于其他需求,应该使用外部拉链法。
相关文章推荐
- 第5天:散列HASH(二)冲突解决办法之线性再散列法
- 通过PHP的hash冲突漏洞进行DDoS攻击的解决办法
- Cuckoo Hash——Hash冲突的解决办法
- java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区
- Hash冲突的四种解决办法
- Hash冲突解决办法
- 解决hash冲突的办法
- 散列表及冲突的解决办法
- Cuckoo Hash——Hash冲突的解决办法
- hash冲突解决办法
- hash 冲突及解决办法。
- 解决Hash冲突的办法
- java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区
- 页面内多控件验证冲突的解决办法
- 关于MYSQL编程使用VS2015编译报“LNK4272库计算机类型“X86”与目标计算机类型“x64”冲突”的解决办法
- 解决Hash冲突四种方法
- IOS引入第三方冲突解决办法
- HashMap解决hash冲突
- android view 滑动冲突解决办法
- ListView item的点击冲突解决办法