\ 几个月前,当我的编码讲师开始在 JavaScript 数据结构轨道中教授“解决问题的方法”主题时,他介绍了George Pólya 的问题解决方法。
\ 如前所述,它基本上是逐步解决问题的路线图,不仅限于编码问题,而是生活的各个方面。在这几个月里,我开始应用解决问题的相同基本原则,相信我,它非常有效!
\ 该方法摘自 George Pólya 的How to Solve It (1945)。
\ 在本文中,我将尝试分解这种解决问题的光荣方法。
\
基本上,该方法分为四个步骤:
\
-
理解问题陈述。
\
-
制定结构化的计划。
\
-
执行计划。
\
-
回顾并改进解决方案。
\
而已。这些是解决任何问题的神奇步骤。
\让我们进一步深入了解它们。
\
第一个原则:理解问题陈述。
\ 乍一看,这当然是显而易见的,但是当我在使用这种技术之前分析自己时,大多数时候我并没有理解语句背后的隐藏目的,直接跳到编写代码从来都不是明智的选择。
\ 理解编码问题是为问题找出合适的最终结果的最困难和最重要的阶段。了解实例对我们的要求以及我们如何将其分解为微小的部分会很有帮助。
\ 看完问题陈述后,我觉得我理解了,我遵循的思维算法是:
\
-
找出可以从问题中提取的更多内容吗?再次重新分析这个问题总是会给我的工作带来更多的便利。
\
-
我可以把它分解成非常简单和简化的单词,我可以向 5 岁的孩子解释吗?有时,将问题翻译成我的 L1 也很有帮助。
\
-
我能否清晰地想象出对我的要求的清晰画面或结果?
\
-
我可以预测所问内容的输出或结果吗?
\
-
在制定解决方案时,我可能会遇到任何限制吗?
\
给这个算法适当的时间并执行基本上解决了 50% 的问题。
\进入下一步:
\
第二个原则:制定结构化的计划。
\ 从第一个原理中提取的内容,尝试以注释的形式编写伪代码,画出您将如何接近最终结果的粗略流程图或时间线,逐渐地,解决方案的模式将开始冒泡起来,使工作变得非常容易。
\ 在编写代码时完全实现第二个原则的最佳实践是:
\
-
涂鸦解决问题的步骤。
\
-
绘制流程图和时间表。
\
-
粗暴的预演和处决。
\
-
从第一原则重新审视想法。
\
很难相信,有了这两个原则,70% 的工作已经完成,而我们还没有编写任何最终代码!
\让我们继续前进,看看剩下的 30% 工作将如何实现?
\
第三个原则:执行计划。
\ 这一步涉及编写代码,相信我,这是所有四个步骤中最简单的。 \n 根据以上三个阶段的公式,将你的伪代码转换成结构良好的可执行代码。
\ 这只是将你的文字和流程图(你已经拥有的)翻译成代码,唯一的挑战是记住正确的语法!
\ 到目前为止,您必须有一个可行的解决方案来解决问题,该解决方案执行时没有任何错误,并且在某种程度上给出了预期的输出。
\这标志着问题完成了 90%。
\
第四个原则:回顾并改进您的解决方案。
\ 剩下的 10% 将由第四条原则处理。在这一步中,我们将重新审视我们的解决方案,并尝试以一种更好、更高效的方式对其进行改进。
\ 这个原则可能包括以下一些意识形态:
\
-
以更易读和不言自明的方式调整代码(很难,但试一试)。
\
-
在再次分析代码时,应修复任何未被注意到的错误或错误。
\
-
对于某些边缘情况,代码不应产生任何意外行为。
\
-
如何使代码更高效以提高其时间和空间复杂度?
\
这可能会将您的代码扩展到一个新的水平,就是这样!如果你已经正确而仔细地实施了所有四个原则,那么你的解决方案必须是 100% 正确的,或者至少接近它。
\ 我发现这种技术非常有用和有见地,随着时间的推移,我可以看到我的准确性有所提高。
\ 感谢您阅读本文。
:::tip 这个故事最初发表在这里。
:::
\