研究算法的渐进效率,给出算法运行时间随问题规模的变化关系,给出时间 / 空间复杂度限界函数的定义,引入渐进记号。
记算法的实际执行时间为f(n),分析所得的限界函数为g(n)。其中,
n :问题规模的某种测度。
f(n) :是与机器及语言有关的量。
g(n) :是事前分析的结果,一个形式简单的函数,与频率计数有关、 而与机器及语言无关。
限界函数
上界函数
O(g(n))表示一下函数集合:
这里"="不是常规意义上的相等。
若f(n)和g(n)满足以上关系,则记为f(n)∈Ο(g(n)),表示 f(n) 是集合 Ο(g(n)) 的成员。并通常记作 f(n) = Ο(g(n))。
上界函数代表了最坏情况的复杂度,使用时往往使用紧确的上界函数,例如:
若:
是松散的界限;
而:
是紧确的界限。
下界函数
类似地, 下界函数 Ω( g(n) ) 表示以下函数集合:
各性质与上界函数类似。
渐进紧确界
Θ(g(n))表示以下函数的集合:
充要替换:f(n) = Ω( g(n) ) 且 f(n) = Ο( g(n) )
因为任意常量都可看做是一个 0 阶多项式,所以可以把任意常量函数表示成或
。 通常用
表示具有常量计算时间的复杂度,即算法的执行时间为一个固定量,与问题的规模n没关系。
证明是/不是上界/下界/渐进紧确界:
是:列出定义不等式,找常数
、
、
。
不是:反证法。
等式和不等式中的渐进记号:
用来代表我们不关注名称的匿名函数,用以消除一些无关紧要的细节。
这些细节存在但不被特别关注,分析时还是只对 T(n) 的渐进行为感兴趣。渐进记号仅代表低阶项部分,在实际化简的过程中,要根据需要予以“具体化” ,然后再进行化简处理。
o,ω记号
专门用来表示一种非渐进紧确的上界或下界。
o:对任意正常数c,存在常数 >0,使对所有的 n ≥
, 有|f(n)| ≤ c|g(n)|,则记作:f(n) = o(g(n))。
ω:对任意正常数c,存在常数>0,使对所有的n≥
, 有c|g(n)|≤|f(n)| ,则记作:f(n) = ω(g(n))。
运算性质
- 传递性:(本质是∈的传递性)
- 自反性:如
- 对称性:
- 转置对称性:
限界函数的计算
定理:
多项式定理:若
是一个n的m次多 项式,则有 A(n) = Ο(
)
对于任意正实数 x 和 ε ,有下面的不等式:
1) 存在某个
,使得对于任何n ≥
,有
<
2) 存在某个
,使得对于任何n ≥
,有
<
。
3) 存在某个
,使得对于任何n ≥
,有
< n。
4) 存在某个
,使得对于任何n ≥
,有
<
。
5) 对任意实数y ,存在某个
,使得对于任何n≥n0, 有
<
Ο() < Ο(n!) < Ο(
)