| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2637 人关注过本帖
标题:哈希算法 冲突处理
只看楼主 加入收藏
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
结帖率:93.75%
收藏
 问题点数:0 回复次数:4 
哈希算法 冲突处理
Hash算法在处理冲突的时候用的方法有线性探测、 线性补偿探测(就是一下往后一下往前)、拉链法(挂链表)。

在已知插入数据规模的情况系,好像用线性探测蛮好的。
那么在线性探测里面有一次位移一次的(但这种容易产生堆聚),也有取平方的。。。一次位移一下的方法肯定是可以完全利用整个哈希表的空间,这没有异议。我的问题是这个平方探测,他是不是也能走遍全部的哈希地址?我自己感觉是不行啦,1.4.9.16.25....不过还有取余运算,所以我也不是很确定。。。

而不管平方探测可行不可行,我们是不是应该考虑溢出的问题,因为通常用来计算哈希表位置的变量都是int,平方到一定大小也要溢出把。。这个时候要不要阻止呢?(如果不阻止,貌似也只是会跑到另一个方向上去,好像也不会怎么滴,)。。。。

我是看视频自学的C语言,没办法请教老师啦。hash这一节也只是一笔带过。我上网搜索,多数博客也只是谈了谈这个冲突解决方案,并没有介绍这个hash表的空间利用率。
搜索更多相关主题的帖子: 空间 规模 拉链 
2016-08-20 17:54
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
平方探测是有条件的。
散列表的大小size必须是 某个4k+3形式的素数,这样平方探测才能探测到整个散列表空间。
比如size = 11 ;关键字序列随便都可以,不超过11 。 比如{1,2,3,4,5,6}
h(key) = key mod 11 +/- i平方 (i为1,2,3。。。。。q)q<=(size/2向下取整)
2016-08-25 00:42
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
最近在某平台做了两道模拟哈希算法计算出每个元素最终在哈希表中的位置。

每一次我都是建立一个初始化空的BOOL数组,直接拿计算得来的key结合题目规定的冲突解决方案去找到位置,然后直接输出那个位置,并把那个位置标记为已使用(因为这两道题都只有插入的动作没有删除)。

可是不管我怎么纠错,都是总有一个测试过不去。后来在CSDN某位前辈的博客看到其中一题的解答,我惊奇地发现,他是很认真的把每个元素确确实实地保存进去了,而且后面要插入的元素在找位置的时候如果位置上已有元素,还要比较看看是不是同一个元素,如果相同,直接输出那个位置,并且跳出循环。

一开始我以为平台这个哈希算法因为是先一次性把所有元素保存到位以后,然后根据早前输入元素的顺序一个一个从哈希表中找到位置做输出(这样两个相同的元素当然会输出同一个位置,也就是第一次保存的位置)。
为了验证这个猜想,那我就把自己的代码流程稍微拖长了一点,就是找到两个相同的元素以后,当即输出那个坐标,然后继续往后面找位置,来保存第二个进来的元素。
这样虽然第二个元素的坐标不会被输出,但是它是确确实实占了一个位置。而这样的代码在该平台上运行反而是错误的。

就是说如果有多个相同的元素要被插入哈希表,那么哈希表实际只会保存第一个元素,后面的元素都是直接输出第一个元素所在位置就抛弃了。刚开始我感觉这好不可思议,因为这样会有数据丢失,比如我可以建立一个表长为13的Hash表,却可以无限的插入5,不会报错,每次都是输出第一次插入的位置。可是如果我只要执行了1次删除,所有的5就都没了。

我讲的这个平台就是PAT。我不知道其他地方是不是也这样。但我在所有讨论哈希的地方都没有发现“哈希表中的元素都是单独存在的,不会有完全相同的两个元素插入在不同的地方”一类的言论

φ(゜▽゜*)♪
2016-08-25 04:17
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 3楼 书生牛犊
我也是在mooc上学的数据结构。。。
你说无限插入5,删除一次全部删除了。再结构体里添加数据出现次数不就行了
当times = 1表示数据只出现一次
当times = 2表示出现两次,如果要删除那个数据times-1.
2016-08-25 11:48
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 4楼 令狐少侠56
明白了

φ(゜▽゜*)♪
2016-08-25 13:05
快速回复:哈希算法 冲突处理
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019513 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved