数据结构:计算机存储,组织数据方式。数据之间存在多种特定关系。
时间复杂度:程序基本操作(循环等)执行的次数
大O渐进法表示法
用最高阶的项来表示,且常数变为1。
F(n)=3*n^2+2n+1//F(n)为次数函数,时间复杂度O(n^2)
O(n^2)表示最大量级是n^2,不代表函数循环的次数是n^2。
循环次数确定时,时间复杂度记为O(1)
不确定情况
O(M+N)
M远大于N,O(M)N远大于M,O(N)M,N相等,O(M)或O(N)
当算法复杂度存在最好,最坏,平均情况时(最好:最小次数,最坏:最大次数,平均:期望运行次数),选择最坏作为时间复杂度。
二分查找:O(logN)
最好:O(1),最坏:O(logN)
第一次:n
第二次:n/2
...
第k次:1
1*2^k=n
k=log2(n)//一2为底n的对数
斐波那契数列:O(2^n)
尽管会有提前结束,但忽略不计。
空间复杂度:计算临时占用存储空间大小量度
不算函数参数,计算新开辟的空间
例1:空间复杂度O(N)
例2:O(1)不算函数传进来的数组,开辟常数个变量
例3:O(N)
n加1个函数栈帧,每个栈帧是O(1)
例4:空间复杂度O(N)
如下图:函数调用是先调用完左边的再开始调用右边,最大的空间就是从Fib(N)到Fib(2),后面调用就是重复使用空间。