Skip to content

Latest commit

 

History

History
41 lines (29 loc) · 3.08 KB

summary.md

File metadata and controls

41 lines (29 loc) · 3.08 KB

毕业总结

经过两个月的学习,在算法的能力上取得了进步,最重要的是跟着覃超老师学到了一些刷题和学习的方法论。

不要死磕

覃超老师说,百分之九十的人下意识的学习习惯都是错误的,这一点对我的触动特别大。我之前没有注意过学习方法的问题,而且我自己就属于死磕的典型。关于这一点,我特意做了认真的反省。

  • 不要死磕的理由
  • 给自己带来挫败感、打击积极性
  • 浪费时间,导致没有足够的时间去看别人的解题思路和代码
  • 为什么自己会下意识地死磕
  • 因为会下意识的认为,如果习惯了去看别人的答案,则只能应付已经做过的题目,而不知道如何在面对新题目的时候从无到有地创造答案
  • 其中的错误,是以为解题是一个考察创造力的过程,以为题目都是孤立的,新的题目需要创造新的思路去解决,因此需要通过死磕去锻炼自己的创造力
  • 实际上,不同的题目可以归纳为几种类型,每一种类型有对应的成熟的、优秀的解法;算法的学习,其实就是去总结这些类型和对应的解法,通过练习来熟练使用以及编程的过程
  • 总结起来:算法的学习不是为了锻炼创造轮子的能力,而是锻炼总结各种轮子、熟练使用轮子的能力
    • 这种学习观也可以应用到其它事情上

多看别人的优质解法

我之前的自学,重在学习概念,而没有怎么刷题,刷题的时候除了死磕,另外一个问题就是没有看别人的代码的习惯。

  • 为什么一定要学会看别人的代码
  • 因为算法的本质不是如何解决问题,而是如何最高效的解决问题,也就是说,算法的本质是时间复杂度和空间复杂度
  • 所以刷题的时候,绝不是能够解决问题就可以了,而是一定要找到最高效的解法
  • 除了性能之外,还需要注意代码本身的质量,要写出尽量简洁、逻辑清晰的代码,这一点也是自己一直忽视的

五毒神掌

还是学习方法。刷题要注重遍数,而且要结合时间曲线,帮助自己更好地记忆。

递归的重要性

要注意到人脑和计算机的运行逻辑的差异。计算机的运行逻辑很简单,只包含:

  • if/else
  • for/while
  • recursion

其中 for/while 其实就是迭代,和递归一样,本质是相同逻辑的不断重复。无论计算机程序处理的问题多么复杂,到最后就是这三个基本的动作。

也就是说,计算机程序的复杂性,要么来自条件分支,要么来自迭代和递归。需要用条件分支来处理的复杂问题最后的代码本身也会非常复杂,而用迭代和递归处理的复杂问题最后的代码会简单很多。算法考察的是如何使用尽量简单、高效的代码处理复杂问题,因此最后的解决方式肯定要么是迭代、要么是递归。而递归往往比迭代更加简洁。

所以遇到复杂问题感到无从下手的时候,不妨考虑递归。