1.时间复杂度:
①简单版:
用大Ο记号表示算法的时间性能。
将基本语句执行次数的数量级放入大Ο记号中。
如果算法中包含嵌套的循环,则基本语句通常是最内层的循环体,如果算法中包含并列的循环,则将并列循环的时间复杂度相加。例如:
for (i=1; i<=n; i++)
x++;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
x++;
第一个for循环的时间复杂度为Ο(n),第二个for循环的时间复杂度为Ο(n²),则整个算法的时间复杂度为Ο(n+n²)=Ο(n²)。
注、加法原则:T(n)=O(f(n))+O(g(n))=O(max(fn,gn))
②复杂版:
例一:
i = n*n;
whlie(i != 1)
i = i/2;
第一步:列出循环趟数t及每轮循环i的变化值:
t | 0 | 1 | 2 | 3 |
i |
第二步:找到t与i的关系:
第三步:确定循环停止条件:
第四步:联立第二步第三步两式解方程:
所以得到时间复杂度为:
例二:
x = 0;
while (n>=(x+1)*(x+1))
x = x+1;
第一步:列出循环趟数t及每轮循环x的变化值:
t | 0 | 1 | 2 | 3 | 4 |
x | 0 | 1 | 2 | 3 | 4 |
第二步:找到t与x的关系:
第三步:确定循环停止条件:
第四步:联立第二步第三步两式解方程:
所以得到时间复杂度为:
2.空间复杂度:
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度。空间复杂度不是程序占用了多少字节的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟时间复杂度类似,也使用大O渐进表示法。(数组)
3.栈
Push(