Stoned's Blog

A startup hacker.

一定会发生和一定不会发生的事情

谈起这个话题,原因是我的一次愚蠢的尝试。我曾经在一个游戏中用虚拟积分玩过这样的游戏,我先用1个积分去投注,如果输了,我就翻倍去投注,直到我输光为止。而我不相信我能连输十盘,我觉得那是一个不可能发生的事情。结果很明显,我为了赚一个积分,把我的所有积分都输光了。所以从这点出发,我觉得有必要去正视什么是一定会发生的事情,什么是一定不会发生的事情,两者的边界是什么?

一定会发生的事情

赌博

以我上述的例子为准,假设你的人品爆发,碰到赌场了绝对公平的游戏,你赢的概率有50%。所以我们可以计算一下你连输10(或11次,下方是11次的概率)盘,输掉内裤的概率有多大。

连输11次的概率=m¹º=0.0009765625 其中m=0.5

所以,很明显你连输11盘的概率很低,换言之,你赢的概率达到了99.90%,这个概率达到了千足金的含金量。可问题是,这够稳固吗?这就意味着,你玩1000次,你就要输掉一次,只为了赚1块钱。

ok,你可以说假设你每天玩一次,1000天才会输掉一次,就是说快3年你才输掉一次。这看起来还挺好的。常胜将军。但问题关键是,这是赌博,赌博最重要的一点是趋利,是贪婪,没有人会满足一天只赚一块钱,说不定你一天就会玩上100盘,不到十天,你就输光了你的所有资本。

我称上述的例子为一定会发生的事情,哪怕它的概率达到了99.9%。

一定不会发生的事情

飞机失事

众所周知,飞机失事的概率是很低的,但到底是一个什么量级的数据呢?

Accident statistics的统计,平均340万次飞行才会有一次至少一人死亡的记录,所以全身而退的概率就等于

1-1/3400000 = 0.99999970588

这个比例就相当于,如果象梁朝伟一样,每天飞到巴黎去喂个鸽子,第二天飞回来(每天一次飞机)。那么9315年才能出现一次(至少一个人死亡)的飞机失事。

所以这个比例在我们看来是几乎不会出现的概率,我们暂时可以称之为一定不会发生的事情。

UUID(Universally Unique Identifier)

UUID是计算机上普遍使用的用于唯一标识的标识符。它一般是根据mac地址+时间戳+随机数生成的。

UUID的标准型式包含32个16进位数字,以连字号分为五段,形式为8-4-4-4-12的32个字符。示例:
550e8400-e29b-41d4-a716-446655440000

所以假设UUID是全随机的,那么它的概率是

16的32次方 = 3.4 x 10的38次方

所以,也就是说随机两次,重复一次的概率=1/ 3.4*10的38次方

那随机UUID的重复机率是多少呢?

随机产生的UUID(例如说由java.util.UUID类型产生的)的128个比特中,有122个比特是随机产生,4个比特在此版本('Randomly generated UUID')被使用,还有2个在其变体('Leach-Salz')中被使用。利用生日悖论,可计算出两笔UUID拥有相同值的机率约为   
p(n)\approx 1-e^{-n^2/{2 \cdot x}}
以下是以x=2122计算出n笔UUID后产生碰撞的机率:
n   机率
68,719,476,736 = 2的36次方   0.0000000000000004 (4 x 10-16)
2,199,023,255,552 = 2的41方    0.0000000000004 (4 x 10-13)
70,368,744,177,664 = 2的46方  0.0000000004 (4 x 10-10)
与被陨石击中的机率比较的话,已知一个人每年被陨石击中的机率估计为170亿分之1[1],也就是说机率大约是0.00000000006 (6 x 10-11),等同于在一年内置立数十兆笔UUID并发生一次重复。换句话说,每秒产生10亿笔UUID,100年后只产生一次重复的机率是50%。如果地球上每个人都各有6亿笔UUID,发生一次重复的机率是50%。
产生重复UUID并造成错误的情况非常低,是故大可不必考虑此问题。
机率也与乱数产生器的质量有关。若要避免重复机率提高,必须要使用奠基于密码学上的假乱数产生器来生成值才行。

所以,UUID的重复可以认为是一定不可能发生的事情。而这个概率相比飞机失事的概率来说,对我们来说,那真的是非常非常放心了。如果飞机失事的概率达到UUID重复的概率,那就没有空难了。

两者的边界

当我们去评估哪一些属于一定会发生,哪些是一定不会发生的时候,有两个指标。一个是单次发生的概率,第二个是你重复的次数。而我们去评估的时候,通常会以相对夸张的次数来评估最终发生的概率。

以飞机失事的概率来计算,假设一个人的寿命是90年,每天坐一班飞机。那么他在有生之年失事的概率<1%。虽然没有绝对安全,但相对更为复杂的生存环境,我觉得这已经是一个完美的概率了。

所以我觉得,飞机失事的概率为分界(1%的最终概率),远大于最终死亡概率的,那么它就可以认为是一定会发生的事情,而远小于最终死亡概率的,那么可以列为安全概率。而在这概率附近的,看你个人自己的看法啦。

参考资料