0主定理求递归公式

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

0 n0 s ( n) c s (n 1) n 0

s(n) = c + s(n-1) c + c + s(n-2) 2c + s(n-2) 2c + c + s(n-3) 3c + s(n-3) … kc + s(n-k) = ck + s(n-k)
17
So far for n >= k we have
26

c n 1 T (n) 2T n c n 1 2 So far for n > 2k we have


T(n) = 2kT(n/2k) + (2k - 1)c T(n) = 2lg n T(n/2lg n) + (2lg n - 1)c = n T(n/n) + (n - 1)c = n T(1) + (n-1)c = nc + (n-1)c = (2n - 1)c

T(n) = 2T(n/2) + (n) T(n) = (n lg n) T(n) = 2T(n/2) + n T(n) = (n lg n) T(n) = 2T(n/2+ 17) + n T(n) = (n lg n)
Use algebraic manipulation to turn an unknown recurrence into one similar to what you have seen before. (通过数学变化,将陌生的 迭代关系转变为熟悉的形式)
Making a good guess(猜想)

T(n) = 2T(n/2) + (n) T(n) = (n lg n) Guess:T(n) = 2T(n/2) + n T(n) =O(n lg n)

Use induction to find the constants and show that solution works: c, s.t (such that)(归纳证明 c, n>N满足) T(n)≤cn lgn?
8
例(续)
假设在n≥2时对于n/2成立, 即T(n/2 )≤c n/2 lg(n/2)
例(续)

Examples:

T(n)= 2T(n/2) + n ≤2(c n/2 lg(n/2))+n ≤cn lg(n/2)+n =cn lgn-cn lg2+n =cn lgn-cn+n ≤cn lgn 对于c>1
s(n) = cn
19 20
0 n0 s ( n) 0 ( 1 ) n s n n

0 n0 s ( n) ( 1 ) n s n n0

s(n) = n + s(n-1) = n + n-1 + s(n-2) = n + n-1 + n-2 + s(n-3) = n + n-1 + n-2 + n-3 + s(n-4) =… = n + n-1 + n-2 + n-3 + … + n-(k-1) + s(n-k)
1.
Expand the recurrence(展开) Work some algebra to express as a summation(代数运算) Evaluate the summation(求和)
2.
3.
15
16
0 n0 s ( n) c s (n 1) n 0



Example: T(n) = 2T(n1/2) + lg n Rename m = lg n and we have T(2m) = 2T(2m/2) + m Set S(m) = T(2m) and we have S(m) = 2S(m/2) + m S(m) = O(m lg m) Changing back from S(m) to T(n), we have T(n)=T(2m)=S(m)= O(m lg m) = O(lg n lg lg n)
i
i 1
n
0 n
n 1 2
23
24
4
2013/4/14
0 n0 s ( n) n s ( n 1) n 0

So far for n >= k we have
i n k 1
c n 1 T (n) 2T n c n 1 2

迭代法(Iteration) 主方式(Master Theorem)

Provides solutions to recurrences of a quite restricted, but very common, nature(定理化).
1
2013/4/14
如何获得好的猜想?(How To Make a Good Guess)
2013/4/14
递归关系(Recurrence Relations)
算法设计与分析 Algorithms Design & Analysis
第三讲:递归关系

Recurrence relations describe functions over the natural numbers.(递归关系描述 的是自然数上的函数关系) They express the value of a function for a given integer n>0 as functions of the values of the function for arguments less than n.(对于某个n>0 的 函数值,通过小于n的函数值表示出来)


Determine an upper bound on the recurrence (求以下迭代关系的上界): T(n) = 2T(n/2) + n

Experience helps(经验) Variable substitution(更换变元) Prove loose upper and lower bounds and tighten them step by step(先松后紧)
12
11
2
2013/4/14
递归树(Recursion Tree)


The recursion tree method expands the recurrence and visualizes this expansion. (展开使之可视化) Example:
14
迭代法(Iteration)

What if k = lg n?

T(n) = aT(n/b) + cn a(aT(n/b/b) + cn/b) + cn a2T(n/b2) + cna/b + cn a2T(n/b2) + cn(a/b + 1) a2(aT(n/b2/b) + cn/b2) + cn(a/b + 1) a3T(n/b3) + cn(a2/b2) + cn(a/b + 1) a3T(n/b3) + cn(a2/b2 + a/b + 1) … akT(n/bk) + cn(ak-1/bk-1 + ak-2/bk-2 + … + a2/b2 + a/b + 1)

c n 1 c n 1 T ( n) T (n) n 2T c n 1 n 2 aT cn n 1 b
3

求解方法

置换法

置换法(Substitution)

Make a guess and verify it(假设-论证). Allows us to arrive at a guess(帮助猜想). The guess can then be verified using the substitution method(置换法论证).

s(n) = ck + s(n-k) s(n) = cn + s(0) = cn

What if k = n?

18
3
2013/4/14
0 n0 s ( n) c s ( n 1 ) n0

0 n0 s ( n) n s ( n 1) n 0

So far for n >= k we have
i n k 1
i
Fra Baidu bibliotek
n
So far for n >= k we have
i n k 1
s (n k )

i
n
s (n k )

What if k = n?
What if k = n?
i
i 1
n
s ( 0)
i n k 1
21
So far for n >= k we have
i n k 1
i
n
s (n k )
=
i
n
s (n k )
22
0 n0 s ( n) n s ( n 1 ) n0

0 n0 s ( n) n s ( n 1) n 0

i
n
s (n k )

What if k = n?
i
i 1

n
s ( 0)
i
i 1
n
0 n
Thus in general
n 1 2
s ( n) n
n 1 2
25
T(n) = 2T(n/2) + c =2(2T(n/2/2) + c) + c =22T(n/22) + 3c =22(2T(n/22/2) + c) + 3c =23T(n/23) + 4c + 3c =23T(n/23) + 7c =23(2T(n/23/2) + c) + 7c =24T(n/24) + 15c … =2kT(n/2k) + (2k - 1)c
The three steps of the substitution method: (置换法的三步骤) 1. Make a good guess(猜想)

递归树(Recursion Tree)

2. Verify the guess, assuming that it can be verified for some base case n = n0 (验证猜想对于n = n0的正确性) 3. Choose an n0 for which the guess works and such that Step 2 for any n > n0 does not depend on the claim for some n' < n0 (验证猜想对于n > n0的正确性)

1
递归实例(Recurrence Examples)
0 n0 0 n0 s ( n) s ( n) c s ( n 1 ) n 0 n s ( n 1 ) n0
为什么要分析递归关系?

The running times of many algorithms (especially recursive algorithms) are easily expressed using recurrence relations。(许多算法,特别是递归算法,时间开 销函数都可以用递归关系来描述) We need to solve them, that is, derive closed expressions of the functions expressed by recurrences using O-, Ω-, and Θ-notation.(分析开销函 数并表示出来) Example: (Merge Sort)
T(n) = 2T(n/2) + (n) T(n) = (n lg n) T(n) = 2T(n/2) + n T(n) = (n lg n) T(n) = 2T(n/2 )+ 17) + n ???
9
10
例(续)

Changing Variables(更换变元)

Examples:

So far for n >= k we have

s(n) = ck + s(n-k) s(n) = cn + s(0) = cn

What if k = n?


So

n0 0 s ( n) c s(n 1) n 0 Thus in general

s(n) = n + s(n-1) = n + n-1 + s(n-2) = n + n-1 + n-2 + s(n-3) = n + n-1 + n-2 + n-3 + s(n-4) =… = n + n-1 + n-2 + n-3 + … + n-(k-1) + s(n-k)
相关文档
最新文档