您的位置:首页 > 理论基础 > 数据结构算法

【自考】算法——时间复杂度汇总

2015-10-15 00:10 417 查看
        整理了自考《数据结构》中的所有时间复杂度,制作了如下几张表,便于对比和记忆,请笑纳。

 

 

时间复杂度

顺序表

单链表

 

求表长

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)

你的答案对吗?

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 数据结构