Ta hiểu thuật toán giải bài toán đặt ra là một thủ tục xác định bao gồm một dãy hữu hạn các bước cần thực hiện để thu được đầu ra cho một đầu vào cho trước của bài toán.. – Đầu ra Output
Trang 2C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Trang 3C u trúc d li u và thu t toán - N Ngh a B môn KHMT
k=i a kđ c g i là tr ng l ng c a dãy con này
Bài toán đ t ra là: Hãy tìm tr ng l ng l n nh t c a các dãy con, t c
Trang 4C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Thu t toán tr c ti p
• Thu t toán này có th cài đ t trong đo n ch ng trình sau:
int maxSum = 0;
for (int i=0; i<n; i++) {
for (int j=i; j<n; j++) { int sum = 0;
for (int k=i; k<=j; k++) sum += a[k];
if sum > maxSum maxSum = sum;
} }
Thu t toán tr c ti p
mà thu t toán ph i th c hi n, t c là đ m xem dòng l nh
Trang 5C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Thu t toán nhanh h n
int maxSum = a[0];
for (int i=0; i<n; i++) {
int sum = 0;
for (int j=i; j<n; j++) { sum += a[j];
if sum > maxSum maxSum = sum;
} }
Trang 6C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Thu t toán nhanh h n
• Phân tích thu t toán Ta l i tính s l n th c hi n phép c ng
0
( ) ( 1) 1
2 2
n i
Thu t toán đ qui
• Ta còn có th xây d ng thu t toán t t h n n a! Ta s s
d ng k thu t chia đ tr K thu t này bao g m các
– Chia bài toán c n gi i ra thành các bài toán con cùng d ng
– Gi i m i bài toán con m t cách đ qui
– T h p l i gi i c a các bài toán con đ thu đ c l i gi i c a bài toán
xu t phát.
l n nh t c a các dãy con: Ta chia dãy đã cho ra thành 2
(g i t t là dãy bên trái và dãy bên ph i) v i đ dài gi m
đi m t n a
Trang 7C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Thu t toán đ qui
• t h p l i gi i, nh n th y r ng ch có th x y ra m ttrong 3 tr ng h p:
– Dãy con l n nh t n m dãy con bên trái (n a trái)
– Dãy con l n nh t n m dãy con bên ph i (n a ph i)
– Dãy con l n nh t b t đ u n a trái và k t thúc n a ph i (gi a).
• Do đó, n u ký hi u tr ng l ng c a dãy con l n nh t
n a trái là wL, n a ph i là wR và gi a là wM thì
max(wL, wR, wM).
Thu t toán đ qui
• Vi c tìm tr ng l ng c a dãy con l n nh t n a trái(wL) và n a ph i (wR) có th th c hi n m t cách đ qui
Trang 8C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Thu t toán đ qui
• m – đi m chia c a dãy trái, m+1 là đi m chia c a dãy ph i
Thu t toán đ qui
a[i] đ n a[j]) k t thúc a[j] ta dùng thu t toán sau:
Trang 9C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Thu t toán đ qui
}
Thu t toán đ qui
S đ c a thu t toán đ qui có th mô t nh sau:
Trang 10C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Thu t toán đ qui
• Phân tích thu t toán:
Ta c n tính xem l nh g i MaxSub(a,1,n) đ th c hi n thu ttoánđòi h i bao nhiêu phép c ng?
• Tru c h t nh n th y MaxLeft và MaxRight đòi h i
n/2 + n/2 = n phép c ng
• Vì v y, n u g i T(n) là s phép c ng c n tìm, ta có công th c
đ qui sau:
0 1 ( )
Trang 11C u trúc d li u và thu t toán - N Ngh a B môn KHMT
So sánh các thu t toán
• Cùng m t bài toán ta đã đ xu t 3 thu t toán đòi h i s
l ng phép toán khác nhau và vì th s đòi h i th i giantính khác nhau
• Các b ng trình bày d i đây cho th y th i gian tính v i
gi thi t máy tính có th th c hi n 108 phép c ng trong 1giây
Th i gian tính
Trang 12C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Th i gian tính
B ng qui đ i th i gian
• B ng sau đây dùng đ tính th i gian th c hi n
Trang 13C u trúc d li u và thu t toán - N Ngh a B môn KHMT
• V i n nh th i gian tính là không đáng k
• V n đ tr nên nghiêm tr ng h n khi n > 106 Lúc
đó ch có thu t toán th ba là có th áp d ng đ c trong th i gian th c.
• Còn có th làm t t h n n a không?
• Có th đ xu t thu t toán ch đòi h i n phép c ng!
Thu t toán Quy ho ch đ ng
Vi c phát tri n thu t toán d a trên DP bao g m 3 giai đo n:
1 Phân rã: Chia bài toán c n gi i thành nh ng bài toán con nh
h n có cùng d ng v i bài toán ban đ u
2 Ghi nh n l i gi i: L u tr l i gi i c a các bài toán con vào
m t b ng
3 T ng h p l i gi i: L n l t t l i gi i c a các bài toán conkích th c nh h n tìm cách xây d ng l i gi i c a bài toánkích th c l n h n, cho đ n khi thu đ c l i gi i c a bài toán
xu t phát (là bài toán con có kích th c l n nh t)
Trang 14C u trỳc d li u và thu t toỏn - N Ngh a B mụn KHMT
– Giả sử i > 1 và s k là đã biết với k = 1, 2, , i-1 Ta cần tính s i là
tr ng l ng c a dãy con lớn nhất của dãy
a1, a2, , ai-1, ai .
Thu t toỏn QH
• Do dóy con l n nh t c a dóy này ho c là cú ch a ph n t a i ho c là khụng
ch a ph n t a i , nờn nú ch cú th là m t trong hai dóy:
– Dóy con l n nh t c a dóy a1, a2, , a i-1
– Dóy con l n nh t c a dóy a1, a2, , a i k t thỳc t i a i .
Trang 15C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Thu t toán QH
MaxSub(a);
{
smax = a[1]; (* smax – tr ng l ng cña d·y con lín nhÊt *)
maxendhere = a[1]; (* maxendhere – tr ng l ng c a dãy con l n nh t k t thúc t i a[i] *) imax = 1; (* imax - vÞ trÝ kÕt thóc cña d·y con lín nhÊt *)
Phân tích thu t toán:
D th y s phép toán c ng ph i th c hi n trong thu t toán (s l n th c
Trang 16C u trỳc d li u và thu t toỏn - N Ngh a B mụn KHMT
Khỏi ni m bài toỏn tớnh toỏn
• Định nghĩa Bài toán tính toán F là ánh xạ từ tập các xâu nhị phân độ dài
hữu hạn vào tập các xâu nhị phân độ dài hữu hạn:
– Đa thức một biến P(x) = a0+ a1x + + a n x n hoàn toàn xác định bởi
dãy số n, a0, a1, , a n , mà để biểu diễn dãy số này chúng ta có thể sử dụng xâu nhị phân
• Định nghĩa Ta hiểu thuật toán giải bài toán đặt ra là một thủ tục xác định
bao gồm một dãy hữu hạn các bước cần thực hiện để thu được đầu ra cho một đầu vào cho trước của bài toán.
• Thuật toán có các đặc trưng sau đây:
– Đầu vào (Input): Thuật toán nhận dữ liệu vào từ một tập nào đó.
– Đầu ra (Output): Với mỗi tập các dữ liệu đầu vào, thuật toán đưa ra các dữ liệu tương ứng với lời giải của bài toán.
(có thể rất lớn) bước với mọi đầu vào.
toán được xác định một cách đơn trị và chỉ phụ thuộc vào đầu vào và các kết quả của các bước trước.
– Tổng quát (Generality): Thuật toán có thể áp dụng để giải mọi bài toán có dạng
đã cho.
Trang 17C u trúc d li u và thu t toán - N Ngh a B môn KHMT
• L i gi i bài toán bao g m:
– Thu t toán (Algorithms)
k t qu đ u ra (output) c a bài toán trong th i gian h u h n.
Trang 18C u trúc d li u và thu t toán - N Ngh a B môn KHMT
The Life Cycle of Software
Vòng đ i đ i c a c a ph n ph n m m m m nh nh là là m t m t bánh bánh lái lái có có th th quay quay tt m t m t pha pha đ n đ n m t m t pha pha khác b t b t kk
• Phase 1: Ch rõ đ c đi m k thu t (Specification) (đ c t )
• Phase 2: Thi t k (Design)
• Phase 3: Phân tích r i ro (Risk Analysis)
• Phase 4: Ki m th (Verification)
• Phase 5: L p trình (Coding)
• Phase 6: Test th (Testing)
• Phase 7: Tinh ch l i gi i (Refining the Solution)
• Phase 8: S n xu t (Production)
• Phase 9: B o trì (Maintenance)
1-36Nguy n c Ngh a - B
môn KHMT HBKHN
Trang 19C u trúc d li u và thu t toán - N Ngh a B môn KHMT
The Life Cycle of Software
• Phase 1: c t (Specification)
– Các khía c nh c a bài toán c n ch rõ:
• D li u đ u vào là gì (What is the input data?)
• D li u nào là đúng đ n, là không đúng đ n?
• Ai là ng i s d ng ph n m m và giao di n ng i dùng c n đ c thi t k nh th nào?
• C n phát hi n nh ng l i gì và c n thông báo nh th nào v chúng?
The Life Cycle of Software
Trang 20C u trúc d li u và thu t toán - N Ngh a B môn KHMT
The Life Cycle of Software
• Phase 3: Phân tích r i ro (Risk Analysis)
• Phase 4: Ki m th (Verification)
– Ch ng minh tính đúng đ n c a thu t toán b ng các ph ng pháp hình th c, …
• Phase 5 : Cài đ t (Coding)
– Liên quan đ n vi c chuy n thi t k sang m t ngôn ng l p trình c th – Lo i tr các l i ng pháp
• Phase 6: Test th (Testing)
– Liên quan đ n vi c lo i b các l i logic
The Life Cycle of Software
• Phase 7: Tinh ch l i gi i (Refining the Solution)
– Do ch ng trình đ c phát tri n v i nh ng gi thi t nh t đ nh nên c n tìm cách gi m nh các gi thi t đ c b sung đ i v i đ u vào, đ u ra – B sung thêm các ch c n ng
Trang 21C u trỳc d li u và thu t toỏn - N Ngh a B mụn KHMT
ph c t p c a thu t toỏn
• ỏnh giỏ đ ph c t p tớnh toỏn c a thu t toỏn là đỏnh giỏ l ng
tài nguyờn cỏc lo i mà thu t toỏn đũi h i s d ng Cú hai lo i tàinguyờn quan tr ng đú là th i gian và b nh Trong giỏo trỡnh
này ta đ c bi t quan tõm đ n đỏnh giỏ th i gian c n thi t đ th c
hi n thu t toỏn mà ta s g i là th i gian tớnh c a thu t toỏn.
• Th i gian tớnh ph thu c vào d li u vào
• Định nghĩa Ta gọi kích thước dữ liệu đầu vào (hay đ dài d
li u vào) là số bít cần thiết để biểu diễn nó.
• Ta s tỡm cỏch đỏnh giỏ th i gian tớnh c a thu t toỏn b i m t hàm
c a đ dài d li u vào.
• o th i gian tớnh b ng đ n v đo nào?
• Định nghĩa Ta gọi phép toán cơ bản là phép toán có
thể thực hiện với thời gian bị chặn bởi một hằng số không phụ thuộc vào kích thước dữ liệu.
• Để tính toán thời gian tính của thuật toán ta sẽ đếm số
phép toán cơ bản mà nó phải thực hiện.
Trang 22C u trỳc d li u và thu t toỏn - N Ngh a B mụn KHMT
Cỏc lo i th i gian tớnh
Chúng ta sẽ quan tâm đến
– Thời gian tối thiểu cần thiết để thực hiện thuật toán với mọi bộ dữ liệu đầu vào kích thước n Thời gian như vậy sẽ được gọi là thời gian tính tốt nhất
của thuật toán với đầu vào kíchthước n
– Thời gian nhiều nhất cần thiết để thực hiện thuật toán với mọi bộ dữ liệu
đầu vào kích thước n Thời gian như vậy sẽ được gọi là thời gian tính tồi
nhấtcủa thuật toán với đầu vào kíchthước n
– Thời gian trung bình cần thiết để thực hiện thuật toán trên tập hữu hạn các
đầu vào kích thước n Thời gian như vậy sẽ được gọi là thời gian tính trung
bìnhcủa thuật toán.
Trang 23C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Asymptotic Notation
Q, W, O
Trang 24C u trúc d li u và thu t toán - N Ngh a B môn KHMT
f(n) cg(n) v i m i n n0}
Ta nói g(n) là c n trên ti m c n c a f(n)
Trang 25C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Trang 26C u trúc d li u và thu t toán - N Ngh a B môn KHMT
• Nói “Th i gian tính là O(f(n))” hi u là: ánh giá trong tình hu ng t i
nh t (worst case) là O(f(n)) Th ng nói: “ ánh giá th i gian tính
trong tình hu ng t i nh t là O(f(n))”
• Ngh a là th i gian tính trong tình hu ng t i nh t đ c xác đ nh
b i m t hàm nào đó g(n) O (f(n))
• “Th i gian tính là W(f(n))” hi u là: ánh giá trong tình hu ng t t nh t
(best case) là W(f(n)) Th ng nói: “ ánh giá th i gian tính trong
tình hu ng t t nh t là W(f(n))”
– Ngh a là th i gian tính trong tình hu ng t t nh t đ c xác đ nh
b i m t hàm nào đó g(n) W(f(n))
Ví d
• S p x p chèn (Insertion sort) đòi h i th i gian
c các ph n t , vì th bài toán s p x p có th i gian
(merge sort) , bài toán s p x p có th i gian
Trang 27C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Trang 28C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Trang 29C u trúc d li u và thu t toán - N Ngh a B môn KHMT
f(n) = O(g(n)) khi và ch khi g(n) = W(f(n))
Trang 30C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Trang 31C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Trang 32C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Ví d
• V i m i c p hàm sau đây, ho c f(n) = O(g(n)), f(n) = Ω(g(n)),
ho c f(n) = (g(n)) Hãy xác đ nh quan h nào là đúng
Trang 33C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Trang 34C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Trang 35C u trúc d li u và thu t toán - N Ngh a B môn KHMT
C n trên và c n d i
Upper Bound and Lower Bound
cho th i gian tính c a P là O(g(n)) n u đ gi i P t n t i thu t
toán gi i v i th i gian tính là O(g(n))
cho th i gian tính c a P là (g(n)) n u m i thu t toán gi i P
– O(n): tuy n tính (linear)
– O(n log n): trên tuy n tính (superlinear)
Trang 36C u trúc d li u và thu t toán - N Ngh a B môn KHMT
1.5 M t s k thu t phân tích thu t toán
Mô t thu t toán: gi ngôn ng
• mô t thu t toán có th s d ng m t ngôn ng l p trình nào
đó Tuy nhiên đi u đó có th làm cho vi c mô t thu t toán trnênph c t p đ ng th i r t khó n m b t
• Vì th , đ mô t thu t toán ng i ta th ng s d ng gi ngôn
ng (pseudo language), trong đó cho phép v a mô t thu t
toán b ng ngôn ng đ i th ng v a s d ng nh ng c u trúc
l nh t ng t nh c a ngôn ng l p trình
• D i đây ta li t kê m t s câu l nh chính đ c s d ng tronggiáo trình đ mô t thu t toán
Trang 37C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Mô t thu t toán: ph ng ngôn ng
Trang 38C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Mô t thu t toán: ph ng ngôn ng
endcase;
Mô t thu t toán: gi ngôn ng
• Hàm và th t c (Function and procedure)
Function name(các tham s )
Trang 39C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Mô t thu t toán: ph ng ngôn ng
Mô t thu t toán: gi ngôn ng
Trang 40C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Mô t thu t toán: gi ngôn ng
d ng m có ph i là s nguyên t hay không (hàm Is_prime).
• S d ng hàm này này ta xây d ng thu t toán gi i bài toán đ tra
• N u m=a*b v i 1 < a, b < m, thì m t trong hai th a s a, b s
là s nguyên t n u nh nó không có c s nào trong các s
Mô t thu t toán: gi ngôn ng
• Thu t toán ki m tra m t s nguyên d ng có ph i là nguyên
Trang 41C u trúc d li u và thu t toán - N Ngh a B môn KHMT
hi n quãng 1031 l n l p N u gi thi t là m t phép chia
có th th c hi n trong th i gian 1 nanosecond thì thu t toán s ch y trong 1013 n m!
Mô t thu t toán: gi ngôn ng
• Thu t toán tìm s nguyên t l n h n s nguyên d ng n.
• Thu t toán s s d ng Is_prime nh ch ng trình con
Trang 42C u trỳc d li u và thu t toỏn - N Ngh a B mụn KHMT
phõn tớch đ ph c t p c a thu t toỏn
thể là một câu lệnh nhưng cũng có thể là một thuật toán con
Gọi Time(P), Time(Q) là thời gian tính của P và Q tương ứng.Khi đó ta có
Quy tắc tuần tự: Thời gian tính đòi hỏi bởi “P; Q”, nghĩa là P
thực hiện trước, tiếp đến là Q, sẽ là
Time (P; Q) = Time(P) + Time(Q) ,
hoặc trong ký hiệu Theta:
Time (P; Q) = (max(Time(P), Time(Q)).
Trang 43C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Vòng l p for
for i =1 to m do P(i);
•Do (công th c Muavre)
suy ra s bit bi u di n f k là (k) Do đó th i gian tính c a m t l n l p là (k) V y th i
k f
2
5 1 2
5 1 5 1
n c.k c n k c n(n1) (n2)
Trang 44C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Phân tích vòng l p While và Repeat
• C n xác đ nh m t hàm c a các bi n trong vòng l p sao cho hàm này có giá tr gi m d n trong quá trình l p Khiđó
– ch ng minh tính k t thúc c a vòng l p ta ch c n ch ra giá tr c a hàm là s nguyên d ng
Trang 45C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Phân tích Binary-Search
• G i d= j-i+1 d – s ph n t c a m ng c n ti p t c kh o sát
• Ký hi u i, j, i*, j* theo th t là giá tr c a i, j tr c và sau khi
th c hi n l n l p Khi đó
– N u x < T[k], thì i*=i, j*=(i+j) div 2 - 1, vì th d*=j*- i*+1
= (i+j) div 2 - 1- i + 1 (i+j)/2 - i < (j - i + 1)/2 = d/2.
Trang 46C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Các mô t khác c a thu t toán Binary Search
mid=floor((p+q)/2);
if key==L(mid) break elseif key<L(mid) q=mid-1;
else p=mid+1;
end end
if key==L(p) mid=p;
else mid=0;
Hàm trên C
boolean binary_search_1(int* a, int n, int x) {
/* Test xem x có m t trong m ng a[] kích th c n */ int i;
n = i;
}
return false;
}
Trang 47C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Câu l nh đ c tr ng
th c hi n th ng xuyên ít nh t là c ng nh b t k câu
l nh nào trong thu t toán.
ch n b i h ng s thì th i gian tính c a thu t toán s
Trang 48C u trúc d li u và thu t toán - N Ngh a B môn KHMT
Ví d : Thu t toán 1 ví d m đ u
int maxSum =0;
for (int i=0; i<n; i++) {
for (int j=i; j<n; j++) { int sum = 0;
for (int k=i; k<=j; k++)
sum += a[k];
if sum > maxSum maxSum = sum;
} }
Ch n câu l nh đ c tr ng là sum+=a[k]
=> ánh giá th i gian tính c a thu t toán là O(n3)
Ví d : S p x p
th l y câu l nh n m trong vòng l p trong cùng làm câu l nh đ c tr ng.
• Tuy v y, c ng c n h t s c th n tr ng khi s d ng cách l a ch n này.
• Ví d S p x p ki u nh t chim vào chu ng (Pigeonhole Sorting).
S p x p n s nguyên d ng có giá tr n m trong kho ng 1 s.
u vào: T[1 n]: m ng ch a dãy c n s p x p.
u ra: T[1 n]: m ng ch a dãy đ c s p x p không gi m.
Thu t toán bao g m 2 thao tác:
– m chim: Xây d ng m ng U[1 s], trong đó ph n t U[k] đ m s
l ng s có giá tr là k trong m ng T.
– Nh t chim: L n l t nh t U[1] con chim lo i 1 vào U[1] l ng đ u tiên,
U[2] con chim lo i 2 vào U[2] l ng ti p theo,