算法思维:一个解决问题的通用框架

先来一段英文阅读:

''A person well-trained in computer science knows how to deal with algorithms: how to construct them, manipulate them, understand them, analyze them. This knowledge is preparation for much more than writing good computer programs: it is a general-purpose mental tool that will be a definite aid to the understanding of other subjects, whether they be chemistry, linguistics, or music, etc. The reason for this may be understood in the following way: It has ofen been said that a person does not really understand something until after teaching it to someone else. Actually, a person does not really understand something until after teaching it to a computer, i.e., expressing it in an algorithm...An attempt to formalize things as algorithms leads to a deeper understanding than if we simply try to comprehend things in the traditional way. ''

—— Donald Knuth


给你一个问题,你通常是如何解决这个问题呢?

这里介绍一个来自Luay Nakhleh《Algorithmic Thinking》课程里面的通用框架,这个框架可以说覆盖了解决问题的完整流程。当你拿到一个问题不知从何下手时,可以参考以下步骤哟:

1 弄明白这个问题

  • 理解问题的描述
  • input和output是什么
  • 手动做几个例子
  • 想想特殊的情况

2 数学化这个问题

  • 了解数据,并思考数据的最佳表现形式(图、字符串...)
  • 对于我们想要的output, 对应的数学标准是什么

3 设计一个算法

  • 可不可以用一些算法设计思想(贪心算法、分治)来解决
  • 用怎样的数据结构来表示
  • 算法是正确的吗
  • 算法是高效的吗,时间复杂度、空间复杂度如何
  • 如果这个问题“太难”,可不可以采用近似算法来求解,比如随机的算法、或者启发性的算法

4 实现你的算法

  • 程序的正确性是必须的,但还不够充分
  • 要想获得更高效的算法实现,需要更深入理解问题,并尝试去改进算法

5 解决最初的问题

  • 运行你的代码,解决最初的问题
  • 如果结果并不让人满意,你可能需要回到(1)再走一遍整个流程

本来想多写一点的,写着写着又写不下去了,因为效率太低了(被自己气哭),算了我去撸BERT的论文了。

你可能感兴趣的:(算法思维:一个解决问题的通用框架)