正文
那么,那些摇到号的人,总共摇了多少次呢?下面这张图回答你:
有接近九万人第一次就摇到号了,还有190人摇了整整51次才拿到号,这个曲线非常地光滑,几个凸起点正好是调整中签率的门限,非常符合数学的美感。
有14201人,51次摇号没有一次成功。真正的幸运儿是这些人:在最近的这一期,以1/1000的概率第一次抽签就拿到了号,一共90人。
摇号程序是否公平?
作为程序员,被激发了昂扬的斗志,我们来验证一下摇号程序是否公平。
通过使用自己开发的
Hawk爬虫程序
(见备注),采集了从2011年到2016年51期每期的摇号池列表和随机种子。同时,我还下载了它的摇号程序,用于分析其摇号算法。程序使用C#编写,沙漠君破解它的源代码简直不要太容易。
为了能让不懂程序的读者也能理解,我用尽量简明的语言描述其摇号方法:假设有5人摇号,每个人都有唯一的ID,1-5,用户2,4有两倍中签率,用户3有3倍中签率,那么摇号池排列如下:
现要求从池中随机抽取三个序号。计算机能通过一个种子,可以生成一串看似随机的伪随机序列。在一般程序中,种子通常是当前运行的时间。因每次运行时间不同,所以结果也不一同。
而摇号程序有趣的地方就在这里,
种子是事先提供好的一串6位数字,一旦你知道它,那么你在摇号前就能预测哪些人被抽中。
每个人的中签倍率和ID都是确定的,因此分析6位的随机数种子是如何产生的,成了解决问题的关键。
6位随机种子是如何产生的?
研究首都之窗上用于公示随机数的2013年某期的视频。
公证人员事先从市民中选出12位代表人。主持人在鱼缸中随机抽出6个球,每个球都是一个市民代表人的号码。之后,6个代表人会依次敲击键盘,随机产生出0-9的随机数作为随机数种子。有趣的地方就在这里!!
主持人说,请每一位代表
摇
出号码,我一帧帧地分析了视频,从市民代表在键盘上的操作位置来猜测,点击的多半是是回车键,但代表按键盘都是背对摄影机的。你可以简单理解为,每按一次回车,电脑产生出一个新的0-9的数字,总计6个。
网站提供了随机产生摇号号码的程序,却没有提供随机产生六位种子的程序。
这个随机数种子本身,会不会事先保存,一定能保证随机吗?
。看下面这张图: