36
niversity of Science and Technology of Chi 主主主 主主 Email: { [email protected] } Spring 2012 USTC 主主主主

主讲人: 吕敏 Email: { lvmin05@ustc } Spring 2012 , USTC

Embed Size (px)

DESCRIPTION

算法基础. 主讲人: 吕敏 Email: { [email protected] } Spring 2012 , USTC. 第三讲 递归式. 内容提要: 代换法 迭代法 递归树法 主方法. 对算法运行时间的分析,一般都是通过每条指令指定的代价 * 指令执行次数来计算的。比如,插入算法的运行时间分析。. INSERTION-SORT( A ) costtimes - PowerPoint PPT Presentation

Citation preview

Page 1: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China

主讲人: 吕敏Email: { [email protected] }

Spring 2012 , USTC

算法基础

Page 2: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China23/4/20 2

第三讲 递归式内容提要: 代换法 迭代法 递归树法 主方法

Page 3: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China

对算法运行时间的分析,一般都是通过每条指令指定的代价 * 指令执行次数来计算的。比如,插入算法的运行时间分析。

23/4/20 3

1 2 4

5 6 7 82 2 2

( ) ( 1) ( 1)

( 1) ( 1) ( 1)n n n

j j jj j j

T n c n c n c n

c t c t c t c n

INSERTION-SORT(A) costtimes

1 for( j = 2; j <=length[A]; j++) c1 n

2 { key = A[j] c2n-1

3 // Insert A[j] into the sorted sequence A[1 .. j-1] 0n-1

4 i = j-1 c4n-1

5 while( i > 0 && A[i] > key) c5

6 { A[i+1] = A[i] c6

7 i = i-1 c7

8 }

9 A[i+1] = key c8n-1

10 }

2

2

2

( 1)

( 1)

n

jj

n

jj

n

jj

t

t

t

Page 4: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China

当一个算法包含对其自身的递归调用时,其运行时间通常可以用递归式来表示。

递归式是一组等式或不等式,它所描述的函数是用在更小的输入下该函数的值来定义的。如,归并排序:

23/4/20 4

1 , if 1 ( ) (4.1)

2 ( / 2) , if 1

nT n

T n n n

costMERGE-SORT(A, p, r) T(n)1 if p < r2 Then q ←3 MERGE-SORT(A, p, q) T(n/2)4 MERGE-SORT(A, q+1, r) T(n/2)5 MERGE(A, p, q, r) n

Page 5: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China

在表达和求界递归式时一般都会忽略一些技术性细节:

1 )假设函数自变量为整数,忽略上取整和下取整。

2 )忽略递归式的边界条件,并假设对于小的 n 值, T(n) 是常量。

23/4/20 5

1 , if 1 ( ) (4.1)

2 ( / 2) , if 1

nT n

T n n n

1if)()2/()2/(

1if)1()(

nnnTnT

nnT

)()2/(2)( nnTnT

初始值只会影响常数因子,并不会影响函数增长的阶。

Page 6: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China

递归表达式求解方法:

1 )代换法:先猜有某个解存在,用数学归纳法证明猜测的正确性;

2 )迭代法:把递归式转化为求和表达式,然后求和式的界;

3 )递归树法:直观地表达了迭代法

4 )主方法:给出了求解 T(n) = aT(n/b)+f(n) 这种形式递归式的简单方法。

23/4/20 6

Page 7: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China23/4/20 7

第三讲 递归式内容提要: 代换法 迭代法 递归树法 主方法

Page 8: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China

代换法

代换法求解递归式要点:

1 )猜测解的形式

2 )用数学归纳法找出使解真正有效的常数

23/4/20 8

1 , if 1,Example: ( )

2 ( / 2) , if 1.

nT n

T n n n

(1) Guess: ( ) lg

(2) Induction

: 1 lg 1 ( )

: Inductive hypothesis is that ( ) lg for all .

Use the inductive hypothesis of ( / 2) to prove ( )

T n n n n

n n n n T n

T k k k k k n

T n T n

Basic

Inductive step

( ) = 2 ( / 2)

= 2(( / 2) lg( / 2) ( / 2)) (by inductive hypothesis)

= lg( / 2) (lg lg 2) 2 = lg .

T n T n n

n n n n

n n n n n n n n n n

Page 9: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China

代换法

代换法求解递归式要点:

1 )猜测解的形式

2 )用数学归纳法找出使解真正有效的常数

23/4/20 9

1 , if 1,Example: ( )

2 ( / 2) , if 1.

nT n

T n n n

(1) Guess: ( ) lg

(2) Induction

: 1 lg 1 ( )

: Inductive hypothesis is that ( ) lg for all .

Use the inductive hypothesis of ( / 2) to prove ( ).

T n n n n

n n n n T n

T k k k k k n

T n T n

Basic

Inductive step

这个方法非常有效,但是只适合于求解一些比较容易猜测的情形!

Page 10: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China10

The substitution method can be used to establish either upper ( O ) or lower bounds (Ω) on a recurrence ( 建立上界、下界 ).

example, determining an upper bound on the recurrence

(4.4)

(1) Guessing that the solution is T(n) = O(n lg n).

(2) Proving T(n)≤cn lg n for a some constant c > 0. Assume that this bound holds for n/2 , that is, that

. Substituting into the recurrence yields

where the last step holds as long as c ≥ 1.

( ) 2 ( / 2 ) ,T n T n n

( / 2 ) / 2 lg( / 2 )T n c n n

( ) =2 ( / 2 ) 2( / 2 lg( / 2 ))

lg( / 2) = lg lg 2 lg lg ,

T n T n n c n n n

cn n n cn n cn n cn n cn n cn n

代换法

Page 11: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China11

应用数学归纳法要求解对边界条件成立。 一般通过证明边界条件符合归纳证明的基本情况。但可能出

现归纳证明基本情况不能满足的问题。 解决办法:扩展边界条件。 依据:渐近界只要求 n≥n0 即可,故可以选择适当的 n0 ,

让 T(n0) 代替作为归纳证明中的边界条件,使递归假设对很小的 n 也成立。

例如,对 (4.4) ,要求 T(n)≤cn lg n 对边界条件 n=1 成立,但T(1)=1≤c1 lg 1=0 不成立。 选择 T(2) 和 T(3) 作为边界条件, T(2) = 4 and T(3) = 5.

取足够大的 c ,例如 c ≥ 2 ,就有 T(3)≤c 3 lg 3 。

代换法

n

Page 12: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China12

做一个好的猜测: 猜测递归式没有通用的方法 需要经验、创新性 试探法 递归树 证明较宽松的上下界,然后再缩小不确定性区间。

代换法

Page 13: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China13

If a recurrence is similar to one you have seen before, then guessing a similar solution is reasonable. For example,

which looks difficult because of the added “17”. Intuitively, this additional term cannot substantially affect

the solution to the recurrence. (该附加项不会从本质上影响递归解)

When n is large, the difference between T( n/2 ) and T( n/2 + 17) is not that large. Consequently, we make the guess that T(n) = O(n lg n), which you can verify as correct by using the substitution method.

( ) 2 ( / 2 17) ,T n T n n

代换法

Page 14: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China14

有时候猜测是正确的,但是却会在进行数学归纳证明的时候出现一些问题 . 原因在于归纳假设不够强

例如

我们猜测其解为 O(n) ,然后证明对适当选择的 c ,有 T(n)≤cn 。用所猜测的界对递归式作替换得到下式

这里并不能引出 T(n)≤ cn ,无论 c 为何值。

解决办法:可以去掉一个低阶项来修改所猜的界,使得证明可以顺利进行。

( ) ( / 2 ) ( / 2 ) 1.T n T n T n

( ) / 2 / 2 1 1,T n c n c n cn

一些细微的问题 :

代换法

Page 15: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China15

1 )多数人可能会踩一个更大的界如 O(n^2) ,2 )但是事实上 O(n) 是正确的。3 )直觉上告诉我们,我们的猜测几乎是正确的:就是只差了一个

常数 1 ,即一个低阶项。4 )但是,就是因为差这一项,使得数学归纳法证明出问题,无法 得到期望的结果。5 )因此,我们把所做的猜测中减去一个低阶项,即猜测解的形式 为 T(n) ≤ cn – b ,这样就有下式,只要 b>1 就可以成立。和先 前一样, c 要选择足够大,一般能够处理边界条件。( ) ( / 2 ) ( / 2 ) 1 2 1 ,T n c n b c n b cn b cn b

( ) ( / 2 ) ( / 2 ) 1 Solution: ( ) ( )T n T n T n T n O n

代换法

一些细微的问题 :

Page 16: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China16

• 与多数人的直觉不一样。为什么不是增加一项来解决问题呢?

• 理解该问题的关键在于要理解我们所采用的数学归纳法:通过对更小的值做更强的假设,就可以证明对某个给定值的更强的结论。

一些细微的问题 :

代换法

Page 17: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China17

在运用渐近表示时,很容易出错 .

比如,对于递归式

we can falsely prove T(n) = O(n) by guessing T(n)≤cn and then arguing

( 错误在于没有证明归纳假设的准确形式,即 T(n)≤cn)

( ) 2 ( / 2 ) 2( / 2 )

= ( ) , !!!

T n T n n c n n

cn n

O n wrong

( ) 2 ( / 2 ) (4.4)T n T n n

避免陷阱:

代换法

Page 18: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China18

代数变换 : 对一个陌生的递归式作一些简单的代数变换,就会使之变成读者较熟悉的形式 .

例如, 上面这个式子看起来很难,但是可以对它进行简化,

方法是 改动变量。为了方便起见,不考虑数的截取整数问题。如 将 转化 为整数。

解:设 m = 1g n , 则得到新的递归式 T(2m) = 2T(2m/2)+m.

再设 S(m)=T(2m) => S(m)=2S(m/2)+m,

与递归式 (4.4) 很接近,故有相同的解,即 : S(m)=O(m lgm) . 将 S(m) 变换回 T(n), 得 T(n)=T(2m)=S(m)=O(m lgm)=O(lgn lglgn) .

n

( ) 2 ( ) lg ,T n T n n

改变变量:

代换法

Page 19: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China

代换法

代换法求解步骤小结:

(1) 做一个好的猜测

(2) 证明一般情况成立

(3) 处理边界条件,可以进行边界扩展

注意事项:

(1) 对更小的值做更强的假设

(2) 避免陷阱

(3) 适当时进行变量替换

Page 20: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China23/4/20 20

第三讲 递归式内容提要: 代换法 迭代法 递归树法 主方法

Page 21: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China21

代换法 给递归式的解的正确性提供了简单的证明方法, 但很难得到一个好的猜测

迭代法 不需要我们对解的形式进行猜测; 只需要把递归式不断地展开,对各个展开项求和就可以了。

迭代法对代数能力的要求比较高

例( ) 3 ( / 4 )

3 ( / 4 3 ( /16 ))

3( / 4 3( /16 3 ( / 64 )))

3 / 4 9 /16 27 ( / 64 ),

T n n T n

n n T n

n n n T n

n n n T n

( ) 3 ( / 4 )T n T n n

迭代法

Page 22: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China22

问题:该展开多少项才合适? 涉及到级数求和中项目问题,这可以通过边界条件得到 ?

上述例子,第 i 项是 . 迭代直到 才终止。 利用边界条件 , 可

得:

( ) 3 ( / 4 ) 3 ( / 4 3 ( /16 ))

3( / 4 3( /16 3 ( / 64 )))

3 / 4 9 /16 27 ( / 64 ),

T n n T n n n T n

n n n T n

n n n T n

3 / 4i in / 4 1in / 4 / 4i in n

4

4 4

log 3

0

log log 34

( ) 3 / 4 9 /16 27 / 64 3 ( / 4 )

(3 / 4) ( ) 4 ( ) ( ).

( / 4 1 log 3 3 )

i i

i

i

ni i

T n n n n n T n

n n n o n O n

n i n n

迭代法

Page 23: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China23

迭代法的难点: 递归次数 级数求和

在展开递归式为迭代求和的过程中, 有时只需要部分展开, 然后根据其规律来猜想递归式的解, 接着用代换法进行证明。

迭代法

Page 24: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China24

当递归式中包含下取整和上取整函数时,迭代法会变得更加的复杂,难以求解。

这时,经常假设递归式中 n 是某个常数的幂次方,从而方便求解

例如 ,

可以假设 n = 4k ,这样下取整函数就可以忽略了。

( ) 3 ( / 4 )T n T n n

迭代法

Page 25: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China23/4/20 25

第三讲 递归式内容提要: 代换法 迭代法 递归树法 主方法

Page 26: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China26

画递归树可以从直观上表示迭代法,也有助于猜想递归式的解

当用递归式表示分治算法的运行时间时,递归树的方法尤其有用 .

递归树中,每一个节点都代表着递归函数调用集合中一个子问题的代价。将树中每一层内的代价相加得到一个每层代价的集合,再将每层的代价相加得到递归式所有层次的总代价。

递归树法

Page 27: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China

使用递归树产生好的猜测时,通常需要容忍小量的“不良量”: 1 ) floor, ceiling忽略;

2 ) n 经常假设为某个整数的幂次方;

例子见课本 $4.2

关键: 1 )树的深度如何确定?

2 )每个节点的代价— >每层的代价— >总代价

27

递归树法

Page 28: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China23/4/20 28

第三讲 递归式内容提要: 代换法 迭代法 递归树法 主方法

Page 29: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China29

主方法是求解如下形式的递归式的一个非常简便的方法。其中f(n) 是一个渐近正的函数。

T(n) = aT(n/b)+f(n), (4.5)

其中 a≥1 , b>1, f(n) 是一个渐近正的函数。 主方法要求记忆三种情况,但这样很容易确定许多递归式的解,甚至可以不需要计算。

在上面的递归式中, n/b 可能不是整数。有时,甚至可以用floor(n/b) 和 ceiling(n/b) 来代替 n/b 。这种代替不会对递归式的渐近行为产生影响。 .

实际上,在分析分治算法的运行时间时,经常略去下取整和上取整函数,以方便对递归式的分析

主方法

Page 30: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China30

主方法的正确性依赖于如下的主定理 Theorem 4.1 (主定理)

假设 a≥1 and b>1 为常数,设 f(n) 为一函数, T(n)由递归式T(n) = aT(n/b) + f(n) 对非负整数定义,其中 n/b 指 floor(n/b) 或ceiling(n/b) 。那么, T(n) 可能有如下的渐近界:

(log )- log

log log

(log )

1. If ( ) ( ) for some constant 0, then ( ) ( ).

2. If ( ) ( ), then ( ) ( lg ).

3. If ( ) ( ) for some constant 0,

and if ( / ) ( ) for s

b b

b b

b

a a

a a

a

f n O n T n n

f n n T n n n

f n n

af n b cf n

ome constant 1

and all sufficiently large , then ( ) ( ( )).

c

n T n f n

主方法

Page 31: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China31

Comparing the function f(n) with . Intuitively, the solution is determined by the larger of the two functions. Case 1, larger, then the solution is . Case 3, f(n) larger, then the solution is . Case 2, the two functions are the same size, we multiply by

a logarithmic factor, and the solution is

log (log )

log log

(log )

( ) ( / ) ( ),

, ( )0

( ) lg , ( ), 1

( ) , ( ) and ( / ) ( ) for large

b b

b b

b

a a

a a

a

T n aT n b f n

n f n O n

T n n n f n nc

f n f n n af n b cf n n

logb an

logb an log( ) ( )b aT n n

( ) ( ( ))T n f n

log( ) ( lg ) ( ( ) lg ) .b aT n n n f n n

主方法

Page 32: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China32

Polynomially Case 1, f(n) must be polynomially smaller than . Case 3, f(n) must be polynomially larger than .

Gap There is a gap between cases 1 and 2 when f(n) is smaller

than but not polynomially smaller. Similarly, there is a gap between cases 2 and 3 when f(n) is

larger than but not polynomially larger.

log (log )

log log

(log )

( ) ( / ) ( ),

, ( )0

( ) lg , ( ), 1

( ) , ( ) and ( / ) ( ) for large

b b

b b

b

a a

a a

a

T n aT n b f n

n f n O n

T n n n f n nc

f n f n n af n b cf n n

logb anlogb an

logb an

logb an

logExample: ( ) lg , b af n n n n n

主方法特殊情况:

主方法

Page 33: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China33

T(n)=9T(n/3)+n

T(n)=T(2n/3)+1

log (log )

log log

(log )

( ) ( / ) ( ),

, ( )0

( ) lg , ( ), 1

( ) , ( ) and ( / ) ( ) for large

b b

b b

b

a a

a a

a

T n aT n b f n

n f n O n

T n n n f n nc

f n f n n af n b cf n n

3

3

log log 9 2 2

log 9 2

9, 3, ( ) ( )

( ) ( ), where 1 ( ) ( )

b aa b f n n n n n n

f n O n T n n

3 / 2

3

log log 1 0

log

1, 3 / 2, ( ) 1 1

( ) ( ) (1) ( ) (lg )

b a

a

a b f n n n n

f n n T n n

主方法

举例:

Page 34: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China34

举例: T(n)=3T(n/4)+nlgn

log (log )

log log

(log )

( ) ( / ) ( ),

, ( )0

( ) lg , ( ), 1

( ) , ( ) and ( / ) ( ) for large

b b

b b

b

a a

a a

a

T n aT n b f n

n f n O n

T n n n f n nc

f n f n n af n b cf n n

4

4

log log 3 0.793

(log 3)

3, 4, ( ) lg ( )

( ) ( ), where 0.2, and for sufficiently large ,

( / ) 3( / 4) lg( / 4) (3 / 4) lg ( ) for 3 / 4

( ) ( lg )

b aa b f n n n n n O n

f n n n

af n b n n n n cf n c

T n n n

主方法

Page 35: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China35

T(n)=2T(n/2)+nlgn

log (log )

log log

(log )

( ) ( / ) ( ),

, ( )0

( ) lg , ( )1

( ) , ( ) and ( / ) ( ) for large

b b

b b

b

a a

a a

a

T n aT n b f n

n f n O n

T n n n f n nc

f n f n n af n b cf n n

log 2, 2, ( ) lg ,

but ( ) / lg , which is asymptotically less than for any positive

constant , that is ( ) is not polynomially larger than . Consequently,

the recurrence f

b aa b f n n n n n

f n n n n

c f n n

alls into the gap between case 2 and case 3.

主方法

Page 36: 主讲人:   吕敏 Email: {  lvmin05@ustc  } Spring  2012 , USTC

University of Science and Technology of China

谢谢!

23/4/20 36

Q & A

作业: 4.1-4 4.2-5 4.3-4