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 #03 Độ phức tạp và các ký hiệu tiệm cận

19 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ức Tạp Và Các Ký Hiệu Tiệm Cận
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 Phân Tích Và Thiết Kế Thuật Toán
Thể loại Bài Tập
Năm xuất bản 2024
Thành phố TP.HCM
Định dạng
Số trang 19
Dung lượng 1,34 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 #03: DO PHUC TAP VA CAC KY HIEU TIEM CAN GV hướng dẫn: Huỳnh Thị Thanh

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 #03: DO PHUC TAP VA CAC KY HIEU TIEM CAN

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

Nhóm thực hiện:

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 29 tháng 4 năm 2024

Trang 2

1 Bài tập 1

Quy ước: Mỗi tháng có 30 ngày, mỗi năm có 365 ngày

Bảng kết luận:

1 second | 1 minute 1 hour 1 day 1 month Ì year 1 century

log n 2105 26x10 23.6+100 8.641010 22.59+10°2 23.1510°2 23.1510

vn 10 3.6 * 1012 | 1.3 + 10 | 7.46 x 102! | 6.72 + 1022 | 9.95 x 1028 | 9.95 x 1079

n 108 6* 10" | 3.6x10? | 8.64% 10° | 2.59 x 1012 | 3.15 x 1013 | 3.15 x 1018 nlogn | 6.24 + 101 | 2./8x+108 [1.33 x108 | 2.76 «10° | 7.19 x 1019 | 7.98 x 101 | 6.86 x 1013

Giải thích: Đề yêu cầu xác định giá tri n lớn nhất của thuật toán có thể giải trong thời gian

t, vi f(n) là thời gian giải quyết bằng thuật toán đó (tính bằng micro giây) Ta có thể tìm bằng cách giải phương trình ƒ(n) = ‡

Vì một số phương trình quá khó giải ra nghiệm chính xác như moợøn hay n! nén stt dung code

để xấp xỉ nghiệm Ý tưởng chính là dùng phương pháp tìm kiếm nhị phân để tìm kiếm trong

khoảng 0 đến k (với k đủ lớn để tìm thấy xấp xỉ nghiệm)

Code bằng python:

1mport math

# Hàm tính log 2(n)

def log2(n):

return math.log(n) / math.log(2)

# Danh sách các hàm ƒ(n)

complexities = [lambda n: math.sqrt(n),

lambda n: n,

lambda n: n * log2(n),

Trang 3

lambda n: 2 ** n,

lambda n: math.factorial(n)]

# Gidt han trén k cho moti ham, dd Lén dé tim dudc nghiém

max_bound = [1e40, 1e20, 1e20, 1e10, 1e10, 100, 100]

# Thời gian thực thú

times = [1000 * 1000, # 1 second

1000 * 1000 * 60, # 1 minute

1000 * 1000 * 60 * 60, # 1 hour

1000 * 1000 * 60 * 60 * 24, #1 day

1000 * 1000 * 60 * 60 * 24 * 30, # 1 month

1000 * 1000 * 60 * 60 * 24 * 365, #1 year

1000 * 1000 * 60 * 60 * 24 * 365 * 100] #1 century

# Logn = t co thé giải ma n = 2ˆt, để tránh uượt qua gidi han tinh toán nên

# dua truc tiép t vao két quad in ra

print(' '.join(map(lambda v: !2^(' + !{:.2e}'.format(v) + ')', times)))

# Duyét qua các hàm phúc tap

for k in range(len(complexities)):

c = complexities [k]

vals = []

# Duyệt qua tưng mốc thời gian để tầm nghiệm tương ting udi ham phúc tap for t in times:

# St dung tim kiém nhi phan

# Khdi tao left, right cdu tim kiém nhi phan

1, r = 0, int (max_bound [k] )

# Khdi tao max_n dé luu gid tri lén nhét cia n thỏa phương trinh

max_n = 0

Trang 4

mid = (1 + r) //2

# Tính thồi gian thực thú của hầm phúc tạp

val = c(mid)

# Néu gid tri nay la vd cing hodce Lớn hon thai moc thdi gian t thi dat lai

# gidi han trén, néu không thà đặt Lại qiối hạn dudt

if val == float('inf') or val > t:

r=mid- 1

else:

1 =mid + 1

max_n = max(max_n, mid)

vals append (max_n)

# In ra céc gid tri n tuong ting vdi moc thồi gian

if k < 3:

print(' '.join(map(lambda v: '{:.2e}'.format(v), vals)))

else:

print(' '.join(map(lambda v: str(int(math.floor(v))), vals)))

2 BAi tập 2

Với mỗi nhóm hàm bên dưới, hãy sắp xếp tăng dần "theo Big-O nhỏ nhất", có giải thích ngắn gọn cách so sánh

Group 1:

fn) = (sto)

fo(n) = ni fx(n) =~

fa(nn) = 10° nr

fs(n) = nlogn

Trang 5

h(n) = rl — n(n — 1)(n — 2) (n — 99)(r — 100)!

n(n — 1)(n — 2) (n — 99)

nh 100

~ Toor = O(n”)

fo(n) = ni = O(n!)

ƒs(n) = - =nt= O(n")

fa(n) = 10! n = O(n')

fs(n) = nlogn = O(n'*") (logn < n°, ¢ vat bé)

= lã < qi< < ƒU <5

Group 2:

fi (n) — am

fo(n) = 2100000

fa(n) = () fa(n) = n/n

Ta có:

ft (n) = 2210een9 = Ó(1)

fo(n) — 9 100000n — (21000007)

„ — 2)! ~

faln) = n/n = O(n?)

=fi<fa<fa<fr

Trang 6

fi (n) = nv

fo(n) = 2”

fa(n) = n°?

filn) = 0G +0)

¿=1

Ta cd:

filn) = (228")VF = gvA log — 202113)

fo(n) = O(2") = 20%

fa(n) — (2192")19,an/2 — glOlogn+n/2 _ o(v2"**) — 20319), < rất nhỏ

= fi<fi<fa<h

Group 4:

fe(n) =n”

fr(n) =a”

fs(n) = 2 fo(n) = nilesn

Ta có:

fo(m) = 2l08nY” — avPlogn — oO(n°}1/2)

Fe(n) = 200

fa(n) = 2182" = gr*tog2 _ 90%n*)

fo (m) — glog nt les ne 24logrn loga rr — 200)

=> fo<fe<fi<fs

Trang 7

fo(n) = nv fr(n) = nie" fa(n) = 29⁄2 fo(n) = 3X" fo(m) = 472

Ta có:

fe(n) = glognv® _ avnlogn — 90(n*+1/?)

glog nies n = glognlogn — 2O(22)

alogäv® _ avflog8 _ 2O(m1⁄2)

So

1

fio(n) — gloxan? =9 log4 —_ 2O(n1⁄4)

rh

7(n) =

fa(n) =

(n) =

= f7< fio<fo<fe<fs

Group 6:

fi (n) = 10999999 Tg),

fo(n) = 10000000n fa(m) = 1.000001" faln) =?

Ta có:

fi (n) — 2°99 Tog, — O(n 299999 Fe)

= 10000000n = O(n)

rh

a(n) =

ƒs(n) = 1.000001” = O(2”)

Jin) O(n?)

=> <ƒ2< 2q <

Trang 8

film) =n"

fo(n) =x”

fain) = (")

fan) = vav"

fa(n) = (,." 1)

fe(n) = gllogn)*

fain) =n'(“1)

Ta cd:

fal) = (2b8")F = green — 200°)

fo(n) = 20

nl mí — l)(n — 2)(n — 3)(n — 4)(n — 5)! faln) = 5l(n— 5)! ` “ — = “

— nín — L{n — An — 3)(n — 4) = O(n?)

fa(n) = 2003)

m mín — l)(n — 2)(n— 3 4

I) = ai = wat a ——

fo(n) = 20°

fr(n) = 20°)

4 gntn — (nm — 2)(n—3 8 fg(n) =n Tin — TJ =n ( M 1 \\ ) = O(n")

=>fi<fr<fe<fi<fowfs < fy < fe

Ma fs > fis fs < fr

>Í.<Xä< 1< 1ä <ữ<fä< h< b

Trang 9

3 BAi tap 3

Chitng minh, dùng định nghĩa của các ký hiệu tiệm cận (không dùng lim)

a nttntl € O(n?)

Gia st nt +n +1 € O(n?)

=> deo € R+,n9 € N sao cho: nttn+1<en? Yn > nọ

Sr? + — Ị + <e Vn > no

Điều này vô lý vì: về trái là hàm "` liên tục mà e là hằng số, nên nếu với giá trị hằng số e bất

kì, luôn tồn tại n đủ lớn để #2 + ~ A+ 5 z>e€

Vậy: nh+nm +1 #£ O(n?)

b O(Cf(n)) = O(f (n) véi Ơ là hằng số

Ta cần chứng mình Ó(Cƒf(n)) C O(f(n)) va O(f(n) C O(Cf(n))

« O(Cƒ(n))C O((n))

Xét ham bat ki g(n) € O(C f(n)):

=> dk € Rt,ng EN sao cho: g(n) <kCf(n), Vn > no

Dat t = kC’, => dt € Rt,no € N sao cho: g(n) <tf(n), Vn > no

Tit day, theo dinh nghia Big-O, ta c6 g(n) € O(f(n)) > O(Cf(n)) c O(f(n))

© O(n) COLES (n))

Xét ham bat ki g(n) € Ó(ƒ(n)):

=> dk € Rt, ne € N sao cho: g(n) <kf(n), Va > nọ

Dat t = ẹ => dt € RT, nạ € Ñ sao cho: g(n) < tƠƒ(n), Vn > nọ

Từ đây, theo định nghĩa Big-O, ta có g(n) € Ó(Cf(n)) > O(f(n)) C O(Cf(n))

= OCF (m)) = OF (r)

c- Nếu ƒ(n) € O(g(n)) va gín) € O(H(n)) thi f(n) € O(A(n))

Theo giả thiết, ta có:

- #(n) € O(g(n)) nên dei € R!,mị € N thỏa ƒ(n) < crg(n) Vn > nị

- g(n) € O(h(n)) nên 3œ € Rt, ny € N thoa g(n) < ceh(n) Vn > neo

= fn) < eesh(n) Yn > max(mị, mạ)

Dat co = cic, => co € RT và nạ = max(m, nạ), nạ € N

Theo định nghia ctla Big — O, ta c6 f(n) € O(h(n))

Trang 10

d max(ƒ(n),g(0))= (fn) + g(n))

Để mệnh đề trên đúng, thì đe, c2 € Rt, no € N sao cho:

Chon ¢ = 0.5,c2 = 1, no € N ta được:

0.5(F(n) + 9(n)) < 0.5(nax(f(n),9l

e gín) € O(0(n)) = O(g(n)) C O(i(n)

Ta c6: g(r) € O(h(n)) nén de, € Rtn, € N thỏa g(n) < eì.hín) Vn> mị Xét hàm bat ki f(n) € O(g(n), = deo € Rt,n2 € N théa f(n) < cog(n) Vn > mạ

11)) + mae( f(r), g(n))) = mae f(n), 9(n)) )= fn) + g(n)

(dpem)

Đặt cọ = Gi@, nạ = max(n1, 2), => dco € Rt,no € N théa f(n) < coh(n) Vn > no Theo định nghia Big-O, f(n) € O(h(n)) => O(0(n)) C O(h(n))

£ Ô(g(ø)) = O(g(ø)) P19(g(n))

Ta cần chứng mình ©(g(n)) C O(g(n)) NQ(g(n)) va O(g(n)) n1 Ô(g(n)) C O(g(n))

Xét ham bat ki f(n) € O(g(n)):

=> dei, co € Rt, no € N sao cho: cig(n) < f(m) < cog(n), Vn > no

Dat h = 1, dh € Rt, no € N sao cho: cig(n) < f(n), Vn > nạ

Theo dinh nghia Big-Q, ta c6 f(n) €

< œg(n), Vn > no

(g(r

Dat & = co, => dk € Rt, € N sao cho: f(n

Theo định nghĩa Big-O, ta có ƒ(n) € O(g(

(1),(2) = f(r) € O(g(r)) NQ(g(m)) > ©(g0n)

eO(g(n)) NQX(g(n)) C O(g(n))

Xét hàm bất kì ƒ(n) € O(g(n)) N Q(g(n)):

=> đe, cœ¿ € Rt,ny,ne € N sao cho:

( 9(n) <f(n), Va > ny Lin <S œg(m), Vn > nạ

Đặt nọ = maz(m, nạ), => đei, ca € R†, nạ € Ñ sao cho:

cg(m) < f(n) <cg(n), Yn > nạ

Trang 11

Theo định nghĩa Big-©, ta có ƒ(ø) € O(g(n)) > O(g(n)) N Q(g(n)) C O(g(n))

=> O(g(n)) = O(g(n)) NQ(g(n)) (dpem)

g nt+vO(Inn) = O(n? Inn)

Với g(n) € Ol(lnn), theo dinh nghia Big — O, de € N,no € R* sao cho:

g(n) <e¢-lnn (Vn > nạ)

& n’g(n) <e-n? Inn (Wn > ne) (nhan 2 vé véi n?) entrg(n)<nte-rilnn<nrlnn+e-n? Inn (Yn > 2)

Đặt £ = c+ l,nạ = 2:

=> die Rtn) © N sao cho: n+n?g(n) < tnẦnlnn

Do đó: ø + n2g(n) € O(n? Inn) > n+ n72O(Inn) = O(n? Inn) (dpem)

4 Bai tap 4

Các khẳng định bên dưới là đúng hay sai? Vi sao?

a.Néu f(n) = O(g(n)) va g(n) = O(A(n)), thi h(n) = O(f(n))

f(n) = O(g(n)) = 3 c¡,ca € Rt va ny € N sao cho:

cị * g(n) <S ƒ(n) <€ c *g(n) Vn > ny > ƒứ) < g(m) < Jn) Yn > mị (1)

g(n) = O(A(n)) = 3 œ,cạ € Rt va ng € N sao cho:

ca * h(n) < g(n) <cg* h(n) Vn > nạ => a) <A(n) < sta) Yn > ng (1)

(1)(2) => | Ƒ(m) <A(n) < p(n) Yn > maa(nyz, 12)

C24 CC

Đặt ft = ——,t¿ = ——, tạ = rna#(m, nạ)

C1 CoÓA

= Sty, ty € Rt,no € N sao cho tif(n) < h(n) < tof (n)

Theo dinh nghia Big-O, h(n) € O(f(n))

b fn) = O(g(n)) và gín) = O(/fn) thì ƒ(n) = gín)

Theo định nghia Big-O, ta c6:f(n) = O(g(n)) Khi dé, de € Rt, no € N sao cho:

Ẩn) < eg[n) Vn > nọ

Tương tự nếu g(n) = O(f(n)) Khi đó, đc € R†,m € N sao cho:

gln) < ci.ƒ(n) Yu > m1

Giả sử : ƒ(n) = nỄ và g(n) = 4n? +5

Trang 12

=> f(n) = O(g(n)) khi e = 1, nạ = 1 và g(n) = O(ƒ(n)) khi ei = 1,1m = I > ƒ(n) = g(n) ©® nỀ = 4n? + 5 (sai)

Do đó, khẳng định sai

c fn) +O(ƒ(n)) = ©(/0n))

Đặt g(n) = O(ƒ(n)) Khi đó, 3c € R†,nạ € N sao cho:

gln) <e.fln) Yn >

Giả sử tất cả các hàm đều không âm, khi đó c là hằng số dương

Chọn c= 1, ta có g(n) < f(n) Vn > no

Vì các hàm đều không 4m, ta cé f(n) < f(n) + g(n) < 3ƒ(n) Vn > no

hay f(n) + O0) = Ô(7(0))

Khăng định trên đúng với mọi hàm không âm

d.21" = O(2")

Giả sử khẳng định trên đúng = 3e € R†, nạ € Ñ sao cho 2!9* < ¿x 2" nu > nọ

219% < ¿+ 2 œ 29" < c, Điều này vô lý bởi vì 2" tăng liên tục khi n tăng nên ta không thể chọn hằng số e

Do đó, khẳng định sai

e 22110 — (25)

Giả sử giả thiết là đúng

Theo Big — O, ta c6é 2°†19 = @(2"), khi đó 3e € R†, nạ € N sao cho 2°41 < c2" Vụ > nọ Nhận thấy: 2"†!9 < œ2" @ 2210 < c2" œ 2!0 <6

= kha thi, vi de € R* sao cho 2" < é, chọn e= 219 +1,

Do đó khẳng định trên là đúng

f log, n = O(log, 7)

Nếu khẳng định trên là đúng thì:

đei, œ € RT,nọ € Ñ sao cho:

clog, n < log„m < œlogyn, Ø0 > nạ (*)

1 Chon ¢, = ¢2 = ——,no = 1, thay vào (%):

log, a

1

—— log,n < log, n <

log, a 08p 0 = 20841 = logy ø log,n, ø > 1

Trang 13

= log, n < log, n <log„n, >1 (ding)

Vậy khẳng định trên là đúng

5_ Bài tập 5

Ước lượng nhanh độ phức tạp của giải thuật đệ quy dùng Định lý Master

1.7(n) = 3T(§) +n?

Ta có:

- 0 = 3,6 = 2, n!094 = plese

Ta thay: f(n) =n? € O(nie984*) 6 = 0,25

Và a.ƒ() < e.ƒ(n) (vì 3.(8)? = 0, 75.n? < en?,c = 0,75)

=> Ap dụng case 3 của dạng tổng quát

Ta được: 7 (5) = Đ(ƒ(n)) = O(n?)

2.7(n) =7T() +n?

Ta có:

-a=7,b = 3, f(n) =n? € O(n?) d = 2

Ta thay: a < b4, nén Ap dung case 1 của dạng đơn giản

Ta dude: T(n) = O(n?)

3 T(n) =3T(3)+5

Ta có:

-a=3,b=3

- f(n)=% € O(n!) sd=1

Nhận thấy: ø = ð', nên Ap dung case 2 của dạng đơn giản

Ta được: 7ø) = ©(nlog n)

4, T(n) = 167T(4)+n

Ta có:

-a=16,b=4

- fn) =n€ On!) sd=1

Trang 14

Ta được: 7(n) = ©(n 98%) = O(n?)

5 T(n) = 27(4) +n

Ta có:

-a=2,b=4

- f(n) = n°! € O(n?!) > d=0.51

Ta thay: a < b4, nén Ap dung case 1 của dạng đơn giản

Ta duge: T(n) = O(n)

6 T(n) = 37(3) +n

Ta có:

-a@=3,b=2

- ƒ(n)=n€(n!)= d= 1

Nhận thấy: a > 64, nén Ap dung case 3 của dạng đơn giản

Ta được: 71x) = Q(n S83)

7.7(n) = 3T() + n

Ta có:

-ø=3,b=3,n2%% — n

Ta thay: f(n) = /n € O(n'*),€ = 0,4

=> Ap dụng case 1 của dạng tổng quát

Ta được: 7 (5) = Đ(n9%4) = Đ(n)

8.7(n) = 47(5) ten

Ta có:

-ø= 4,b= 3, (n) = eœn € Q(n!) sd=1

Ta thay: a > b', nên ta áp dụng case 3 của dạng đơn giản

Ta được: 7 (5) = Đ(n9%%) = O(n?)

9 7n) = 471) + 5n

Trang 15

-a=4,b=4

- f(n) =5n€ O(n!) > d=1

Nhận thấy: ø = Ù', nên áp dụng case 2 của dạng đơn giản

Ta dude: T(n) = O(nlog n)

10 T(n) = 5T(4) + 4n

Ta có:

-a=5,b=4

- ƒ(n) = 4n € ©(n!) > d=1

Nhận thấy: a > Ù#, nên áp dung case 3 của dạng đơn giản

Ta dude: T(n) = Q(n S85)

11.7(n) = 47 (3) +5.n

Ta có:

- a= 4,6 = 5, n!094 = plead

Ta thay: f(n) = 5.n € O(nie%4t) 6 = 0,1

Và a.ƒ(š) < e.ƒ(n) (vi 4.(5.2) = 4.n < 5.c.n,¢ = 2)

=> Ap dụng case 3 của dạng tổng quát

Ta duge: T(n) = O(f(n)) = O(5.n)

12 T(n) = 257 (2) +?

Ta có:

-a=25,b=5, f(n) =n? € O(n?) > d=2

Ta thấy: ø = 64, nén áp dụng case 2 của dạng đơn giản

Ta duge: T(n) = O(n? log n)

13 T(n) = 107(%) + 17n!?

Ta có:

-a=10,b=3

- f(n) =17n'? € O(n!?) > d= 1.2

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