目录
一、复杂度的概念
算法在编写成可执行程序后,运行时会浪费时间资源和空间,因此衡量一个算法好坏最好的方式就是从时间和空间两个维度来衡量。即时间复杂度(衡量一个算法的快慢)和空间复杂度(衡量一个算法运行所需要的额外空间)。
二、时间复杂度
2.1 定义
m因为在不同的环境、编译器等情况下每次算法运行的时间都会有所不同。我们没有办法算出实际使用时间所以我们假设每一条指令的时间是相同的,执行时间就和执行指令次数和指令执行时间成正比,我们就可以用执行次数来表示程序执行的快慢。即用T(N)函数来表示。
2.2 大O的渐进表示法
T(N)函数表示输入量N对时间的影响,我们只需要算出计算程序能代表增长量级的大概执行次数,不需要算出具体的值,因此我们常用大O的渐进表示法
1.只关注最高阶数,去掉低阶
2.当最高阶数的系数不为一时,忽略系数
3.当没有与n有关的,只有常数项都为1
2.3 常见时间复杂度的分析
1.示例一
2.示例二
3.示例三
4.示例四
5.示例五
6.示例六
三、空间复杂度
3.1 定义
计算算法在运行中因为算法的额外临时开辟的空间,因为常规情况下每个对象大小差异不会很大,所以我们用变量的多少来计算空间复杂度。(因为函数运行所需要的栈空间(存储参数,局部变量等在编译时已经确定好了,因此空间复杂度主要通过函数在运行时显示申请的额外空间来确定))
3.2 常见空间复杂度的分析
符合大o的渐进表示法
示例一:
j 和 i 等有限局部变量,使用了常数个额外空间所以空间复杂度为O(1).
示例二:
该函数调用了N次,额外开辟了N个函数栈帧,所以空间复杂度为O(N);