《Psychology of Problem Solving》里面举了一个例子,说明了对问题本质的抽象能够增加后来遇到本质类似(但表面不类似)的题目的时候联想到前一道题目的可能性。我在这里提到了这个例子,摘录如下:
《Psychology of Problem Solving》的第11章举了这样一个例子:先让被试(皆为大学生)阅读一段军事材料,这个材料是说一小撮军队如何通过同时从几个不同方向小规模攻击来 击溃一个防守严实的军事堡垒的。事实上这个例子的本质是对一个点的同时的弱攻击能够集聚成强大的力量。然后被试被要求解决一个问题:一个医生想要用X射线 杀死一个恶性肿瘤,这个肿瘤只可以通过高强度的X射线杀死,然而那样的话就会伤及周围的良好组织。医生应该怎么办呢?在没有给出先前的军队的例子的被试中 只有10%想到答案,这是控制基线。然后,在先前学习了军队例子的被试中,这个比例也仅仅只增加到30%,也就是说只有额外20%的人"自动"地将知识进 行了转移。最后一组是在提醒之下做的,达到了75%,即比"自动"转移组增加了45%之多。这个例子说明,知识的表象细节会迷惑我们的眼睛,阻碍我们对知 识的运用,在这个例子中是阻碍问题之间的类比。
不过这个例子稍微有点人为的味道。下面则是一个更为真实的例子:
问题:求N个数中最大的K个数。
分析:首先很多人都能够联想到一个类似的问题:求N个数中的最大数。不过,关于后者的表面知识(譬如算法的详细过程和细节)是不能直接借用的。这很大程度上会阻止利用既有问题的解来解决新的问题。对算法细节了解的越多越细,就越是妨碍类比联想。
然而,如果在当时吸收第一道题目的知识的时候就进行了抽象,提取出了其中的本质:只要有一个数小于任何另一个数,它就肯定不是最大的了,从而可以淘汰。就不难将其运用到就求最大K数上:只要有一个数小于任何K个数,它就肯定不属于最大K个数之列了,从而可以淘汰。这里的抽象元素有两个,分别是:"淘汰法",以及"一个淘汰的准则"。(抽象越是含糊越好(只要不过于含糊),因为基本上,越含糊的抽象,越是接近本质,联想空间也越大。也许这里可以套用爱因斯坦的一句话:抽象应该尽量含糊,只要不过于含糊。)
(当然,这个题目还有其它解法。)
这样的例子还有很多,这里只举一个简单且第一时间浮现在脑子里的。
你遇到过这样的情况吗?
我到不觉得那是什么好事,我就总不看代码,结果要写的时候,总得去查,脑子里的东西太少了。
不过,刚才年的时候,我应该是那20%里的,但这只是来自于中国的考试制度的本能想法。pongba的这个题我当时也想了,不过,首先就想到用排序,我觉得比你那样比来比去的要高效,不过没有实际算过。
我道觉得,这是个总结的问题。知道总结的人才不会因为知道细节而找不到方向。而不是因为了解了太多的细节,才阻碍了思考吧。
我觉得写代码还有个好处,就是在实现的过程中,会发现你理解原理时的一些没有被理解的地方。也许和我学物理有关系,我总觉得理解是一回事,做出来又是另一回事了。因为理论总是在某种程度是简单化(或复杂化)。
直觉这东西总是会害人的,它虽然让你在最短的时候里做出最多的通常是正确的事,但也有可能让你做出完全错误而自己却没有意识到的事。所以,时常的反省是很有用的,呵呵。(难道这就是重构?^_^)