一直想要把算法知识总结一遍,奈何自己太懒,知道的一些基本算法也是零零散散,也不熟悉算法相关的的一些基础概念,这个系列就从入门到基础调理一遍,方便以后装逼。
算法是完成一个任务所需的一系列步骤,字面上理解就是算出某种东西的方法。
这里还要理解另一个名词--数据结构。不同的数据结构可能会对应不同的算法,两者之间有着相辅相成的关系
根本上是可以提升自己对编程的理解,能够写出更好的代码,在平时实现工作中会写很多业务逻辑的代码,大多数情况下中级工程师,高级工程师甚至初级工程师都能完成任务,但有些时候,任务完成的好坏,程序运行的性能好坏却是不同的。好的算法可能会让程序运行效率高很多。
递归就是调用自身
递归一般需要注意跳出递归的时机和判断,否则容易造成循环溢出
分而治之,指把大片的数据分割成小部分来处理,小部分之间相互没有关系,最后把小部分组合成大片的数据
动态规划是将问题分解成相互依赖的子问题
指数与对数:
a的n次方等于b,那我们说以a为底b的对数等于n ,即loga b = n ;
如果底数为10,可以省略不写 log10 b = n ==> log b = n
常用公式:loga MN = loga M + loga N; loga M/N = loga M - loga N;log a M N次方 = N loga M
算法有时间复杂度和空间复杂度
O(n) 使用大O表示时间复杂度 O即Operation(操作数),一般取最高次项,所以时间复杂度就是指操作次数
通常说的算法效率指的是时间复杂度
排序算法复杂度:
为什么快速和归并 是 nlogn 呢,因为第一重循环n次,内部循环由于是折半,每次都需要 log2 n(以2为底n的对数),简写logn
所以执行操作数为 n*logn,复杂度就为O(nlogn)
