1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài tập môn phân tích và thiết kế thuật toán homework #02 phân tích thuật toán Đệ quy

18 0 0
Tài liệu được quét OCR, nội dung có thể không chính xác
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Phân Tích Thuật Toán Đệ Quy
Tác giả Bui Nhat Phi, Thỏi Ngọc Quõn, Nguyễn Phỳ Tài, Huỳnh Nhật Minh
Người hướng dẫn GV Huỳnh Thị Thanh Thương
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Khoa Học Máy Tính
Thể loại Bài Tập
Năm xuất bản 2024
Thành phố TP.HCM
Định dạng
Số trang 18
Dung lượng 1,2 MB

Nội dung

TRUONG DAI HOC CONG NGHE THONG TIN KHOA KHOA HOC MAY TINH BAI TAP MON PHAN TICH VA THIET KE THUAT TOAN HOMEWORK #02: PHAN TICH THUAT TOAN DE QUY GV hướng dẫn: Huỳnh Thị Thanh Thương

Trang 1

TRUONG DAI HOC CONG NGHE THONG TIN

KHOA KHOA HOC MAY TINH

BAI TAP MON PHAN TICH VA THIET KE THUAT TOAN

HOMEWORK #02: PHAN TICH THUAT TOAN DE QUY

GV hướng dẫn: Huỳnh Thị Thanh Thương

Nhóm thực hiện:

1 Bui Nhat Phi 22521078

2 Thái Ngọc Quân 22521189

3 Nguyễn Phú Tài 22521280

4 Huỳnh Nhật Minh 22520862

TP.HCM, ngày 12 tháng 4 năm 2024

Trang 2

1 Bài tập 1

a) Gửi ngân hàng 1000 USD, lãi suất 12% / năm Số tiền có được sau 30 năm là bao nhiêu?

Gọi 7(m) là thời gian thực hàm đệ quy

e Véi n = 0, số tiền nhận được là hằng số, nên tốn thời gian IA ¢

e V6in > 0:

— Số tiền gửi ngân hàng sẽ được tính theo công thức:

Số tiền sau n năm = Số tiền sau (n - 1) năm * (1 + Lãi suất)

— Do đó, hàm sẽ gọi đệ quy 1 lần ứng với thời gian 7{ø— 1) và c¿ là tổng chi phi tính toán

Vậy:

Tín) = Cy ; neu n=0 T(n-l+eo ,néun>O0

b) Cho doan chương trình sau:

long Fibo(int n)

{

if @ = 0 || n = 1)

return 1;

return Fibo(n-1) + Fibo(n-2);

}

Gọi T{(n) là thời gian thực hiện Fibo(n)

e Với › = 0 hoặc 1, số lệnh thực hiện là hằng số, nên tốn thời gian e¡

® VỚI n > ]:

— Hàm Fibo(n) gọi đệ quy 2 lần gồm: 1 lần gọi Fibo(n-1) ứng với thời gian 7{w — 1)

và 1 lần gọi Fibo(n-2) ứng với thời gian 7{n — 2)

— Thời gian tính tổng kết quả của 2 lần gọi đệ quy là œ›

= T(n) = Tín — L) + Tín — 3) + œ

Vậy:

m) =

T(n— 1)+ T{n— 2) +œ›, nêu n > ]

c) Cho đoạn chương trình sau:

Trang 3

public int g(int n)

{

if ( == 1)

return 2;

else

return 3*g(n/2) + g(n/2)+5;

}

Goi T(n) 1a théi gian thye hién g(n)

e Véin = 1, số lệnh thực hiện là hằng số, nên tốn thời gian e¡

e V6in > 1:

— Ham g(n) gọi đệ quy 2 lần: 2 lần gọi g(n/2) ứng với thời gian 72/2)

— Thời gian tính tổng kết quả của 2 lần gọi đệ quy là œ›

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

Vậy:

Tín) = Cy , neu n=l 2T(n/2)+ ca, nếu n > ]

d) Cho đoạn chương trình sau:

long xn(int n)

{

if (mn == 0) return 1;

long s = 0;

for (int i=1; i<=n; i++)

s = s + i*i*xn(n-1);

return s;

}

Goi T(r) 1a thai gian thue hién cha wn(n)

e Với n = 0, hàm chỉ thực hiện duy nhất lệnh return 1, nên tốn thời gian c¡

e Với n > 0, ta thay:

— Chương trinh duyét qua vong l&p for n lan, vi mdi lan goi dé quy ham an(n — 7), với i

là index của vòng for

— Ứng với mỗi lần lặp, ta lại thực hiện phép cộng tổng

Do đó chỉ phí là: Ð 7, T{n — 7) + œ

Vậy:

T(n) C1, néu n = 0

3), ¡7í n—)+@, néun>0

Trang 4

{

if(n < 1) return 0;

for(i=1; i<= n; i++)

for(j=1; j<= n; j++)

print ("*");

Draw (n-3);

}

Gọi T(n) là thời gian thực hiện của Draw(n)

e Với ø› < 1 số lệnh thực hiện là hằng số, nên tốn thời gian e¡

® VỚI n >= Ì:

— Hàm Draw(n) gọi đệ quy một lần: Draw(n-3) ứng với thời gian 7'{» — 3)

— Có hai vòng lặp được duyệt qua n lần, thdi gian sé 1A cyn?

= 7(n) = Tín — 3) + c2n?

Vậy:

Tín) = Cy 3 neu n<l Tín — 3) + cạn? ,néun>1

f)

hanoi (n,A, B, C)

{

if(m == 1) transfer(A, C);

else

{

hanoi(n-1, A, C, B);

transfer(A, C); //chuyén 1 dia tit cOt A sang cét C

hanoi(n-1, B, A, C);

}

}

Phân tích:

e Với n = I1, chỉ thực hiện một lần chuyển đĩa từ A sang C, nên tốn thời gian 1

® Với n > 1, ta có:

— Trước khi chuyển đĩa cuối từ A sang , ta chuyển (ø — 1) đĩa từ A sang B hoặc từ B

sang Ở ứng với thời gian Tín-])

— San khi chuyển (»— 1) đĩa từ A sang B hoặc từ B sang C, ta chuyển một đĩa từ A sang

€ ứng với thời gian là 1

— Ban đó ta chuyển (ø — 1) từ B sang hoặc tit C sang A ứng với thời gian T{m-1) Do đó: 7(m) = 2f(n — 1) +1

Trang 5

kh¿ m = 1

2T(n-—1)+1 khí n >

2 Bai tap 2

Tín) = 270) +n?

olor) +] 4 =47f+ 12+

= ( 7 n2 = 7 " n2

4|srf9 + TẾ | + tẺ về =gr() + 2+ TP +

= (Orig — — — ta n= — gtyptyte — —

i-1 9

=2 'T0)+Ð (Se)

k=0

Qua trinh ditng khi téi T(1), hay 5 = 1 i = logy n

"Ta có: 2! = 2l98% — „

Vậy:

logs n—1 2 logs n—1 1

T(n) =n-TO)+ » = mon » (5)

ange et Poy 3 ay 1 =i 2

: 1

=; n+ 2n*( In? (1 — ¬)

=2n?—n

T(n) =2 T7 logn

n

2b ) + log 3 +logn

irs g) + los 1J* 285 +logn

“ib

S7(

)+

(

AT(Z) + 2log 5 “+logn

(

` +4log 7 - + 2log 5 “4 log n

_ 2T(5) +2) Mog 5-5 + + 2log 5 +logn

Trang 6

Quá trình dừng lai khi téi T(1), hay 2’ =n => i= logan

= T(n) = 2° "T(1) + So 2" hog

logs n—1

logs n

i=1

» log

i=0

= » (2' log n — 2! log 2") i=0

logs n—1

= logn » gi

¿=0

= logy n(2'°?” —

logs n—1

» ¡2i

¡=0

= (n — 1) logy n — (nlogy n — 2n) — 2

= 2n — logon — 2

=> T(n) = 3n — loggn — 2

3 T(n) =87(5) +! nh

Quá trình dừng lại khi tới 7(1), hay 2

Ta có: 8! = 89" — nổ

Vậy:

T (n) =87(5 5) +

=s [rq

oar) 4

(

7) =1

)+ vere

SẼ DI +? '=647(1) +i +

= 64 [sr §)+ G0] +2

=

=5127( ~) + 3n3

=8'T(5) + in?

, 2b = glegan — ny

T(n) = n®T(1) +n logy n

4 T(n)

nề +n} logy n

n° (logy n + 1)

=47T(z) +n

n= i=logyn

2:—1

1) — (logon _— 2)212%n " 2

Trang 7

Tín) = 47(3) +n

=4 |) + 3Ì +n

= 16S) +4040 ey ge,

= 16 |#f()+ g]+ stn ya +4 +)

=647(—)+16—+4~ (5) + 65 tdgtn +:

=47()+4 (53) + 1 gai to + 165 + s1” +16— +4 +!

Quá trình dừng lai khi téi T(1), hay 3’ =n > i= logsn

= T(n) = 4°"T (1) + » 41 3T

¿=1

Tà có

log; n log, n—1 i

4 \ logan

"

g—l

Alogsn

= 3n ( —]

Tr Alogsn

= T(n) = 49%" + 3u ( — ) = 4° n1! — su,

T(n) =9T() +

=9 orca) + “| +n? = 9T(—) + 2n?

=9 lori) + a + 2n? = 9T(—) + 3n?

=9-T(G) tien?

Qua trinh ditng khi téi T(1), hay = 1 + i = logy n

Ta cd: 9 = Qs” — ¡2, 3° = 3984" cứ

Vậy:

T(n) =n? -T() +n? logs n

=n? +n? logs n

=n" (logsn +1)

Trang 8

6 T(n) = 2T(/n) +1 T(2)=0

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

=2 [27(n?) + 1 41=4T (nt) +3

=4 [27(n*) + 1 +3= 8T (n>) +7

i-1

=9! T (ns) + S 2t

Quá trình dừng khi tới T(2), hay nấr = 2 4 i = log(log(n)), với log là logarit cơ số 2

Vậy:

3 Bai tap 3

a)

T(n) =4T(n — 1) — 3T(n — 2) T(0) =1,70) =2

Xét: T(n) — 4f{n — 1) + 3f7{n — 2) =0

pat 7 un = X"T—4X" !+3X"?=0

at Pn) = x" ©œ X""?(X?—4X+3) =0

Phương trình đặc trưng: X?— 4X +3=0 œ(X— I)(X—3) =0

X: =1, nghiệm đơn

Xa =3, nghiệm đơn

=> T(n) = cđ1#1 + G4! © c¡ị + œ3”

7) =e¡ + 3{ =2 =

Ma ta có:

1 rr

T(O)=a+@=1 ° ng

⁄ 2

(

b)

T(n) = 4T(n — 1) — 5T'{n — 3) + 2T(n — 3)

T(0) =0,T(1) = 1,T(2) =2

Xét: Tín) — 4f'(n — 1) + 5TÍn — 3) — 2T(n — 3) =Ú

Đặt Tín) = X”":

= X"T—-4X" !l+Lø" 2T—2X" 3=0

© X"3(X”—-4X?+5X-9)=0

7

Trang 9

-trình đặc trưng: X3—4X?+5X—9 = 0 œ (X—1)2(X—2) = _-

Phương trình đặc trưng +5 0©( }Ÿ( )=0© X =2, nghiệm đơn

=> 7(n) = c2" + œ + cạn T{(0) = c¡ +ca=0 fe, =0

Mà ta cố: $ 7(1) = 2œ + ca-+ ca = 1 = \° =0

T(2) = 4c, + co + 2c3 = 2 cz =1

= T(n) =n

0)

T{(n) = Tín — L) + Tín — 2) 7(0) =1

T{Ù =1

Xét: Tín) — Tín — 1) — Tín — 2) =0

Đặt X"* = 7(n), ta có phương trình đặc trưng:

©X"”(X?-X-I1)=0

®X”—X—-1=0

1+v5 1-vV5

Phương trình đặc trưng vừa tìm có 2 nghiệm đơn: X; = vi Xo = by 5

1 5 1— 4⁄5

Khi đó: T(n) = XP + Xz = er: ( +i + c+ ( ep

rùi =1 ( == +@- iv =1 ‘2 = avs

“Tra 5+V¥5 ,l+Vỗ„,ð=Vỗ ,l=Vỗð„

Kết luận: 7 (n5) = T0 ( 5 )"+ " ( 5 )

4_ Bài tập 4

a)

Tứ) = 4 2 khi n = 1,

(77 — 1) — 12f{n— 2) khin > 2

Trang 10

Hàm sinh của day v6 han T(n)* , Ia:

f0) =Š 7n)

„=0

= » (77(m — 1) — 127 (n — 2)ja" + (1+! + 7(0)z9

n=2

=7 SOT (n — 1)#” — 12 » —3)#”" + 2z + 1 (*)

Dat A= » T{n — 1z”, B= » —3)z”

Xét A:

A T(n — 1z”

n=2

=# » T(n — 1a"

n=2

=#[T(1#! + T(9)+? + 7)” + )

= #ƒ(#) — # Xét B:

=x 5 Tụ —1)#"?

= #[T(0)z*+7(1)+! + 7(2)4?®+ ]

=P fle)

Thay vào (*) ta có:

ƒ(#) = T#ƒ(#) — 12#”ƒ(œ) — 5œ + 1

® ƒ(#)(1— 7# + 122?) =1 — 5z

1— 5a

# fl) = aT

7 1— 5a

~ (1 = 3x)(1 - 42)

a _ l— 4z

Sy

(2.3" — 4” )a"

(4z)”

ll S

+:

\ Meat

=> T(n) = 2.3" — 4"

Trang 11

b)

T(0) =7

T(nt+1)=T(n)+3n (n> 0) Nhan thay:

T(n +1) = T(n) 4+ 3n (n>

= T(n) = Tín T— 1L) + 3n — 1) (n > 1)

Hàm sinh của day v6 han {T(n)} 1a:

n=1

Dat: A = SO, T(n — 1a”, B= 395%, (n - 1a”

Xét A:

T(0)a° +T(1)a"

Xét B:

So (n= 1x" = (-1)2°

n=0

=3 La" +3 =3/-— 1 |43

7 „0= jan +3= (l-2#)? l-«

Thay vào (x) ta có:

ƒŒœ) = #ƒ(+) +3 ln x 1

=#)2 =] 10a? — 14x +7

= (l-«)f(«) =

(l-«/)?

10a? — 14% +7

© fle) =

(l—«)8 Lai có:

f(a) = l-a (1-2) + (1—z)3

— 10 + —6 3 _ l—# m- (đồng nhất thúc) (5)

Trang 12

Xét Toa

oO oO oO oO

= › +” › nie” + › +” › oe

Nhan thay:

na” = ¢°- 00° +0°- lel + x9 - 20? + 2° ‹ đưổ +

3 ll S 3 ll Š

+a) Oe +a!-lattat- de? +e! - 308 +

+a? - Oa +a? - lat ta? - 2a? +47 - 3a +

+3 - 0a +03 - lat ta? - Qe? 43-308 +0

=0+zt+2z2 + 3z” +

+0+z?~+92z9 + 3z2+

-+0+z + 2z“ + 3z5 +

+0407 + 24° + 306 +

=0+1z+(1+9)z”+(1+2+3)z3+(1+2+3~+4)z°+

s » n(n + 1) an

=)

=0

Trang 13

y a” › a” = 0? + at + a? + oe? +

tale tala + g2 + gi ưŠ +

+ 2210 + x21 + x22 + x2) +

+1? + re! +a2+? + aba? +

=2° + at + + + a’ +

hư! +2 + + g4 +

+2 +9 + Ta +

+ a’ + at +a ° + a5 +

= lz? + 2%! + 342 + 4z) +

=>» (n+1)z"

„=0

Thay vào (+) ba có:

yrs) (n+ 1) 2+3 nà aye

(6) (nt Ve "43

3n(n +1) 10+ (-6)(n+ 1) + 5

Ge-be)e

3.5 3

=> T(n) = 5h —sm+ 7

c)

i 2

+ 3(n + ) x”

ll S

+:

Zeta(n)1

if ( == 0) Zeta = 6

else{

k = 0;

Ret = 0;

while (k <= n-1)

{

Ret = Ret + Zeta(k);

k=k+4+1;

}

Zeta = Ret

}

}

Goi T(n) 1a théi gian thuc hién phép cộng của Zeta(n)

12

Trang 14

e Với ø = Ú, số phép công thực hiện là 0, nên tốn thời gian là 0

e Với ø > 1: While lặp n lần, tại lần thứ & (0 < k < n=— l):

— Hàm gọi đệ quy đến hàm Zeta(k) tương ứng thời gian 7(k)

— Có 2 phép cộng nên tốn thời gian là 2

n—-1

= T(n) = > (7) +2)

k=0

Vậy:

(0 , nếu „ =

Tự») | 2n +> T(k) ,néun>1 ( k=0

Hàm sinh của dãy vô hạn {7(n)}£°¿ là:

ƒ() = S oT (n)x" = » T(n)x" +T(0)2° = » T(n)z"

= » (» + » rø) a

„=1 k=0

= » (» +T(n-1)+ » rw) #"

T(n) = 2n+ ST (k) => T(n-1) =2(n-1) +> T(k) => »_ T(È) = T(n— 1) — 2(n — 1)

= ƒ(+) = » (2n + Tín — 1) + Tín — 1) + 2(n - 1)) a”

n=1

I Me (27 (n — 1) 4+ 2)2”

| T{n — 1)z”+2 Soa"

n=1

Trang 15

=À_.(2:2"—9)4” = Tín) = 21! — 2

5 Bai tap 5

a)

T(n) =47(§) tn n>2

ne =C,

i Doan f(n) = an?

e Chứng minh 7(1) < ƒ(): 7Œ) = Cy, fl) =4

Dé T(1) < ƒ(1), ta can chon a > Cy

e Giả sử 7(k) < f(k), Vk <n

e Ta can ching minh T(n) < f(n) tain

Ta có:

Tín) = 47(2) +n

< 4/(5) +n

I 3 +

= -ứn” + mi

2

„3

"1"

2

an

= ƒ(n)+n— ——

2

Néu n — > < 0 thì 7(m) < f(n)tn- > < f(n)

œ > ƠI Chon a,b sao cho — và

, , na ane <0

Trang 16

an’?

Tft— —— < a.< an?

®nữ = =—) <0

an2

®1~ =~ <0 >1) San >

>a>1

Ma a > C1, nén chon a=1+C;,

=> T(n) < ƒ(n) = (1+ G)nẺ

Vậy đoán ƒ(z) = an” là thành công

ii Doan ƒ(n) = an?

e Chứng minh 7(1) < ƒ(): 7) =Œi, fl) =4

Dé T(1) < ƒ(1), ta cần chọn ø > Cy

e Giả sử 7(k) < f(k), Vk <n

e Ta cần chúng minh 7{n) < f(n) tain

Tà có:

n T(n) = AT (5) +n

<4 ⁄@) +n

=an?+n

=ƒ(n)+m Néu n <0 thi T(n) < f(n) +n < f(n)

MA n > 1 nên dự đoán ƒ(n) = an? 1a that bai

iii Doan f(n) = an? — bn

e Chitng minh T(1) < ƒ(1): 7) =Œi, fl) =a-b

Dé T(1) < ƒ(1), ta can chon a — b> Œ¡

e Gia stt T(k) < f(k), Vk <n

e Ta can ching minh T(n) < f(n) tain

Ta có:

Tín) = 47) +n

<4 1S) +n

an? Ùm

by an? — bn + 7 tn

= fn) tn4

Trang 17

bị bị

Nêu ø + > < 0 thì 7(m) < ƒ(n) +n+ > < f(n)

a-b>C, m+ = <0

Ta thấy, với ø = C1 +2, b = —2 thì thỏa hệ trên

=> T(n) < ƒ(m) = (Œ\ +3)"?+2n

Vậy đoán f(r) = an? — bn là thành công

Cần chọn a,b sao cho

b)

1 khin =1

T(n) = _ hin

BT (2) +n? 2 khin>1

Du dodn f(n) = an? +b

e Chứng minh 7(1) < f(1)

Để T(1) < f(1), ta cin chon a, b sao chol <a+b

e Giả sử 7(k) < f(k), Vk <n

e Ta can ching minh T(n) < f(n) tain

Ta có:

Tín) = 35) tm s 3f(5) +”

T(n) < 3[a(>) +b) +n

< (an? +b) +n? - ze +2b

< f(n) +n? - ra +2b

Néu n? — zn + 2b <0 thi T(n) < f(n) +n? - 7 +2b < f(n)

atb>1

n2— on? + 2b <0

Ta thấy, với ø = 4,b = 0 thì thỏa hệ trên

= Tu) < ƒ(n) = 4n?

Vậy dự đoán f(n) = øn? + b là đúng

Chon a,b sao cho

c )

T(n) = T(5) + 7Œ) +n T{n) =lvớin <5 Giả sử ø nhỏ nhất là 1 Dự đoán ƒ(n) = an +b

e Chứng minh 7(1) < ƒ(): 7Œ) =1,()=a+b

Dé T(1) < ƒ(1), cần chọn œø+Ð > 1

e Giả sử 7(k) < f(k), Vk <n

e Ta cần chứng mình 7») < ƒ(n) tại n

Trang 18

n

4

n rn

<f(_~ yy

</)+/)+n

= on tb + ont b+

—an+b+ r1" D +

Tín) = 7©) +T(—)+n

a

=ứn +b— 1u+b+n

= f(n)- nỶ b+n

Néu cản +b+n<0 thi T(n) < ƒf(n) — zn +b+n< f(n)

atb>1

—‡n+b+m <0

Ta thấy, với ø = 4,b = 0 thì thỏa hệ trên

= T(n) < ƒ(n) = 4n => T(n) = O(n)

Vậy dự dodn T(n) = O(n) la ding

Như vậy ta cần chọn a,b sao cho

Ngày đăng: 11/02/2025, 16:19

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN