栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

php哈希冲突的解决

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

php哈希冲突的解决

在使用哈希表之后,我们会发现有些关键词的地址相同,所以在映射时候,键值放在同一个地方,这就会造成我们所说的哈希冲突。解决哈希冲突的方法有很多,这里我们只讨论在php中的使用,所以为大家推荐的链接法。下面我们就链接法会进行优缺点讲解,然后带来解决哈希冲突的使用。

1.哈希冲突概念

对应不同的关键字可能获得相同的hash地址即 key1≠key2,但是f(key1)=f(key2)。这种现象就是冲突,而且这种冲突只能尽可能的减少,不能完全避免。因为哈希函数是从关键字集合和地址集合的映像,通常关键字集合比较大,而地址集合的元素仅为哈希表中的地址值。

2.冲突解决:链接法

链接法优点:

(1)拉链法处理冲突简单,且无堆积现象,即非同义词绝不会发生冲突,因此平均查找长度较短;

(2)由于拉链法中各链表上的节点是动态申请的,故它更适合造表前无法确定表长的情况;

链接法缺点:

指针需要额外的空间,故当结点规模较小时,开放定址法较为节省空间,而若将节省的指针空间扩大散列表的规模,可是装载因子变小,这又减少了开放定址法中的冲突,从而提高平均查找速度。

3.解决实例

(1)使用Hash函数计算关键字的Hash值,通过Hash值定位到Hash表的指定位置。

(2) 如果此位置已经被其他节点占用,把新节点的$nextNode指向此节点,否则把新节点$nextNode设置为null。

(3)把新节点保存到Hash表的当前位置。

经过这三个步骤,相同的Hash值得节点会被连接到同一个链表。

查找算法相应的修改为如下格式:

Public functionfind($key){
                           $index = $this ->hashfunc($key);
                           $current =$this->buckets[$index];
                           while(isset($current)){//遍历当前链表
                                  if($current->key== $key){  //比较当前节点的关键字
                                         return$current -> value;//查找成功
                                  }
                                  $current =$current ->nextNode;  //比较下一个节点
                           }
                           Return null;  //查找失败
               }

以上就是php哈希冲突的解决方法,可以看出链接法在处理一些简单的哈希冲突上是非常不错的选择。对于一些其他的哈希冲突处理办法,大家可以在课后自行了解。更多php学习指路:php数组

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/14415.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号