| 关于   英文版   «  1.1. 算法理论   ::   目录   ::   1.3. 问题、算法与程序  »

1.2. 问题求解导论

1.2.1. 问题求解导论

本文简要概述了四本教科书中的精选材料(见参考文献中的 [FL95, Lev94, WL99, Zei07])。阅读其中任何一本都应该帮助你成为更出色的问题求解者。

要成功求解任何问题,最重要的是让自己积极参与进去。 Levine [Lev94] 称其为"亲密投入原则"。写问题求解的人常常使用诸如"卷起袖子" 和"弄脏双手"这样的说法。其含义是积极地投入到问题中去,做点工作把它搞定。对较容易的问题,一旦你积极参与,通常很快就会"看到"答案,剩下的问题是努力走完全程。对较难的问题,也就是最重要的那些,你不会马上"看到"答案。对这些问题,哪怕只是为了起步,你也必须使用各种策略来想出一个可能的候选解。

问题求解者可以分为"投入型"或"放弃型"。投入型通常有成功的问题求解史。放弃型则多有失败史。当然,你可能对一类问题是投入型,对另一类却是放弃型。许多学生出于娱乐而大量进行问题求解—数独谜题、带有有意义问题求解任务的电脑游戏,以及各种"谜题"。他们可能花几个小时投入在"有趣"的问题上。然而,同样的这些学生可能会因为历史上缺乏成功而排斥数学和分析性计算机科学问题。如果你有这个毛病,那么为了在生活中取得成功,你需要想办法克服这个明显的心理障碍。你需要学会把在一个生活领域中发现有效的问题求解策略,迁移到其他领域。

Levine 用了尝试修理干衣机或摇晃的桌子这样的例子。如何解决这个问题可能不是立即可见的。第一步是付出努力去查看这个问题。在这些例子中,它始于打开干衣机的后盖,或者往桌子底下看。这种 初步调查 常常能导向解决方案。这关乎采取一种愿意承担风险和付出努力的心理态度。接下来要做的,就是与问题周旋一段时间,看看能做什么。在那一刻,一条可能的解决路径也许会打开。但除非你愿意花时间并付出努力,否则什么都解决不了。所有解决问题的方法都由此开始。

Fogler 和 LeBlanc [FL95] 讨论了高效与低效问题求解者之间的差异。

区分低效与高效问题求解者的最重要因素是:他们接触问题时的态度、他们在问题求解过程中的进取性、他们对准确性的关注,以及他们使用的求解过程。例如,高效的问题求解者相信问题可以通过使用启发式方法和仔细、坚持不懈的分析来解决,而低效的问题求解者则想,"要么你会,要么你不会"。

高效的问题求解者在问题求解过程中变得非常积极:他们画图、做草图、向自己和别人提问。低效的问题求解者似乎并不理解解决这个问题需要多大的个人努力。高效的问题求解者非常仔细地准确地理解所有事实和关系。低效的问题求解者在没有检查准确性的情况下就做出判断……通过以高效问题求解者的典型态度和行动来接触一个情境,你就离找到真正的问题、给出出色的解法不远了。

1.2.1.1. 调查与论证

问题求解有两部分 [Zei07]: 调查 和 论证 。学生们在教科书和讲座中常常只看到论证。这意味着他们没有足够多的调查部分的例子。不幸的是,要在学校(以及毕业后的生活中)取得成功,人们需要两者都擅长,并理解过程的这两个阶段之间的差异。要解决一个问题,你必须成功地进行调查。然后,要把答案交给你的客户(家庭作业或考试上的答案,或向老板报告),你需要能够以清晰简洁传达解法的方式做论证。论证阶段涉及良好的技术写作技巧—作出清晰、合乎逻辑论证的能力。理解标准的证明技巧对你会有帮助。三种最常用的证明技巧是演绎(直接证明)、反证法和归纳法。

1.2.1.2. "小尺度"的问题求解启发式方法

本节介绍一组被广泛认可的 启发式方法 ,用于如何着手解决难题。

把它写下来 在动机和心理态度之后,对你解决问题能力的最重要的限制是生物学上的:虽然你有大量的存储容量,但你的"工作记忆"很小。对于主动操作,你只能存储 \(7\pm 2\) 条信息。你不能改变这个生物学事实。你能做的只是利用你的环境绕过它。这意味着,你必须把东西放到你的环境中去操纵它们。最经常地,这转化为把东西写下来,并且以一种能让你操纵问题各层面(正确表示)的方式去做。

寻找特殊特征 例子包括密码算术加法问题。你可能会认出某一端的东西必须是 1,在另一些情况下,某一个数字必须是 0。考虑下面的密码算术谜题,你必须用数字替换字母,使其成为一个合法的加法问题。在这种情况下,我们应该认出两个特殊特征: (1) 答案的首位数字必须是 1,以及 (2) 最右端的数字之一必须是 0。认出这些特殊特征,让我们在解决整个问题的路上走了很远。

  A D
+ D I
-----
D I D

走向极端 研究问题的边界条件。对很多问题来说,从小情形入手会有所帮助,小情形是边界条件的一种形式。

简化 走向极端的一个变体是简化问题。这可能会给出一个可扩展为原问题的部分解。

倒数第二步 在最后一步求解之前,必须发生什么前置条件?如果你认出这一点,那么走到倒数第二步就能导致最终解,而求解倒数第二步问题可能更容易。汉诺塔为"从倒数第二步出发寻找解" 提供了一个极好的例子。

横向思维 小心不要被引入死胡同。使用不恰当的问题求解策略可能会让你对解法视而不见。如果你卡住了,试试不同的方法。

弄脏你的双手 有时候你只需要"摆弄"一下问题,以获得一些初步的洞察。例如,当试图看出一个求和的闭式解时,写下前几项的和通常是一个好的起点。

如意算盘 这是简化问题的一种变体。有时你可以把问题转化为容易的形式,或者看到如何把起始位置变成你可以"希望"是解法的东西。那可能是通往真正解法的一小步。

对称性 在问题中寻找对称性。它们可能给出解法的线索。

1.2.1.3. "大尺度"的问题求解

有许多处理更大、更麻烦的"现实世界"问题的标准技巧(工程师在职业生涯中经常遇到的那类问题)。 Fogler 和 LeBlanc [FL95] 详细讨论了这样的技巧。下面是"现实世界"问题进行规训式问题求解整体过程的一个简要大纲。

问题定义 问题的客户往往不会正确地陈述问题。你迈向解法的第一步常常是定义需要求解的"真实" 问题。它可能并不明显是什么。要触及"真正"的问题,你需要从研究它开始、收集关于它的信息,并与熟悉该问题的人交谈。你可以考虑以多种方式重述这个问题。定义期望的状态。然后对当前问题的表述做出能触发新洞察的重述。考虑通过提出相反陈述来审视问题陈述。或者,也许我们可以改变周围的情境,使当前问题可以被"修好"而不是直接解决。

生成解法 一旦你确定了问题陈述,你需要生成并分析一系列可能的解法。Blockbusting(冲击式设想)与头脑风暴等技术可以生成一份供研究的可能解法清单。

决定行动方针 有若干种从给定潜在行动清单中选择的标准技巧(例如情境分析、帕累托分析、K.T. 问题分析、决策分析)。

实施解法 获得批准可能是实施的必要第一步。一旦处理好这事,又有若干种规划实施的标准技巧(例如甘特图、关键路径分析)。

评估 评估应内建于问题求解过程的各个阶段。

1.2.1.4. 结对问题求解

Whimbey & Lochhead [WL99] 讨论了一种结对问题求解的技巧,把结对双方分成一个求解者和一个倾听者。倾听者扮演积极的角色,负责让问题求解者保持在正轨上,并要求问题求解者把他们(自己)的过程说出来。倾听者积极检查问题求解者的错误。关于此技巧的更多细节,请参阅文章《How Pair Programming Really Works》(结对编程究竟如何起作用)。

1.2.1.5. 推理中的错误

同样来自 Whimbey & Lochhead [WL99] 的,是对人们在问题求解中如何出错的描述。特别是与家庭作业和考试相关的、源自未能仔细阅读问题的典型错误。不仔细阅读常常会使人无法用全所有相关事实,或者干脆误解问题。其他典型错误来自未能系统化,或者更糟,就是完全粗心大意。这一切都表明,学生在考试和家庭作业上丢掉的许多分数并不是由"不懂材料"造成的,而是由没有有效执行问题求解造成的。这些是不必丢掉的分数。

阅读理解是成功的一个主要因素。正确理解技术材料需要仔细阅读,并且常常需要重读。没有所谓带理解的速读。速读倡导者的神话,例如"按意群读"、"略读概念"、 "不要重读",都是无效的。

1.2.1.6. 参考文献

[FL95] H. Scott Fogler 和 Steven E. LeBlanc。Strategies for Creative Problem Solving。Prentice Hall,1995。

[Lev94] Marvin Levine。Effective Problem Solving。Prentice Hall,第二版,1994 年。

[WL99] Arthur Whimbey 和 Jack Lochhead。Problem Solving & Comprehension。Lawrence Erlbaum Associates,第六版,1999 年。

[Zei07] Paul Zeitz。The Art and Craft of Problem Solving。John Wiley & Sons,第二版,2007 年。

   «  1.1. 算法理论   ::   目录   ::   1.3. 问题、算法与程序  »

关闭窗口