乐读窝

程序员的数学思维修炼

乐读窝 > 科普学习 > 程序员的数学思维修炼

第6章 概率——你运气好吗

书籍名:《程序员的数学思维修炼》    作者:周颖



本次列车能正点到达吗?

这次谈判的项目,有几成把握能签下来?

这个月我申请的机动车牌照号能摇中吗?

我买的彩票能中奖吗?

在现实生活中,我们常常会遇到这类问题。对于这些问题,平常我们总是将其归结为是否有运气。运气好时就能签下合同、摇中车牌、中彩票……。

其实,从数学角度来看,这些都是与概率相关的问题。本章我们来研究概率相关的问题。



6.1 初中学习过的概率


作为程序员,应该对数学中的概率有一定了解,在程序设计的很多地方都可能会用到概率知识。例如,对于一些复杂知识库的判别,就可以用概率。



6.1.1 谁先开球


先来看一个场景。

在足球比赛中,两支球队中只能有一支球队先开球,哪一队先开球就占有先进攻的优势。另外,球场中的阳光、风向也对比赛有重要影响。因此,为了公平,通常会要求两队中的一队选择球门,另一队选择先开球。这时裁判应该怎么决定哪队选球门,哪队先开球呢?

足球比赛之前,裁判员通常用抛硬币的方法让比赛双方的队长猜硬币的正反面,猜中正面的这一队选球门,另一队则先开球。

为什么选用抛硬币的方法来决定呢?

因为大家都觉得这种方法很公平,能保证两队选门或开球的可能性一样大。

那么,为什么大家会觉得这种抛硬币的方法很公平呢?如图6-1所示,可看到硬币有正反两面。在抛硬币时,事先不能确定是正面向上还是反面向上,但是,参赛双方很容易感觉到正面向上或反面向上的可能性是一样的,因此,两队获得选门或开球的可能性是一样的。

图6-1

对于这种可能性,就称为概率,也称为或然率、机会率或机率。使用概率可对随机事件发生的可能性进行度量。

例如,在上面的例子中,两支球队的队长猜中硬币正面的概率各为50%时,机会均等,因此大家都会觉得这是公平的。

类似的例子还有很多。

例如,在围棋比赛中如何确定参赛双方谁下黑子(如图6-2所示)?在围棋中不是采用猜硬币正面的方法,而是采用另一种方法,猜围棋子的单双。在围棋中的术语称为“猜先”,即猜对了的就先下子(下黑子)。猜先的具体作法是:比赛双方中的一方(通常是段位高或年长者)抓一把白棋放在棋盘上,另一方猜对方抓的这一把棋子为单数还是双数,猜对了就可自己选择下黑子还是下白子,若未猜对,则由对方选择。

图6-2

在围棋的“猜先”中,参赛一方所抓围棋子只有两种情况:要么为单数、要么为双数(这就和硬币可以有正反面两种情况类似)。事先双方都不知道棋子的数量是单还是双,为单数或双数的概率是相等的,都为50%。因此,这种方法感觉是公平的。



6.1.2 用程序模拟抛硬币


那么,在抛硬币、猜单双时,硬币的正反面(或棋子的单双)出现次数是否真的完全一致呢?对于这一点,我们可以做一个实验,通过多次抛硬币,记录其正反面出现的次数,然后计算出现的频率。

首先,制作如表6-1所示的记录表格。

表6-1 硬币正面向上次数

接着开始按表格中的“总次数”开始抛掷硬币,并将正面向上的次数记录到表格中。

如果要手工去完成表6-1中的统计数据,需要较长的时间。幸好,我们是程序员,可以考虑使用计算机程序来解决问题。

在C语言中,有一个随机函数rand(),可产生在0~RAND_MAX范围内的一个随机数,即,rand()函数生成的这个数是未知的。我们可以使用这个函数来模拟抛掷硬币的情况。

对于通过rand()函数得到的一个随机数,怎么将其对应于硬币的正、反两面呢?

一种方法是对rand()函数生成的随机数进行运算,如下式:

这样,最终得到的结果只能为0和1这两种情况,假设结果为1时代表硬币正面向上,则只需要统计结果为1的次数,就可得到模拟硬币正面向上的次数了。

另一种更简洁的方法,就是对rand()函数生成的随机数进行奇偶判断(类似于围棋中的猜单双)。假设为奇数时表示硬币正面向上,则只需要统计rand()函数生成的随机数为奇数时的次数,就可得到模拟硬币正面向上的次数了。

根据以上思路编写C语言程序如下:

运行以上程序,输入抛掷硬币的次数为100,得到如图6-3所示的结果。由运算结果可看出,正面向上的频率并不是一半(0.5),而是0.49。并且,如果再次运行程序,同样输入抛掷硬币的次数为100,得到的频率不一定仍是0.49,可能是0.48、0.49、0.51、0.52等值。

图6-3

将获得的“正面向上的频率”填入表格中。多次运行程序,分别输入不同的抛掷硬币的次数,将计算出来的“正面向上频率”数据填入表格中,得到如表6-2所示的数据。

表6-2 硬币正面向上次数

根据表6-2所统计的频率,制作出如图6-4所示的折线图。

图6-4

从图6-4中可看出硬币“正面向上”的频率变化趋势。根据计算,每一组抛掷硬币中“正面向上”的频率都不相同,即每次试验中随机事件发生的频率具有不确定性。但是,也可发现随机事件发生的频率也有规律:在试验次数较少时,“正面朝上”的频率变化较大,而随着试验次数的逐渐增加,频率会趋于稳定,且“正面朝上”的频率越来越接近0.5。因此,这里就用0.5这个常数表示“正面朝上”发生的可能性大小。



6.1.3 什么是概率


通过运行上面的程序,并通过计算得出的数据生成图表,可归纳总结出以下结论。

实验证明,随机事件发生的频率逐渐稳定到某一个常数,通常这个常数刻画了随机事件的可能性大小,这个常数就称为概率。也可用以下数学语言描述:

一般地,在大量重复试验中,如果事件A发生的频率会稳定在某个常数p附近,那么这个常数p就叫做事件A的概率,记作:

P(A)=p

根据前面的试验可看出,如果一件事情发生的概率是,不是指n次事件里必有一次发生该事件,而是指此事件发生的频率接近于这个数值。

前面介绍的两个例子中,足球比赛中的猜硬币正面或围棋比赛中猜棋子的单双,都只有两种情况发生,要么是硬币的正面,要么是反面(或者棋子数要么为单数,要么为双数),也就是只有两个基本事件。因此,每一种基本事件(如出现硬币正面)发生的概率都为,这个比较好理解。可表示为如图6-5所示的形式。

图6-5

下面,我们看一个相对复杂一点的例子:掷骰子。

一粒骰子有6个面,每面有不同的点数(分别为1~6点),那么,1~6点出现的概率分别是多少呢?

在掷骰子时,骰子的6面都有相同的机会出现在最上面。如图6-6所示,骰子的每一面都表示一个基本事件,并且每个基本事件出现的可能性是相等的,因此,1~6点出现的概率是相同的,其值为:

图6-6



6.1.4 必然事件与不可能事件


在上面的例子中,抛掷硬币时,有硬币“正面向上”和“正面向下”两个事件;抛掷骰子时,有1点至6点这6种事件。也就是说,针对某种活动,可能会有多种事件之一发生,为了更好地分析概率,我们将这些事件分为3种类型,分别是:必然事件、不可能事件、随机事件。其中,必然事件和不可能事件又叫确定事件,而随机事件则是不确定事件。

1.必然事件

在一定的条件下重复进行试验时,有的事件在每次试验中必然会发生,这样的事件叫必然发生的事件,简称必然事件。

例如,太阳从东方升起,就是一个必然事件。再如,将3件不合格产品混在一堆合格产品中,再从这些产品中任意抽取4件,那么,其中必有1件是正品。显然,这也是一个必然事件。

可以看出,必然事件发生的概率肯定为1。不过,概率为1的事件不一定为必然事件。

2.不可能事件

在一定的条件下重复进行试验时,不可能发生的事件叫不可能事件。

例如,太阳从西边升起,就是一个不可能事件。再如,春天过后是冬天,也是一个不可能事件。

可以看出,不可能事件的概率为0。不过,概率为0的事件不一定为不可能事件。

3.随机事件

前面说过,必然事件和不可能事件都属于确定事件,即能确定地知道事件必然发生或必然不发生。与此对应,还有很多事件是处于两者之间,即在一定条件下,可能会发生,也可能不发生的事件,这类事件称为随机事件。

例如,抛掷硬币时,“正面向上”的事件有可能发生,也可能不发生。类似地,抛掷骰子时,出现“1点”的事件有可能发生,也可能不发生。

可以看出,随机事件的概率介于0与1之间。

下列事件中哪些事件必然发生?哪些事件必然不会发生?哪些事件可能会也可能不会发生?

(1)我今天买的彩票,中500万元大奖。

(2)明天市内将下大雨。

(3)边长为3cm、4cm、5cm的三角形是直角三角形。

(4)某射击运动员一枪命中靶心。

(5)肥皂泡会破碎。

(6)股市上证指数今天将从昨天的2200点上涨到6000点。

答案

(1)随机事件

(2)随机事件

(3)必然事件

(4)随机事件

(5)必然事件

(6)不可能事件

上面的6个事件中,前5个事件都比较好理解,最后一个事件是股票市场的,根据我国股票市场交易制度中的涨跌幅限制,即使所有股票今天全部涨停,上证指数也不可能从2200点上涨到6000点,因此,这是一个不可能发生的事件。



6.1.5 概率的基本性质


对概率有一定了解后,我们来总结一下概率的基本性质。

1.概率P(A)的取值范围

0≤P(A)≤1;

必然事件的概率为1;

不可能事件的概率为0。

2.任何两个基本事件是互斥的

针对某一个实验,可能有多个基本事件,但任何两个基本事件都是互斥的。这是比较好理解的。

例如,在抛掷硬币这个试验中,有两个基本事件:正面朝上、反面朝上,不可能出现既正面朝上又反面朝上的情况。

同样,在猜围棋子单双的实验中,也有两个基本事件:棋子数量为单数、棋子数量为双数,不可能出现棋子数量既为单数又为双数的情况。

在掷骰子的实验中,如果掷一粒骰子,有6个基本事件:分别为1点、2点、3点、4点、5点、6点。这6种基本事件也是互斥的,不可能同时出现1点和2点。

3.任何事件都可以表示成基本事件之和

先看一个例子:在抛掷骰子时,出现偶数点的概率为多少?

我们知道,骰子共有1~6点,其中1、3、5为奇数点,2、4、6为偶数点,因此,可以很容易地得出:

即,出现偶数点的概率为。

接下来,我们看看出现“偶数点”这个事件与骰子的几个基本事件之间的关系。

首先,抛掷骰子共有6个基本事件,分别是:P(“1点”)、P(“2点”)、P(“3点”)、P(“4点”)、P(“5点”)、P(“6点”)。

可以看出,“偶数点”这个事件与3个基本事件相关,即事件P(“偶数点”)包含了3个基本事件,分别是:P(“2点”)、P(“4点”)、P(“6点”)。

即,事件“偶数点”等于构成该事件的3个基本事件的概率之和。

4.事件的包含关系对概率的影响

若两个事件A和B之间存在包含关系,如A⊆B,则事件A的概率将小于等于事件B的概率,即:

这个结论应该很好理解。前面掷骰子的例子中,“2点”这个事件就包含于“偶数点”这个事件中,因此,其概率也小于“偶数点”的概率,即: