1、算法的概念
算法,这个概念听起来很高深的样子,如果你在面试时也提到这个概念,面试官会认为你很专业,那么算法究竟是什么呢?
算法其实很简单,平时我们在编程的过程中常与算法打交道,不过写的算法是好还是坏。
按照本书的解释,算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限系列,并且每条指令表示一个或多个操作。
说直白一点就是我们解决问题的过程就是一个算法。
算法有好有坏,比如用高斯求和 与循环遍历都能获取到正确的求和值。但是性能上我们一目了然。
2 开场白
既然本书是数据结构,为啥还介绍算法,通过读该文,感受到数据机构和算法两个具有紧密的联系,因为在解决问题时,我们的目的是更好的解决问题,所以会在考虑算法的基础上选择合理的数据结构。
3 算法的特性
输入、输出、有穷性、确定性和可行性;
有穷性:算法在执行指定的步骤后,自动结束,而不会出现无限循环。
确定性:相同的输入,输出的结果必然相同;
可行性:算法的每一步都是可行的,也就是执行有限步骤都能结束;
4 算法设计要求
正确性、可读性、健壮性、时间效率高,存储量低
5 算法效率的度量方法
5.1 事后统计法
5.2 事前分析估算法
6 算法的渐进增长
也就是分析的是算法的执行次数与执行规模之间的关系。执行次数关系函数对应为f(n)= 2n+5 与g(n)= 3n+1 那个算法更好呢?
7 算法的时间复杂度
算法的时间复杂度定义:
算法分析时,语句总的执行次数为T(n) 是关于问题规模n 的函数,进而分析T(n) 随n的变化情况并确定T(n)的数量级。
算法的时间复杂度,也就是算法的时间度量。T(n)=O(f(n)),表示的是随问题规模的扩大,算法执行的时间增长率和f(n)的相同。
推导大O阶方法
常数阶 :也就是不随问题规模的扩大而扩大,即 O(1)
线性阶:也就是与问题规模为线性关系,即 O(n)
对数阶:执行次数与问题规模为对数关系,即 O(log(n))
平方阶: 也就是与问题规模为平方的关系,即O()
立方阶:也就是与问题规模为平方的关系,即O()
指数阶:也就是与问题规模为平方的关系,即O()
时间耗费的长短顺序为:
O(1)<O(log(n))<O(n)<O(nlog(n))<O()<O(
)<O(
)<O(
) <O(
)
所以在设计算法的时候,尽量是往左靠。
8 算法空间复杂度
算法的空间复杂度是通过算法所占的空间来计算的,