编程中遇到的数学问题

前段时间做一个解密程序,大致的模型可以描述如下:

有一种hash算法H,一个含有N条记录的明文字典,现要创建该字典针对H算法的全查表。对明文字典中的每一条记录P,得到其hash值S=H(P)。根据S的值对这N条记录进行排序,放在全查表相应的位置上,以便破解时迅速定位。

实际运行时发现,N条记录的位置发生大量冲突,当N很大时,有近40%的记录相应位置发生冲突。

 

这个问题等价于:

把N个球随机放到N个位置上,最后将有多少个位置上是空的?

 

解:

对任意一个位置,一次都没被访问到的概率是(N-1/N)^N=(1-1/N)^N,当N很大是,极限是1/e,大约是37%。即有1/e*N个位置上没有放到球,也就等于会有1/e*N次对已有位置的冲突访问。

 

于是这个全查表中的每条记录存储时,不得不增加一些位置信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值