关于算法学习前的思路整理
之所以写这篇文章是读刘未鹏先生的文章后深有感触,此处附链接1 2 3 。
这篇文章中我仅是整理了一下刘未鹏先生的行文思路,此后如有自己的想法自会补入。
首先值得指出的是大部分算法书存在的问题是讲解方式是欧几里得式的,即每一步都直接导向答案,但这样的方式与正常的思考方式不相符。换一个说法就是直接告诉你答案和做法让你去验证正确性但是问题和答案&做法的距离是如何缩小的,之间经历什么样的思维过程很少有书说的明白。
而学习思维方式有如下好处:
1.促进有关思维方式的知识的内隐化,就如知道如何骑车后不断地练习以致能不假思索。
2.促进跨情景运用,就好比大家都知道反证法,但是当遇到问题时,不是所有人都能自然地去尝试使用反证法。
3.更容易记住算法,因为知道了本质上的联系很容易通过启发来复现算法。
4.算法诞生的过程比算法本身有更多也更本质的知识,可以在更大的范围使用,即可以解决表面不同但是本质一样的问题。
5.养成优先从问题本质入手的好习惯,避免学了一堆算法后看到一个问题立马想到的是各个可能的算法。
学习思维方式可能的方法如下:
1.寻找算法的原始出处
2.自己思考并整理思路
显然,第一种方法足够高效,但是不一定保证有效,有时即使是原始出处也掩盖了思考的脉络;而第二种方法注定是一个艰难的过程,可以说如果你只用了10分钟就“理解”了一个新的算法那么百分之百是敷衍,同时如果花费了时间也不一定能理解。好消息是有些通用的问题可以促进我们的思考:
- 为什么这种算法对?
- 为什么那种算法错?
- 为什么这种算法不是最优解?
- 证明为什么没有更优化的解。
还有一些关键点:
- 不要觉得显然
- 最好的检验方法是过一段时间自己试着证明
- 对于一个算法可以多找一些资料
- 多试着抽象一些一般性的东西
欢迎评论😀