算法导论第3章 章节提要和算法实现

一、渐近记号

1. \Theta记号(渐近紧确界)

1.1 定义

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

\Theta(g(n))=\left \{ f(n): 存在正常量c_1,c_2 和 n_0, 使得对所有n\geqslant n_0,有0\leqslant c_1g(n)\leqslant f(n)\leqslant c_2g(n)\left. \right \}

g(n)f(n)的一个渐近紧确界(asymptotically tight bound)

1.2 说明

a.   \Theta(g(n))的定义求每个成员f(n)\in \Theta(g(n))均渐近非负,即当n足够大时,f(n)非负。

b.   可以使用\Theta(1)来意指一个常量或者关于某个变量的一个常量函数

2.  O 记号(渐近上界)

2.1 定义

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

O(g(n)) = \left \{ f(n):存在正常量cn_0,使得对所有n\geqslant n_0,有 0\leqslant f(n)\leqslant cg(n)\left. \right \}

3.  \Omega记号(渐近下界)

3.1 定义

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

\Omega(g(n)) = \left \{ f(n):存在正常量cn_0,使得对所有n\geqslant n_0,有 0\leqslant cg(n) \leqslant f(n)\left. \right \}

定理3.1   对任意两个函数f(n)g(n),我们有f(n)=\Theta(g(n)),当且仅当f(n)=O(g(n))且 f(n)=\Omega(g(n))

4.  o 记号(非渐近紧确上界)

4.1 定义

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

o(g(n)) = \left \{ f(n):对任意正常量c>0,存在常量n_0>0,使得对所有n\geqslant n_0,有 0\leqslant f(n)< cg(n) \left. \right \}

5.  \omega记号(非渐近紧确下界)

3.1 定义

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

\omega(g(n)) = \left \{ f(n):对任意正常量c>0,存在常量n_0>0,使得对所有n\geqslant n_0,有 0\leqslant cg(n) < f(n)\left. \right \}

6. 渐近记号的性质

6.1 传递性

f(n)=\Theta(g(n)) \and\, g(n)=\Theta(h(n)) \rightarrow f(n)=\Theta(h(n))

f(n)=O(g(n)) \and\, g(n)=O(h(n)) \rightarrow f(n)=O(h(n))

f(n)=\Omega(g(n)) \and\, g(n)=\Omega(h(n)) \rightarrow f(n)=\Omega(h(n))

f(n)=o(g(n)) \and\, g(n)=o(h(n)) \rightarrow f(n)=o(h(n))

f(n)=\omega(g(n)) \and\, g(n)=\omega(h(n)) \rightarrow f(n)=\omega(h(n))

6.2 自反性

f(n) =\Theta(f(n))

f(n) =O(f(n))

f(n) =\Omega(f(n))

6.3 对称性

f(n)=\Theta(g(n)) \Leftrightarrow g(n)=\Theta(f(n))

6.4  转置对称性

f(n)=O(g(n)) \Leftrightarrow g(n)=\Omega(f(n))

f(n)=o(g(n)) \Leftrightarrow g(n)=\omega(f(n))

二、标准记号与常用函数

1. 单调性

单调递增  m\leqslant n \rightarrow f(m)\leqslant f(n)

单调递减 m\leqslant n \rightarrow f(m) \geqslant f(n)

严格递增  m < n \rightarrow f(m) < f(n)

严格递减  m < n \rightarrow f(m) > f(n)

2. 向下取整与向上取整

向下取整:\left \lfloor x \right \rfloor, 单调递增

向上取整:\left \lceil x \right \rceil, 单调递增

性质1: x-1<\left \lfloor x \right \rfloor \leqslant x\leqslant \left \lceil x \right \rceil< x+1

性质2: 对任意实数x\geqslant 0和整数a,b>0

\left \lceil \left \lceil x/a \right \rceil /b\right \rceil = \left \lceil x/(ab) \right \rceil

\left \lfloor \left \lfloor x/a \right \rfloor /b\right \rfloor = \left \lfloor x/(ab) \right \rfloor

\left \lceil a/b \right \rceil \leqslant (a+b-1)/b

\left \lfloor a/b \right \rfloor\geqslant (a-b+1)/b

3. 模运算

对任意整数 a 和任意正整数 n,a mod n的值就是商 a/n 的余数:a \, mod \, n = a - n\left \lfloor a/n \right \rfloor

4. 多项式

给定一个非负整数d,n的d次多项式为具有以下形式的一个函数p(n):

 p(n)=\sum_{i=0}^{d}a_in^i

其中常量a_0,a_1,...,a_n是多项式的系数,且a_d\neq 0

5. 指数

对所有实数a>0,m和n,有以下恒等式

a^0 = 1

a^1 = a

a^{-1} =1/a

(a^m)^n = a^{mn}

(a^m)^n = (a^n)^m

a^ma^n = a^{m+n}

比较多项式与指数的增长率: 对所有使得a>1 的实常量a和b,由于

\lim_{n\rightarrow \infty }n^b/a^n=0

因此,n^b=o(a^n),即任意底大于1的指数函数比任意多项式函数增长得快。

e^x = \sum_{i=0}^{\infty}x^i/i!

\lim_{n\rightarrow \infty}(1+x/n)^n=e^x

6. 对数

如果常量b>1, 那么对于n>0 ,函数log_bn单调递增。

对所有实数a>0, b>0, c>0 和 n,有

a = b^{(log_ba)}

log_c{(ab)} = log_ca+log_cb

log_ba^n = nlog_ba

log_ba = log_ca/log_cb

log_b(1/a) = -log_ba

log_ba = 1/log_ab

a^{log_bc}=c^{log_ba}

\left | x \right | < 1 时,ln(1+x) 存在一种简单的级数展开:

ln(1+x) = x - x^2/2+x^3/3-x^4/4+x^5/5-...

有x>-1, 还有下面的不等式:x/(1+x)\leqslant ln(1+x)\leqslant x

(lgn)^b = o(n^a) 即任意正的多项式函数都比任意多对数函数增长得快

7. 阶乘

斯特林公式(Stirling)  n!=\sqrt{2\pi n}(n/e)^n(1+\Theta(1/n))

基于斯特林公式可得的阶乘的界如下

n!=o(n^n)

n!=\omega(2^n)

lg(n!)=\Theta(nlgn)

对于所有的n\geqslant 1, n!=\sqrt{2\pi n}(n/e)^ne^{\alpha _n},其中1/(12n+1)<\alpha _n<1/12n

8. 多重函数

f^{(i)}(n)= \begin{cases} n & \text{ if } i=0 \\ f(f^{(i-1)}(n)) & \text{ if } i > 0 \end{cases}

9. 多重对数函数

lg^*n=min\left \{ i\geqslant 0:lg^{(i)}n\leqslant 1 \right \}

多重对数函数是一个增长非常慢的函数,很少遇到一个使lg^*n>5的输入规模n。

10. 斐波那契数

\begin{cases} F_0=0 \\ F_1=1 \\ F_i=F_{i-1}+F_{i-2} & \text{ if } i>2 \end{cases}

斐波那契数与黄金分割率之间有一个结论为:F_i = (\o ^i- \hat{\o }^i)/\sqrt{5}

因为  \left | \hat{\o } \right | <1  ,所以有F_i = \left \lfloor \o ^i/\sqrt{5} +1/2 \right \rfloor

因此斐波那契数以指数方式增长。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值