中大奖的秘密!彩票的数学知识

大数据
2005年2月,美国的一个彩票品种,就出现了漏洞,被麻省理工学院的学生发现了。随后的七年,这个学生反复购买这个品种,一共赚到了300万美元。本文介绍他怎么做的,以及其中的数学原理。我依据的材料,主要来自数学教授 Jordan Ellenberg 在斯坦福大学的一次演讲(Youtube)。

彩票怎样才能中奖?

理论上,只能靠运气。但是,如果规则设计得不好,就可以钻漏洞。 

[[228977]]

2005年2月,美国的一个彩票品种,就出现了漏洞,被麻省理工学院的学生发现了。随后的七年,这个学生反复购买这个品种,一共赚到了300万美元。

本文介绍他怎么做的,以及其中的数学原理。我依据的材料,主要来自数学教授 Jordan Ellenberg 在斯坦福大学的一次演讲(Youtube)。

一、期望值

彩票最重要的数学概念,叫做"期望值"(expected value),即同一种行为多次重复以后,所能得到的平均收益。

举例来说,如果每次抽奖需要2元,假设200次抽奖可以中奖一次,奖金为300元。那么,你花了2000元,一共抽奖1000次,中奖了5次,奖金为1500元。

也就是说,1000次抽奖的总收益是1500元,每次的平均收益是1.5元,这就是期望值。它的计算公式如下。

  1. 期望值 = 300 * (1 / 200) + 0 * (199 / 200) = 1.5 

期望值是1.5元,但是每次抽奖成本2元,于是净亏损0.5元。

一看就知道,这个事情是不划算的,做得越多,越不划算。偶尔买一次彩票,倒也算了;如果你一天到晚不断买彩票,就肯定会亏很多钱(上例是每200次亏100元)。

总之,期望值是衡量彩票收益的一个关键指标。

二、马萨诸塞州的 WinFall 彩票

美国马萨诸塞州有一个彩票品种,叫做 WinFall。它的规则很简单:1到48里面,你猜6个数字,猜中就有奖。

  • 四等奖(6个猜中2个):奖金2元
  • 三等奖(6个猜中3个):奖金5元
  • 二等奖(6个猜中4个):奖金150元
  • 一等奖(6个猜中5个):奖金4000元
  • 特等奖(6个猜中6个):奖金池剩余的全部奖金

有一期,一共卖出了930万张彩票,其中特等奖一个,奖金100万美元,一等奖238个,二等奖11625个,三等奖19.8万个,四等奖136.8万个。

计算可知,这种彩票的期望值是0.798元。 

  1. 期望值 =  
  2. 100万 * ( 1 / 930万) +  
  3. 4000 * ( 238 / 930万) +  
  4. 150 * (11625 / 930万) +  
  5. 5 * (19.8万 / 930万) +  
  6. 2 * (136.8万 / 930万 )  
  7. = 0.798 

每张彩票的价格是2元,可是平均收益只有0.798元,连一半都不到,可见这种彩票是非常不划算的。因此没有吸引力,购买这种彩票的民众不断减少。

州政府很着急,因为政府从彩票抽成20%(每张0.4元)。如果销售量减少,政府的收益也会减少。于是,政府为了增加这种彩票的吸引力,决定修改彩票规则。

三、新规则

新的规则是,如果当期没有特等奖(没人猜中6个数字),那么奖金会分配给一等奖、二等奖、三等奖的得主,各奖项新的中奖金额如下。

  • 一等奖(6中5):50000元
  • 二等奖(6中4):2385元
  • 三等奖(6中3):60元

还是使用前面的中奖率,计算期望值。 

  1. 期望值 = 
  2.   50000 * ( 238 / 930万) + 
  3.   2385 * (11625 / 930万) + 
  4.   60 * (19.8万 / 930万) + 
  5.   = 5.53 

每张彩票的价格还是2元,但是期望值变成了5.53元。购买这种彩票就变得非常划算,大量购买的话, 可以得到2.5倍的收益。之所以期望值大于彩票的成本,是因为奖金池还包含前期剩余的奖金。

麻省理工学院的一个学生,发现了这一点。他凑了5000元购买彩票,结果中了将近15000元!

四、如何选择号码?

现在我们知道,新规则的彩票是有利可图的,可以大量购买。但是,还有一个问题,应该怎么选择号码,才能保证收益?也就是说,48个号码里面,你应该选择哪6个号码,才能收益最大化?

毕竟你不能购买所有彩票,因为彩票的收益来自没中奖的那些人。你只能购买一部分彩票,设法使得自己购买的号码有最大的中奖可能。

为了简化思考,让我们考虑一种简单的情况。1到7里面猜三个数字,奖金如下。

  • 猜中3个:奖金6元
  • 猜中2个:奖金2元
  • 猜中1个:无奖金

你可以同时选择七种组合(即购买七张彩票),请问应该如何选择号码?

五、组合数公式

首先,让我们考虑一下,1到7这七个数字里面,三个数字的组合一共有多少种?这在数学里面,叫做组合数公式。

  • 组合数公式是指从 m 个不同元素中,取出 n(n ≤ m)个元素的所有组合的个数,用符号 c(m, n) 表示。

它的计算公式如下。

  1. c(m, n) = m! / n! * (m - n)! 

上面公式中,感叹号表示阶乘,比如4! 等于4 * 3 * 2 * 1 。

按照上面的定义,七个数字里面的三个号码的组合,共有c(7, 3)个。

  1. c(7, 3) = 7! / 3! * (7 - 3)! = 35 

这就是说,三个数字的组合共有 35 种。我们可以把它们全部列出来。 

  1. 123 124 125 126 127 
  2. 134 135 136 137 
  3. 145 146 147 
  4. 156 157 
  5. 167 
  6. 234 235 236 237 
  7. 245 246 247 
  8. 256 257 
  9. 267 
  10. 345 346 347 
  11. 356 357 
  12. 367 
  13. 456 457 
  14. 467 
  15. 567 

上面是所有35种可能的组合,你必须从中选出7种。请问应该选择哪七种?

六、最佳组合

答案是下面这七种组合。

  1. 123 145 167 247 256 346 357 

这七张彩票能让你的收益最大化。因为,不管最后的中奖号码是什么,它们可以保证你总是获得6元奖金。如果中奖号码是123,那么你拿到头奖6元;如果中奖号码是367,那么167、346、357这三张彩票各自猜中两个号码,你中了三个小奖,奖金总额也是6元。

仔细观察这七张彩票,你会发现它们是精心选择的:每个数字都正好出现三次。这导致你要么中一个大奖,要么中三个小奖。

七、几何选择法

这七张彩票是怎么选出的呢? 

有一种几何方法,可以非常简单地做到这一点。七个号码就是七个点,把它们用直线连起来,每根线上只能有三个点,而每个点出现在三根线上。画成上面的形状,就得到了七根线(内部的圆也算一根线)。然后,记录一下每根线上的号码,很简单就选出了七张彩票。

更严谨的证明是这样的:1到7这七个数字,共有21种两个数字的组合(C(7, 2)),这意味着只要把这21种组合都买全了,就可以保证中三个小奖。因为三个中奖号码里面,共有三种两个数字的组合(比如中奖号码是367,那么36、37、67都可以中小奖)。另一方面,由于每张彩票包含三个号码,即包含三种两个数字的组合,那么最少只要买7张彩票就能覆盖全部21种组合。

八、实际的策略

回到前面的问题,马萨诸塞州的彩票应该怎么买?

6个号码只要猜中4个,就可以中二等奖,只要把所有四个号码的组合都买了,就可以确保中15个二等奖(6个中奖号码共有15个四个号码的组合C(6, 4))。

48个号码里面共有194580种四个号码的组合(C(48, 4)),既然一张彩票包含15种组合,那么最少购买12972张彩票就够了(194580 / 15 = 12972),就可以包含所有四个号码的组合。如果有兴趣的话,你可以写一个程序,算出包含这194580种组合的所有彩票。

购买12972张彩票,需要25944元(12972 * 2)。根据前面的奖金额,二等奖的奖金是2385元,那么15个二等奖就是35775元(2385 * 15)。因此,投入25944元,可以无风险地获得35775元。当然,这样做的前提是,当期没人猜中特等奖,否则奖金就会被大大稀释。

责任编辑:未丽燕 来源: 阮一峰的网络日志
相关推荐

2017-03-27 08:36:08

2012-07-27 09:25:40

2017-08-15 17:06:55

前端HTML5手势原理

2018-03-22 19:48:47

前端HTML5数学知识

2021-01-06 15:29:54

数据科学数学知识数学工具

2022-05-24 10:49:43

分布式程序员系统

2019-01-15 14:44:16

2021-07-27 15:40:13

计算机奥运 技术

2019-08-26 15:00:13

2021-09-14 10:39:16

入侵检测数据泄露日志文件

2020-06-19 10:02:53

JVMJava语言

2018-05-09 15:22:08

人工智能程序设计数学

2020-09-15 12:57:46

C 语言浮点数内存

2011-08-29 09:59:26

2013-11-27 11:04:05

震网病毒震网Stuxnet

2021-08-11 22:18:43

Socket函数监听

2019-12-05 12:11:37

DevOps开发应用程序

2020-04-15 13:55:28

Kubernetes容器

2020-04-29 13:45:42

机器学习ML数据科学家

2022-06-29 16:37:15

算法JS数组
点赞
收藏

51CTO技术栈公众号