随机码容量计算

来源:互联网 发布:mono是什么软件 编辑:程序博客网 时间:2024/06/02 07:31


假设有这么个场景:

给每个进入房间的人分配一个随机码(数字/字母),该随机码在一段时间内有效,那么在有效期内,为了让两个人分配同一个随机码的概率保持在指定值以下,那么随机码的长度最短需要多少个字符?

我是这么计算的:

设:

并发数:P(如:100个/s)

缓存时间:T(如:1800s)

碰撞率:R(如:1‰)

容量:C

则:

C = P * T / R

以上面的测试用例代入计算:

C = 100 * 1800 * 1000 = 180000000(1.8亿)

也就是说这个随机码字符串的总可能数要大于1.8亿个,那么需要多少位就好算了

数字有10种可能;字母有26种可能;数字&字母有36种可能

可直接参照下表(大概值):

长度数字字母数字&字母数字&字母(含大小写)41万46万168万1478万510万120万6000万9亿6100万3亿22亿568亿71000万80亿780亿3.52万亿81亿2000亿2.8万亿218万亿910亿5.4万亿100万亿1.35万万亿10100亿141万亿3656万亿84万万亿
只能选大于1.8亿的情况,即:

纯数字的话:9个字符

纯字母的话:6个字符

数字+字母的话:6个字符


理论上来说,实际碰撞率会随着时间的增加慢慢提高,但由于随机码的有效期,所以该值始终会低于R

从实际测试效果来看,也基本符合理论预期。


适用于需要用随机ID的情况,具体应用场合就不多说了:)

----------------------------------------- 2013-5-3 更新 -------------------------------------------

关于这里的碰撞率R,多说一点:

若P=100,R=1%,则说明每秒钟发生一个碰撞;

若P=100,R=1‰,则10秒钟发生一个碰撞;

若P=1000,R=1%,则每秒发生10个碰撞;

……

R的取值可以以此做参考。

原创粉丝点击