一 问题计算复杂度的界定
二 算法及时间复杂度
1. 基本概念
有限条指令的序列--求解问题的一系列步骤
算法A求解问题P:
把问题P的任何实例作为算法A的输入,每步计算是确定性的。
A能够在有限步停机并输出该实例的正确的解
基本运算与输入规模
算法时间复杂度:针对指定基本运算,计算算法所做运行次数
基本运算有:比较,加法,乘法,置指针, 交换等
2. 算法的两种时间复杂度
平均情况下的复杂度A(n)
设S是规模为n的实例集
实例IϵS的概率是PI
算法对实例I所执行的基本运算次数是tI
A(n)=?ϵ?PI ∑_IϵS▒"PI " tI
最坏情况下的复杂度W(n)
3. 算法的伪码表示
先写算法 后面函数名 然后输入 输出 之后伪代码
用伪码表示算法
伪码不是程序代码,只是给出关键步骤
伪码关键字
伪码中允许过程调用
4. 函数的渐进的界
大O符号 上界复杂度
设f和g是定义域为自然集的N上的函数,若存在正数c和n0,使得对一切n > n0有
0 <= f(n) <= cg(n)
成立, 则称f(n)的渐进上界是g(n) 记为 f(n) = O(g(n))
大Ω符号 下界复杂度
定义:设f和g是定义域为自然数集N上的函数.若存在正数c和n0,使得对一切n>n0有,
0≤cg(n) ≤f(n)
成立,则称f(n)的渐进的下界是g(n),
记作
f(n)= Ω(g(n))
小o符号
定义:设f和g是定义域为自然数集N上的函数.若对任意正数c,都存在n0,使得对一起n>n0有,
0≤f(n)<c g(n)
成立,则记作
f(n)=o(g(n))
小ω符号
定义:设f和g是定义域为自然数集N上的函数.若对任意正数c,都存在n0,使得对一起n>n0有,
0≤c g(n) < f(n)
成立,则记作
f(n)= ω(g(n))
? Θ符号
若f(n)=O(g(n))且f(n)= Ω(g(n)),则记作
f(n)= ?Θ(g(n))
5. 有关函数渐进的界的三个定理
定理1
定理 设f和g是定义域为自然数集合的函数.
(1)如果lim?→∞?(?)/?(?)存在,lim┬(n→∞)〖f(n)/g(n)〗 存在,并且等于某个常数c>0,那么f(n)= ?Θ(g(n)).
(2)如果lim?→∞?(?)/?(?)=0lim┬(n→∞)〖f(n)/g(n)〗=0,那么f(n)= o(g(n)).
(3)如果lim?→∞?(?)/?(?)=lim┬(n→∞)〖f(n)/g(n)〗=+∞,那么f(n)= ω(g(n)).
多项式函数的阶低于指数函数的阶
对数函数的阶低于幂函数的阶
定理2
定理 设函数f,g,h的定义域为自然数集合
(1)如果f=O(g),且g=O(h),那么f=O(h).
(2)如果f= Ω(g),且g= Ω(h),那么f= Ω(h).
(3)如果f= ?Θ(g),且g= ?Θ(h),那么f= ?Θ(h).
函数的阶之间的关系具有传递性
定理3
定理 假设函数f和g的定义域为自然数集合,若对某个其它函数h,有f=O(h)和g=O(h),
那么 f+g=O(h)
该性质可以推广到有限个函数.
算法由有限步骤构成,若每一步的时间复杂度上界都是h(n),那么该函数的时间复杂度函数可以写作O(h(n))