在数据结构与算法概述一文中我们讨论了算法就是操作数组的一组方法。在更泛概念来讲,其实我们写的任何一段代码(不管是 CRUD 还是 for 循环)都是可以认为是算法。
但是不同水平的程序员处理同一个问题写出来的代码可能有天壤之别,可能有的人只会用几重 for 循环来处理,而有的人用动态规划一层 for 循环就搞定了。
复杂度分析
那么对于一段代码,我们最先要学的就是分析代码好坏的能力。运行一段代码对于计算机来说无非就是「运行时间」和「使用的内存大小」,在数据结构与算法中就叫做「时间复杂度」和「空间复杂度」。
经典算法
我们有能力鉴别代码的好坏,但是由于智力、能力、视野种种因素,很多顶级算法不是普通人苦思冥想就能想出来的。值得庆幸的是,那些优秀的计算机科学家从实际场景中抽象出来很多通用的算法,所以想要写出更优秀的代码,可以从这 10 个经典的算法开始:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。
虽然算法多种多样,有的也非常复杂。但是代码运行在计算机上,对于计算机来说最后都是二进制逻辑运算,再加上一些 Branch(分支)、Iteration(循环)、Recursion(递归)。任何算法最后都是转化成这几种表现形式,所以最后都是找重复性。
最后
就能产出一个 算法 的脑图
