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

本文探讨了如何运用算法减少资源消耗,通过信息论的角度解析了寻找毒药问题,指出提升维度并不总是有效,而是需要考虑信息量的需求。通过二进制编码策略,展示了如何使用最少的小白鼠在一天内找出毒药,强调了二进制算法在计算机处理中的高效性。同时,此方法也可应用于彩票号码的高效计算。
摘要由CSDN通过智能技术生成

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

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

有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个数,就可以用二进制来表示,而计算机存储就是用二进制,所以这样计算的效率非常高。 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值