这篇文章,对于手里没有实物而且没有玩过的同学,可能理解起来会困难些吧,毕竟当你把杆子从九个环里拿出的一刻的感觉,是通过阅读文字无法获得的。可我只是想起了以前小时候班上风靡过的日子,所以为何不写下来呢
早晨醒来,看着书橱里积灰的九连环,我想起当年初中的时候玩九连环的那些经历。经过不断训练,终于练就了仅用一节语文课的时间就成功地将九连环解开并恢复原样。真是不浪费青春,既锻炼了手指灵活性,又给我的递归思维进行了启蒙。
那我们来仔细看一下九连环的结构。
可以看到,每个环套在另一个环的轴上,然后再以一种优雅的姿态套在杆子上。玩的目的就是要把杆子从九个环中分离出来,并且还要装回去恢复原样。我们来看看怎么操作呢?
首先我们要编号:上图最左边的环为环1,最右边的为环9。
如果我们不想通过太暴力的手段损坏九连环,那就必须接受它的结构所强制的规则,这样才能使用巧劲把一个个环依次解开。
规则:
- 任何时候环1可从杆子上取下或者从杆子下套上。
- 对于环k(k>1),必须在同时满足以下两个条件时,才可从杆子上取下或套上:
a) 环k-1套在杆子上
b) 环1,2…k-2(如果有的话)没有套在杆子上
举例:
我们来举例如何解3连环吧。这里我们用二进制码。但是呢,我们要把图片左右镜像下,让手柄在左边,离手柄最近的仍然是最高位环9,离手柄最远的仍然是最低位环1。那么呢,解三连环,我们:
111
110
010
011
001
000
初始状态111,然后一共五步。
求解:
认为每次将一个环从杆子上取下或者套上为一个基本步骤,以下计算解开9连环的步骤数。
先计算
P(n):在前n-1个环取下的状态下,将环n取下或套上,并且保持前n-1个环取下状态的步骤数
。有P(0)=0
,在n>0时,这样操作:
- 将环n-1套上,保持其它环状态不变。此处需
P(n-1)
步。 - 将环n取下或套上。此处需
1
步。 - 将环n-1取下,保持其它环状态不变。此处需
P(n-1)
步。
这样,P(n)=2P(n-1)+1
。也就是P(n)=2^n-1
再设解n连环,也就是将n个套在杆上的环全部取下的步骤数为T(n)
,有T(0)=0, T(1)=1
, 在n>1时,解法如下:
- 将前n-2个环取下。此处需
T(n-2)
步。 - 将环n取下。此处需
1
步。 - 此时状态为:环1…环n-2取下,环n-1套上。保持其它环状态不变,取下环n-1。此处需
P(n-1)
步。
这样,T(n)=T(n-2)+1+P(n-1)
,也就是T(n)=T(n-2)+2^(n-1)
一些等比数列求和,整理什么的,得:
n为奇数时,T(n)=(2^(n+1)-1)/3
n为偶数时,T(n)=(2^(n+1)-2)/3
所以九连环解开的步骤数为T(9)=341
步。
接下来考虑把九个环装回去,当然也是341步,但是还有另外的做法。
回到之前的编码,装九连环的过程就是:
步骤0:000
步骤1:001
步骤2:011
步骤3:010
步骤4:110
步骤5:111
。。。
每相邻两个状态都仅有1位不同,很熟悉的编码,格雷码。原来九连环就是一个手工的格雷码发生器。装九连环的步骤数就是格雷码111111111的序号,就是把格雷码111111111转化成正常二进制码,再转十进制。百度一下,知格雷码111111111转成二进制是101010101,再转十进制,也是341
。
那么问题来了,一开始我说,仅用一节语文课的时间,就能成功的将九连环解开并且恢复原样,这是不是吹的呢?年代久远我自己也不记得了,当然我现在再去操作,也早就生疏做不到了。那么当年到底做到了吗?我们可以估算一下。
每个步骤,保守估计,需要2秒完成吧,那么解开再装上,需要341*2=682
步。那么总共需要682*2=1364秒=22.7分钟
。一节语文课,妥妥的。
共同学习,写下你的评论
评论加载中...
作者其他优质文章