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

来源:互联网 发布:linux下怎么解压缩 编辑:程序博客网 时间:2024/06/05 07:45

数据结构与算法学习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;                1for(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;                 1b=1;                 1for (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)

0 0