【专栏】跟波利亚学解题(4)

充分挖掘题目中蕴含的知识,是解题的最关键步骤。本质上,所有启发式方法某种意义上都是为此服务的。这些知识,有些时候以联想的方式被挖掘出来,此时启发式方法充当的便是辅助联想的手段。

一些方法(二)

4. 试错。试错估计是世界上被运用最广泛的启发法,你拿到一个题目,里面有一些条件,你需要求解一个未知量。于是你对题目这里捅捅那里捣捣,你用上所有的已知量,或使用所有你想到的操作手法,尝试着看看能不能得到有用的结论,能不能离答案近一步。事实上,如果一个问题的状态空间是有限的话,往往可以通过穷举所有可能性来找到那个关键的性质。譬如这样一个问题:有一个囚犯,国王打算处决他,但仁慈的国王给了他一个生还的机会。现在摆在他面前有两个瓶子,一个里面装了50个白球,一个装了50个黑球,这个囚犯有一个机会可以随便怎样重新分配这些球到两个瓶子中(当然,要保证不空),分配完了之后囚犯被蒙上眼睛,国王随机取一个瓶子给他,他在里面摸出一个球(因为蒙着眼睛,所以也是随机抽取),如果白球,则活,否则挂掉。问,这个囚犯如何分配,才能最大化生还几率。结合特例和试错法,这个题目的答案是很容易发现的。这样的题目还有很多。实际上,历史上很多有名的发现也都是无意间发现的(可以看作是试错的一种)。

5. 调整题目的条件(如,删除、增加、改变条件)。有时候,通过调整题目的条件,我们往往迅速能够发现条件和结论之间是如何联系的。通过扭曲问题的内部结构,我们能发现原本结构里面重要的东西。譬如这样一个题目(感谢alai同学提供):A国由1000000个岛组成,岛与岛之间只能用船作为交通工具,有些岛之间有船来往,从任意一个岛都可以去到另外任一个岛,当然其中可能要换船。现在有一个警察要追捕一个逃犯,开始时他们在不同的岛上,警察和逃犯都是每天最多乘一次船,但这个逃犯还有点迷信,每个月的13日不乘船,警察则不迷信。警察每天乘船前都知道逃犯昨天在哪个岛上,但不知道他今天会去哪个岛。请证明,警察一定可以抓到逃犯(即到达同一个岛)。通过拿掉题目中一个关键的条件,观察区别,然后再放上那个条件,我们就能“感觉”到题目的内在结构上的某种约束,进而得到答案。

6. 求解一个类似的题目。类似的题目也许有类似的结构,类似的性质,类似的解方案。通过考察或回忆一个类似的题目是如何解决的,也许就能够借用一些重要的点子。然而如何在大脑中提取出真正类似的题目是一个问题。所谓真正类似的题目,是指那些抽象结构一样的题目。很多问题表面看是类似的,然而抽象结构却不是类似的;另一些题目表面看根本不像,然而抽象层面却是一致的。表面一致抽象不一致会导致错误的、无效的类比;而表面不一致(抽象一致)则会阻碍真正有用的类比。《Psychology of Problem Solving》里面对此有详细的介绍。后面也会提到,为了便于脑中的知识结构真正能够“迁移”,在记忆掌握和分析问题的时候都应该尽量抽象的去看待,这样才能够建立知识的本质联系,才能够最大化联想空间。

7. 列出所有可能跟问题有关的定理或性质。这个不用说,我们在最初学习解题的时候就是这么做的了。

8. 考察反面,考察其他所有情况。很多时候,我们在解题时容易陷入一种特定的手法,比如为什么一定要是构造式的来解这个题目呢?为什么不能是逼近式的?为什么一定要一步到位算出答案?为什么不能从一个错误的答案调整到正确答案?为什么这个东西一定成立?不成立又如何?等等。经典例子:100个人比赛,要决出冠军至少需要赛多少场。

9. 将问题泛化,并求解这个泛化后的问题。刚才不是说过,应该通过特例启发思考吗?为什么现在又反倒要泛化呢?实际上,有少数题目,泛化之后更容易解决。即,解决一类问题,比解决这类问题里面某个特定的问题还要容易。波利亚称之为“发明者悖论”,关于“发明者悖论”,《数学与猜想》第一卷的开头有一个绝妙的例子,可惜这里空间太小,我就不摘抄了。


作者:刘未鹏 出版:电子工业出版社

以上是我认为最重要的,也是最具一般性的、放之四海都可用的思维法则。一些更为“问题特定”的,或更为现代的启发法,可以参见《如何解题:现代启发式方法》[1]以及所有的算法书。不过,在结束这一节之前,还有两个有趣的启发法值得一提:

10.下意识孵化法。这个方法有点像老母鸡孵小鸡的过程:我们先把问题的吃透,放在脑子里,然后等着我们的下意识把它解出来。不过,不宜将这个方法的条件拉伸过远,实际上,除非能够一直保持一种思索的状态(金出武雄所谓“思维体力”),或者问题很简单,否则一转头去做别的事情之后,你的下意识很容易就把问题丢开了。据说庞加莱有一次在街上,踏上一辆马车的那一瞬间,想出了一个重要问题的解。其他人也像仿效,结果没一个人成功。实际上,非但马车与问题无关,更重要的是,庞加莱实际上在做任何事的时候除了投入有限的注意力之外,其他思维空间都让给了那个问题了。同样,阿基米德从浴缸里面跳出来也是如此;如若不是经过了极其痛苦和长时间的思索,也不会如此兴奋。如果你也曾经花过几天的时间思考一个问题,肯定也是会有类似的经历的。

11. 烫手山芋法。说白了,就是把问题扔给别人解决。事实上,在这个网络时代,这个方法有着无可比拟的优越性。几乎任何知识性的问题,都可以迅速搜索或请教到答案。不过,如何在已知知识之外发掘出未知知识,如何解决未知问题,那就还是要看个人的能力了。数学界流传一个与此有关的笑话:如果你有一个未解决问题,你有两个办法,一,自己解决它。二,让陶哲轩对它感兴趣。

除了波利亚的书之外,陶哲轩的《Solving Mathematical Problems》[2]也对解题的启发式思路作了极有意义的介绍,他在书的第一章遵循波利亚的思路从一个具体的题目出发,介绍了如何运用波利亚在书中提到的各种启发式方法来对解题进行尝试。

总而言之,充分挖掘题目中蕴含的知识,是解题的最关键步骤。本质上,所有启发式方法某种意义上都是为此服务的。这些知识,有些时候以联想的方式被挖掘出来,此时启发式方法充当的便是辅助联想的手段。有时候则以演绎和归纳的手法被挖掘出来,此时启发式方法则充当助探(辅助探索)工具。

(待续;此文的修订版已收录《暗时间》一书,由电子工业出版社2011年8月出版。作者于2009年7月获得南京大学计算机系硕士学位,现在微软亚洲研究院创新工程中心从事软件研发工程师工作。)

参考资料:

[1] 《如何解题:现代启发式方法》 http://book.douban.com/subject/1232071/

[2] 《Solving Mathematical Problems》 http://book.douban.com/subject/1859573/

网络编辑:小碧

{{ isview_popup.firstLine }}{{ isview_popup.highlight }}

{{ isview_popup.secondLine }}

{{ isview_popup.buttonText }}