How to Solve It (解决问题的通用方法)

1945年,G. Polya 写了一本书,名为《How to Solve It: A New Aspect of Mathematical Method》(《如何解题:数学方法的新观点》)。其中关于问题求解过程的描述非常经典。——《计算机科学概论》

摘抄如下:

第一步 理解问题

必须理解问题

未知量是什么?数据是什么?条件是什么?条件有可能满足吗?条件足够决定未知量吗?抑或条件不够决定未知量?抑或条件是多余的?抑或条件是与未知量矛盾的?绘制一幅图,引入合适的符号,把条件分割成多个部分。能把它们写下来吗?

第二步 设计方案

找到信息和解决方案之间的联系。如果找不到直接的联系,则可能需要考虑辅助问题。最终,应该得到解决方案。

以前见过这个问题吗?或者以前见过形式稍有不同的同样问题吗?

知道相关的问题吗?知道可能解决这个问题的定理吗?仔细研究未知量,试想一个所熟悉的、具有同样未知量或类似未知量的问题。

有一个曾经解决过的相关问题。可以使用它吗?可以使用它的结果吗?可以使用它的方法吗?为了使用它,需要引入辅助元素吗?能重述问题吗?能换一个方式叙述问题吗?回到定义。如果不能解决这个问题,先尝试解决一些相关的问题。可以想象一个比较容易解决的相关问题吗?一个更普适的问题?一个更专用的问题?一个相似的问题?可以解决部分问题吗?只保留一部分条件,舍弃其他条件;未知量又明确了多少;它是如何变化的?能从数据得到一些有用信息吗?可以想出另外一些能够确定未知量的数据吗?可以改变未知量或数据,或者同时改变两者,使新数据和新的未知量更接近吗?是否使用了所有数据?是否使用了所有条件?是否考虑到了该问题涉及的所有关键概念?

第三步 执行方案

执行解决方案,检查每个步骤。可以清楚地看到每个步骤都正确吗?可以证明它是正确的吗?

第四步 回顾

分析得到的解决方案

能检查结果吗?能检查参数吗?可以得到不同的结果吗?看到过这些结果吗?可以用这个结果和方法解决其他的问题吗?

 


彩蛋:《计算机科学概论》中还看到一段话,启发很大,附在下面


永远不要彻底重新做一件事。如果解决方案已经存在了,就用这种方案。如果以前曾经解决过相同或相似的问题,只需要再次使用那种成功的解决方案即可。通常,我们意识不到“我以前见过这种问题,我知道该如何处理它”,而只是苦苦求索。人类是擅长识别相似的情况的。我们根本不必学习如何去商店买牛奶,然后买鸡蛋,再买糖果。我们知道,去商店购物这件事是一样的,只是买的东西不同罢了。