分析算法时间复杂度的基本方法:
1.找出语句频度最大的那条语句作为基本语句
2.计算基本语句的频度得到问题规模n的某个函数f(n)
3.取其数量级用符号“O”表示
程序 | 频度 | 时间复杂度 |
---|---|---|
{++x;s=0;} | 1 | O(1) 常量阶 |
for(i=1;i<=n;++i) {++x;s+=x;} | n | O(n) 线性阶 |
for(j=1;j<=n;++j) for(k=1;k<=n;++k) {++x;s+=x;} | n² | O(n²) 平方阶 |
while(i<=n) i*=2; | logn | O(logn) 对数阶 |
有的情况下,算法中基本操作重复执行的次数还随问题的输入数据集状态不同而不同。
例如:顺序查找,在数组a[i]中查找值等于e的元素,返回其所在位置。
for (i=0;i<n;i++) if(a[i]-=e) return i+1;
return 0;
最好情况 | 最坏情况 | 平均情况 |
1 | n | (n+1)/2 |
时间复杂度:O(n)
时间复杂度T(n)按数量级递增顺序: