在和谢然老师学习的过程中,遇到一个很有意思的题目。在这里分享一下。
金块题目: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,从开始到无限,这种走向真令人着迷和期待啊。
金块题目: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,从开始到无限,这种走向真令人着迷和期待啊。