SlideShare a Scribd company logo
Kỹ thuật phân tích giải thuật
Phạm Nguyên Khang, Đỗ Thanh Nghị
Khoa CNTT – Đại học Cần Thơ
{pnkhang,dtnghi}@cit.ctu.edu.vn
Nộidung
• Tạisao cầnphảiphân tích giảithuật?
• Tiêu chuẩnđánh giá giảithuật
• Phươngpháp đánh giá
• Bài tập
2
Sựcầnthiếtphảiphân tích giải thuật
• Đánh giá giải thuật
– Tính đúng đắn
●
Chạytrên dữliệuthử
Chứngminh lý thuyết(bằngtoán họcchẳng hạn)
●
–
–
Tính đơn giản
Tính nhanh chóng (thờigian thựcthi)
● Quan trọngkhi chươngtrình đ
ư
ợ
cthựcthi nhiềulầnHiệuquả
thờigian thựcthi
●
3
Thờigian thựchiệncủachươngtrình
• Đo thờigian thựchiệnchươngtrình
–
–
–
–
Lậptrình và đo thờigian thựchiện Phụ
thuộcvào tậplệnhcủamáy tính K
ỹnăng
củangườilậptrình
Dữliệuđầuvào
Tính đ
ộphứctạpthờigian thựchiệncủagiải thuật= đ
ộ
đo sựthựcthi củagiải thuật
4
Thờigian thựchiệncủachươngtrình
• Đo thờigian thựchiện:
– Hàm T(n) ≥ 0, vớin là kích thước(độlớn)của đầu
vào
– Ví dụ:T(n) = 3n
– Đơnv
ịtính: s
ốlệnhc
ơbản,s
ốc
h
ỉthị,…
– Thờigian thựchiệntrong các trườnghợp:tốt nhất,xấu
nhất,trung bình
So sánh T1(n) và T2(n)
5
Thờigian thựchiệncủachươngtrình
• T
ỷsuấttăng (growth rate):
–
–
– T(n) có t
ỷsuấttăng f(n) nếutồntạihằngC > 0 và n0
sao cho T(n)  Cf(n) n  n0
Cho mộthàm không âm T(n), luôn tồntạit
ỷsuất
tăng f(n) củanó
Ví dụ:T(0) = 1, T(1) = 4, T(n) = (n+1)2, ta có:
f(n) = n2 (vớiC = 4, n0 = 1)
6
Thờigian thựchiệncủachươngtrình
??? Chứng minhrằng:
– T
ỷsuấttăng củaT(n) = 3n3 + 2n là n3
●
ChọnC = ?, chọnn0 = ?
Chứngminh bằngquy nạp
T(n)  Cf(n) n  n0
●
7
Thờigian thựchiệncủachươngtrình
??? Chứng minhrằng:
– T
ỷsuấttăng củaT(n) = 3n3 + 2n là n3
●
ChọnC = 5, chọnn0 = 0
Chứngminh bằngquy nạp
3n3 + 2n  5n3 n  0
●
●
Quy tắc:
T(n) là đa thứccủan thì t
ỷ
suấttăng là bậccao nhất
củan
8
Đ
ộphứctạpgiảithuật
• Cho 2 giải thuật
–
–
P1 có T1(n) = 100n2
P2 có T2(n) = 5n3
??? Giảithuậtnào chạynhanh hơn Xét
nếun  20 thì T1(n)  T2(n) Xét nếu
n  20 thì T1(n)  T2(n)
 So sánh t
ỷsuấttăng hơnlà so sánh trựctiếpcác hàm
T(n)
9
Đ
ộphứctạpgiảithuật
• Ký pháp Ô lớn(big O)
– NếuT(n) có t
ỷsuấttăng f(n)  T(n) có đ
ộphứctạplà f(n) và
ký hiệulà O(f(n)), đọclà “ô f(n)”.
• Ví dụ:T(n) = (n + 1)2 có đ
ộphứctạpO(n2)
• Tính chất
–
–
O(cf(n)) = O(f(n)), c: hằngs
ố
O(C) = O(1)
• Đ
ộphứctạpcủagiảithuật: hàm chặntrên củathờigian
• Mộts
ốhàm thểhiệnđ
ộphứctạpthườnggặp:
log2n, nlog2n, n2, n3, 2n, n!, nn, …
10
Cách tính đ
ộphứctạp
• Cho 2 chương trình:
–
–
P1 có thờigian thựchiệnT1(n) = O(f1(n))
P2 có thờigian thựchiệnT2(n) = O(f2(n))
• Quy tắccộng:
– Thờigian thựcthi P1 và P2 nốitiếpnhau s
ẽlà:
●
T(n) = T1(n) + T2(n) = O(max(f1(n), f2(n))
●
Quy tắcnhân:
– Thờigian thựcthi P1 và P2 lồngnhau (vd: vòng lặp
lồngnhau chẳnghạn):
●
T(n) = T1(n)  T2(n) = O(f1(n)  f2(n))
12
Cách tính đ
ộphứctạp
• Quy tắcnhân:
for (i=1; i<= n; i++)
for (j=1; j<=n; j++) {
thựchiệncông việcO(1)
}
T(n) = O(n2
)
13
Cách tính đ
ộphứctạp
for (i=1; i< n; i++)
for (j=i+1; j<=n; j++) {
thựchiệncông việcO(1)
}
Áp dụngquy tắcnhân đ
ư
ợ
ckhông?
T(n) ????
14
Cách tính đ
ộphứctạp
• Quy tắctổng quát:
–
– Đọc(read, scanf), ghi (write, printf), lệnhgán, so sánh:
thờigian là hằngs
ốhayO(1)
Lệnh if:
if (điều kiện)
lệnh 1
else
lệnh 2
●
max (lệnh1, lệnh2) + điềukiện
– Vòng lặp:tổngthờigian thựchiệnthân vòng lặp
●
Trong trườnghợpkhông xác địnhđ
ư
ợ
cs
ốlầnlặpta phảilấys
ốlần
lặptrong trườnghợpxấunhất.
15
Cách tính đ
ộphứctạp
• Phươngpháp thực hiện:
–
–
Xác địnhđầuvào: thườngký hiệulà n
Cách 1: dùng cho tấtc
ảcác loạichươngtrình
●
Tính thờigian thựchiệnT(n) cho toàn b
ộchương trình
 O(f(n)) từT(n)
Cách 2: không áp dụngcho chươngtrình đ
ệquy
–
● Chia chươngtrình nhiềuđoạnnhỏ Tính
T(n) và O(f(n)) cho từng đoạn
Áp dụngquy tắccộng,quy tắcnhân đ
ểcó
O(f(n)) cho c
ảchương trình
●
●
16
Cách tính đ
ộphứctạp
Ví dụ:
1. void sap_xep(int a[], int n) {
2. int tam;
3. for (int i = 0; i < n; i++)
4. for (int j = i + 1; j < n; j++)
5. if (a[j] < a[i]) {
6. tam = a[i];
7. a[i] = a[j];
8. a[j] = tam;
9. }
10. }
17
Cách tính đ
ộphứctạp
Ví dụ:
1. int tim_kiem(int x, int a[], int n) {
2. int found, i;
3. found = 0;
4. i = 0;
5. while (i < n && !found)
6. if (a[i] == x)
7. found = 1;
8. else
9. i = i+1;
10. return i;
11. }
18
Cách tính đ
ộphứctạp
Ví dụ:
1. int tim_kiem_nhi_phan(int x, int a[], int n) {
2. int i = 0, j = n – 1;
3. while (i <= j) {
4. int m = (i + j)/2;
5.
6.
if (x == a[m])
return m;
7. if (x < a[m])
8. j = m – 1;
9. else
10. i = m + 1;
11. }
12. return -1; // khong tim thay
13.}
19
Cách tính đ
ộphứctạp
• Chươngtrình có gọichươngtrình con (không đ
ệquy)
• Quy tắc:tính từtrong ra ngoài
• C, B2, B12, B11
• B1
•B
•A
A B B11
B1
C B2 B12
20
Cách tính đ
ộphứctạp
• Chươngtrình đ
ệquy
–
–
–
Lậpphươngtrình đ
ệquy T(n)
Giảiphươngtrình đ
ệquy tìm nghiệm Suy
ra t
ỷsuấttăng f(n) hay O(f(n))
Ví dụ:
1. int giai_thua(int n) {
2. if (n == 0)
3. return 1;
4. else
5.
6. }
return n * giai_thua(n – 1);
21
Giảiphươngtrình đ
ệquy
• Phươngpháp truy hồi
–
– T
riểnkhai T(n) theo T(n - 1) rồiT(n - 2) … cho
đếnT(1) hoặc T(0)
Suy ra nghiệm
• Phươngpháp đoán nghiệm
–
–
Dựđoán nghiệm f(n)
Áp dụngđịnhnghĩa t
ỷsuấttăng và chứng minh f(n) là
t
ỷsuấttăng củaT(n)
• Áp dụngcông thứcđốivớilớpphươngtrình đ
ệquy đã
có lờigiải
22
Phươngpháp truy hồi
• T
riểnkhai T(n)
T(n-1)
T(n-2)
…
theo
rồiđến
tiếp đến
cho đếnT(1)
23
Ví d
ụ1
• Giảiphươngtrình đ
ệquy:
T(1) = C1
T(n) = 2T(n - 1) + C2
• Ta có:
T(n) = 2T(n – 1) + C2
= 2(2T(n – 2) + C2) + C2 = 22T(n – 2) + 2C2 + C2
= 22(2T(n – 3) + C2) + 2C2 + C2
= 23T(n – 3) + 22C2 + 2C2 + C2
= …
= 2kT(n – k) + 2k-1C2 + 2k-2C2 + … + 2C2 + C2
Quá trình dừnglạikhi n – k = 1 hay k = n – 1, khi đó:
T(n) = 2n-1T(1) + C2 (2n-1 – 1)
= C1 2n-1 + C2 (2n-1 – 1) = O(2n)
–
24
16/06/2014
25
Giải phương trình
Cn = Cn-1 + n
C1 = 1
n  2
Triển khai phương trình
Cn = Cn-1 + n
= Cn-2 + (n – 1) + n
= Cn-3 + (n – 2) + (n – 1) + n
...
= C1 + 2 + … + (n – 2) + (n – 1) + n
= 1 + 2 + … + (n – 1) + n
= n(n+1)/2
= n2/2
Ví d
ụ2
16/06/2014
26
Giải phương trình
Cn = Cn/2 + 1
C1 = 0
n  2
Đặt n = 2k
C(2k) = C(2k-1) + 1
= C(2k-2 )+ 1 + 1
= C(2k-3 )+ 3
.
. .
= C(20 ) + k
= C1 + k = k
Cn = k = logn
Cn  logn
Ví d
ụ3
16/06/2014
27
Giải phương trình
Cn = 2Cn/2 + n
C1 = 0
for n  2
Đặt n = 2k
C(2k) = 2C(2k-1) + 2k
C(2k)/2k = C(2k-1)/ 2k-1 + 1
= C(2k-2)/ 2k-2 + 1 +1
.
.
= k
 C(2k ) = k.2k
Cn = nlogn
Ví d
ụ4
16/06/2014
28
Giải phương trình
C(n) = 2C(n/2) + 1
C(1) = 0
for n  2
Đặt n = 2k
C(2k) = 2C(2k-1) + 1
C(2k)/ 2k = 2C(2k-1)/ 2k +1/2k
= C(2k-1)/ 2k-1 + 1/2k
+ 1/2k-1 ]+ 1/2k
=[C(2k-2)/ 2k-2
.
.
=C(2k-i)/ 2k -i + 1/2k – i +1 + … + 1/2k
Ví d
ụ5
Cuối cùng, khi i = n -1, ta được:
C(2k)/2k = C(2)/2 + 1/4 + …+ 1/2k = 1/2 + 1/4 + ….+1/2k  1
 C(2k)  2k = n
16/06/2014
29
Giải phương trình
Cn = 2Cn-1 +1
C1 = 1
n  2
Cn + 1 = 2Cn-1 + 2 = 2 (Cn-1 +1)
= 2 (2 (Cn-2 + 1)) = 22(Cn-2 +1)
...
= 2n-1(C1 + 1) = 2n-1(1 + 1) = 2n
Cn = 2n -1
Ví d
ụ6
16/06/2014
30
Ví d
ụ7 Giải phương trình
C(n)=2C (√n)+logn
Đặt m = logn => n = 2m
C(2m) = 2C(2m/2) + m
Đặt S(m) = C(2m)
S(m) = 2S(m/2) + m = mlogm
C(n) = logn loglogn
16/06/2014
31
Chuỗithông dụng
S = 1 + 2 + 3 + … + n = n(n+1)/2  n2/2
S = 1 + 22 + 32 + …+ n2 = n(n+1)(2n+1)/6  n3/3
S = 1 + a + a2 + a3 + … + an = (an+1 -1)/(a-1)
Nếu 0< a < 1 thì
S  1/(1-a)
và khi n   thì
S tiến về 1/(1-a)
S = 1 + 1/2 + 1/3 + … + 1/n = ln(n) +
Hằng số Euler   0.577215665
S = 1 + 1/2 + 1/4 + 1/8 + … + 1/2n
+ …  
Bài tập
• Tính đ
ộphứctạpcủalờigiảiđ
ệquy
– Tính giai thừacủan
– Tháp Hà nộivớis
ốtầngtháp là n
– Tìm kiếmn
h
ịphân củadãy gồmn s
ốđ
ư
ợ
csắptheo
thứtựtăng dần
32
Phươngpháp đoán nghiệm
• Thửđoán 1 nghiệm f(n)
• Sau đó tìm cách chứng minh T(n)  f(n)
– Chứng minh mình bằngquynạp
• Thông thườngta chọnf(n) có dạng:n, logn,
nlogn, 2n
, …
33
Lờigiảitổngquát
• Giảithuậtchia đ
ểtrị:
– Phân rã bài toán lớnthành các bài toán con
●
Mộtbài toán lớncó kích thướcn, thành a bài
toán con có kích thướcn/b
Tổnghợpcác lờigiảicủacác bài toán con đ
ểcó đ
ượ
clời
giảicủabài toán lớn
–
●
Thờigian tổnghợpa bài toán con tốnd(n) thời gian
• Phươngtrình đ
ệquy cho giảithuậttrên:
–
–
T(1) = 1
T(n) = aT(n/b) + d(n)
34
Lờigiảitổngquát
• Áp dụngphươngpháp truy hồi:
T(n) = aT(n/b) + d(n)
= a[aT(n/b/b) + d(n/b)] + d(n)
= a2T(n/b2) + ad(n/b) + d(n)
= a2[aT(n/b3) + d(n/b2)] + ad(n/b) + d(n)
= a3T(n/b3) + a2d(n/b2) + ad(n/b) + d(n)
= …
= akT(n/bk) + aid(n/bi)
– Quá trình kếtthúc khi n/bk = 1 hay k = logbn
T(n) = ak + aid(n/bi)
35
Lờigiảitổngquát
• Nghiệm thuầnnhất(homogeneous solutions ):
ak
 nlogb a
• d(n): hàm tiếntriển(drivingfunction)
• Nghiệm chính xác s
ẽlà nghiệmchính xác nếu d(n)
= 0, vớimọin
• Nếud(n) > 0, ta có nghiệm riêng:
36



k1
i0

 
 

 
  i0
k1 k1
i0
)
ai
d(bk i
i
i
i
i
b
bk

a d
b
 n 
a d
Lờigiảitổngquát
• Nếunghiệm thuầnnhấtlớnnghiệm riêng thì đ
ộphứctạplà
nghiệm thuần nhất
• Nếunghiệm riêng lớnhơnnghiệm thuầnnhất thì đ
ộ
phứctạplà nghiệmriêng
• Tuy nhiên, tính nghiệm không phảilúc nào cũng dễ!
37
Lờigiảitổngquát
• Ta s
ẽtính nghiệmriêng trong trườnghợpd(n) có
dạngđặcbiệt
• Hàm nhân, hàm có tính chấtnhân (multiplicative
function):
–
– Hàm d(n) có tính nhân nếuvà c
h
ỉnếud(x.y) =
d(x).d(y)
Ví dụ:
●
d(n) = n2
là hàm nhân vì d(x.y) = (x.y)2
= x2
.y2
=
d(x).d(y)
d(n) = 3n2
không phảilà hàm nhân
●
38
Lờigiảitổngquát
• Nếud(n) là hàm nhân, ta có nghiệm riêng:
39
1
a
d(b)
d(b)k


d(b)
i0 
k1 k1 k1 i
ai
d(bki
)  ai
d(b)ki
 d(b)k
 a 
ak
i 0 i0
Lờigiảitổngquát
• Nếua > d(b), ak
> [d(b)]k
40
a d(b)
ai
d (bki
) 
log
a
b
T (n) O(n logn)
 d(b)k
k  ak
k
a

i
k
d(b)
i k i
 

k 1

i 0 d(b)


k1
k1
i 0 i0
• Nếua < d(b)
T(n)
• Nếua = d(b)
log
log a
b
n
b
 O(a )  O(n )
k
T(n)  O(a )
logd (b)
b
)  O(n )
logn
b
 O(d(b)
k
 O(d(b) )
Bài tập
41
• Giảicác phươngtrình đ
ệquy sau vớiT(1) = 1
4/
16/06/2014
Ví dụ: GPT với T(1) = 1 và
● Phương trình có dạng phương trình tổng quát.
d(n)=n là hàm nhân.
a = 4 và b = 2.
d(b) = b = 2 < a.
T(n) = O(nlogb ) = O(n ) = O(n ).
a log4 2
●
●
●
●

2

 
1/ T(n)  4T n   n
16/06/2014
Ví dụ: GPT với T(1) = 1 và

2

 
2/ T(n)  4T n   n2
● Phương trình có dạng phương trình tổng quát.
d(n)=n2 là hàm nhân.
a = 4 và b = 2.
d(b) = b2 = 4 = a.
T(n) = O(nlogbalogbn)
= O(nlog4logn) = O(n2logn).
●
●
●
●
16/06/2014
Ví dụ: GPT với T(1) = 1 và

2

 
3/ T(n)  4T n   n3
● Phương trình có dạng tổng quát.
d(n)=n3 là hàm nhân.
a = 4 và b = 2.
d(b) = b3 = 8 > a.
T(n) = O(nlogbd(b)) = O(nlog8) = O(n3).
●
●
●
●
Bài tập
45
Bài tập
46
16/06/2014
Ví dụ: GPT với T(1) = 1 và
●
PT thuộc dạng phương trình tổng quát nhưng d(n) =
nlogn không phải là một hàm nhân.
NTN = nlogba = nlog2 = n
Do d(n) = nlogn không phải là hàm nhân nên ta phải
tính nghiệm riêng bằng cách xét trực tiếp
●
●

2

 
T(n)  2T n   nlogn
16/06/2014
Ví dụ (tt)
●
Theo giải phương trình đệ quy tổng quát thì n = bk nên k =
logbn, ở đây do b = 2 nên
2k = n và k = logn,
NR= O(nlog2n) > NTN
T(n) = O(nlog2n).
●
●
k-j
k-1
j=0
j k-j
k-1
aj
dbk-j
 2 2 log2
NR  ∑
j0
2
NR  2k
(k - j)  2k k(k 1)
 O(2k
k2
)
k-1
j0
16/06/2014
BT4-1: GPT với T(1) = 1 và
● Phương trình có dạng phương trình tổng quát
d(n)=1 là hàm nhân
a = 1 và b = 2
d(b) = 1 = a
T(n) = O(nlogb logbn) = O(n logn) = O(logn)
a log1
●
●
●
●
T(n)=T
n
2
()+1
16/06/2014
BT4-2: GPT với T(1) = 1 và

2

 
T(n)  2T n   logn
● Phương trình có dạng tổng quát
d(n)=logn không phải là hàm nhân
NTN = O(nlogba)=O(nlog2)=O(n)
Tính trực tiếp nghiệm riêng
●
●
●
16/06/2014
k1 k
1
NR  a j
d(bk  j
)  2 j
log2k j
j0 j 0
k1 k1 k1
NR  2j
(k  j)  k2j
  j2 j
j0 j0 j 0
)
2 1
1
2k
NR  O(k
k1
j0
j
2 )  O(k
NR  O(k2k
)  O(n log n)  n  NTN
T(n)=O(nlogn)
Ví dụ (tt)
Bài tập
52
Bài tập
Tính đ
ộphứctạpthờigian củađoạnchương trình sau
theo n:
1.int max(int a[], int n) {
2. if (n == 1)
3. return a[0];
4. if (a[n-1] > max(a, n - 1))
5. return a[n-1];
6.return max(a, n-1);
7.}
53

More Related Content

What's hot

Bài tập tích phân suy rộng.
Bài tập tích phân suy rộng.Bài tập tích phân suy rộng.
Bài tập tích phân suy rộng.
Van-Duyet Le
 
Chuong 2 co so phan tich do phuc tap cua giai thuat - sinh vien 2
Chuong 2   co so phan tich do phuc tap cua giai thuat - sinh vien 2Chuong 2   co so phan tich do phuc tap cua giai thuat - sinh vien 2
Chuong 2 co so phan tich do phuc tap cua giai thuat - sinh vien 2Hồ Lợi
 
Ktmt chuong 2
Ktmt chuong 2Ktmt chuong 2
Ktmt chuong 2
Tùng Tò Mò
 
CHUYÊN ĐỀ ÔN THI CHUYỂN CẤP LÊN LỚP 10 MÔN TOÁN
CHUYÊN ĐỀ ÔN THI CHUYỂN CẤP LÊN LỚP 10 MÔN TOÁNCHUYÊN ĐỀ ÔN THI CHUYỂN CẤP LÊN LỚP 10 MÔN TOÁN
CHUYÊN ĐỀ ÔN THI CHUYỂN CẤP LÊN LỚP 10 MÔN TOÁN
Hoàng Thái Việt
 
xử lý số tín hiệu -Chuong 3
xử lý số tín hiệu -Chuong 3xử lý số tín hiệu -Chuong 3
xử lý số tín hiệu -Chuong 3
Ngai Hoang Van
 
Xu lý tín hiệu số
Xu lý tín hiệu sốXu lý tín hiệu số
Xu lý tín hiệu sốHao Truong
 
Tính toán khoa học - Chương 5: Tính gần đúng đạo hàm và tích phân
Tính toán khoa học - Chương 5: Tính gần đúng đạo hàm và tích phânTính toán khoa học - Chương 5: Tính gần đúng đạo hàm và tích phân
Tính toán khoa học - Chương 5: Tính gần đúng đạo hàm và tích phânChien Dang
 
Chuoi so
Chuoi soChuoi so
Chuoi so
MiLc1
 
Nhị thức newton và Phương pháp giải các bài tập về Nhị thức newton
Nhị thức newton và Phương pháp giải các bài tập về Nhị thức newtonNhị thức newton và Phương pháp giải các bài tập về Nhị thức newton
Nhị thức newton và Phương pháp giải các bài tập về Nhị thức newton
Linh Nguyễn
 
CHƯƠNG 2 GIẢI PHƯƠNG TRÌNH VI PHÂN BẰNG PHƯƠNG PHÁP SỐ
CHƯƠNG 2  GIẢI PHƯƠNG TRÌNH VI PHÂN BẰNG PHƯƠNG PHÁP SỐCHƯƠNG 2  GIẢI PHƯƠNG TRÌNH VI PHÂN BẰNG PHƯƠNG PHÁP SỐ
CHƯƠNG 2 GIẢI PHƯƠNG TRÌNH VI PHÂN BẰNG PHƯƠNG PHÁP SỐ
Đinh Công Thiện Taydo University
 
Chuyên đề nhị thức newton và ứng dụng
Chuyên đề nhị thức newton và ứng dụngChuyên đề nhị thức newton và ứng dụng
Chuyên đề nhị thức newton và ứng dụngThế Giới Tinh Hoa
 
xử lý số tín hiệu - chuong 1
xử lý số tín hiệu - chuong 1xử lý số tín hiệu - chuong 1
xử lý số tín hiệu - chuong 1
Ngai Hoang Van
 
Phương pháp tham lam giải bài toán lập lịch công việc
Phương pháp tham lam giải bài toán lập lịch công việcPhương pháp tham lam giải bài toán lập lịch công việc
Phương pháp tham lam giải bài toán lập lịch công việc
Nguyễn Danh Thanh
 
Bai giang xlths
Bai giang xlthsBai giang xlths
Bai giang xlths
thuydt1
 
Phương pháp runge kutta giải gần đúng hệ phương trình vi phân đại số
Phương pháp runge kutta giải gần đúng hệ phương trình vi phân đại sốPhương pháp runge kutta giải gần đúng hệ phương trình vi phân đại số
Phương pháp runge kutta giải gần đúng hệ phương trình vi phân đại số
Khu Tiến
 
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phân
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phânPhương pháp số và lập trình - Nội suy, Đạo hàm, Tích phân
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phânHajunior9x
 
Kỹ thuật nhân liên hợp
Kỹ thuật nhân liên hợpKỹ thuật nhân liên hợp
Kỹ thuật nhân liên hợp
tuituhoc
 

What's hot (20)

Bài tập tích phân suy rộng.
Bài tập tích phân suy rộng.Bài tập tích phân suy rộng.
Bài tập tích phân suy rộng.
 
Chuong 2 co so phan tich do phuc tap cua giai thuat - sinh vien 2
Chuong 2   co so phan tich do phuc tap cua giai thuat - sinh vien 2Chuong 2   co so phan tich do phuc tap cua giai thuat - sinh vien 2
Chuong 2 co so phan tich do phuc tap cua giai thuat - sinh vien 2
 
Ktmt chuong 2
Ktmt chuong 2Ktmt chuong 2
Ktmt chuong 2
 
CHUYÊN ĐỀ ÔN THI CHUYỂN CẤP LÊN LỚP 10 MÔN TOÁN
CHUYÊN ĐỀ ÔN THI CHUYỂN CẤP LÊN LỚP 10 MÔN TOÁNCHUYÊN ĐỀ ÔN THI CHUYỂN CẤP LÊN LỚP 10 MÔN TOÁN
CHUYÊN ĐỀ ÔN THI CHUYỂN CẤP LÊN LỚP 10 MÔN TOÁN
 
xử lý số tín hiệu -Chuong 3
xử lý số tín hiệu -Chuong 3xử lý số tín hiệu -Chuong 3
xử lý số tín hiệu -Chuong 3
 
Xu lý tín hiệu số
Xu lý tín hiệu sốXu lý tín hiệu số
Xu lý tín hiệu số
 
Tính toán khoa học - Chương 5: Tính gần đúng đạo hàm và tích phân
Tính toán khoa học - Chương 5: Tính gần đúng đạo hàm và tích phânTính toán khoa học - Chương 5: Tính gần đúng đạo hàm và tích phân
Tính toán khoa học - Chương 5: Tính gần đúng đạo hàm và tích phân
 
Chuoi so
Chuoi soChuoi so
Chuoi so
 
Nhị thức newton và Phương pháp giải các bài tập về Nhị thức newton
Nhị thức newton và Phương pháp giải các bài tập về Nhị thức newtonNhị thức newton và Phương pháp giải các bài tập về Nhị thức newton
Nhị thức newton và Phương pháp giải các bài tập về Nhị thức newton
 
CHƯƠNG 2 GIẢI PHƯƠNG TRÌNH VI PHÂN BẰNG PHƯƠNG PHÁP SỐ
CHƯƠNG 2  GIẢI PHƯƠNG TRÌNH VI PHÂN BẰNG PHƯƠNG PHÁP SỐCHƯƠNG 2  GIẢI PHƯƠNG TRÌNH VI PHÂN BẰNG PHƯƠNG PHÁP SỐ
CHƯƠNG 2 GIẢI PHƯƠNG TRÌNH VI PHÂN BẰNG PHƯƠNG PHÁP SỐ
 
Chuyên đề nhị thức newton và ứng dụng
Chuyên đề nhị thức newton và ứng dụngChuyên đề nhị thức newton và ứng dụng
Chuyên đề nhị thức newton và ứng dụng
 
xử lý số tín hiệu - chuong 1
xử lý số tín hiệu - chuong 1xử lý số tín hiệu - chuong 1
xử lý số tín hiệu - chuong 1
 
Phương pháp tham lam giải bài toán lập lịch công việc
Phương pháp tham lam giải bài toán lập lịch công việcPhương pháp tham lam giải bài toán lập lịch công việc
Phương pháp tham lam giải bài toán lập lịch công việc
 
Bai tap oop c++
Bai tap oop c++Bai tap oop c++
Bai tap oop c++
 
Bai giang xlths
Bai giang xlthsBai giang xlths
Bai giang xlths
 
Chuong01
Chuong01Chuong01
Chuong01
 
Phương pháp runge kutta giải gần đúng hệ phương trình vi phân đại số
Phương pháp runge kutta giải gần đúng hệ phương trình vi phân đại sốPhương pháp runge kutta giải gần đúng hệ phương trình vi phân đại số
Phương pháp runge kutta giải gần đúng hệ phương trình vi phân đại số
 
Chuong03
Chuong03Chuong03
Chuong03
 
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phân
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phânPhương pháp số và lập trình - Nội suy, Đạo hàm, Tích phân
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phân
 
Kỹ thuật nhân liên hợp
Kỹ thuật nhân liên hợpKỹ thuật nhân liên hợp
Kỹ thuật nhân liên hợp
 

Similar to Phân tích và thiết kế thuật toán độ phức tạp

Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Do Ngoc Tuan
 
Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Do Ngoc Tuan
 
Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)Loc Tran
 
Pp giai nhanh_dao_dong_dieu_hoa_6565
Pp giai nhanh_dao_dong_dieu_hoa_6565Pp giai nhanh_dao_dong_dieu_hoa_6565
Pp giai nhanh_dao_dong_dieu_hoa_6565rongvua
 
Pt04 de qui
Pt04 de quiPt04 de qui
Pt04 de qui
nhananh123
 
Giao trinhgiaithuat20
Giao trinhgiaithuat20Giao trinhgiaithuat20
Giao trinhgiaithuat20
Phi Phi
 
Ctdl va gt_hồ_sĩ_đàm
Ctdl va gt_hồ_sĩ_đàmCtdl va gt_hồ_sĩ_đàm
Ctdl va gt_hồ_sĩ_đàm
vinhduchanh
 
Xac dinh cong thuc tong quat cua day so nguyen tat thu
Xac dinh cong thuc tong quat cua day so nguyen tat thuXac dinh cong thuc tong quat cua day so nguyen tat thu
Xac dinh cong thuc tong quat cua day so nguyen tat thu
Thành Nguyễn
 
tài liệu dãy số
tài liệu dãy số tài liệu dãy số
tài liệu dãy số
cocrambo
 
Bản tóm tắt cấu trúc dữ liệu và thuật toán
Bản tóm tắt cấu trúc dữ liệu và thuật toánBản tóm tắt cấu trúc dữ liệu và thuật toán
Bản tóm tắt cấu trúc dữ liệu và thuật toán
HuynTrangLiTh
 
Giao trinhgiaithuat16
Giao trinhgiaithuat16Giao trinhgiaithuat16
Giao trinhgiaithuat16
Phi Phi
 
Mot so chu y khi giai pt
Mot so chu y khi giai ptMot so chu y khi giai pt
Mot so chu y khi giai ptndphuc910
 
Toan pt.de041.2010
Toan pt.de041.2010Toan pt.de041.2010
Toan pt.de041.2010
BẢO Hí
 
ThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáNThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáNguest717ec2
 
Đề tài: Bài toán giá trị đầu cho phương trình vi phân đạo hàm riêng cấp hai t...
Đề tài: Bài toán giá trị đầu cho phương trình vi phân đạo hàm riêng cấp hai t...Đề tài: Bài toán giá trị đầu cho phương trình vi phân đạo hàm riêng cấp hai t...
Đề tài: Bài toán giá trị đầu cho phương trình vi phân đạo hàm riêng cấp hai t...
Dịch vụ viết thuê Khóa Luận - ZALO 0932091562
 
Ly thuyet phuong trinh vi phan, DHKHTN, DHQG-HCM
Ly thuyet phuong trinh vi phan, DHKHTN, DHQG-HCMLy thuyet phuong trinh vi phan, DHKHTN, DHQG-HCM
Ly thuyet phuong trinh vi phan, DHKHTN, DHQG-HCM
hazzthuan
 

Similar to Phân tích và thiết kế thuật toán độ phức tạp (20)

Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4
 
Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4
 
pttt 01
pttt 01pttt 01
pttt 01
 
Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)
 
Pp giai nhanh_dao_dong_dieu_hoa_6565
Pp giai nhanh_dao_dong_dieu_hoa_6565Pp giai nhanh_dao_dong_dieu_hoa_6565
Pp giai nhanh_dao_dong_dieu_hoa_6565
 
Pt04 de qui
Pt04 de quiPt04 de qui
Pt04 de qui
 
Giao trinhgiaithuat20
Giao trinhgiaithuat20Giao trinhgiaithuat20
Giao trinhgiaithuat20
 
Cơ sở thuật toán
Cơ sở thuật toánCơ sở thuật toán
Cơ sở thuật toán
 
Ctdl va gt_hồ_sĩ_đàm
Ctdl va gt_hồ_sĩ_đàmCtdl va gt_hồ_sĩ_đàm
Ctdl va gt_hồ_sĩ_đàm
 
Xac dinh cong thuc tong quat cua day so nguyen tat thu
Xac dinh cong thuc tong quat cua day so nguyen tat thuXac dinh cong thuc tong quat cua day so nguyen tat thu
Xac dinh cong thuc tong quat cua day so nguyen tat thu
 
tài liệu dãy số
tài liệu dãy số tài liệu dãy số
tài liệu dãy số
 
Bản tóm tắt cấu trúc dữ liệu và thuật toán
Bản tóm tắt cấu trúc dữ liệu và thuật toánBản tóm tắt cấu trúc dữ liệu và thuật toán
Bản tóm tắt cấu trúc dữ liệu và thuật toán
 
Olympiad help
Olympiad helpOlympiad help
Olympiad help
 
Giao trinhgiaithuat16
Giao trinhgiaithuat16Giao trinhgiaithuat16
Giao trinhgiaithuat16
 
Mot so chu y khi giai pt
Mot so chu y khi giai ptMot so chu y khi giai pt
Mot so chu y khi giai pt
 
Toan pt.de041.2010
Toan pt.de041.2010Toan pt.de041.2010
Toan pt.de041.2010
 
Chuong 1
Chuong 1Chuong 1
Chuong 1
 
ThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáNThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáN
 
Đề tài: Bài toán giá trị đầu cho phương trình vi phân đạo hàm riêng cấp hai t...
Đề tài: Bài toán giá trị đầu cho phương trình vi phân đạo hàm riêng cấp hai t...Đề tài: Bài toán giá trị đầu cho phương trình vi phân đạo hàm riêng cấp hai t...
Đề tài: Bài toán giá trị đầu cho phương trình vi phân đạo hàm riêng cấp hai t...
 
Ly thuyet phuong trinh vi phan, DHKHTN, DHQG-HCM
Ly thuyet phuong trinh vi phan, DHKHTN, DHQG-HCMLy thuyet phuong trinh vi phan, DHKHTN, DHQG-HCM
Ly thuyet phuong trinh vi phan, DHKHTN, DHQG-HCM
 

Phân tích và thiết kế thuật toán độ phức tạp

  • 1. Kỹ thuật phân tích giải thuật Phạm Nguyên Khang, Đỗ Thanh Nghị Khoa CNTT – Đại học Cần Thơ {pnkhang,dtnghi}@cit.ctu.edu.vn
  • 2. Nộidung • Tạisao cầnphảiphân tích giảithuật? • Tiêu chuẩnđánh giá giảithuật • Phươngpháp đánh giá • Bài tập 2
  • 3. Sựcầnthiếtphảiphân tích giải thuật • Đánh giá giải thuật – Tính đúng đắn ● Chạytrên dữliệuthử Chứngminh lý thuyết(bằngtoán họcchẳng hạn) ● – – Tính đơn giản Tính nhanh chóng (thờigian thựcthi) ● Quan trọngkhi chươngtrình đ ư ợ cthựcthi nhiềulầnHiệuquả thờigian thựcthi ● 3
  • 4. Thờigian thựchiệncủachươngtrình • Đo thờigian thựchiệnchươngtrình – – – – Lậptrình và đo thờigian thựchiện Phụ thuộcvào tậplệnhcủamáy tính K ỹnăng củangườilậptrình Dữliệuđầuvào Tính đ ộphứctạpthờigian thựchiệncủagiải thuật= đ ộ đo sựthựcthi củagiải thuật 4
  • 5. Thờigian thựchiệncủachươngtrình • Đo thờigian thựchiện: – Hàm T(n) ≥ 0, vớin là kích thước(độlớn)của đầu vào – Ví dụ:T(n) = 3n – Đơnv ịtính: s ốlệnhc ơbản,s ốc h ỉthị,… – Thờigian thựchiệntrong các trườnghợp:tốt nhất,xấu nhất,trung bình So sánh T1(n) và T2(n) 5
  • 6. Thờigian thựchiệncủachươngtrình • T ỷsuấttăng (growth rate): – – – T(n) có t ỷsuấttăng f(n) nếutồntạihằngC > 0 và n0 sao cho T(n)  Cf(n) n  n0 Cho mộthàm không âm T(n), luôn tồntạit ỷsuất tăng f(n) củanó Ví dụ:T(0) = 1, T(1) = 4, T(n) = (n+1)2, ta có: f(n) = n2 (vớiC = 4, n0 = 1) 6
  • 7. Thờigian thựchiệncủachươngtrình ??? Chứng minhrằng: – T ỷsuấttăng củaT(n) = 3n3 + 2n là n3 ● ChọnC = ?, chọnn0 = ? Chứngminh bằngquy nạp T(n)  Cf(n) n  n0 ● 7
  • 8. Thờigian thựchiệncủachươngtrình ??? Chứng minhrằng: – T ỷsuấttăng củaT(n) = 3n3 + 2n là n3 ● ChọnC = 5, chọnn0 = 0 Chứngminh bằngquy nạp 3n3 + 2n  5n3 n  0 ● ● Quy tắc: T(n) là đa thứccủan thì t ỷ suấttăng là bậccao nhất củan 8
  • 9. Đ ộphứctạpgiảithuật • Cho 2 giải thuật – – P1 có T1(n) = 100n2 P2 có T2(n) = 5n3 ??? Giảithuậtnào chạynhanh hơn Xét nếun  20 thì T1(n)  T2(n) Xét nếu n  20 thì T1(n)  T2(n)  So sánh t ỷsuấttăng hơnlà so sánh trựctiếpcác hàm T(n) 9
  • 10. Đ ộphứctạpgiảithuật • Ký pháp Ô lớn(big O) – NếuT(n) có t ỷsuấttăng f(n)  T(n) có đ ộphứctạplà f(n) và ký hiệulà O(f(n)), đọclà “ô f(n)”. • Ví dụ:T(n) = (n + 1)2 có đ ộphứctạpO(n2) • Tính chất – – O(cf(n)) = O(f(n)), c: hằngs ố O(C) = O(1) • Đ ộphứctạpcủagiảithuật: hàm chặntrên củathờigian • Mộts ốhàm thểhiệnđ ộphứctạpthườnggặp: log2n, nlog2n, n2, n3, 2n, n!, nn, … 10
  • 11.
  • 12. Cách tính đ ộphứctạp • Cho 2 chương trình: – – P1 có thờigian thựchiệnT1(n) = O(f1(n)) P2 có thờigian thựchiệnT2(n) = O(f2(n)) • Quy tắccộng: – Thờigian thựcthi P1 và P2 nốitiếpnhau s ẽlà: ● T(n) = T1(n) + T2(n) = O(max(f1(n), f2(n)) ● Quy tắcnhân: – Thờigian thựcthi P1 và P2 lồngnhau (vd: vòng lặp lồngnhau chẳnghạn): ● T(n) = T1(n)  T2(n) = O(f1(n)  f2(n)) 12
  • 13. Cách tính đ ộphứctạp • Quy tắcnhân: for (i=1; i<= n; i++) for (j=1; j<=n; j++) { thựchiệncông việcO(1) } T(n) = O(n2 ) 13
  • 14. Cách tính đ ộphứctạp for (i=1; i< n; i++) for (j=i+1; j<=n; j++) { thựchiệncông việcO(1) } Áp dụngquy tắcnhân đ ư ợ ckhông? T(n) ???? 14
  • 15. Cách tính đ ộphứctạp • Quy tắctổng quát: – – Đọc(read, scanf), ghi (write, printf), lệnhgán, so sánh: thờigian là hằngs ốhayO(1) Lệnh if: if (điều kiện) lệnh 1 else lệnh 2 ● max (lệnh1, lệnh2) + điềukiện – Vòng lặp:tổngthờigian thựchiệnthân vòng lặp ● Trong trườnghợpkhông xác địnhđ ư ợ cs ốlầnlặpta phảilấys ốlần lặptrong trườnghợpxấunhất. 15
  • 16. Cách tính đ ộphứctạp • Phươngpháp thực hiện: – – Xác địnhđầuvào: thườngký hiệulà n Cách 1: dùng cho tấtc ảcác loạichươngtrình ● Tính thờigian thựchiệnT(n) cho toàn b ộchương trình  O(f(n)) từT(n) Cách 2: không áp dụngcho chươngtrình đ ệquy – ● Chia chươngtrình nhiềuđoạnnhỏ Tính T(n) và O(f(n)) cho từng đoạn Áp dụngquy tắccộng,quy tắcnhân đ ểcó O(f(n)) cho c ảchương trình ● ● 16
  • 17. Cách tính đ ộphứctạp Ví dụ: 1. void sap_xep(int a[], int n) { 2. int tam; 3. for (int i = 0; i < n; i++) 4. for (int j = i + 1; j < n; j++) 5. if (a[j] < a[i]) { 6. tam = a[i]; 7. a[i] = a[j]; 8. a[j] = tam; 9. } 10. } 17
  • 18. Cách tính đ ộphứctạp Ví dụ: 1. int tim_kiem(int x, int a[], int n) { 2. int found, i; 3. found = 0; 4. i = 0; 5. while (i < n && !found) 6. if (a[i] == x) 7. found = 1; 8. else 9. i = i+1; 10. return i; 11. } 18
  • 19. Cách tính đ ộphứctạp Ví dụ: 1. int tim_kiem_nhi_phan(int x, int a[], int n) { 2. int i = 0, j = n – 1; 3. while (i <= j) { 4. int m = (i + j)/2; 5. 6. if (x == a[m]) return m; 7. if (x < a[m]) 8. j = m – 1; 9. else 10. i = m + 1; 11. } 12. return -1; // khong tim thay 13.} 19
  • 20. Cách tính đ ộphứctạp • Chươngtrình có gọichươngtrình con (không đ ệquy) • Quy tắc:tính từtrong ra ngoài • C, B2, B12, B11 • B1 •B •A A B B11 B1 C B2 B12 20
  • 21. Cách tính đ ộphứctạp • Chươngtrình đ ệquy – – – Lậpphươngtrình đ ệquy T(n) Giảiphươngtrình đ ệquy tìm nghiệm Suy ra t ỷsuấttăng f(n) hay O(f(n)) Ví dụ: 1. int giai_thua(int n) { 2. if (n == 0) 3. return 1; 4. else 5. 6. } return n * giai_thua(n – 1); 21
  • 22. Giảiphươngtrình đ ệquy • Phươngpháp truy hồi – – T riểnkhai T(n) theo T(n - 1) rồiT(n - 2) … cho đếnT(1) hoặc T(0) Suy ra nghiệm • Phươngpháp đoán nghiệm – – Dựđoán nghiệm f(n) Áp dụngđịnhnghĩa t ỷsuấttăng và chứng minh f(n) là t ỷsuấttăng củaT(n) • Áp dụngcông thứcđốivớilớpphươngtrình đ ệquy đã có lờigiải 22
  • 23. Phươngpháp truy hồi • T riểnkhai T(n) T(n-1) T(n-2) … theo rồiđến tiếp đến cho đếnT(1) 23
  • 24. Ví d ụ1 • Giảiphươngtrình đ ệquy: T(1) = C1 T(n) = 2T(n - 1) + C2 • Ta có: T(n) = 2T(n – 1) + C2 = 2(2T(n – 2) + C2) + C2 = 22T(n – 2) + 2C2 + C2 = 22(2T(n – 3) + C2) + 2C2 + C2 = 23T(n – 3) + 22C2 + 2C2 + C2 = … = 2kT(n – k) + 2k-1C2 + 2k-2C2 + … + 2C2 + C2 Quá trình dừnglạikhi n – k = 1 hay k = n – 1, khi đó: T(n) = 2n-1T(1) + C2 (2n-1 – 1) = C1 2n-1 + C2 (2n-1 – 1) = O(2n) – 24
  • 25. 16/06/2014 25 Giải phương trình Cn = Cn-1 + n C1 = 1 n  2 Triển khai phương trình Cn = Cn-1 + n = Cn-2 + (n – 1) + n = Cn-3 + (n – 2) + (n – 1) + n ... = C1 + 2 + … + (n – 2) + (n – 1) + n = 1 + 2 + … + (n – 1) + n = n(n+1)/2 = n2/2 Ví d ụ2
  • 26. 16/06/2014 26 Giải phương trình Cn = Cn/2 + 1 C1 = 0 n  2 Đặt n = 2k C(2k) = C(2k-1) + 1 = C(2k-2 )+ 1 + 1 = C(2k-3 )+ 3 . . . = C(20 ) + k = C1 + k = k Cn = k = logn Cn  logn Ví d ụ3
  • 27. 16/06/2014 27 Giải phương trình Cn = 2Cn/2 + n C1 = 0 for n  2 Đặt n = 2k C(2k) = 2C(2k-1) + 2k C(2k)/2k = C(2k-1)/ 2k-1 + 1 = C(2k-2)/ 2k-2 + 1 +1 . . = k  C(2k ) = k.2k Cn = nlogn Ví d ụ4
  • 28. 16/06/2014 28 Giải phương trình C(n) = 2C(n/2) + 1 C(1) = 0 for n  2 Đặt n = 2k C(2k) = 2C(2k-1) + 1 C(2k)/ 2k = 2C(2k-1)/ 2k +1/2k = C(2k-1)/ 2k-1 + 1/2k + 1/2k-1 ]+ 1/2k =[C(2k-2)/ 2k-2 . . =C(2k-i)/ 2k -i + 1/2k – i +1 + … + 1/2k Ví d ụ5 Cuối cùng, khi i = n -1, ta được: C(2k)/2k = C(2)/2 + 1/4 + …+ 1/2k = 1/2 + 1/4 + ….+1/2k  1  C(2k)  2k = n
  • 29. 16/06/2014 29 Giải phương trình Cn = 2Cn-1 +1 C1 = 1 n  2 Cn + 1 = 2Cn-1 + 2 = 2 (Cn-1 +1) = 2 (2 (Cn-2 + 1)) = 22(Cn-2 +1) ... = 2n-1(C1 + 1) = 2n-1(1 + 1) = 2n Cn = 2n -1 Ví d ụ6
  • 30. 16/06/2014 30 Ví d ụ7 Giải phương trình C(n)=2C (√n)+logn Đặt m = logn => n = 2m C(2m) = 2C(2m/2) + m Đặt S(m) = C(2m) S(m) = 2S(m/2) + m = mlogm C(n) = logn loglogn
  • 31. 16/06/2014 31 Chuỗithông dụng S = 1 + 2 + 3 + … + n = n(n+1)/2  n2/2 S = 1 + 22 + 32 + …+ n2 = n(n+1)(2n+1)/6  n3/3 S = 1 + a + a2 + a3 + … + an = (an+1 -1)/(a-1) Nếu 0< a < 1 thì S  1/(1-a) và khi n   thì S tiến về 1/(1-a) S = 1 + 1/2 + 1/3 + … + 1/n = ln(n) + Hằng số Euler   0.577215665 S = 1 + 1/2 + 1/4 + 1/8 + … + 1/2n + …  
  • 32. Bài tập • Tính đ ộphứctạpcủalờigiảiđ ệquy – Tính giai thừacủan – Tháp Hà nộivớis ốtầngtháp là n – Tìm kiếmn h ịphân củadãy gồmn s ốđ ư ợ csắptheo thứtựtăng dần 32
  • 33. Phươngpháp đoán nghiệm • Thửđoán 1 nghiệm f(n) • Sau đó tìm cách chứng minh T(n)  f(n) – Chứng minh mình bằngquynạp • Thông thườngta chọnf(n) có dạng:n, logn, nlogn, 2n , … 33
  • 34. Lờigiảitổngquát • Giảithuậtchia đ ểtrị: – Phân rã bài toán lớnthành các bài toán con ● Mộtbài toán lớncó kích thướcn, thành a bài toán con có kích thướcn/b Tổnghợpcác lờigiảicủacác bài toán con đ ểcó đ ượ clời giảicủabài toán lớn – ● Thờigian tổnghợpa bài toán con tốnd(n) thời gian • Phươngtrình đ ệquy cho giảithuậttrên: – – T(1) = 1 T(n) = aT(n/b) + d(n) 34
  • 35. Lờigiảitổngquát • Áp dụngphươngpháp truy hồi: T(n) = aT(n/b) + d(n) = a[aT(n/b/b) + d(n/b)] + d(n) = a2T(n/b2) + ad(n/b) + d(n) = a2[aT(n/b3) + d(n/b2)] + ad(n/b) + d(n) = a3T(n/b3) + a2d(n/b2) + ad(n/b) + d(n) = … = akT(n/bk) + aid(n/bi) – Quá trình kếtthúc khi n/bk = 1 hay k = logbn T(n) = ak + aid(n/bi) 35
  • 36. Lờigiảitổngquát • Nghiệm thuầnnhất(homogeneous solutions ): ak  nlogb a • d(n): hàm tiếntriển(drivingfunction) • Nghiệm chính xác s ẽlà nghiệmchính xác nếu d(n) = 0, vớimọin • Nếud(n) > 0, ta có nghiệm riêng: 36    k1 i0           i0 k1 k1 i0 ) ai d(bk i i i i i b bk  a d b  n  a d
  • 37. Lờigiảitổngquát • Nếunghiệm thuầnnhấtlớnnghiệm riêng thì đ ộphứctạplà nghiệm thuần nhất • Nếunghiệm riêng lớnhơnnghiệm thuầnnhất thì đ ộ phứctạplà nghiệmriêng • Tuy nhiên, tính nghiệm không phảilúc nào cũng dễ! 37
  • 38. Lờigiảitổngquát • Ta s ẽtính nghiệmriêng trong trườnghợpd(n) có dạngđặcbiệt • Hàm nhân, hàm có tính chấtnhân (multiplicative function): – – Hàm d(n) có tính nhân nếuvà c h ỉnếud(x.y) = d(x).d(y) Ví dụ: ● d(n) = n2 là hàm nhân vì d(x.y) = (x.y)2 = x2 .y2 = d(x).d(y) d(n) = 3n2 không phảilà hàm nhân ● 38
  • 39. Lờigiảitổngquát • Nếud(n) là hàm nhân, ta có nghiệm riêng: 39 1 a d(b) d(b)k   d(b) i0  k1 k1 k1 i ai d(bki )  ai d(b)ki  d(b)k  a  ak i 0 i0
  • 40. Lờigiảitổngquát • Nếua > d(b), ak > [d(b)]k 40 a d(b) ai d (bki )  log a b T (n) O(n logn)  d(b)k k  ak k a  i k d(b) i k i    k 1  i 0 d(b)   k1 k1 i 0 i0 • Nếua < d(b) T(n) • Nếua = d(b) log log a b n b  O(a )  O(n ) k T(n)  O(a ) logd (b) b )  O(n ) logn b  O(d(b) k  O(d(b) )
  • 41. Bài tập 41 • Giảicác phươngtrình đ ệquy sau vớiT(1) = 1 4/
  • 42. 16/06/2014 Ví dụ: GPT với T(1) = 1 và ● Phương trình có dạng phương trình tổng quát. d(n)=n là hàm nhân. a = 4 và b = 2. d(b) = b = 2 < a. T(n) = O(nlogb ) = O(n ) = O(n ). a log4 2 ● ● ● ●  2    1/ T(n)  4T n   n
  • 43. 16/06/2014 Ví dụ: GPT với T(1) = 1 và  2    2/ T(n)  4T n   n2 ● Phương trình có dạng phương trình tổng quát. d(n)=n2 là hàm nhân. a = 4 và b = 2. d(b) = b2 = 4 = a. T(n) = O(nlogbalogbn) = O(nlog4logn) = O(n2logn). ● ● ● ●
  • 44. 16/06/2014 Ví dụ: GPT với T(1) = 1 và  2    3/ T(n)  4T n   n3 ● Phương trình có dạng tổng quát. d(n)=n3 là hàm nhân. a = 4 và b = 2. d(b) = b3 = 8 > a. T(n) = O(nlogbd(b)) = O(nlog8) = O(n3). ● ● ● ●
  • 47. 16/06/2014 Ví dụ: GPT với T(1) = 1 và ● PT thuộc dạng phương trình tổng quát nhưng d(n) = nlogn không phải là một hàm nhân. NTN = nlogba = nlog2 = n Do d(n) = nlogn không phải là hàm nhân nên ta phải tính nghiệm riêng bằng cách xét trực tiếp ● ●  2    T(n)  2T n   nlogn
  • 48. 16/06/2014 Ví dụ (tt) ● Theo giải phương trình đệ quy tổng quát thì n = bk nên k = logbn, ở đây do b = 2 nên 2k = n và k = logn, NR= O(nlog2n) > NTN T(n) = O(nlog2n). ● ● k-j k-1 j=0 j k-j k-1 aj dbk-j  2 2 log2 NR  ∑ j0 2 NR  2k (k - j)  2k k(k 1)  O(2k k2 ) k-1 j0
  • 49. 16/06/2014 BT4-1: GPT với T(1) = 1 và ● Phương trình có dạng phương trình tổng quát d(n)=1 là hàm nhân a = 1 và b = 2 d(b) = 1 = a T(n) = O(nlogb logbn) = O(n logn) = O(logn) a log1 ● ● ● ● T(n)=T n 2 ()+1
  • 50. 16/06/2014 BT4-2: GPT với T(1) = 1 và  2    T(n)  2T n   logn ● Phương trình có dạng tổng quát d(n)=logn không phải là hàm nhân NTN = O(nlogba)=O(nlog2)=O(n) Tính trực tiếp nghiệm riêng ● ● ●
  • 51. 16/06/2014 k1 k 1 NR  a j d(bk  j )  2 j log2k j j0 j 0 k1 k1 k1 NR  2j (k  j)  k2j   j2 j j0 j0 j 0 ) 2 1 1 2k NR  O(k k1 j0 j 2 )  O(k NR  O(k2k )  O(n log n)  n  NTN T(n)=O(nlogn) Ví dụ (tt)
  • 53. Bài tập Tính đ ộphứctạpthờigian củađoạnchương trình sau theo n: 1.int max(int a[], int n) { 2. if (n == 1) 3. return a[0]; 4. if (a[n-1] > max(a, n - 1)) 5. return a[n-1]; 6.return max(a, n-1); 7.} 53