大家讨论一下这样一个hash的实现

fish_kun 2008-08-06 05:11:56
有M个不相同的随机的整数,范围为0-N(N远大于M),如何实现这组整数的hash呢?
...全文
188 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lllanm 2008-08-26
  • 打赏
  • 举报
回复
md5啊 慢呢
lqflyc 2008-08-23
  • 打赏
  • 举报
回复
对于随机数据,取模是比较好的方法了,当然还有其他的哈希函数,但因为是随机的数据,不论有哪种哈希函数都不一定能达到最优。在一定的时间开销内,我们可以在(M, M+X)范围取一碰撞因子最小的数来取模,这样我们就可以对于每一组不同的数据都有最小的碰撞因子,这样子估计可以达到全局最优了。
toughman200321 2008-08-23
  • 打赏
  • 举报
回复
看看书了 有很多的 如 md5a
toiler 2008-08-22
  • 打赏
  • 举报
回复
md5
Super.Jiju 2008-08-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fish_kun 的回复:]
难道大家认为取模就不会有碰撞冲突吗?
[/Quote]

你脑袋咋想的?
取模才能将这些数均匀的放在一个规定的空间里面
加减乘除之类的你要能搞出来你也忒牛了
  • 打赏
  • 举报
回复
当然会有了!hash并不意味着就不会发生碰撞。
如果你一定要不冲突,那还hash干什么?直接用N大小的数组好了。
fish_kun 2008-08-07
  • 打赏
  • 举报
回复
难道大家认为取模就不会有碰撞冲突吗?
  • 打赏
  • 举报
回复
理论来说只要hash之后的空间小于N,都有可能发生冲突。
一味追求最小冲突并没有什么意义,象原来N大小的数组一定不会冲突,你为什么不用?还是嫌它太耗空间了。
反过来,mod (N-1) 冲突最小,最多只会发生一次碰撞,但这和hash之前有什么区别?

权衡空间开销和碰撞次数两样指标,只要二者都在能接收的范围之内就可以了。如果你觉得mod M还不够的话,还可以对更大的数取模,这样碰撞可能性会更小一些。
勇敢的天牛 2008-08-07
  • 打赏
  • 举报
回复
数字是随机的取模就比较好了,如果你的数据有规律可以有针对性的使用其他办法
fish_kun 2008-08-07
  • 打赏
  • 举报
回复
有没有比取模更好的方法,使得冲突最小?
Super.Jiju 2008-08-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 fish_kun 的帖子:]
有M个不相同的随机的整数,范围为0-N(N远大于M),如何实现这组整数的hash呢?
[/Quote]

总共才M个随机的整数,最多mod M了,如果M不大的话,就可以了;

如果M也很大的话,考虑找一个大约M/x左右的一个质数了;x是你认可范围内的碰撞

  • 打赏
  • 举报
回复
一般会采取 mod M 的做法

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧