社区
数据结构与算法
帖子详情
散列函数除余法选用素数, 均匀分配是结果, 而原因是key值落在素数的倍数上的机会上最少?
GKatHere
2015-07-25 01:31:33
如题,
散列函数 h(key) = key mod p; 当key是均匀分配(或真正随机)的时候, 如 1 - 0xFFFFFFFF 各一次, 那么p选任何值, h(key)都是均匀的,
而自然中的时候并不是如此, 比如, 会计就会知道, 对于最后数值的尾数, 1-3 出现的机率远大于 7-9, 所以, 自然产生的key值, 是素数的整数倍的时候最少, 所以p选素数
个人认为, 各位指教.
...全文
165
1
打赏
收藏
散列函数除余法选用素数, 均匀分配是结果, 而原因是key值落在素数的倍数上的机会上最少?
如题, 散列函数 h(key) = key mod p; 当key是均匀分配(或真正随机)的时候, 如 1 - 0xFFFFFFFF 各一次, 那么p选任何值, h(key)都是均匀的, 而自然中的时候并不是如此, 比如, 会计就会知道, 对于最后数值的尾数, 1-3 出现的机率远大于 7-9, 所以, 自然产生的key值, 是素数的整数倍的时候最少, 所以p选素数 个人认为, 各位指教.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
GKatHere
2015-07-29
打赏
举报
回复
呃. 只能自己顶下
几种常见散列方法
常见散列方法 1.取余法:hash(
Key
)=
Key
%M。其中M的取值有技巧。M首先尽量不能选取较为规整的数字,如2的n次方,这样是很容易出现分布不
均匀
的情况,也就是很容易出现散列冲突,散列的意义就变小了。那么我们一般选取一个合适的
素数
M来作为余数。个人理解:很多个数余上同一个数M,会冲突是几乎没办法的事情,但是如果能让某一类的数都不可能发生冲突那么就很好了。那么假设数S,gcd(S,M)一定是为...
哈希算法用
素数
(质数)求余的初步思考
例如,拿7和8比较 7和8的差别在于8有两个因数,2和4,我们来讨论取模时,2和4的加入改变了什么 假设
key
是由一个对象的多个字段分别乘某个数得到的。 比如一个人的
key
= 2*年龄 + 4*身高。//例如年龄随机分布在1-100,身高随机分布在100-200。 我们再列出2和4的
倍数
2,4,6,8,10,12,14,16,17...... 4,8,12,16,20,24,18,32...... 其中黑体为8的
倍数
,那么显而易见,合数8由于其因数的存在,导致
key
出现在第零下标的元素概率
js数据结构第七弹:散列
散列是一种常用的数据存储技术, 散列后的数据可以快速地插入或取用。 散列使用的数据结构叫做散列表。 在散列表上插入、 删除和取用数据都非常快, 但是对于查找操作来说却效率低下 1 散列概览 哈希表也叫散列表,是根据关键码值(
key
,value)而直接进行访问的数据结构,它是通过键码值映射到表中一个位置来访问记录的,散列表后的数据可以快速的插入和使用,散列使用的数据结构叫做散列表。 散列表的优点及缺...
hash函数为什么要选择对
素数
求余?
hash函数为什么要选择对
素数
求余? 问题来源? 引出此问题,是看到一篇有关jdk中HashMap和Hashtable对于hash算法的选择。 HashMap中对
key
求完hash值,在进行数组寻址时,使用的方法是位运算(代替的取模运算)。公式如下: (length - 1) & hash // length为HashMap的容量,是2的n次方 在这里插播一个小知识...
hashtable——散列表
2018-11-01散列表---哈希表基于快速存取,时间换空间一种基于线性数组的线性表,不过元素之间并非紧密排列
散列函数
--通过函数,有
key
关键码计算地址(相当于数组下标),函数尽可能使元素
均匀
分布负载因子a:实际元素只有 n 个时,我们为其申请了 m 个元素空间(m>n),即桶的个数; 负载因子 = n/m a > 1 碰撞频率大 ...
数据结构与算法
33,007
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章