中科大算法导论第2次课
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Cn
lg n
n n T 2 T 2 2 2
Cn
………………
n T i 2
n T i 2
………………
n C i 2
n C i 2
Cn
令n=2i,则i=lgn T(n)=递归树一层的时间×总的层数 =cn ×(i+1) =cn ×(lgn+1) =cnlgn+cn 数学归纳法证明该结果如下: proof:归纳基础:当n=1时 ∵ T(n)=cnlgn+cn=c ∴ 命题成立 归纳假设:假设n=2i时命题成立
logb a log b a log b a ε
, 则T(n ) θn l gn 2) i f f(n ) θn , 常数ε 0且常数c 1, n足够够大时 3) i f f(n ) Ωn
n 有af cf(n ) , 则T(n ) θf(n ) b
对于Merge-sort算法: ∵ a=2, b=2, D(n)=θ(1), C(n)=θ(n)
(1) T(n) n 2T 2 (n ) n1 n1
上式可改为等价的形式:
C T(n ) n 2T 2 C n n1 n1
直观上看, m aste r 定 理 就 是 比 较 二 个 函f 数 (n )和n logb a 的渐进大小 ,即 : if n logb a f (n ) th e n T(n )适 用 条 件 1 ) if n logb a f (n ) th e n T(n )适 用 条 件 2 ) if n logb a f (n ) th e n T(n )适 用 条 件 3 ) n 例5: T(n ) 9T n 3 2n 例6 : T(n ) T 1 3 n 例7 : T(n ) 3T n lgn 4 n 例8 : T(n ) 2T n lgn 2
第三章分治法及递归算法的分析方法31分治法divideandconquer什么是分治法当求解的问题较复杂或规模较大时不能立刻得到原问题的解但这些问题本身具有这样的特点它可以分解为若干个与原问题性质相类似的子问题而这些子问题较简单可方便得到它们的解因此通过合并这些子问题的解就可得到原问题的解
第三章 分治法及递归算法的分析方法
2. 递归树方法(Recursion tree Method) 例3:T(n)=3T(n/4)+cn2
T n
Cn
2
Cn2
n C 4 n C 2 4
2
2
n C 4
2
2
n C 4
2
2
n 3C 4
2Байду номын сангаас
i
………………
2
n C 2 4
n C 2 4
n 32 C 2 4
2
n C i 4
……………
n 3i C i 4
2
n 2n 例4: Tn T T cn 3 3 解: 该 问 题 的 子 问 题 规 模一 不样
T n
Cn Cn
n C 3
n 2n C 2 C 2 3 3
2n C 3
22 n 2n C 2 C 2 3 3
Cn
Cn
i
………………
C C C
C
Cn Cn
3. Master方法 条件:如果T(n)具有如下递归形式: T(n)=aT(n/b)+f(n),其中a≥1,b>1且为常数,f(n)为渐进 函数 定理4.1 Master定理 对于非负递归函数T(n)=aT(n/b)+f(n),其中a ≥1,b>1 且为常数,f(n)为渐进函数,则T(n)有如下三种渐进界 限: 1) i f f(n ) Ο n logba ε , 常数ε 0, 则T(n ) θ n logba
归纳步骤:证n=2i+1时命题亦成立 ∵ n=2i时,递归树共有i+1层 ∴ n=2i+1时,递归树共有i+1+1层 ∴ T(n)=(i+1+1) ×cn =(lg2i+1+1) ×cn =(lgn+1) ×cn =cnlgn+cn =θ(nlgn)
递推方法:
n T(n ) 2T cn 2 n 1 cn 2 2T 2 2 2 cn n 2cn 2 2 T 2 2 3 n 3cn 2 T 3 2 n icn 2 T i 2 cn lgn cn
执行次数
1 1 n1+1≤n+1 n1≤n n2+1≤n+1 n2≤n 1 1 1 1 r-p+2≤n+1 r-p+1≤n ≤n1 ≤n1 ≤n2 ≤n2
4. 归并排序算法分析 首先分析Merge算法的时间: ∵ n1,n2≤n,r-p+1≤n ∴ T(n) = An+B=θ(n) Merge-sort算法为一递归算法,根据递归算法时间函数 一般式:
由分治法三个步骤可方便得到解此问题的算法:
Merge-sort(A,p,r) if p<r then q└(p+r)/2┘ Merge-sort(A,p,q) Merge-sort(A,q+1,r) Merge(A,p,q,r)
Merge(A,p,q,r) n1q-p+1 n2r-q for i1 to n1 do L[i]A[p+i-1] for j1 to n2 do R[j]A[q+j] L[n1+1]∞ R[n2+1]∞ i 1 j 1 for kp to r do if L[i]≤R[j] then A[k]L[i] ii+1 else A[k]R[j] jj+1
i
令n=2i, 则i lgn
11
5. 分治法适用条件 ①原问题可以分解为若干个与原问题性质相类似的子 问题 ②问题的规模缩小到一定程度后可方便求出解 ③子问题的解可以合并得到原问题的解 ④分解出的各个子问题应相互独立,即不包含重叠子 问题 如求Fib数问题
3.2 递归算法的分析(Recurrence) 三种方法:替换法、递归树方法及Master方法 1. 替换法(Substitution Method) 思想:首先对T(n)的解做一个猜测,然后用归纳法证明 所做猜测是否正确。 这种方法适用于问题的形式相对简单或比较熟悉,或 者问题的解较易猜测的情况。 例1:T(n)=2T(└n/2┘)+n 例2:T(n)=T(└n/2┘)+T(┌n/2┑)+1
递归树方法:
T n
Cn Cn Cn
n T 2
n T 2
n n T 2 T 2 2 2
n C 2
n n C 2 C 2 2 2
n C 2
n n C 2 C 2 2 2
3. 归并排序(Merge Sort) 思想:如果能把原待排序的数组分解成若干个待排序的 子数组,而这些子数组可以方便地排好序,并且通过 合并这些子数组的解将能得到原问题的解,则整个数 组将排好序。
应用分治法解题的三个基本步骤为: ①divide:把具有n个元素的数组分解为二个n/2大小的 子数组 ②conquer :递归地分解子数组,直到子数组只包含一 个元素为止 ③ combine :二二合并已排好序的子数组使之成为一个 新的排好序的子数组,重复这样二二合并的过程直到 得到原问题的解
n T(n ) { aT( ) D(n ) C(n ) b 其 中: (1)表 示 常 数 时 间 (1) nC nC
a为 分 解 后 的 子 问 题 个 数 1 / b为 分 解 后 子 问 题 与 原 题 问相 比 的 规 模 D(n )表 示 分 解 子 问 题 所 花 的 费时 间 C(n )表 示 合 并 子 问 题 解 所 费 花的 时 间
3.1 分治法(Divide-and-conquer)
1. 什么是分治法 当求解的问题较复杂或规模较大时,不能立刻得到 原问题的解,但这些问题本身具有这样的特点,它 可以分解为若干个与原问题性质相类似的子问题, 而这些子问题较简单可方便得到它们的解,因此通 过合并这些子问题的解就可得到原问题的解。
2. 应用分治法的三个基本步骤 ①分解问题(divide):把原问题分解为若干个与原问题 性质相类似的子问题 ②求解子问题(conquer):不断分解子问题直到可方便 求出子问题的解为止 ③合并子问题的解(combine):合并子问题的解得到原 问题的解