[钟曼手册] 02.故障排除策略
算法的故障排除策略 第 2 章小结
故障排除过程
-
阅读并理解问题。
-
用熟悉的术语重新定义问题。
-
计划如何解决问题。
-
验证你的计划。
-
将其作为一项计划加以实施。
-
反思你是如何解决问题的,并寻找改进方法。
1) 阅读并理解问题
为了避免犯误读问题的错误,你应该积极阅读问题,并努力充分理解问题的要求。如果你错过了一个小的限制条件,往往就无法解决这个问题,而竞赛往往不会放过任何一个小错误。
2) 重新定义和抽象
使用你容易处理的概念,用你自己的语言重新表述问题,这是直观理解问题对你的要求所必需的,问题越复杂,这一点就越重要。 对于做同样事情的程序,不同的人可能会有不同的理解,这取决于你如何重构问题的本质。 可以说,抽象化决定了程序的发展方向,因为它可以让难题变得更容易解决,让容易解决的难题变得更难解决。
抽象:将现实世界的概念转化为我们更容易处理的数学/计算概念的过程。
3) 规划
决定如何解决问题,选择要使用的算法和数据结构。这是整个过程中最重要的部分,如果你不能立即找到问题的解决方案,你将在这部分花费最多的时间。
4) 验证你的计划
在开始实施之前,我们需要验证我们的计划。我们需要证明,我们设计的算法在所有情况下都能正确执行要求,并且执行所需的时间和使用的内存都在问题的限制范围内。
5) 实施计划
在执行计划时,要始终牢记效率和准确性。
6) 进行回顾总结
这一步可能不会立即产生直接影响,但从长远来看影响最大。 当你重新解决以前解决过的问题时,你可能会找到更高效的算法,写出更简洁的代码,甚至找到更直观的方法来推导相同的算法。 进行回顾的最有效方法是写下每次解决问题的经验。
记录下你的方法、关键的顿悟、错误答案的原因等,可以减少错误,有助于形成模式。查看其他人解决过的代码也能提供你可能没有想到的见解。
一段时间后,即使你还没有解决它,也可以参考其他人的代码或解决方案,但一定要回顾它。
疑难解答策略
1) 直觉和系统方法
-
你以前解决过类似的问题吗?
- 你应该能够理解和转换原理,而不仅仅是解决原理。
-
你能从简单的方法入手吗?
-
能在不知道的情况下求解吗?还有一种方法,可以从最简单的算法入手,并对其进行优化,从而实现
-
能否建立算法效率基线?
-
-
能否制定解决问题的过程?
- 在解题过程中举例说明,等等。
-
我能简化问题吗?
- 先解决给定问题的一个较容易的变式
-
能否举例说明?
- 几何图形更直观易懂
-
能否用公式表示?
- 纯文本 → 公式有助于解决问题
-
问题能否分解?
- 如何将问题转化为更易解决的形式,如分解约束条件
-
能否通过逆向思维解决问题?
-
典型例子:梯子游戏
-
你能从下往上而不是尝试前面的所有路径来减少阶梯的数量吗?
-
-
能否强制执行顺序?
-
如何在没有顺序的问题中执行顺序?
-
举例说明:对一个变量而言,是否存在两种情况/顺序无关紧要 → 决定是否按顺序变换。
-
-
能否只考虑某些形式的答案?
-
规范化技术
-
如何将形式不同但结果相同的答案分组,并只考虑组中的代表。
-
댓글 작성
게시글에 대한 의견을 남겨 주세요.