我爱民科,以魔方的名义

这次只说3阶(3×3)的魔方,目标是还原成6面同色。几个礼拜前我还做不到,以为很难,不过这段时间简单研究了一下,发现还是挺简单的,现在可以做到100秒左右还原,和高手比起来很菜(世界上最快的人曾经在7.08秒成功还原了一个魔方,创造于Czech Open 2008,记录保持者是来自荷兰的Erik Akkersdijk)。

认知科学

“模式、元素与记忆”。

魔方有6面,6种颜色,每种颜色有3×3个小面。

一个打乱的魔方,在玩家与外行眼中是不同的,玩家眼中是各种模式,然后迅速找出模式对应的解法,而外行眼中就是各种颜色杂乱的块,只能想如何把相同颜色的面移到一起。

举个例子:“Hello World”:

在学过计算机的同学看来是尝试各种编程语言第一个程序的经典句子;

在没接触过计算机,但是懂英文的人看来是有点意义的两个单词;

在不懂英文的人眼中,是“H e l l o W o r l d”十个字母,还分大小写;

在连字母也不认识的人眼中,这是系列的图案,有横有竖有斜线有曲线;

而这之间的记忆量区别,不同的人为了重复写出“Hello World”所付出的努力,显然是不同的。

所以,知识与练习的作用就是习得“模式”,把你心中的“元素”给复杂化,形成更高级的“元素”,这是一个从“字母单词句子”的艰苦过程、然后再固化,之后再碰到类似问题,就可以手到擒来。

回到一个打乱的魔方,玩家眼中是什么呢?应该是某种颜色(乃至多种颜色)在某个面(乃至多个面)上的位置关系,具体能抽象到什么高度,就看水平了。

计算机科学

“简单指令系统与复杂指令系统:RISCCISC”。

魔方是由3×3×3个小方块组成了,只有3种块:面块、棱块、角块。最中间有1个是轴,没有任何颜色;面块有6个,有1种颜色,不会动;棱块有12个,有2种颜色,角块有8个,有3种颜色;一共27块。

所以只有两种性质的块需要调整,抽象一下,我们最少要2种算法:棱块算法+角块算法。魔方“初级玩法”里的“最小记忆玩法”就是基于此原理,给出了3步调棱块算法和4步调角块算法,这样就够了。

抛一个思考题:为什么“棱块算法”步骤小于“角块算法”?:)

这个算法本质上对硬件(玩魔方的人)要求低,好比RISC,这样玩魔方,需要的思考很少,基本就是不停的转啊转,更像机器人,所以练熟手法可以让新手大大提高速度,极限大约是2min不到一点,再提高就难了。因为这个RISC太简单,导致需要对不同的块做很多次操作,整体的还原步骤我们简单算一下:(12×3+8×4)×2 = 136,最外面乘2是因为对某个块并不是做一个算法就能完成调整的,而是要在不同时间做多次算法,并且有些12步的过渡步骤,系数2是我大概估算的,那么假设我可以1s2次,加上一点思考和观察的时间,差不多就是将近2min了。看过一些高手录像的同学可能说他们都手指如飞啊,1s45下都没有问题的,没错,不过对于菜鸟而言,如果练到1s两次以后,时间提高的最大瓶颈就不在手法了,再有兴趣的人肯定会去转而修炼“高级玩法”的,这也是菜鸟与真正玩家的分水岭。

能看到这里的先握个手,我们来说“高级玩法”。可能大家已经意识到,“最小记忆”的算法,只是单变量的函数,也就是说每次的调整只考虑一个块。这必然导致大量的重复劳动,还原魔方的整体步骤增多,其实所有的“初级玩法”都具有这样的性质。而牛逼的“高级玩法”就是每次不止调整一块!简单的说,算法操作的对象从某个块变成了某个模式(块的组合):底层十字、前两层、最后一层的朝向、最后一层的顺序。所以算法根据各种模式的不同,多达几十个,而且算法典型长度也基本上都是十几步,嗯没错——CISC

再来假想一下还原魔方的过程:先看看(脑力活动),再转转(体力活动),而“初级玩法à高级玩法”其实就是把部分体力活动转换成了脑力活动,需要的记忆量大增(当然对于计算机来说不是问题),而还原步骤缩减到了4060步,高手1s5下,10s差不多完成。

最后再来看下最最CISC的算法吧,已经有人证明,对于任意初始状态(4.3×10^19种,换句话说,如果你一秒可以转3下魔方,不计重复,你也需要转4542亿年,才可以转出这些状态,这个数字是目前估算宇宙年龄的大约30倍……),可以不超过22步还原任意魔方,即算法对象是整个魔方,汗,直接从“初始状态运行某算法还原” Tomas Rokick,其实还是分了2步,有兴趣可以看《魔方与“上帝之数”》),但对于初始状态的记忆量就大大超出人类极限了,好像计算机也搞不定,要盯着看到海枯石烂,然后转5秒钟……

所以,“高级算法”是在“脑力+体力”时间之和的权衡,达成总时间最小。

管理科学角度

“任务分解,缓冲池”。

还原魔方并不是先还原一个面,然后再23,……,6面,而是按层来还原的。仍然说“最小记忆玩法”,希望看了我对原理的分析以后,大家可以按照教程练几次,也能不借助外力自己还原魔方,:)

选定一个颜色作为你固定的底面,玩多了以后你就自然记住顶面是什么颜色,4个侧面是什么顺序了。然后依据如下的分解模式还原:

1. 底层棱块:注意颜色顺序要和侧面一致,这步也称底十字;

2. 底层角块:做31备用;

3. 中层面块:转一下底层自然对齐;

4. 中层棱块:做31备用,注意留的1与底角留的1相邻;

5. 顶层棱块:做好之后第4步里留的1棱块也自然对齐了,也称顶十字;

6. 顶层角块:最后5个角,先调位置,再调朝向。

看不懂没关系,反正我也不是教还原魔方,我是想说,能把一个魔方的还原算法整理做出如此对称美妙的任务分解是多么的牛逼啊。再看一次16步,3层,从底层到顶层每2步一组,都是先简单后复杂(先棱块后角块,中层没有角块,先面后棱也是一样的),然后每一步,再分解为重复执行几次简单的“3步棱块算法”或“4步角块算法”,一个大问题就这样慢慢的解决了。管理者最牛的地方就是能把看起来无从做起的复杂问题分解成简单的,谁都能理解的任务,然后交给下面去做,自己就可以去玩魔方了。

再看一下精妙的步骤24中,留1块不对齐的作用。“初级玩法”的其他算法,之所以越到后面记忆量越大就是因为我们需要保持前面对好的成果不能破坏,这样就有了很多限制。而留1的巧妙,就在于开始故意卖个破绽,这样,我们后面可以不断的利用这个“缺陷”,把顶层要调整的棱块(或角块)和先放进这个用来做“缓冲池”的棱块(或角块),再移出去,限制就小了,算法自然就简单。这告诉我们:事情不要做绝,要给自己留余地;时间安排不要太满,要留一定比例的缓冲;项目进度不要安排的太紧,要考虑意外情况;做事要综合考虑全局最优,不要只顾眼前利益;忍一时风平浪静,退一步海阔天空……

------------------------------------------------------------如果你想第一时间看到最新内容, 就猛击此处订阅吧!

发表评论

电子邮件地址不会被公开。 必填项已用*标注