分享一道与二进制相关的题目

在和谢然老师学习的过程中,遇到一个很有意思的题目。在这里分享一下。

金块题目:a为b工作7天,报酬是一个金块。a要求每天都能拿到自己的报酬。那么b如何用最少的切割成本,实现a的要求?

大家可以先独立考虑一会,再往后看。

·

·

·

·

·

·

答案是切2刀(得到三个数字),重量分别为1,2,4。
第一天,a→b(0),b→a (1)===> a(1)
第二天,a→b(1),b→a (2)===> a(2)
第三天,a→b(1),b→a (0)===> a(1,2)
第四天,a→b(1,2),b→a (4)===> a(4)
第五天,a→b(0),b→a (1)===> a(1,4)
第六天,a→b(1),b→a (2)===> a(2,4)
第七天,a→b(0),b→a (1)===> a(1,2,4)

这道题本质上是问,在某个范围内,如何用最少的不重复的数字来表示最多的数字。

而这个问题其实早就有解决方案了,那就是二进制。
二进制从右向左分别是2^0,2^1,2^2,2^3……
在2^3-1的范围内,
DEC(0) = BIN(000)  ===>  0  +  0  +  0  
DEC(1) = BIN(001)  ===>  0  +  0  + 2^0
DEC(2) = BIN(010)  ===>  0  + 2^1 +  0  
DEC(3) = BIN(011)  ===>  0  + 2^1 + 2^0
DEC(4) = BIN(100)  ===> 2^2 +  0  +  0  
DEC(5) = BIN(101)  ===> 2^2 +  0  + 2^0
DEC(6) = BIN(110)     ===> 2^2 + 2^1 +  0  
DEC(7) = BIN(111)     ===> 2^2 + 2^1 + 2^0
依次类推,在2^n-1的范围内,用不重复的n个数字即可全部表示。

再深究下原因,二进制的基本组成就是两个数字0和1。这两个数字也是所有数字的基本组成部分(0就是0,而其他所有数字都可以看做1的叠加)。二进制提供了一种方案,就是只要超过1(也就是2)就发生进位,且新进位用1表示,旧进位用0表示。这简直算得上一种完美的表示方案(如果说还有一点不完美的地方,那就是数字越大,所需内存越大)。也正因为如此,同样是01表示,我们不使用八进制/十六进制(因为八进制/十六进制等进位已经超出了0和1的范围)。

这里不禁想到老师讲过使用二进制可以减少信息误差。也就是说,当一个事物的每个点都精细到用1/0表示时,它的误差容积就是最小的。实例包括数字电视与模拟电视,图片格式的清晰度等。

题外话:
字体文件用二进制的方式识别保存。
从这一点上延伸,世界上有什么东西是不能用二进制识别保存乃至于传输和创造的呢?
从无到有,从0到1,从开始到无限,这种走向真令人着迷和期待啊。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值