hashtable桶数通常会取一个素数分析
发布时间 - 2026-01-10 22:02:20 点击率:次为什么一般hashtable的桶数会取一个素数

设有一个哈希函数
H( c ) = c % N;
当N取一个合数时,最简单的例子是取2^n,比如说取2^3=8,这时候
H( 11100(二进制) ) = H( 28 ) = 4
H( 10100(二进制) ) = H( 20 )= 4
这时候c的二进制第4位(从右向左数)就”失效”了,也就是说,无论第c的4位取什么值,都会导致H( c )的值一样.这时候c的第四位就根本不参与H( c )的运算,这样H( c )就无法完整地反映c的特性,增大了导致冲突的几率.
取其他合数时,都会不同程度的导致c的某些位”失效”,从而在一些常见应用中导致冲突.
但是取质数,基本可以保证c的每一位都参与H( c )的运算,从而在常见应用中减小冲突几率..
(个人意见:有时候不取质数效率也不会太差..但是无疑取质数之比较保险的..)
以上就是我的理解
补充一点,这里是说在常见应用中,往往有些数据会比较相近,这时候用质数比较好,比如要存放的数据是压缩的状态,比如存储一个描述当前搜索状态的表,的这时候哈希不用质数冲突机率就比较大。
如果是随机分布的整数,那么哈希模数只要取到足够大,在概率上来说都是一样的,但是这显然脱离实际应用。
你说的情况 是比较特殊的,因为选取了比较小的一个质数,当选去大质数N时,就可以仅在N进制的某一位失效,结合计算机系统的特性,N进制位表示法往往是不关键的,而常用的2^N进制比较关键,所以可以避免冲突。
其实,偶用一些大数做过测试,用来存放一个压缩为二进制的邻接矩阵,当模数足够大时,即便是合数也能有很接近质数的效果,但在某些(几十个)合数上会造成效率严重下降,所以质数是比较保险的。
你不妨自己做实验,不要去选随机整数,而要考虑一些常见应用,用质数和合数进行测试,主要考察平均装载因子,你得到的结论可能和我一样:合数绝大多数时候效果也不错,但在一部分合数上效果差得出奇,而质数几乎全部都有很好的效果。
我个人认为更普遍意义的理解,如果不取素数的话是会有一定危险的,危险出现在当假设所选非素数m=x*y,如果需要hash的key正好跟这个约数x存在关系就惨了,最坏情况假设都为x的倍数,那么可以想象hash的结果为:1~y,而不是1~m。但是如果选桶的大小为素数是不会有这个问题。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# hashtable桶数
# hashtable桶数分析
# hashtable桶数素数
# 遍历Hashtable 的几种方法
# 浅析Java中Map与HashMap
# Hashtable
# HashSet的区别
# Java中HashMap和Hashtable及HashSet的区别
# java中Hashtable和HashMap的区别分析
# 全面解析java中的hashtable
# 深入PHP中的HashTable结构详解
# java hashtable实现代码
# java中vector与hashtable操作实例分享
# 合数
# 这时候
# 但在
# 不取
# 模数
# 都有
# 很好
# 会有
# 和我
# 你说
# 出现在
# 而在
# 这个问题
# 要去
# 有一定
# 希望能
# 能有
# 比较好
# 做过
# 是说
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何基于云服务器快速搭建网站及云盘系统?
微信推文制作网站有哪些,怎么做微信推文,急?
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
,在苏州找工作,上哪个网站比较好?
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
html5的keygen标签为什么废弃_替代方案说明【解答】
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
Thinkphp 中 distinct 的用法解析
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
HTML 中动态设置元素 name 属性的正确语法详解
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
如何续费美橙建站之星域名及服务?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
如何用美橙互联一键搭建多站合一网站?
如何在阿里云部署织梦网站?
Java类加载基本过程详细介绍
微信小程序 scroll-view组件实现列表页实例代码
jquery插件bootstrapValidator表单验证详解
如何在建站主机中优化服务器配置?
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
企业网站制作这些问题要关注
Laravel如何配置任务调度?(Cron Job示例)
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
大连网站制作公司哪家好一点,大连买房网站哪个好?
浅谈Javascript中的Label语句
油猴 教程,油猴搜脚本为什么会网页无法显示?
网站建设整体流程解析,建站其实很容易!
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
JavaScript如何实现倒计时_时间函数如何精确控制
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
zabbix利用python脚本发送报警邮件的方法
如何在阿里云服务器自主搭建网站?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
详解jQuery停止动画——stop()方法的使用
如何在腾讯云服务器快速搭建个人网站?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
Laravel如何使用查询构建器?(Query Builder高级用法)
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
高端智能建站公司优选:品牌定制与SEO优化一站式服务
原生JS获取元素集合的子元素宽度实例
Laravel如何处理CORS跨域请求?(配置示例)
香港网站服务器数量如何影响SEO优化效果?
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧

