Bài giảng Phân tích thiết kế và đánh giá thuật toán (Phần 2)

Tóm tắt Bài giảng Phân tích thiết kế và đánh giá thuật toán (Phần 2): ...Đ y ô p ả l y a s . Mộ p ê ả ủa s ô s ụ p ầ ay ay a mả mả p ả ả s p ầ ủa mả p ầ ủa mả p ả . C ọ lựa p ầ ay C a lựa ọ p ầ ay: + S ụ p ầ l m p ầ ay + S ụ p ư ủa 3 l y p ầ ay + S ụ mộ p ầ ẫ ê l m p ầ ay. Sa ọ p ầ ay l m ả ảm ủa p C mộ ự y a s ụ p ư ọ p ầ ay l p ầ ủa mả . C p ư ... ù n: F0 = 0 F1 = 1 For i = 2 to n Fi = Fi - 1 + Fi – 2 T y ê ảm ượ a l m êm ộ ớ a ả a . a ụ 1 a mộ số x sa : ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 51 + ui ho ch động là một thuật t nh toán đệ ui hiệu uả ng cách lưu trữ các t uả c c ộ + rong ui ho ch...lê l mộ ả . T a ủa m ộ ượ x a số yê s ư ớ a ắ ầ ướ m . V mộ ộ m 10 ắ ầ m s 10 mộ l p ê am a ả a ộ . L mộ l p ê m ê ố ớ ộ T m ự x l ắ ộ ủa m . C ướ mộ a s ộ y p T m xem ê am a ộ l ắ ủa a a l lớ ượ . Input ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 58 D l ư ư...

pdf35 trang | Chia sẻ: havih72 | Lượt xem: 331 | Lượt tải: 0download
Nội dung tài liệu Bài giảng Phân tích thiết kế và đánh giá thuật toán (Phần 2), để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
or (k=l;k<=r;k++) 
if(((B[i] < B[j])&&(i<m))||(j==r+1)) 
A[k]=B[i++]; 
else 
A[k]=B[j--]; 
} 
Đ sắp x p mả a p ầ a ọ m ư sa : 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
42 
merge_sort(a, 0, n-1); 
Độ phức tạp của thuật toán s p ếp trộn 
Gọ T l ộ p p ủa sắp x p ộ . T l ô a mả 
 a a ê ộ s ủa l ô l O l . T m ướ ô ự 
 ộ p p l O : 
T(n) = O(n*log(n)). 
Bộ ớ ầ ù êm l O y l mộ số p ượ mộ 
 m ủa l ủa a y l p ù ợp 
 ụ sắp x p . 
C ư : 
void merge(int *a,int l,int m,int r) 
{ 
 int *b=new int[r-l+1]; 
 int i,j,k; 
 i = l; 
 j = m+1; 
 for (k=l;k<=r;k++) 
 if((a[i] r)) 
 b[k]=a[i++]; 
 else 
 b[k]=a[j++]; 
 for(k=l;k<=r;k++) 
 a[k] = b[k]; 
} 
void mergesort(int *a, int l, int r) 
{ 
 int mid; 
 if(l>=r) 
 return; 
 mid = (l+r)/2; 
 mergesort(a, l, mid); 
 mergesort(a, mid+1, r); 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
43 
 merge(a, l, mid, r); 
} 
C m m ọ ả l Me e s ộ p p l 
O(n*log(n)). Đ y l số sắp x p ựa ê s s 
 p ầ ợp ả sắp x p . S 
 ớ Me e s s ụ êm mộ ù ộ ớ ớ mả ầ 
sắp x p. 
3. S p ếp nhanh (Quick sort) 
 s l sắp x p ượ C. A. R. H a e ưa a ăm 19 . 
 s l mộ sắp x p a ớ ướ ự ư sa : 
+ Sele : ọ mộ p ầ ọ l p ầ ay p 
+ Pa p : ả p ầ ủa mả p ầ ay sa 
 ê p ầ ay ả p ầ lớ p ầ ay sa ê p ả p ầ ay. 
P ầ ay p ầ mả . 
+ Đ : ọ ớ ủ ụ sắp x p a ố ớ a a mả m ê p ầ 
quay 
Thuật toán 
void quicksort(int *A, int l, int r) 
{ 
 if(r>l) 
 { 
 int p =partition(A, l, r); 
 quicksort(A, l, p -1); 
 quicksort(A, p+1, r); 
} 
} 
H m p pa : 
+ L y mộ số : l . 
+ Đ x A ủa l p 
+ G ả s A A p p 
+ A A p p 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
44 
Đ y ô p ả l y a s . Mộ p ê ả ủa 
 s ô s ụ p ầ ay ay a mả 
mả p ả ả s p ầ ủa mả p ầ ủa mả 
p ả . 
C ọ lựa p ầ ay 
C a lựa ọ p ầ ay: 
+ S ụ p ầ l m p ầ ay 
+ S ụ p ư ủa 3 l y p ầ ay 
+ S ụ mộ p ầ ẫ ê l m p ầ ay. 
Sa ọ p ầ ay l m ả ảm 
 ủa p C mộ ự y a s ụ p ư 
 ọ p ầ ay l p ầ ủa mả . C p ư 
 s ô p ư y. 
H m p : 
int partition(int *A, int l, int r) 
{ 
 int p = A[l]; 
 int i = l+1; 
 int j = r; 
 while(1){ 
 le A p && 
 ++i; 
 le A p && l 
 --j; 
 if(i>=j) 
 { 
 swap(A[j], A[l]); 
 return j; 
 }else 
 swap(A[i], A[j]); 
 } 
} 
Đ ọ ớ m ê sắp x p mả a p ầ a ọ m ư sa : 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
45 
quicksort(a, 0, n-1); 
T ủ ụ ê a ọ p ầ ủa mả l m p ầ ay a 
 y a ầ a mả ự p ầ sa s ớ p ầ 
quay). 
C p ư p p lựa ọ p ầ ay : 
Ph ng pháp ng u nhiên 
C a ọ mộ p ầ ẫ ê l m p ầ ay 
Độ p p ủa ô p ụ ộ sự p p ố ủa p ầ 
input 
Ph ng pháp 3-trung nh 
P ầ ay l p ầ ượ ọ số 3 p ầ a l a l+ / a ầ ớ 
 ộ ủa 3 số . 
H y s y sa : 
S a ủa ủ ụ p lựa ọ p ầ ượ 
 ủa p ư p p ê 
C ố ô 
C ố ọ p ầ p 
Các vấn đề khác 
T ắ ủa xem x ắ ủa a ầ 
xem x y ố: l y ầ x xem ô a 
l mả ự sự ượ sắp ay ưa. 
T ố ư ủa . Đ s xảy a ư a sắp x p mả 
 mộ N a a mả C a l a 
 s ụ s ố ớ mả lớ mộ ưỡ sa 
 sắp x p mộ ă ả 
Độ phức tạp của thuật toán 
T p ượ ự O . C p l ọ ớ ủ 
 ụ p ộ s e ộ p p l O . D ộ p 
 p ủa s l ộ p p ủa a p ộ sa ủa l ọ xa . 
K ả m m ọ y s ộ p p l 
O *l ầ ư ợp s l sắp x p a 
 ư ợp ồ s m s ớ B le s . 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
46 
4. T m kiếm nh phân 
T m m p l mộ ả ư p 
 ụ ượ y l ô a m m ầ p ả ượ sắp x p ướ e a m 
 m. 
Mô ả : 
I p : mả a le .. ượ sắp e a ă ầ a m m . 
O p : ủa p ầ a . 
T y ộ l a mả ượ sắp x p ê m 
 ướ ay y a p ầ ư m m ầ ự m m 
p x p ầ a mả m m a le + / l p ầ a 
 ớ a m m ả m m. N ô s a 
 ả ă xảy a mộ l p ầ lớ a m m mả ướ sắp ê 
 mả p ầ ư a ủa p ầ s p ầ ướ 
a[(left+ / a l a s le + / - 1. C 
a le + / e lý l ư ự a s le le + / + 1. T 
 ư ợp ô a m m s ảm mộ a số p ầ sa m 
 ướ m m. 
S ồ : 
Begin 
mid = (left+right)/2; 
k==a[mid] return mid; 
End 
sai 
k > a[mid] 
return -1; 
left = mid + 1; 
 sai 
 ≤ 
sai 
right = mid - 1; 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
47 
Cài đ t ng C của thuật toán t m kiếm nh phân 
int binary_search(int a[], int left, int right, int key) 
{ 
 // ô 
 int mid; 
 while(left<=right) 
 { 
 mid = (left + right)/2; 
 if(a[mid] == key) 
 return mid; 
 if(a[mid] < key) 
 left = mid + 1; 
 else 
 right = mid – 1; 
 } 
 return -1; 
} 
Cài đ t đệ qui 
int recursive_bsearch(int a[], int left, int right, int key) 
{ 
 // 
 int mid; 
 mid = (left + right)/2; 
 if(left>right) 
 return -1; 
 if(a[mid] == key) 
 return mid; 
 else 
 if(a[mid] < key) 
 return recursive_bsearch(a, mid+1, right, key); 
 else 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
48 
 return recursive_bsearch(a, left, mid-1, key); 
} 
Đ ọ m ớ mả a p ầ a ọ ư sa : 
int kq = binary_search(a, 0, n – 1, k); 
 : 
int kq = recursive_bsearch(a, 0, n – 1, k); 
T ộ p p l m l a O l N . Vớ .000.000.000 số a 
 ầ ự m a ả l l 31 a a l a ầ 31 
 ướ ự m a ê mộ ư số ả số ê ớ m 
 m p ự sự l mộ ả. T ê ự sắp ủa l 
mộ p ụ ủa m m p . 
C p m m ô a m m số p ầ lớ l x y ự 
 y a s xem x y ư s ụ ả 
 ăm as a le ô ọ ộ mô ọ y y ê ộ ủa mô 
 ọ y a x a p ư p p ả ê . 
5. ài tập 
 ài tập 1: V ư p 1 mả số yê mộ số yê y m 
xem a ê số . N p p số x y m xem a ê số lớ x 
 y. 
 ài tập 2: C m m y e . 
 ài tập 3: V ư p mộ mả số yê p m p 1 số 
 yê S y m xem a ê p số ủa mả a ầ S 
S. 
 ài tập V ư s mộ y số yê . H y m ưa a 
 ủa số ư ầ ê y số yê ố ố ù y. 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
49 
CHƯƠNG V QUI H ẠCH Đ NG 
1. Chiến c qui hoạch động 
 ộ DP – Dy am P amm mộ ượ ọ 
Re a Bellma ưa a ăm 19 l mộ p ư p p ả ợp 
 l ả ủa ố ư p ư p p a e e-a -
 e . C a p ầ ả y 
 ộ l p ớ a sa ả y p ư p p e s e ợp 
l ả l ượ l ả a ầ . N ượ l ộ l p ư 
p p ượ p ụ m ủa a ầ ố l ô ộ 
l p ớ a . T ư ợp ư y mộ 
 a s ự ự sự ầ s l p l 
 ả y . Mộ ộ s ả y ả 
 mộ lầ y sa lư ả mộ ả y p 
 ô p ả l ả m p mộ . 
 ộ ư ượ p ụ ớ ố ư . T ố ư 
 ư m l ả . M l ả mộ ượ lượ s 
 ụ mộ m ùy ộ ụ yê ầ ủa l m a 
mộ m ủa m l ố ư lớ . 
 ộ l mộ p ư p p ả ả y ố ư 
 ẳ ư ê ố ượ sắp ự a p ả m ư ắ 
 ố ư K ộ ụ ả 
 ố ư ô p ả l ă ư l p ê a ầ p ả m 
 a mớ ượ . B y s y ướ ả p ụ 
p ư p p ộ ả mộ số ố ư ay ượ a ỳ 
Olymp ọ s T ọ p ư p ố a ô a ụ ụ . 
2. ài toán 1 Dãy Fi onaci 
B m số a l mộ e ộ ố ớ 
 ư ọ l p p ư sa : 
D y số a ượ ô a ầ ư sa : 
1 2
0
1
, 2
0
1
n n nF F F n
F
F
    


 
X y ự n ớ l mộ số yê p p m. 
Cách 1 Sử dụng ph ng pháp đệ qui 
Vớ a y a ê a y ả ả 
 y l s ụ mộ m n ẳ ư sa : 
int fibonaci(int k) 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
50 
{ 
 if(k>=2) 
 return (fibonaci(k-1)+fibonaci(k-2)); 
 return 1; 
} 
T ê l ớ mộ ô l p ỳ 
 ợ s ụ m . T y y y l mộ ô ả ả s 
 a ầ 6: 
Ta 
1 / (1 5) / 2 1.61803n nF F    suy ra 1.61803
n nF  y p n 
 a l 0 1 ê a s x p x 1.61803
n
 lầ ọ ớ m a ê 
 ự l 13 lầ ay ộ p p ủa l m m . 
Cách 2 Sử dụng ph ng pháp qui hoạch động 
C a s ụ mộ ộ p p y n 
 s ụ mộ mả lư ù n: 
F0 = 0 
F1 = 1 
For i = 2 to n 
 Fi = Fi - 1 + Fi – 2 
T y ê ảm ượ a l m êm ộ ớ a ả 
 a . 
 a ụ 1 a mộ số x sa : 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
51 
+ ui ho ch động là một thuật t nh toán đệ ui hiệu uả ng cách lưu trữ các t 
 uả c c ộ 
+ rong ui ho ch động t uả c các ài toán con thư ng đư c lưu vào một mảng 
3. Bài toán 2 ài toán nhân dãy các ma trận 
G ả s a ầ mộ y ma : ....A B C D    . H y x y ự 
 sa số p p ầ s ụ l . 
C a mộ ma ướ X Y ớ mộ ma ướ 
Y Z s ụ ma ư s ầ X Y Z  p p . 
2 3 13 18 23
2 3 4
3 4 18 25 32
3 4 5
4 5 23 32 41
   
         
       
Đ ảm số p p ầ ù a s a ma a 
 ướ lớ p p ma ợp ê ượ y s 
 ụ m a ự ự p p a ma . Bê 
p p ma ô p ả l ố x ê ô ự ủa m ô 
l m ay ả. 
G ả s a 4 ma A B C D ớ ướ ư l 30 1 , 1 40 , 
40 10 , 10 25 . Số ả p p s ụ l 3: 
((AB)C)D = 30 1 40 30 40 10 30 10 25 20,700         
(AB)(CD) = 30 1 10 40 10 25 30 40 25 41,200         
A((BC)D) = 1 40 10 1 10 25 30 1 25 1400         
C ả ê y ự ự ma a mộ sự sa lớ 
 ả số p p ầ ù a ả ố ù sa a lớ . 
V y l m m a ả ố ư 
Gọ M l số lượ p p ầ 
j
kk i
A
 a x sa : 
+ C ù p y ma mộ . 
+ Cả a a ủa y ma m p s ự 
 l ố ư . 
T a a ô sa y ồ sa : 
+ M(i,j) = 
1 1( , ) ( 1, )i k j i k jMin M i k M k j d d d        
+ M(i,i) = 0 
T ma Ai ướ l i-1, di). 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
52 
C ố ư ư ợp ủa a a s ụ mộ 
 ộ p p ủa s l m m s l ọ m ố 
 a ượ ự . 
N ma s y a s +1 số yê l ướ ủa s ợp 
 p ủa p ầ x m x ư ớ m ự ủa a 
1 ê ầ ù O(n2 ô a ớ lư ả ả . 
L m a e p ê ê a lư ả 
 a ủa ê mộ ma am ồ a m ượ ả ố 
ư a lư mộ ma am ù ướ . 
T M 1 : 
int matrixOrder 
{ 
 for(i=1;i<=n;i++) 
 M[i][j] = 0; 
 for(b=1;b<n;b++) 
 for(i=1;i<=n-b;i++) 
 { 
 j = i+b; 
 M[i][j] = 1 1( , ) ( 1, )i k j i k jMin M i k M k j d d d        
 faster[i][j] = k; 
 } 
 return M[1][n]; 
} 
T m: 
void showOrder(i,j) 
{ 
 if(i==j) 
 printf(A[i]); 
 else 
 { 
 k = faster[i][j]; 
 print (“(“); 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
53 
 showOrder(i,k); 
 print (“*”); 
 showOrder(k+1,j); 
 print (“)”); 
 } 
} 
4. Ph ng pháp qui hoạch động 
 a a ụ ê a y p ủa mộ 
 ộ ượ a l m 4 ướ ư sa : 
1. ác đ nh đ c đi m cấu trúc c giải pháp tối ưu c ài toán 
2. ìm c ng th c tru h i đệ ui ác đ nh giá tr c một giải pháp tối ưu 
3. nh giá tr tối ưu c ài toán d vào các giá tr tối ưu c các ài toán con c 
n ottom-up). 
4. d ng nghiệm đ t giá tr tối ưu t các th ng tin đ t nh. 
C ướ 1-3 l ướ ả ả ố ư p ư 
p p ộ . Bướ 4 a ư yê ầ m a ố ư 
 ô ầ a m ụ . T ô ư ướ ầ l a ọ l 
 ă ả x m ư ô y ồ ầ ựa 
 m sự a s ư ợp ụ ủa . D y x y ự 
 ộ ố ư a ầ ả s ộ ự 
 ủa ố ư m ủa ớ ộ . 
Đ p ụ ướ ủa p ư p p ộ ả 
 ố ư a x ụ 3 sa : 
5. ài toán dãy con chung dài nhất 
C y ý ự X m y x y ự m y lớ ủa 
 a y ê ớ y ủa mộ y ượ a l mộ p ý ự ủa y 
 yê ự . 
V ụ ớ : X = A L G O R I T H M 
 Y = L O G A R I T H M 
T y l LORITHM 
 ớc 1: X m ủa y ả p p ố ư ủa 
+ G ả s a l ả l 1.. 
+ N a ý ự ố ù ủa X ù a l ý ự ố ù ủa . 
+ P ầ l ủa s l x ủa X 1.. -1 1..m-1]. 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
54 
+ N a ý ự ố ủa X ô ù a mộ số s ô m 
 ả a . 
+ G ả s ý ự ô m ư ợp l ý ự ủa X 
+ T s l y ủa X 1.. -1 1..m . 
+ N ượ l ý ự ô m l ý ự ủa s l y ủa 
X 1.. 1..m-1]. 
 ớc 2: X y ự ô y ồ ộ lớ ủa y ủa y 
T ướ 1 a x y ự ô y ồ ư sa : 
+ Gọ C l ộ y lớ ủa a y X 1.. 1.. 
+ C 0 C 0 ớ mọ . 
+ L ả ủa l C m . 
+ Cô y ồ 
[ 1][ 1] 1(1)
[ ][ ]
max( [ 1][ ], [ ][ 1])(2)
C i j
C i j
C i j C i j
  
 
 
+ T ư ợp 1 l X ư ợp l X 
 ớc 3: X y ự m y ủa y X 1.. 1..m . 
T ự a ư sa : a ầ a C 1 1 C 1 ... C 1 
C 1 C ... C ... Độ p p C O 1 ớ 1 1 m ê 
 ộ p p ủa l O(mn). 
int longest_common_sequence(X, Y) 
{ 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
55 
 or(i=0;i≤m;i++) 
 C[i][0] = 0; 
 or(j=0;j≤n;j++) 
 C[0][j] = 0; 
 or(i=1;i≤m;i++) 
 or(j=1;j≤n;j++) 
 if(X[i]==Y[j]) 
 C[i][j] = C[i-1][j-1] + 1; 
 else 
 C[i][j] = max(C[i-1][j],C[i][j-1]); 
 return C[m][n]; 
} 
 ớc : T m y ủa X 1.. 1..m X y ự m ố 
ư ô 
Đ m l ượ m a s ụ mộ ả D ượ ớ -1 -
1 -1, j-1 lầ ượ D m ư sa : D ớ -1, j-1) thì X[i] = 
 l ý ự y s m y ủa x . V D ớ -1,j-1), (i-1,j) 
 -1 p ụ ộ ủa mả C ượ s ụ C . C 
 ủa mả D s ượ ư sa : 
D 1 ê C 1 + C -1][j-1 ê C C -
1 3 C C -1]. 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
56 
T m m: N D ớ -1, j-1) (1 – trên trái) thì X[i] = Y[j] và ký 
 ự y s m y l m. 
char * findSolution() 
{ 
row = m, col = n, cs=””; 
while((row>0)&&(col>0)) 
{ 
 if(D[row][col] == 1) 
 { 
 lcs = lcs + X[row]; 
 row = row – 1; 
 col = col - 1; 
 }else{ 
if (D[row][col]==2) 
 row = row – 1; 
 else if (D[row][col] = 3) 
 col = col – 1; 
 } 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
57 
} 
reverse cs; // đảo ng c âu lcs 
return lcs; 
} 
 ộ l mộ p ư p p ả ả ố ư a 
 ộ l ự a T ọ K Đ ... y ê ô 
 ủa y ả y ụ ộ ả mộ số 
 ố ư m ủa ư ượ a ỳ ọ s ay Olymp T 
 ọ ô a 3 ụ ụ . Hy ọ p ượ ộ ả ướ 
 ắm ắ s ụ p ư p p ộ ả ố ư . 
6. ài tập 
 ài 1 ContestSchedu e 
V ăm 300 ầ ượ ự l ê ố a l e. T ả 
 ộ l p y ượ lê l mộ ả . T a ủa m ộ 
 ượ x a số yê s ư ớ a ắ ầ ướ 
 m . V mộ ộ m 10 ắ ầ m s 10 
mộ l p ê am a ả a ộ . 
L mộ l p ê m ê ố ớ ộ T m 
 ự x l ắ ộ ủa m . C ướ mộ a s ộ y p 
T m xem ê am a ộ l ắ ủa a a l lớ 
 ượ . 
Input 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
58 
D l ư ượ mộ le ex e sa : ê m l 
 l mộ ộ ồm 3 số yê ư l s p 1  s, t  1000000, 1  p  
100 l a ắ ầ l ắ ủa ộ . 
Output 
K ả x lý ủa ư 1 le ex ớ ộ x số sa 
p ẩy. 
Ví dụ 
Input Output 
1 10 100 
10 20 100 
20 30 100 
30 40 100 
4.0 
10 20 20 
30 40 60 
15 35 90 
0.9 
1 100 85 
99 102 100 
101 200 60 
1.45 
 ài 2 oinedString 
C mộ y l p A y m x ộ 
 a ả y . N x ư y y ưa a x ầ ê e 
 ự Alp a e . 
Input 
D l ủa ư ượ mộ le ex m ượ ê mộ 
 số 13 ộ ủa 1 a ý ự A a. 
Output 
K ả x lý ủa ư mộ le ex . 
Ví dụ 
Input Output 
BAB 
ABA 
ABAB 
ABABA 
AKAKA 
AKABAS 
ABAKA 
ABABAKAKABAS 
 ài 3 JumpyNum 
Mộ số mpy l mộ số yê ư số l ủa a 
 . V ụ: 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
59 
C số ư 28459 28549 1091919 97753 
C số mpy 290464 13131313 9753 5 
H y ư x xem a a số yê l a ê số 
Jumpy. 
Input 
D l ủa ư ượ le ex ớ số l 000000 
 ượ ê a . 
Output 
K ả x lý ủa ư mộ le ex . 
Ví dụ 
Input Output 
1 
10 
9 
9 
23 
9 
8000 
20934 
3766 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
60 
CHƯƠNG VI CHIẾN LƯ C TH L (GREED ) 
1. Nguyên t c tham am 
C am ă ee y al ms ố ư 
 ộ ư ượ s ụ ả ố ư m m ủa ố e 
mộ ê . C ộ l ô mộ m ố ư . 
C am ă ự lựa ọ ố ư ụ ộ ớ y ọ lựa ọ 
 s ẫ mộ m ố ư ụ ầ ả y . C am ă 
 ư a ộ p p a ư l m y ù lắm l 
 ỡ l s ụ ộ ớ. N ư ô may l ô p ả l 
 l ả ố ư . 
Qui hoạch động không hiệu quả 
C m a mớ ọ ộ ẳ ư 
 ma O(N2 m x O m ố ớ y 
p ố ư O(N3 l x ê mộ a ẫ l 
 ô ả. Ta sa y C ả l l ố ớ y a 
lựa ọ m a mộ ả p p ố ư ầ p ả ự m a 
 e exs a e ố ớ ả lựa ọ y. C a m m ố mộ 
 y xem lựa ọ l ố số lượ lựa ọ 
m a ầ p ả . 
C am ă ee y al ms ượ ù ả y m 
 a y l lựa ọ ố . 
Thực hiện ựa chọn theo ki u tham am (Greedy Choice) 
M ầ y xem s ọ lựa ọ a s ọ lựa ọ ố 
 m M ầ ọ a s ọ mộ am lam 
max m e lợ ủa a . T ê lựa ọ ư y ô p ả a 
 ẫ mộ ả . C ẳ y số 3 4 1 8 9 ầ ọ a y 
 ủa sa y l mộ y ă . D y ả l 3 4 
8, 9>. Tuy ê e ọ am ă sa ọ x 3 p ầ ầ l 3 4 s ọ 
 p p ầ 1 p ầ ợp mộ y ă ố ớ p ầ ượ ọ 
 ướ ả s l 3 4 1 ê ả y ô p ả l ả . 
2. ài toán đổi tiền 
B p ư sa : mộ lượ ồ ồ m 
lầ lượ l m1 m .. m . Vớ ả số lượ ồ l ô y 
 ồ ồ ớ số lượ ồ s ụ l . Mộ 
 ả e yê lý am ă a y ảm ả số ồ s ụ l 
 a s ố ắ s ụ ồ m lớ . V ụ ớ 
 89 ồ ồ m 1 10 100 a mộ l 
 ồ 100 3 ồ 1 ồ 10 4 ồ 1. 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
61 
T y ê ê ự l mộ x p a lô apsa 
 ộ lớp NP ầy ủ ê ự ả y : ù ộ ớ 
 y ộ. 
3. ài toán ập ch 
Mộ p ọ s ụ mộ lớp ọ mộ m. C lớp ọ 
m ố s ụ p ọ m lớp ọ mộ l ọ ượ mộ ả a Ij 
= [sj a l lớp ọ s ọ ắ ầ m sj ớ m j. Mụ ủa 
 l m mộ l ọ sa số lượ lớp ọ s ụ p ọ l lớ 
 ượ ê ô a lớp ù s ụ p ọ mộ m ô 
 a lớp ù l ọ . 
G ả s l ọ ủa lớp ượ sắp e ự ă ủa a ư sa : 
1 2 ... nf f f   
C ủa mộ l ọ ố ư 
Gọ Si,j l p lớp ọ ắ ầ sa m i ướ m sj 
 a l lớp y ượ sắp x p a lớp Ci Cj. 
C a êm lớp ả C0 Cn+1 ớ 0 - Sn+1 + . K 
 S0,n+1 s l p a ả lớp. 
G ả s lớp Ck l mộ p ầ ủa l ọ ố ư ủa lớp m Si,j. 
T l ọ ố ư a ồm mộ p lớ ủa S i,k, {Ck mộ 
 p lớ ủa Sk,j. 
D ọ l ướ ủa mộ l ọ ố ư p S i,j a ô 
 sa : 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
62 
0 if j = i+1
( , )
max( ( , ) ( , ) 1) if j > i+1
i k j
Q i j
Q i k Q k j
 

   

Thực hiện một ựa chọn tham am 
 ổ đề 1: Tồ mộ l ọ a ố ư p Si,j a lớp Ck trong Si,j 
 ầ ê a l lớp Ck trong Si,j ớ số . 
 ổ đề 2: N ọ lớp Ck ư 1 p Si,k s l p . 
T am lam 
Recursive-Schedule(S) 
1 if |S| = 0 
2 then return 
3 Gọ Ck l lớp a S 
4 L Ck ả lớp ắ ầ ướ a ủa Ck S; 
Gọ S' l p ả 
5 O = Recursive-Schedule(S') 
6 return O  {Ck} 
Dựa ê l s ụ a S s ộ p p a l 
O(n2 O l . T êm s m mộ p ả ă x p 
 l . 
T am ă a y e l p 
Iterative-Schedule(S) 
1 n = |S| 
2 m = – 
3 O = {} 
3 for i = 1..n 
4 do if si m 
5 then O = O  {Ci} 
6 m = fi 
7 return O 
M ọa ự ủa 
: 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
63 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
64 
T ê ê a ự y l ắ ựa ê 
 sa : “Gọ O l p lớp Ck l lớp ố ù ượ êm O. T ố 
 ớ lớp Cl ỳ m l Cl x ộ ớ mộ lớp O s x ộ ớ Ck. 
C ủa : T ay m số lượ lớ lớp s ụ p 
 ọ a ay yê ầ ủa l m a lớ m p ọ ượ 
s ụ . C p ộ a ay mụ ê ủa l ô 
 ư lựa ọ am ă ủa e ư ê s ô l m ượ ố ớ 
 y. 
4. So sánh chiến c tham am và qui hoạch động 
V y am ă s m ố ư 
B ượ ả y am ă ư l ố ư 
 ư a m sa : 
+ T lựa ọ am ă ee y e p pe y : Mộ m ố ư ượ 
 ự lựa ọ ẻ ư l ố m m m ô ầ a 
 m ớ ợ ý ủa ố ớ m ủa . Hay mộ l 
mộ m ố ư ủa ượ ự lựa ọ ố ư ụ 
 ộ. 
+ Mộ m ố ư ượ a ă a me m 
 p ầ ượ x y ự ớ mộ m ố ư ủa l . C a l mộ 
 m ố ư s a m ố ư ố ớ ướ . T 
 y ượ ọ l ố ư p mal substructure). 
Sự a ả a ộ am ă l 
 ố ớ am ă a ô ầ m ủa 
 ự mộ lựa ọ . V mộ m ố ư 
 a ê am ă ả ộ . 
Ch ý: T mộ số x y ự ượ m ọ ợp 
 m ố ư . T am ă m ầ ớ m 
 ố ư . 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
65 
TÀI LIỆU TH HẢ 
1. pe a “T a ư ự y V 
2. pe a “T a ư ự y A 
3. C l ả e s e: 
4. Thomas H.Cormen, Charles E.Leiserson, Ronald L.Rivest and Clifford Stein, 
“I Al ms Se T e MIT P ess 001 1180 pa es. 
5. Jeff Cogswell, Christopher Diggins, Ryan Stephens, Jonathan Turkanis, “C++ 
C O’Re lly N em e 00 9 pa es. 
6. N y H Đ G mộ số NXB G ụ 003 
7. Đ M Tư . C l . NXB Đ ọ ố a H ộ . 
2002. 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
66 
ĐỀ THI TH HẢ 
Đề số 1 
Câu 1: 
a) T l m m H y y ướ ộ p p 
 s ồ ủa m m y 
b) V m sắp x p ọ ă ầ ê mả công 
nhân ồm ư ô sa : 
 Tên 
 T 
 Lư 
T ư a sắp x p l ư lư ù lư e ê . 
Câu 2: 
a) T y s x số số 1 3 ớ ộ p 
 p m. 
b) T ự ướ ủa sắp x p ộ ớ mả số yê sa : 3 8 
10, 9, 82, 4, 78, 28, 9, 10, 13, 11. 
Câu 3: 
a) T y y ma p ụ m số p p 
 ự y ma ướ : x 0 0x10 10x 0 0x1 
b) T y m y ồm p ầ l ê p lớ ủa 
 y số yê sa : -9, 8, -3, 18, 4, -2, 8, -13, 20, -4, 8, 9, 3. 
Đề số 2 
Câu 1: 
a) T l m m H y y ướ ộ p p 
 s ồ ủa m m p ? 
b) V m sắp x p ọ ă ầ ê mả công 
nhân ồm ư ô sa : 
 Tên 
 H số lư 
 P ụ p 
T ư a sắp x p l lư số lư * 0 + p ụ p. 
Câu 2: 
a) T y s x số số 1 3 ớ ộ 
 p p m. 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
67 
b) T ự ướ ủa sắp x p a ớ mả số yê sa : 3 
8, 10, 9, 82, 4, 78, 28, 9, 10, 13, 11. 
Câu 3: 
a) T y y ma p ụ m số p p 
 ự y ma ướ : 1 x x 0 0x10 10x . 
b) T y m y ồm p ầ l ê p lớ 
 ủa y số yê sa : -8, 9, 7, -2, -19, 2, -9, 2, 3, 28, -9. 
Đề số 3 
Câu 1: 
a) T l m m H y y ướ ộ p p 
 s ồ ủa m m y 
b) V m sắp x p chèn ă ầ ê mả công 
nhân ồm ư ô sa : 
 Tên 
 T 
 Lư 
T ư a sắp x p l ư lư ù lư e . 
Câu 2: 
a) T y s ủa số yê ầ ê ớ 
 p p m. 
b) T ự ướ ủa sắp x p ộ ớ mả số yê sa : 3 8 
10, 9, 82, 4, 78, 28, 9, 10, 13, 11. 
Câu 3: 
a) T y y ma p ụ m số p p 
 ự y ma ướ : x 0 0x10 10x 0 0x1 
Đề số 
Câu 1: 
a) T l m m H y y ướ ộ p p 
 s ồ ủa m m p ? 
b) V m sắp x p ự p ă ầ ê mả 
 công nhân ồm ư ô sa : 
 Tên 
 T 
 Lư 
T ư a sắp x p l ư lư ù lư e . 
 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 
68 
Câu 2: 
a) T y s x số số 3 ớ ộ p 
 p m. 
b) T ự ướ ủa sắp x p a ớ mả số yê sa : 
3, 8, 10, 9, 82, 4, 78, 28, 9, 10, 13, 11. 
Câu 3: 
a) T y y ma p ụ m số p p 
 ự y ma ướ : x 0 0x10 10x 0 0x1 . 
b) p ụ m x ủa a x X1 
“ABCABCCB X BCAABCCA . 
Đề số : 
Câu 1: 
a) T l m m H y y ướ ộ p p 
 s ồ ủa m m y 
b) V m sắp x p ọ ă ầ ê mả Họ 
sinh ồm ư ô sa : 
 Tên 
 T 
 Đ m 
T ư a sắp x p l ư m ù m 
 e . 
Câu 2: 
a) T y s x số số 3, 7, 2 ớ ộ p 
 p m. 
b) T ự ướ ủa sắp x p ộ ớ mả số yê sa : 3 8 
10, 9, 82, 4, 78, 28, 9, 10, 13, 11. 
Câu 3: 
a) T y y ma p ụ m số p p 
 ự y ma ướ : 15x5, 5x20, 20x10, 10x15 
b) T y m x ủa a x . 

File đính kèm:

  • pdfbai_giang_phan_tich_thiet_ke_va_danh_gia_thuat_toan_phan_2.pdf