Fork me on GitHub

算法导论读书笔记(3)

渐近符号

当输入规模大到使运行时间只和增长的量级有关时,就是在研究算法的 渐近 效率。就是说,从极限角度看,我们只关心算法运行时间如何随着输入规模的无限增长而增长。

表示算法的渐近运行时间的记号是用定义域为自然数集 N = {0, 1, 2, …} 的函数来定义的。这些记号便于用来表示最坏情况运行时间 T ( n )。

Θ 记号

对一个给定的函数 g ( n ),用 Θ ( g ( n ))来表示函数集合:

对任何一个函数 f ( n ),若存在正常数 c1c2 ,使当 n 充分大时, f ( n )能被夹在 c1 g ( n )和 c2 g ( n )之间,则 f ( n )属于集合 Θ ( g ( n ))。可以写成“ f ( n ) ∈ Θ ( g ( n ))”表示 f ( n )是 Θ ( g ( n ))的元素。不过,通常写成“ f ( n ) = Θ ( g ( n ))”来表示相同的意思。

上图给出了函数 f ( n )和 g ( n )的直观图示,其中 f ( n ) = Θ ( g ( n ))。对所有位于 n0 右边的 n 值, f ( n )的值落在 c1 g ( n )和 c2 g ( n )之间。换句话说,对所有的 n >= n0f ( n )在一个常数因子范围内与 g ( n )相等。我们说 g ( n )是 f ( n )的一个 渐近确界

Θ ( g ( n ))的定义要求每个成员 f ( n ) ∈ Θ ( g ( n ))都是 渐近非负 ,就是说当 n 足够大时 f ( n )是非负值。这就要求函数 g ( n )本身也是渐近非负的,否则集合 Θ ( g ( n ))就是空集。

Θ 记号的效果相当于舍弃了低阶项和忽略了最高阶项的系数。

O 符号

Θ 记号渐近地给出了一个函数的上界和下界。当只有 渐近 上界时,使用 O 记号。对一个函数 g ( n ),用 O ( g ( n ))表示一个函数集合:

上图说明了 O 记号的直观意义。对所有位于 n0 右边的 n 值,函数 f ( n )的值在 g ( n )下。

Ω 记号

Ω 记号给出了函数的渐近下界。给定一个函数 g ( n ),用 Ω ( g ( n ))表示一个函数集合:

上图说明了 Ω 记号的直观意义。对所有在 n0 右边的 n 值,函数 f ( n )的数值等于或大于 c g ( n )。

定理

对任意两个函数 f ( n )和 g ( n ), f ( n ) = Θ ( g ( n ))当且仅当 f ( n ) = O ( g ( n ))和 f ( n ) = Ω ( g ( n ))。

o 记号

O 记号提供的渐近上界可能是也可能不是渐近紧确的。这里用 o 记号表示非渐近紧确的上界。 o ( g ( n ))的形式定义为集合:

O 记号与 o 记号的主要区别在于对 f ( n ) = O ( g ( n )),界0 <= f ( n ) <= c g ( n )对某个常数 c > 0成立;但对 f ( n ) = o ( g ( n )),界0 <= f ( n ) <= c g ( n )对所有常数 c > 0都成立。即

ω 记号

我们用 ω 记号来表示非渐近紧确的下界。 ω ( g ( n ))的形式定义为集合:

关系 f ( n ) = ω ( g ( n ))意味着

如果这个极限存在。也就是说当 n 趋于无穷时, f ( n )相对 g ( n )来说变得任意大了。

函数间的比较

f ( n )和 g ( n )是渐近正值函数。

传递性:
f ( n ) = Θ ( g ( n ))和 g ( n ) = Θ ( h ( n )) 蕴含 f ( n ) = Θ ( h ( n ))
f ( n ) = O ( g ( n ))和 g ( n ) = O ( h ( n )) 蕴含 f ( n ) = O ( h ( n ))
f ( n ) = Ω ( g ( n ))和 g ( n ) = Ω ( h ( n )) 蕴含 f ( n ) = Ω ( h ( n ))
f ( n ) = o ( g ( n ))和 g ( n ) = o ( h ( n )) 蕴含 f ( n ) = o ( h ( n ))
f ( n ) = ω ( g ( n ))和 g ( n ) = ω ( h ( n )) 蕴含 f ( n ) = ω ( h ( n ))

自反性:
f ( n ) = Θ ( f ( n ))
f ( n ) = O ( f ( n ))
f ( n ) = Ω ( f ( n ))

对称性:
f ( n ) = Θ ( g ( n ))当且仅当 g ( n ) = Θ ( f ( n ))

转置对称性:
f ( n ) = O ( g ( n ))当且仅当 g ( n ) = Ω ( f ( n ))
f ( n ) = o ( g ( n ))当且仅当 g ( n ) = ω ( f ( n ))

 

posted on 2014-04-12 18:53  sungoshawk  阅读(1171)  评论(1编辑  收藏  举报