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

pdf 35 trang hapham 1950
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Phân tích thiết kế và đánh giá giải thuật", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_phan_tich_thiet_ke_va_danh_gia_giai_thuat.pdf

Nội dung text: Bài giảng Phân tích thiết kế và đánh giá giải thuật

  1. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật CHƯƠNG III ĐỆ QUI VÀ CHIẾN LƯ C V T CẠN 1. hái niệm đệ qui Đ l mộ ượ s ụ ô l p a p ư C/C++ y ay ầ ô l p ợ y. V ả l a mộ ố ượ ựa ê ay ụ l ê ụ ả ủa . Ta a mộ a p e ư y + Mộ m ả p xel l mộ a + N p1 p l a a p p1 ớ p s a mộ a mớ . T ọ ư a ay s ụ p ư p p m p l mộ yê lý . T l p a a mộ m l mộ m m m l ọ ớ số lượ ô . V ụ a a m a a a al ủa mộ số yê ư sa : Gt(0) = 1. Gt(n) = n* Gt(n-1 ớ mọ 0. G ả l ả ựa ê a ượ ụ m . 2. Chiến c v t cạn ( rute orce) Đ y l lượ ả ư l ô ả . C lượ ả ả ả ă xem ả ă l m ủa ầ ả y . V ụ y a mả m p ầ lớ l p ụ lượ . H m a a ả số yê ố 4 số a sa a số số ượ ự ư sa : for(a=1;a<=9;a++) for(b=0;b<=9;b++) for(c=0;c<=9;c++) for(d=0;d<=9;d++) if(ktnguyento(a*1000+b*100+c*10+d) && (10*a+b==10*c+d)) p “% % % % a H m ye m a xem mộ số yê p ả l số yê ố ay ô . C p ụ lượ ộ l : m ả m . V m lý y lượ y p ụ mọ l ư mộ ô p ả l a a ă m ự : ầ p ả ả ả ă 34
  2. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật ê số ư ợp ầ p ả ủa ư lê ớ số lớ ư l s ớ yê ầ ủa a. 3. Chiến c quay ui ( ack tracking / try and error) Đ y l mộ lượ a ọ ủa . Tư ự ư lượ s lượ ay l mộ m : lư ê ư m m ủa . N ớ mộ ướ ô p s ự a ay l a a ướ lựa ọ ả ă . B m l y ư p ụ l m mộ m ủa m ả m sa ọ l y mộ m a m mộ ụ ẳ ư ố ư e mộ ê l m ả m ủa . V ư lượ lượ ay l p ụ ướ p . Vecto nghiệm Mộ m lượ ay l ư p ụ l m m ủa l ợp. Tư ư ủa ả l x y ự ầ p ầ ủa lầ lượ ả ả ă . N ồ mộ ả ă p ượ ướ p l ầ lù l mộ ướ l ả ă ưa ượ . T ô ư ả y ư ượ ắ l ớ p mô ả ư sa : T ướ a ầ a mộ . T ô ư a t y mộ ầ x y ự ư l mộ ộ ự e ồm N p ầ : X = (x1, x2 xN) ả m mộ số . G ả a x y ự x -1 p ầ x1, x2 xi-1 y l ướ x y ự p ầ xi. Ta l lượ ả ă xi. Xảy a ư ợp: Tồ mộ ả ă p ượ . K xi s ượ x e ả ă y. N xi l p ầ ố y l mộ m l ướ p e p. T ả ả ă xi ô p ượ . K ầ lù l ướ ướ x l xi-1. Đ ảm ả ex a s e ả ả ă ô ượ s . M ảm ả ô ù l p ay l x l xi-1 ầ ô ượ l ầ mộ ượ ướ ướ . T p ầ lớ p ô p ụ ộ m p ụ ộ x -1 p ầ ướ ầ mộ số ủa sa x y ự x mộ p ầ ẻ ẩ 35
  3. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật ướ x y ự p. T ư ợp y ầ p ả yê l ay lui p ả ă ướ ướ . Thủ tục đệ qui T ủ ụ ay l ượ ả e ủa ủ ụ y ướ y e p p ô C . void try(i: integer) { // x p ầ x ui int j; for j p ả ă p { x x e ả ă mớ If(i=n) mộ m else try(i+1); ả l } } T ư ầ ọ ớ y 1 ộ ộ . T ê ướ y ầ a ầ . T ô ư y ượ ự a mộ ủ ụ m a ọ l . Ha m m ố y ộ p p ủa y ư ợp ụ l x m ướ x x p ượ y. Các giá tr đề cử C ô ư lớ s ớ số ư ợp p ượ . Sự ê l y lớ a p ả ẹp ượ ố ư ô ượ s . V y p ụ ộ p ộ ủa p ầ ủa a x y ự . Lý ư l ượ m ê p . T ư ợp y m p ượ a ô ầ . 36
  4. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật Ví dụ 1 S y p ộ N N 0 V ụ ướ y y ư s y p ộ N m y p ượ ư mộ m p ầ : x 0 x 1 x -1] m x l y mộ 0 ớ 1 a l m p ầ x ủa e m ầ s ả x p ê y ượ p . T ủ ụ ủa ư ả ư sa : void try(int k) { int j; if(k==n) in_nghiem(); else for(j=0;j<=1;j++) { x[k] = j; try(k+1); } } T em l m m m ượ a m . Dướ y l ộ ư . T ư a êm m ợp ượ . 37
  5. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật CHƯƠNG IV CHIẾN LƯ C CHI Đ TR 1. C sở của chiến c chia đ tr (Divide and Conquer) C lượ a l mộ lượ a ọ ả . ư ủa lượ y e ả y l : ầ ả y mộ a s a ả sa ợp m ủa l m ủa a ầ . T y ê ă y m a y ố: l m a mộ ợp lý l ượ ả y th a s p p y ố a l ợp l ả ủa s ượ ự ư . C sắp x p ộ me e s sắp x p a s ộ l a y ượ y ư 3 . Ví dụ: T ụ y a s xem x aN . Đ a ý ô sa : 1 if N = 0 aN (a N/2 ) 2 if N % 2=0 a*(aN/2 ) 2 if N % 2 = 1 T ô ê a s y a ủa ư sa : int power(int a, int n) { if(n==0) return 1; else{ int t = power(a, n/2); if(n%2==0) return t*t; else return a*t*t; } } 2. S p ếp trộn (Merge sort) C p ư p p sắp x p a 38
  6. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật Các thu t toán sắp x p tốt nh u là các thu . C u tuân theo chi n lượ sa y: Cho một danh sách các bản ghi L. + N u L có không nhi 1 p ần t a l ược sắp + N ược l i - Chia L thành hai dãy nh l L1 L - Sắp x p L1 L qui – gọi tới thủ tục này) - K t hợp L1 L nh ượ L sắp Các thu t toán sắp x p trộn và sắp x p a u s dụng k thu t này. V m ý ư me e s ồm ướ ự ư sa : + C a mả ầ sắp x p a + Sắp x p a a mộ ọ ớ ủ ụ ự mergesort + T ộ a a ượ sắp ượ mả ượ sắp. Đ m C ự Me e s : void mergesort(int *A, int left, int right) { if(left >= right) return; int mid = (left + right)/2; mergesort(A, left, mid); mergesort(A, mid+1, right); merge(a, left, mid, right); } Đ sắp mộ mả a p ầ a ọ m ư sa : me e s a 0 -1); N ư ộ l m ư V ụ ớ mả sa : Thuật toán 1 39
  7. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật T ộ mả ượ sắp mộ mả ượ sắp. T 1 l m ư sa : + Đố ớ m mả a mộ ớ p ầ ầ ê + Đ p ầ ủa p ầ a x a mả mả mớ + D y ủa mả ớ ợp + L p l ướ ự ê ớ mả mớ a p ầ ủa a mả Đ m C++ ự ộ a mả A B mả C: int p1 = 0, p2 = 0, index = 0; int n = sizeA + sizeB; while(index<n) { if(A[p1] < B[p2]){ C[index] = A[p1]; p1++; index++; }else{ C[index] = A[p2]; p2++; index++; } } Thuật toán 2 T 1 ả s a 3 mả p ư ê ự a mả ay x l p ầ ủa mộ mả lớ sa ộ l mả sắp l mả a ầ . C a s s ụ êm mộ mả p ụ: void merge(int *A, int l, int m, int r) { int *B1 = new int[m-l+1]; int *B2 = new int[r-m]; for(int i=0;i<m-l+1;i++) 40
  8. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật B1[i] = a[i+l]; for(int i=0;i =l; i ) B[i-l] = A[i]; for (j=m+1; j<=r; j++) B[j-l] = A[j]; for (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 : 41
  9. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 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)) b[k]=a[i++]; else b[k]=a[j++]; for(k=l;k =r) return; mid = (l+r)/2; mergesort(a, l, mid); mergesort(a, mid+1, r); 42
  10. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 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 43
  11. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật Đ 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 : 44
  12. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 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 . 45
  13. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 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 sai ≤ return -1; mid = (left+right)/2; k==a[mid] return mid; sai left = mid + 1; k > a[mid] sai right = mid - 1; End 46
  14. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 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) return -1; if(a[mid] == key) return mid; else if(a[mid] < key) return recursive_bsearch(a, mid+1, right, key); else 47
  15. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 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. 48
  16. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 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 : Fn F n 12 F n ,2  n F0 0 F1 1 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) 49
  17. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật { 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: nn Ta FFnn 1 / (1 5) / 2 1.61803suy ra F 1.61803 y p n n a l 0 1 ê a s x p x 1.61803 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 : 50
  18. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật + 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 : ABCD H y x y ự sa số p p ầ s ụ l . C a mộ ma ướ XY ớ mộ ma ướ YZ s ụ ma ư s ầ XYZ p p . 2 3 13 18 23 234 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 ả ố ư j Gọ M l số lượ p p ầ A a x sa : ki k + C ù p y ma mộ . + Cả a a ủa y ma m p s ự l ố ư . T a a ô sa y ồ sa : + M(i,j) = Mini k j 11 Mik( , ) Mk ( 1, j ) ddd i k j + M(i,i) = 0 T ma Ai ướ l i-1, di). 51
  19. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 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] = Mini k j 11 Mik( , ) Mk ( 1, j ) ddd i k j 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 (“(“); 52
  20. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 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]. 53
  21. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật + 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[ i 1][ j 1] 1(1) + Cô y ồ C[ i ][ j ] max(C [ i 1][ j ], C [ i ][ j 1])(2) + 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) { 54
  22. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 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]. 55
  23. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 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; } 56
  24. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật } 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 57
  25. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 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 4.0 10 20 100 20 30 100 30 40 100 10 20 20 0.9 30 40 60 15 35 90 1 100 85 1.45 99 102 100 101 200 60 à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 ABAB ABA ABABA ABABAKAKABAS AKAKA AKABAS ABAKA ài 3 JumpyNum Mộ số mpy l mộ số yê ư số l ủa a . V ụ: 58
  26. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 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 9 10 9 9 23 8000 3766 20934 59
  27. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 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. 60
  28. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 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 : f12 f fn 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 Si,k, {Ck mộ p lớ ủa Sk,j. D ọ l ướ ủa mộ l ọ ố ư p Si,j a ô sa : 61
  29. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 0 if j = i+1 Q(,) i j max(Q ( i , k ) Q ( k , j ) 1) if j > i+1 i 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 : 62
  30. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 63
  31. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 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 ố ư . 64
  32. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 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. 65
  33. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật ĐỀ 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. 66
  34. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 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 . 67
  35. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 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 . 68