分治法补充内容(递归方程的求解)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
a log b < 1 ⇒ cn logb < cn
a
T ( n) ≤ cn
a
a log b
k −1 a k a j k− j k + ∑ a d (b ) = cn + c ∑ b = cn + cb ∑ j =0 j =0 b j =0 b k −1 j
k −1
如果 d (n ) = c = Θ(1) (常数) (1) 若 a > 1 ,则 T (n) = O n
如果 d (n ) = cn = Θ(n) (线性函数) (1) 若 a < b ,则 T (n) = O(n ) (2) 若 a = b ,则 T ( n) = O (n log n ) (3) 若 a > b ,则 T (n) = O n
T (n) = a 2 T (n / b 2 ) + ad (n / b) + d (n)
=⋯
n T (n) = a T (n / b ) + ∑ a j d (n / b j ) ,注意,由 k = log b 得 i = k
i i j =0 i −1
即: T (n) = a T ( n / b ) +
k −1
j
j
a 因为 < 1 ,所以 c ∑ < c′ b j =0 b
从而
T (n) ≤ cn + b k c′ = cn + c′n
T ( n) = O ( n)
6
递归方程的求解6
(4)当 d (n ) = cn = Θ(n) , a = b 时
T (n) ≤ cn
a log b
+ cb
k
( a b ) − 1 = cnlog ( a b) −1
k
a logb
+ cb
k
( a b) −1 (a b) −1
T (n) ≤ cn
a logb
+ c′′a = cn
)
+ c′′n
a logb
T ( n) ≤ O ( n
源自文库
a logb
8
k k
∑a
j =0
k −1
j
d (n / b j )
3
递归方程的求解3
因为 n = b k ,所以 T (n / b k ) = T (1) = c ,所以上式可以表示为
T (n) = ca + ∑ a d (b / b ) = ca + ∑ a j d (b k − j )
k j k j k j =0 j =0
分治法补充内容
1
递归方程的求解1
我们讨论一类常见的递归方程
c T (n ) = aT (n / b ) + d (n )
n =1 n >1
(1)
其中 a ≥ 1 , b > 1 , c ≥ 0 , T (n) , d (n) 为非负整函数,判断 T (n) 的阶。 上述递归方程分 5 种情况讨论。
T (n) ≤ cn
a logb
a k −1 − 1 a k −1 − 1 k +c = ca + c a −1 a −1
因为 a > 1 , k 非负,所以
T ( n) ≤ ca + c′a
k
k −1
,即 T (n) = O (a ) = O n
k
( )
a logb
5
递归方程的求解5
(3)当 d (n ) = cn = Θ(n) , a < b 时
a logb
= a logb
(3) n
n 对于一般的 n ,取 k = log b (3)式可以表示为
两边同时取对数
a n log b log n = log b log a
T (n) ≤ cn
a logb
+ ∑ a j d (b k − j )
j =0
k −1
log a log n log n = log a 显然相等 log b log b 4
k −1 a k + ∑ a j d (b k − j ) = cn + c∑ b = cn + cb k ∑1 j =0 j =0 b j =0
k −1
k −1
j
n T ( n) ≤ cn + cb k k = cn + cn log b
n T (n) = O ( n log b ) = O ( n log n )
7
递归方程的求解7
(5)当 d (n ) = cn = Θ(n) , a > b 时
k −1 j =0
T (n) ≤ cn
a log b
+ ∑ a j d (b k − j ) = cn
k
a logb
a k + cb ∑ j =0 b
k
a b
k −1
j
T (n) ≤ cn
a log b
递归方程的求解4
(1) 当 d (n ) = c = Θ(1) , a = 1 时
n T (n) ≤ cn + ∑ d (b k − j ) = c + kc = c(log b + 1) 0 j =0 k −1
n T (n) = O(logb ) = O(log n)
(2) 当 d (n ) = c = Θ(1) , a > 1 时
( )
a log b
(2) 若 a = 1 ,则 T (n) = O (log n )
( )
a log b
2
递归方程的求解2
首先设 n = b ( k )为非负整数,即 k = log b
k
n
T (n) = aT (n / b) + d (n)
T (n) = a[aT (n / b 2 ) + d (n / b)] + d (n)
n 因为 k = log b ,所以(2)式可以变为
k −1
k −1
(2)
T (n) = cn
a logb
+ ∑ a j d (b k / b j ) = cn
j =0
k −1
a logb
+ ∑ a j d (b k − j )
j =0
k −1
说明: a = a
k
n log b
,以下证明
ak = n
a
T ( n) ≤ cn
a
a log b
k −1 a k a j k− j k + ∑ a d (b ) = cn + c ∑ b = cn + cb ∑ j =0 j =0 b j =0 b k −1 j
k −1
如果 d (n ) = c = Θ(1) (常数) (1) 若 a > 1 ,则 T (n) = O n
如果 d (n ) = cn = Θ(n) (线性函数) (1) 若 a < b ,则 T (n) = O(n ) (2) 若 a = b ,则 T ( n) = O (n log n ) (3) 若 a > b ,则 T (n) = O n
T (n) = a 2 T (n / b 2 ) + ad (n / b) + d (n)
=⋯
n T (n) = a T (n / b ) + ∑ a j d (n / b j ) ,注意,由 k = log b 得 i = k
i i j =0 i −1
即: T (n) = a T ( n / b ) +
k −1
j
j
a 因为 < 1 ,所以 c ∑ < c′ b j =0 b
从而
T (n) ≤ cn + b k c′ = cn + c′n
T ( n) = O ( n)
6
递归方程的求解6
(4)当 d (n ) = cn = Θ(n) , a = b 时
T (n) ≤ cn
a log b
+ cb
k
( a b ) − 1 = cnlog ( a b) −1
k
a logb
+ cb
k
( a b) −1 (a b) −1
T (n) ≤ cn
a logb
+ c′′a = cn
)
+ c′′n
a logb
T ( n) ≤ O ( n
源自文库
a logb
8
k k
∑a
j =0
k −1
j
d (n / b j )
3
递归方程的求解3
因为 n = b k ,所以 T (n / b k ) = T (1) = c ,所以上式可以表示为
T (n) = ca + ∑ a d (b / b ) = ca + ∑ a j d (b k − j )
k j k j k j =0 j =0
分治法补充内容
1
递归方程的求解1
我们讨论一类常见的递归方程
c T (n ) = aT (n / b ) + d (n )
n =1 n >1
(1)
其中 a ≥ 1 , b > 1 , c ≥ 0 , T (n) , d (n) 为非负整函数,判断 T (n) 的阶。 上述递归方程分 5 种情况讨论。
T (n) ≤ cn
a logb
a k −1 − 1 a k −1 − 1 k +c = ca + c a −1 a −1
因为 a > 1 , k 非负,所以
T ( n) ≤ ca + c′a
k
k −1
,即 T (n) = O (a ) = O n
k
( )
a logb
5
递归方程的求解5
(3)当 d (n ) = cn = Θ(n) , a < b 时
a logb
= a logb
(3) n
n 对于一般的 n ,取 k = log b (3)式可以表示为
两边同时取对数
a n log b log n = log b log a
T (n) ≤ cn
a logb
+ ∑ a j d (b k − j )
j =0
k −1
log a log n log n = log a 显然相等 log b log b 4
k −1 a k + ∑ a j d (b k − j ) = cn + c∑ b = cn + cb k ∑1 j =0 j =0 b j =0
k −1
k −1
j
n T ( n) ≤ cn + cb k k = cn + cn log b
n T (n) = O ( n log b ) = O ( n log n )
7
递归方程的求解7
(5)当 d (n ) = cn = Θ(n) , a > b 时
k −1 j =0
T (n) ≤ cn
a log b
+ ∑ a j d (b k − j ) = cn
k
a logb
a k + cb ∑ j =0 b
k
a b
k −1
j
T (n) ≤ cn
a log b
递归方程的求解4
(1) 当 d (n ) = c = Θ(1) , a = 1 时
n T (n) ≤ cn + ∑ d (b k − j ) = c + kc = c(log b + 1) 0 j =0 k −1
n T (n) = O(logb ) = O(log n)
(2) 当 d (n ) = c = Θ(1) , a > 1 时
( )
a log b
(2) 若 a = 1 ,则 T (n) = O (log n )
( )
a log b
2
递归方程的求解2
首先设 n = b ( k )为非负整数,即 k = log b
k
n
T (n) = aT (n / b) + d (n)
T (n) = a[aT (n / b 2 ) + d (n / b)] + d (n)
n 因为 k = log b ,所以(2)式可以变为
k −1
k −1
(2)
T (n) = cn
a logb
+ ∑ a j d (b k / b j ) = cn
j =0
k −1
a logb
+ ∑ a j d (b k − j )
j =0
k −1
说明: a = a
k
n log b
,以下证明
ak = n