10sir 2019-09-26 12:27 采纳率: 0%
浏览 869

关于散列表中除留余数法构造的散列函数,除数选择素数的疑问

正在学习数据结构里的散列相关知识,书里一般都会提到,如果用除留余数的散列函数,最好选择素数作为除数。但没有对此详细的证明。

对此不太理解,个人理解是,无论素数还是合数,在取模的一个周期内都是均匀分布的单射的,并不会因为除数有质因数改变分布和冲突情况。

看了一些其他文章,也没有具有普遍性的证明。有的文章中会用一个特例来说明素数作除数更好,但特例不能证明一般性(例如有的文章中会拿一个具有公因数3的数列为key,然后mod6,结果表明这些key都被散列在0、3、6的地址上,以此来说明除数不应该用合数。但这个观点显然站不住脚,因为我也可以举一个具有公因数7的序列为key来mod7,也会造成严重冲突,而7是素数)

对于平常的应用中,如果散列的key通常不具有普遍的规律(例如都是某个数的倍数)而更倾向于随机性(比如储存一些号码,没有特殊规律),在这种随机输入的情况下是不是除数是否是素数不影响散列产生冲突的情况?如果依然有影响,能否有详细的具有普适性的证明

本人才疏学浅,想不通这个问题,特来请教

  • 写回答

2条回答

  • threenewbee 2019-10-01 10:02
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料