数据结构与算法学习1——算法复杂度分析

数据结构与算法学习1——算法复杂度分析

1. 常见的表示方法

算法复杂度分析是数据结构与算法学习的基础,算法复杂度包括时间复杂度和空间复杂度。这里主要探讨时间复杂度。时间复杂度分析的方法称为渐进记法,常用的表示符号包括大 O 标记,大 Ω 标记,大 Θ 标记等。

这三种标记的区别和联系在于:

- 大 O 标记:表示法 f(n)=O(g(n)) ,代表 f(n) 渐近小于或等于 g(n) .。
- 大 Ω 标记:表示法 f(n)=Ω(g(n)) ,代表 f(n) 渐近大于或等于 g(n)
- 大 Θ 标记:表示法 f(n)=Θ(g(n)) ,代表 f(n) 渐近等于 g(n)

三者中最常用的是大 O 标记。例如 100n33=O(n3) 。在大 O 标记中,常出现的项包括:

名称
1常量
logn 对数
n 线性
nlogn n 倍对数
n2 平方
n3 立方
2n 指数
n! 阶乘

2. 常见算法的复杂度

算法时间复杂度空间复杂度
冒泡排序 O(n2) O(1)
插入排序 O(n2) O(1)
希尔排序 O(n2) O(1)
选择排序 O(n2) O(1)
快速排序 O(nlogn) O(logn)
线性结构的查找(如二分查找) O(n)
非线性结构的查找(如二叉树查找) O(logn)

3.复杂度的分析方法

下面举例说明如何对复杂度进行分析:

示例1

sum=0;                1
for(i=1;i<=n;i++)      n
   for(j=1;j<=n;j++)   n^2
     sum++;           n^2

f(n)=2n2+n+1=O(n2)

示例2

a=0;                 1
b=1;                 1
for (i=1;i<=n;i++)   n
{  
   s=a+b;         n-1
   b=a;          n-1  
   a=s;          n-1
}

f(n)=n+3(n1)+2=O(n)

示例3

i=1;            1  
while (i<=n)
   i=i*2;       f(n)

2f(n)<=n;f(n)<=log2n=O(log2n)

点赞