程序员的财务自由之路(三)- 赌徒输光定理

一、前言

  • 小时候想过买彩票,每天买一张,也就两块钱,买一辈子,总能中个 1000 W 1000 W 1000W 吧,长大以后才知道,有两道鸿沟是最难逾越的:
  • 1)坚持本来就不是一件容易的事情;
  • 2)概率是被精心设计过的;
  • 那么,今天我们来谈谈 买彩票 和 赌博 是否能够让我们实现财务自由;

二、双色球

  • 接下里我们从数学的角度揭露下双色球中头奖是一件多么不容易的事情;

1、规则

  • 1)“双色球” 每注投注号码由 6个红色球号码1个蓝色球号码 组成。红色球号码从 [ 1 , 33 ] [1,33] [1,33]中选择;蓝色球号码从 [ 1 , 16 ] [1,16] [1,16]中选择;
  • 2)一周开三期,每注 2元
  • 3)投注方式有 “单式” 和 “复式” 两种,为了简化问题,只讨论 “单式” 投注的情况;

2、单式中奖概率统计

  • 由于三等奖已经只有3000块了,所以三等奖以后的情况已经和财务自由无缘了,所以就不列出来咯;
奖级红色球号码蓝色球号码说明奖金额度中奖概率
一等奖●●●●●●选6+1中6+1最高1000W 1 C 33 6 C 16 1 = 1 17721088 ≈ 5.64299438 × 1 0 − 8 \frac {1}{C_{33}^6C_{16}^1} = \frac {1} {17721088} \approx 5.64299438 \times 10^{-8} C336C1611=1772108815.64299438×108
二等奖●●●●●●选6+1中6+0最高300W C 15 1 C 33 6 C 16 1 = 15 17721088 ≈ 8.46449157 × 1 0 − 7 \frac {C_{15}^1}{C_{33}^6C_{16}^1}=\frac {15} {17721088} \approx 8.46449157 \times 10^{-7} C336C161C151=17721088158.46449157×107
三等奖●●●●●选6+1中5+1固定3000元 C 6 5 C 27 1 C 33 5 C 16 1 = 162 17721088 ≈ 9.14165090 × 1 0 − 6 \frac {C_{6}^5C_{27}^1}{C_{33}^5C_{16}^1}=\frac {162} {17721088} \approx 9.14165090 \times 10^{-6} C335C161C65C271=177210881629.14165090×106
  • 我们看到,如果能够中个一二等奖,起码有一笔启动资金,可以用来买房,或者做其他理财;
  • 于是,我们把 中一二等奖 的概率相加,得到大概是:
    P = 9.0287 × 1 0 − 7 P = 9.0287 \times 10^{-7} P=9.0287×107
  • 那么,得出如果连续买 x x x 期,一期都没有中的概率是:
    ( 1 − P ) x (1-P)^{x} (1P)x
  • 至少中一次的概率就变成了:
    1 − ( 1 − P ) x 1 - (1-P)^{x} 1(1P)x

3、至少中一次高额奖金的概率

  • 假设我们用剩下 70 70 70 年的时间来买彩票,总共 70*365 (为了简化问题,不算闰年)天,双色球开奖期数为 70 ∗ 365 ∗ 3 7 = 10950 70 * 365 * \frac {3}{7} = 10950 7036573=10950 期,如果每期我们都买一注,一辈子花费 21900 元,最后至少中一次高额奖金的概率为:
    P h = 1 − ( 1 − 9.0287 × 1 0 − 7 ) 10950 ≈ 0.098 = 0.98 % P_{h} = 1 - (1-9.0287 \times 10^{-7})^{10950} \approx0.098 = 0.98\% Ph=1(19.0287×107)109500.098=0.98%
  • 连百分之一都不到!好!你不甘心,说:“我每期多买几注,是不是概率就高很多了!”
  • 嗯!满足你的欲望,我们来用程序的角度来计算下:
每期投注数70年总投注数70年总耗费(元)至少中一次高额奖金的概率
110950219000.98%
221900438001.96%
332850657002.92%
443800876003.88%
5547501095004.82%
6657001314005.76%
7766501533006.69%
8876001752007.60%
9985501971008.51%
101095002190009.41%
1112045024090010.30%
1213140026280011.19%
1314235028470012.06%
1415330030660012.93%
1516425032850013.78%
1617520035040014.63%
1718615037230015.47%
1819710039420016.30%
1920805041610017.13%
2021900043800017.94%
2122995045990018.75%
2224090048180019.55%
2325185050370020.34%
2426280052560021.12%
2527375054750021.90%
2628470056940022.67%
2729565059130023.43%
2830660061320024.18%
2931755063510024.93%
3032850065700025.67%
3133945067890026.40%
3235040070080027.12%
3336135072270027.84%
3437230074460028.55%
3538325076650029.25%
3639420078840029.95%
3740515081030030.64%
3841610083220031.32%
3942705085410031.99%
4043800087600032.66%
4144895089790033.33%
4245990091980033.98%
4347085094170034.63%
4448180096360035.27%
4549275098550035.91%
46503700100740036.54%
47514650102930037.17%
48525600105120037.78%
49536550107310038.40%
50547500109500039.00%
51558450111690039.60%
52569400113880040.20%
53580350116070040.78%
54591300118260041.37%
55602250120450041.94%
56613200122640042.51%
57624150124830043.08%
58635100127020043.64%
59646050129210044.19%
60657000131400044.74%
61667950133590045.29%
62678900135780045.83%
63689850137970046.36%
64700800140160046.89%
65711750142350047.41%
66722700144540047.93%
67733650146730048.44%
68744600148920048.95%
69755550151110049.45%
70766500153300049.95%
71777450155490050.44%
72788400157680050.93%
73799350159870051.41%
74810300162060051.89%
75821250164250052.36%
76832200166440052.83%
77843150168630053.29%
78854100170820053.75%
79865050173010054.21%
80876000175200054.66%
81886950177390055.10%
82897900179580055.55%
83908850181770055.98%
84919800183960056.42%
85930750186150056.84%
86941700188340057.27%
87952650190530057.69%
88963600192720058.11%
89974550194910058.52%
90985500197100058.93%
91996450199290059.33%
921007400201480059.73%
931018350203670060.13%
941029300205860060.52%
951040250208050060.91%
961051200210240061.29%
971062150212430061.67%
981073100214620062.05%
991084050216810062.42%
1001095000219000062.79%
  • 代码如下,如果需要可以直接复制过去;
#include <iostream>

using namespace std;

const int SINGLE = 1107568; // C(33,6)
const int TOT = 10950;

// 二分幂加速
double Exp(double v, int ex) {
	if (ex == 0) {
		return 1;
	}
	double ret = Exp(v*v, ex / 2);
	if (ex & 1) {
		ret *= v;
	}
	return ret;
}

// 买 x 注至少中一次高额奖金的概率
double P(int x) {
	double p = 1.0 / SINGLE;
	return 1 - Exp(1-p, x);
}

int main() {
	for (int i = 1; i <= 100; ++i) {
		printf("%d|%d|%d|%.2lf%%\n", i,TOT*i, TOT*i*2, 100*P(TOT*i));
	}
	return 0;
}
  • 用整个程序不停得往上增加指数去跑,你会发现,只要每期投 1000 1000 1000 注(一周花费6000块的意思),这一生就能百分百中一次高额奖金哦,然后你会发现,实际你花费已经远远超过 1000 W 了…

4、结论

  • 买彩票只能作为娱乐,不能作为实现财务自由的正当手段;

三、赌徒输光定理

  • 谈完彩票,我们再来谈谈赌博;
  • 赌钱能够让我们财务自由吗?

1、举例

假设赌徒的初始资金为 n n n,每赌一次或输或赢,资金分别变为 n + 1 n+1 n+1 n − 1 n-1 n1。输赢概率对等,求一直赌下去资金变为 0 0 0 的概率是多少?

  • 假设从 n n n 开始一直赌下去,资金变为 0 0 0 的概率是 T ( n ) T(n) T(n),那么很显然,有如下公式:
    T ( n ) = { 1 n = 0 p n = 1 0.5 ∗ T ( n + 1 ) + 0.5 ∗ T ( n − 1 ) n > 1 T(n) = \begin{cases} 1 & n = 0 \\ p & n=1 \\ 0.5 * T(n+1) + 0.5 * T(n-1) & n>1 \end{cases} T(n)=1p0.5T(n+1)+0.5T(n1)n=0n=1n>1

2、解释

  • 1) T ( 0 ) T(0) T(0) 表示资金是从 0 0 0 变成 0 0 0 的概率,是个必然事件,所以概率为 1;
  • 2) T ( 1 ) T(1) T(1) 表示资金从 1 1 1 变成 0 0 0 的概率,因为有可能能赢,所以依赖 T ( 2 ) T(2) T(2),但是 T ( 2 ) T(2) T(2) 也依赖 T ( 1 ) T(1) T(1),所以这里定义 T ( 1 ) T(1) T(1) 为某个常量 p p p
  • 3)当资金为 n + 1 n+1 n+1 的时候,如果输了,概率为 0.5 0.5 0.5,资金就变成 n n n
  • 4)当资金为 n − 1 n-1 n1 的时候,如果赢了,概率为 0.5 0.5 0.5, 资金就变成 n n n

3、状态转移图

  • 根据上文提到的状态转移,有如下状态转移图:
0.5
0.5
0.5
0.5
n+1
n
n-1

4、递推公式

  • 再回头来看 :
    T ( n ) = 0.5 ∗ T ( n + 1 ) + 0.5 ∗ T ( n − 1 ) T(n) = 0.5*T(n+1) + 0.5*T(n-1) T(n)=0.5T(n+1)+0.5T(n1)
  • 通过移项,将它转换成递推公式如下:
    T ( n + 1 ) = 2 T ( n ) − T ( n − 1 )                  ( n > = 1 ) T(n+1) = 2T(n) - T(n-1) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (n>=1) T(n+1)=2T(n)T(n1)                (n>=1)
  • n n n 进行标准化,得到:
    T ( n ) = 2 T ( n − 1 ) − T ( n − 2 )                  ( n > = 2 ) T(n) = 2T(n-1) - T(n-2) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (n>=2) T(n)=2T(n1)T(n2)                (n>=2)

5、通项公式

  • 通过移项后得到:
    T ( n ) − T ( n − 1 ) T ( n − 1 ) − T ( n − 2 ) = 1 \frac {T(n) - T(n-1)}{ T(n-1) - T(n-2)} = 1 T(n1)T(n2)T(n)T(n1)=1
  • 通过累乘得到:
    T ( n ) − T ( n − 1 ) T ( n − 1 ) − T ( n − 2 ) ∗ T ( n − 1 ) − T ( n − 2 ) T ( n − 2 ) − T ( n − 3 ) ∗ . . . ∗ T ( 2 ) − T ( 1 ) T ( 1 ) − T ( 0 ) = 1 ∗ 1...1 ⏟ n − 1 \frac{T(n) - T(n-1)} {T(n-1) - T(n-2)} * \frac{T(n-1) - T(n-2)} {T(n-2) - T(n-3)} *...* \frac{T(2) - T(1)} {T(1) - T(0)}= \underbrace{1*1...1}_{\rm n-1} T(n1)T(n2)T(n)T(n1)T(n2)T(n3)T(n1)T(n2)...T(1)T(0)T(2)T(1)=n1 11...1
  • 从而得到:
    T ( n ) − T ( n − 1 ) = p − 1 T(n) - T(n-1) = p-1 T(n)T(n1)=p1
  • 说明 T ( n ) T(n) T(n) 是一个等差数列,并且 T ( n ) T(n) T(n) 的通项公式如下:
    T ( n ) = n p − ( n − 1 ) T(n) = np - (n-1) T(n)=np(n1)

6、久赌必输

【推导1】

  • 因为 T ( n ) T(n) T(n) 是概率,所以可以得出 T ( n ) > = 0 T (n) >= 0 T(n)>=0恒成立,代入通项公式得到:
    p > = 1 − 1 n p >= 1 - \frac {1}{n} p>=1n1
  • 要对所有的 n n n 成立,那么 p p p 只能等于 1 1 1

【推导2】

  • 另外一种方法是:因为 p p p 是概率,所以一定小于等于 1 1 1,于是得到:
    T ( n ) − T ( n − 1 ) = p − 1 < = 0 T(n) - T(n-1) = p-1 <= 0 T(n)T(n1)=p1<=0
    即: T ( n ) < = T ( n − 1 ) T(n) <= T(n-1) T(n)<=T(n1),如果 T ( n ) < T ( n − 1 ) T(n) < T(n-1) T(n)<T(n1) 则说明钱越多输的光的概率越大,这个貌似不太科学,所以只有 T ( n ) T(n) T(n) T ( n − 1 ) T(n-1) T(n1) 一开始就是相等的情况,所以 T ( n ) − T ( n − 1 ) = 0 T(n) - T(n-1) = 0 T(n)T(n1)=0,从而得出 p = 1 p = 1 p=1;
  • 所以,无论你有多少钱,只要你一直在赌,那么最后输光的概率就是 100%;

四、结语

  • 作为程序员,我们还是要认清自己,如果真的想要在 40 岁后能够有足够陪伴家人的时间,光靠替别人打工肯定是不行的,需要有睡后收入,保证足够工作时间的前提下,同时要想办法提升自己的技术能力,成为核心竞争力,不只是公司的,而是业界的乃至整个互联网的核心竞争力;
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

英雄哪里出来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值