Introduction to Algorithms NoteBook 2

Introduction to Algorithms NoteBook 2

Time:2022-01-25

渐近符号
O {O} O记号
  1. 定义在这里插入图片描述

  2. 前提: f ( n ) ≥ 0 f(n){\geq}0 f(n)0

  3. 这里的等号表示归属于某一个集合。这个符号不是对称的,因此不可以逆向推导。

  4. 举例:

    1. 当作宏来使用,如 f ( n ) = n 3 + O ( n 2 ) f(n) = n^3+{O}(n^2) f(n)=n3+O(n2),表示存在函数 h ( n ) ∈ O ( n 2 ) h(n){\in}O(n^2) h(n)O(n2),使得 f ( n ) = n 3 + h ( n ) f(n) = n^3+h(n) f(n)=n3+h(n).用于重点描述首项是什么,以及加上后面的误差项,关注问题的主要方面。又如: n 2 + O ( n ) = O ( n 2 ) n^2+O(n) = O(n^2) n2+O(n)=O(n2),表示对于任意的 h ( n ) ∈ O ( n ) h(n){\in}{O(n)} h(n)O(n),都存在 f ( n ) ∈ O ( n 2 ) f(n){\in}{O(n^2)} f(n)O(n2),使得 n 2 + h ( n ) = f ( n ) n^2+h(n) = f(n) n2+h(n)=f(n)。这里很巧妙,要注意观察。
    2. 可以用于等式关系链,从前向后推导,但是不能反过来推导,因为本身不对称。
    3. 一般表示一个函数的上界
Ω {\Omega} Ω记号
  1. 定义在这里插入图片描述

  2. 定义 Θ {\Theta} Θ

在这里插入图片描述

在这里插入图片描述

  1. 其他较为严格定义的符号 o {o} o ω {\omega} ω
    1. 在这里插入图片描述

    2. o {o} o O O O的主要区别在于是否对于任意常数c,都存在 n 0 {n_0} n0。严格小于号,没有等于号。

    3. ω {\omega} ω记号同上:在这里插入图片描述

Recurrences(递归关系的求解)

在这里插入图片描述

代入法
  1. 猜出解的形式,即是不需要知道确切的系数是多少。

  2. 验证解的形式是否满足递归方程,即正确性,多采用数学归纳法/代换法。

  3. 解出常数系数,获得递归方程的解。

    举例: T ( n ) = 4 T ( n 2 ) + n T(n) = 4T({\frac{n}{2}})+n T(n)=4T(2n)+n.

    1. 递归基: T ( 1 ) = O ( 1 ) T(1) = {O(1)} T(1)=O(1)

    2. 猜测 T ( n ) = O ( n 3 ) T(n)=O(n^3) T(n)=O(n3),即是 T ( k ) ≤ c k 3 T(k){\leq}ck^3 T(k)ck3,注意 c c c是待求已确定常数。

    在这里插入图片描述

    注意递归基, T ( 1 ) = O ( 1 ) ≤ c T(1) = O(1){\leq}c T(1)=O(1)c。所以常数c可能是一个很大的常数。

    1. 再次猜测: T ( n ) = O ( n 2 ) T(n)=O(n^2) T(n)=O(n2),即是 T ( k ) ≤ c k 2   f o r   k ≤ n T(k){\leq}ck^2{\ }for {\ }k{\leq}n T(k)ck2 for kn,归纳正确但是无用,进一步加强,考虑 n n n的系数,考虑低阶项。

    2. 猜测: T ( n ) = c 1 n 2 − c 2 n T(n) = c_1n^2-c_2n T(n)=c1n2c2n,即是 T ( k ) = c 1 k 2 − c 2 k   f o r   k ≤ n T(k) = c_1k^2-c_2k{\ }for{\ }k{\leq}{n} T(k)=c1k2c2k for kn,推导出 c 2 ≥ 1 c_2{\geq}1 c21。特别地, c 1 − c 2 ≥ Θ ( 1 ) = T ( 1 ) {c_1-c_2}{\geq}{{\Theta}(1)}=T(1) c1c2Θ(1)=T(1),这里要求 c 1 c_1 c1足够大,这是依据Base Case来得到的。

    3. 当然,可以采用同样的方法得到 T ( n ) T(n) T(n)下界。

    注意:

    1. 不能采用数学归纳法证明: n = O ( 1 ) n=O(1) n=O(1).否则将由于 n = ( n − 1 ) + 1 = O ( 1 ) + O ( 1 ) = O ( 1 ) n = (n-1)+1=O(1)+O(1)=O(1) n=(n1)+1=O(1)+O(1)=O(1),而导致出错。因此不可以在数学归纳法的证明中出现 O ( n ) O(n) O(n)记号来表示不确定的常数。
    2. 本方法需要猜出答案,不适合大面积递归关系的求解。
递归树法

在这里插入图片描述

举例: T ( n ) = T ( n 4 ) + T ( n 2 ) + n 2 T(n) = T({\frac{n}{4}})+T({\frac{n}{2}})+n^2 T(n)=T(4n)+T(2n)+n2:解 O ( n 2 ) {O(n^2)} O(n2), T ( n ) ≤ 2 n 2 T(n){\leq}{2n^2} T(n)2n2.

  1. 画图为先!

  2. 对每一行求和!

  3. 对每一行的和求和。

  4. 代换法验证,证明之。

  5. 示例:

在这里插入图片描述

主方法(主定理)

在这里插入图片描述

  1. 主定理

在这里插入图片描述

在这里插入图片描述

注:

  1. f ( n ) f(n) f(n)渐进趋向于正数,即是对于 n ≥ n 0 n{\geq}{n_0} nn0,都有 f ( n ) > 0 f(n){>}0 f(n)>0.

  2. 注意比较 f ( n ) f(n) f(n) n l o g b a n^{log_ba} nlogba的大小关系,来选择使用哪种情况。

  3. 特殊情况: T ( n ) = 4 T ( n 2 ) + n 2 lg ⁡ n T(n) = 4T({\frac{n}{2}})+{\frac{n^2}{\lg{n}}} T(n)=4T(2n)+lgnn2,主方法并不适用。

在这里插入图片描述

  1. 证明主定理

    1. 递归树法证明,树高 log ⁡ b n \log_bn logbn,叶节点的数量 a h = a log ⁡ b n = n log ⁡ b a a^h=a^{\log_bn}=n^{\log_ba} ah=alogbn=nlogba.
    2. Case 3 代价逐渐降低,呈现几何级数的形式下降, f ( n ) f(n) f(n)占据主导地位。
    3. Case 1 每一行之和呈现几何级数增长,所有行之和占据主导地位。即 Θ ( n log ⁡ b a ) {\Theta}(n^{\log_ba}) Θ(nlogba).
    4. Case 2 这是 f ( n ) f(n) f(n) n log ⁡ b a n^{\log_ba} nlogba等价,于是 f ( n ) f(n) f(n)与最后递归树的最后一行等价,至于是否含有 log ⁡ b a \log_ba logba或者 log ⁡ b k a {\log_b^ka} logbka视情况而定。每一行之和渐进相等,所以大部分分层也渐进相等,所以总代价就是其中一层乘以树高 h h h,即 f ( n ) ∗ h = n log ⁡ b a log ⁡ b n = Θ ( n log ⁡ b a lg ⁡ n ) f(n)*h=n^{\log_ba}\log_b{n}={\Theta}(n^{\log_ba}\lg{n}) f(n)h=nlogbalogbn=Θ(nlogbalgn).

    详细证明请参考算法导论第三版 P 56 P56 P56.

    Time:2022-01-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值