整理了自考《数据结构》中的所有时间复杂度,制作了如下几张表,便于对比和记忆,请笑纳。
| 时间复杂度 | 顺序表 | 单链表 |
| 求表长 | O(1) | - |
| 读表元素 | O(1) | O(n) |
| 定位 | O(n) | O(n) |
| 插入 | O(n) | O(n) |
| 删除 | O(n) | O(n) |
~ | 深度优先搜索(邻接表) | O(n+e) |
图 | 深度优先搜索(邻接矩阵) | O(n2) |
~ | 拓扑排序 | O(n+e) |
查找表 | 二分查找法 | O(log2n) |
排序算法 | 直接插入 | 冒泡排序 | 快速排序 | 直接选择 | 堆排序 | 二路归并 |
时间复杂度 | O(n2) | 最好O(n)|O(n2) | 平均O(nlog2n)|最坏O(n2) | O(n2) | O(nlog2n) | O(nlog2n) |
稳定性 | 稳定 | 稳定 | 不稳定 | 不稳定 | 不稳定 | 稳定 |
常见时间复杂度排序:
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(Cn)(指数阶)
时间复杂度,填空和选择会有不少于8分的题目。除了上述书中列出的,还有给一小段程序,让自己计算的。
时间复杂度的计算,从出题的规律来看,莫不是O(√n)、O(n)、O(log2n)、O(n2)、O(n3)这几种之一。
除了按照常规方法计算基本运算的次数之外,考试中时间复杂度的题也很有规律性。
1、看有几层循环,一层循环,是O(√n)或者O(log2n)或者O(n);两层循环,是O(n2);三层循环,是O(n3)。(一般规律如此,具体问题具体分析)
2、一层循环中到底是哪一个,对照下面代码,很快就能总结出来。
判断一下这几段程序的时间复杂度是多少?
1、
for(i=1;i<=n;i++)
{
m++;
for(j=1;j<=n;j++)
k*=m;
}
2、
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
for (k=1;k<=n;k++)
x++;
3、
i=0;s=0;
while(s<n)
{ i++;
s=s+i;
}
4、
i=0;s=0;
while(i<n)
{ i++;
s=s+i;
}
5、
i=1;
while(i<n)
i=i*2;
6、下边这是一个变种,看看它的时间复杂度是多少?
for ( int i=0; i<m; i++)
for ( int j=0; j<n; j++)
a[i][j]=i*j;
————————————————
答案:1、O(n2) 2、O(n3) 3、O(√n) 4、O(n) 5、O(log2n)6、O(mn)
你的答案对吗?