时间频度就是参数n表示的代码条数,时间复杂度是时间频度的化简求极限
1.时间频度:根据参数来表示算法的代码执行次数(按条),
如:
例1的时间复杂度是n+1是因为要做100次total+=i 最后判断i<=end也算一次,则有100的参数需要执行101条代码
而例二是高斯求和(尾项+首项)乘尾项除2 等于 所有项的和
2.时间复杂度
把时间频度的表达式,去掉低阶项和常数项和最高价项系数就是时间复杂度
如果没有n只有常数项直接当作1,x^0=1
如果两个频度的时间复杂度一样就叫同数量级函数记作T(n) = O(f(n))
O(f(n))称为算法的渐进时间复杂度
2.1忽略常数项(∞+常数=无穷)
学过极限应该会非常熟悉,当数趋于无穷,常数项可以忽略不记
2.2忽略低次项(高阶无穷忽略低阶无穷)
2.3忽略小差值系数(同是低次项忽略系数)
2.4常见时间复杂度
2.4.1常数阶(参数是多少执行多少条)
2.4.2对数阶(k的几次方等于n)
2.4.3线性阶
图中频度是2n+1,复杂度为n,特点执行条数随n增长
2.4.4线性对数阶(其实就是对数阶外面套了层线性阶
2.4.5平方阶(嵌套循环外层循环m,内循环n,则= m*n
2.5平均复杂度和最差时间复杂度
就是某些算法在特定值域或数据类型的运行速度不一样这就叫做不稳定
而不管是什么数据运行速度都一样就叫稳定算法
3.空间复杂度,就是算法在运算时对参数进行预处理把大问题拆成若干个小问题
又或者把参数的因数拆解出来导出时再进行合并或把多位数每一位放一个数组格子里,这类方法虽然能提高运行速度但是会挤占内存空间堆排序就是这样的