渐近记号(Asymptotic Notations)

渐近记号(Asymptotic Notations)

1. 定义

渐近记号是用来描述算法渐近运行时间的记号,是根据定义域为自然数集N={0, 1, 2, ……}的函数来定义的。我们通常使用渐近记号来描述算法的运算时间。接下来,会介绍一些基本的渐近记号。

2. O记号(big-Oh)

2.1 定义

f(n) = O(g(n))——There exists constant c > 0 and n0 such that f(n) < c * g(n) for n >= n0.

存在正常数c和n0,使得对于任意的n >= n0,f(n) <= c * g(n)。

​ 我们常使用O记号来给出函数的一个在常量因子内的上界,其中g(n)只要求是渐进上界,并非渐近确界 (即3n^2 + 4n + 5 = O( n^2 )成立,但其实3n^2 + 4n + 5 = O(n^1000000)也成立)

2.2 举例

2.2.1 常见举例

  • 3n^2 + 4n + 5 = O(n^2)
  • log10 n = O(log2 n) = O(log n) (默认情况下log以2为底)
  • sin n = O(1)
  • 10^10 = O(1)
  • nΣi=1 i^2 = O(n^3)
  • nΣi=1 i = O(n^2)
  • log(n!) = log(n) + …… + log(1) = O(n log n)
  • nΣi=1 1/i = O(log n)

2.2.2 证明举例

(1)f(n) = 3n^2 + 4n + 5,证明f(n) = O(n^2)。

解:当n >= 1时,f(n) = 3n^2 + 4n + 5 <= 3n^2 + 4n^2 + 5n^2 = 12n^2。所以存在常数c=12和n0=1时,对于任意的n>=n0,f(n) <= c * n^2

(2)f(n) = nΣi=1 1/i,证明f(n) = O(log2 n)。

P. S. 这里的nΣi=1 1/i就等于1/1 + 1/2 + 1/3 + …… + 1/n,并且在证明中用到了Harmonic Series调和级数。

​ 当n >= 2时,我们首先可以把n放大到最接近n的2的幂次方,f(n) = 1/1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 + …… + 1/(n-1) + 1/n <= 1/1 + 1/2 +1/2 + 1/4 + 1/4 + 1/4 + 1/4 + …… 1/(n/2) + 1/n = log n + 1/n <= 2 log n。所以存在常数c = 2和n0 = 2,对于任意的n >= n0,f(n) <= c * log n。放大后,f(n) = O(log n),显然不放大时,f(n) = O(log n)也成立。

2.2.3 反例证明

(1)证明f(n) = 2 ^ (2n)不等于O(2^n)。

解:反例就是要证明对于任意的正常数c和n0,都存在n >= n0,使得f(n) > c * g(n)。所以在本题中,对于任意的正常数c和n0,都存在n = n0 + log c >= n0,使得f(n) > c * 2^n。

3. Ω记号(big-Omega)

3.1 定义

f(n) = Ω(g(n)) There exists constant c > 0 and n0 such that f(n) >= c * g(n) for n >= n0.

存在正常数c和n0,使得对于任意的n >= n0,f(n) >= c * g(n)。

​ Ω记号提供了函数的渐进下界

3.2 举例

3.2.1 常见举例

  • n^2 / 2 - 3n = Ω(n^2)
  • log(n!) = Ω(n log n)
  • nΣi=1 1/i = Ω(log n)

3.2.2 证明举例

(1)f(n) = n^2 / 2 - 3n,证明f(n) = Ω(n^2)。

解:当n >= 12时,f(n) = n^2 / 2 - 3n >= n^2 / 4.所以存在正常数c = 1/4和n0 = 12,使得对于任意的n >= n0,f(n) >= c * n^2。

(2)f(n) = log(n!),证明f(n) = Ω(n log n)。

解:当n >= 4时,f(n) = log(n) + log(n - 1) + …… + log 1 >= log(n) + log(n - 1) + …… + log(n/2) >= n/2 * log(n/2) = n/2 * (log n - 1) >= n log n / 4。所以存在正常数c = 1/4和n0 = 4,使得对于任意的n >= n0,f(n) >= c * n log n。

(3)f(n) = nΣi=1 1/i,证明f(n) = Ω(log n)。

解:当n >= 2时,可以将n缩小到最接近n的2的幂次方,f(n) = 1/1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 + …… + 1/(n-1) + 1/n >= 1/2 + 1/4 + 1/4 + 1/8 + 1/8 + 1/8 + 1/8 + …… + 1/n + 1/n >= n log n / 2 + 1/n >= n log n / 2。所以存在正常数c = 1/2和n0 = 2,使得对于任意的n >= n0,f(n) >= c * n log n。

3.2.3 反例证明

(1)证明100n^2不等于Ω(n ^3)。

解:反例就是要证明对于任意的正常数c和n0,都存在n >= n0,使得f(n) < c * g(n)。所以在本题中,对于任意的正常数c和n0,都存在n = n0 + 100/c >= n0,使得f(n) < c * n^3。

4. θ记号(big-Theta)

4.1 定义

f(n) = θ(g(n))当且仅当f(n) = O(g(n))且f(n) = Ω(g(n))

​ θ(g(n))的定义要求每个成员f(n)∈θ(g(n))均渐近非负,g(n)是f(n)的一个渐近紧确界

猜你喜欢

转载自blog.csdn.net/NickHan_cs/article/details/108454972
今日推荐