<返回更多

从小白鼠到彩票的算法

2022-06-06    还没禿的程序猿火华
加入收藏

两篇文章,主要向大家展示了算法对于计算机来说有多重要,多神奇,性能提升效果显著。那二进制算法的思路是如何形成的呢?

我们先从一道有趣的题目开始。

进击的程序员——从小白鼠到彩票的算法

 

有100瓶药水,其中一瓶是毒药,只要一小滴,就足以让小白鼠24小时内死亡。请问怎么在1天内用最少的老鼠找出这瓶毒药?

先从暴力破解的方法来看,100瓶,每一瓶对应一只小白鼠,即使用100只小白鼠可以找到那一瓶毒药。这种解法,可以看做是将100瓶毒药放到了一条直线的维度,因此,想要减少小白鼠的个数,很简单,提升维度即可。

第二种方法,就是将100瓶毒药,按照横向10,竖向10排列成一个正方形,即二维,此时只需要使用10+10只小白鼠,就可以定位出哪一个位置的是毒药。

按照上述逻辑,想要再减少小白鼠的个数,就需要继续升高维度,我们下面写一下维度与个数的关系表。

维度

100开维度数的方根

个数

1

100

100

2

10

10+10=20

3

4.64

5+5+4=14

4

3.16

3+3+3+4=13

5

2.51

2+2+3+3+3=13

6

2.15

2+2+2+2+3+3=14

7

1.93

2+2+2+2+2+2+2=14

由上面的表可以看出,并不是一直提升维度就可以减少小白鼠个数,这是因为每增加一个维度,这个维度上至少需要两只小白鼠,否则没有意义,过量的维度反而会导致小白鼠个数的增加。

那接下来该如何思考呢?

我们换一种思路来思考这个问题,上面我们是通过对100瓶的位置进行升维来实现减少小白鼠的个数,我们再从小白鼠这一边来进行分析。

进击的程序员——从小白鼠到彩票的算法

 

每一只小白鼠在喝了瓶内液体并经过24小时后,都只有两种状态,死或生。n只小白鼠,状态会有2^n种。从信息论的观点来看,确定毒药所需要的信息量H(d) = -(p1 log p1+p2 log p2+.....p100 log p100),p1=p2=....=p100=1/100,小白鼠生死的信息量H(s) = -(p1 log p1+p2 log p2+.....p2^n log p2^n),p1=p2=....=p2^n=1/2^n,H(s) > H(d),即2^n > 100,n>6.64,所以至少需要7只小白鼠,才可以将那1瓶毒药找出来。

具体方法就是将瓶子的编号1~100,用二进制来表示,二进制的每一位对应一只老鼠,第一只老鼠喝二进制编号的第一位为1的瓶子内的液体;第二只老师喝二进制编号的第二位为1的瓶子内的液体;依次类推。第二天看死掉老鼠在哪一位,将所有位置1,即可查到毒药的位置。

进击的程序员——从小白鼠到彩票的算法

 

由此可以看出,信息论的思考方法有多么神奇。我们回到之前分析100W注彩票的问题,彩票选号码,实际每一个数也是只有两种状态,选中和未选中。我们从小白鼠的题目推演过来,1-33中选6个数,就可以用二进制来表示,而计算机存储就是用二进制,所以这样计算的效率非常高。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>