Bài giảng Phân tích thiết kế và đánh giá thuật toán (Phần 1)
Tóm tắt Bài giảng Phân tích thiết kế và đánh giá thuật toán (Phần 1): ... p ầ ủa y số a l mộ ủa mộ ụ . T m mộ m ả ộ a số l mộ m ù l mộ ả . 1 2 Đ c tr ng của thuật toán T ắ : T ầ p ả ảm ả mộ ả sa ự ố ớ ộ l ầ . Đ y l ư a ọ ố ớ mộ . T : ầ p ả ảm ả s sa mộ số ướ . T x : C ướ ủa p ả ượ p ụ y p ầm lẫ ố ớ ư ọ . T ả: ượ xem l ả ư ả ă ả y ả a a p p ...Cấu tr c dữ iệu – Data structure Niklaus Wirth, một l p trình viên và nhà khoa họ m y ư i phát minh ra ngôn ng l p Pas al ng nói một câu nói n i ti l ực l p : C ư (Programs) = C u trúc d li u (Data Structures) + Giải thu t (Algorithms). Câu nói này nói lên bản ch t của vi c l p l m một c u t...h họa cho thu t toán: void selection_sort(int a[], int n) { int i, j, vtmin; ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 17 for(i=0; i<n-1;i++) { vtmin = i; // m lư p ầ a .. -1] for(j=i+1;j<n;j++) if(a[j] < a[vtmin]) vtmin = j; swap(a[vtmin], a...
mộ x N ý ự. Mộ ả l y a ộ x ố ớ m ý ự ự m xem ý ự x a ê lầ . K ướ ủa ả l ố l ố ớ ô l p C l y ố ớ N. N ư s l ố l ộ p p ủa l S*N S l số p ầ ủa ả s ụ . C ý l mộ ố ả y ớ ộ p p l (S + N). Trong ộ l p mộ ự 1000000000 p p ô a m ộ a . C a am ả ả sa êm: Độ phức tạp Giá tr N ớn nhất (N) 100 000 000 (N log N) 40 000 000 (N2) 10 000 (N3) 500 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 8 (N4) 90 (2N) 20 (N!) 11 Th i gian thực hiện của các thuật toán c độ phức tạp khác nhau O(Log(N)) 10-7 giây O(N) 10-6 giây O(N*Log(N)) 10-5 giây O(N2) 10-4 giây O(N6) 3 p O(2N) 1014 ăm O(N!) 10142 ăm Ch ý về phân tích thuật toán. T ô ư a y mộ ố ộ p p a ủa l s ụ . T y ê ê ự a ay ù ý p p -O – ô lắm y ượ ư . N ư ê l -O l ê ư a s m mô ê ố . Ví dụ: C mộ mả ượ sắp A. H y x xem mả A a p ầ m ủa D ay ô . H y xem m ư sa : int j=0; for (int i=0; i<N; i++) { while ( (j D) ) j++; if (A[i]-A[j] == D) return 1; } R ê l O(N2 : l p le ê ượ ọ N lầ m lầ ă lê ố a N lầ . N ư mộ p ố s a y l O(N) ả a ự ủa l ă ô y N lầ . ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 9 N a l O(N2 a ẫ ư l l O N a ưa a ượ ô x . 4. Cấu tr c dữ iệu – Data structure Niklaus Wirth, một l p trình viên và nhà khoa họ m y ư i phát minh ra ngôn ng l p Pas al ng nói một câu nói n i ti l ực l p : C ư (Programs) = C u trúc d li u (Data Structures) + Giải thu t (Algorithms). Câu nói này nói lên bản ch t của vi c l p l m một c u trúc d li u phù hợp bi u di n d li u của bài toán và t x y ựng giải thu t phù hợp với c u trúc d li chọn. Ngày nay với sự phát tri n của các k thu t l p trình, câu nói của Wirth không hẳ y ối n a ư ẫn phản ánh sự gắn k t và tầm quan trọng của các c u trúc d li u và giải thu t. C u trúc d li ược s dụ bi u di n d li u còn các giải thu ược s dụ thực hi n các thao tác trên các d li u của bài toán nh m hoàn thành các ch ă ủa ư trình Các chiến c thiết kế thuật toán K ô mộ p ư p p p a x y ự ê ả l . C a ọ m y ê ưa a lượ ả p ụ l a . 5.1. Duyệt toàn ộ (E hausted search) C lượ y ộ l lượ m m l p ê p ả ầ ê ả y . T p ư p p y ộ a s xem x ả ê ộ mộ ô a ủa xem p ả l m ủa ay ô . P ư p p y yê ầ mộ m m a xem mộ ê p ả l m ủa ay ô . M ù s p ư p p y ô p ả l ự l ô ả ố ớ m ướ p lớ . C p ư p p ả ă ủa p ư p p y ộ a s xem x ư 3. 5.2. Đệ qui quay ui – Backtracking C lượ ay l l mộ lượ x y ự ựa ê a qui. N m ủa ượ mô a ướ mộ e m p ầ ủa e m s mộ p s ướ p ầ ủa m x m ủa . M ù ô p ả p ụ s ả ựa ê p ư p p ay l l ô ẻ ẹp sự ắ ọ s m ma l . 3 Chia đ tr (Divide and Conquer) C lượ a l mộ lượ a ọ ả . ư ủa lượ y e ả y l : ầ ả y mộ ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 10 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 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ụ[6, trang 57]: T ụ y a s xem x Na . Đ Na a ý ô sa : N N/2 2 N/2 2 1 nÕu N = 0 a (a ) nÕu N ch½n a*(a ) nÕu N lÎ 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; } } Chiến c tham am (Greedy) C lượ am lam l mộ lượ x y ự m m ố ư ụ ộ ố ư m ượ m ố ư ụ ả ư ợp . T ư ợp m l ả ủa lượ am lam ư ă a ộ p p p . 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 11 5.5. Qui hoạch động (Dynamic Programming) ộ l lượ x y ự ả y ố ư ủa ô p ả l m lớ / l a ê ô ụ ượ . Trong lượ ộ a s x y ự a ủa ố s l ả ựa ê s p lems ựa ê a . C qui ộ ư s ụ mả lư l m ủa a p : m p p . ài tập ài tập 1: X y ự s ồ ả số a N y số a ượ a ư sa : 0 1 1 N N-1 + N- ớ N . ài tập 2 X y ự s ồ ả : ...x x x ớ N số x ự m ă a N x p p m. ài tập 3 T mộ ma a p MxN mộ p ầ a ượ ọ l m yê ựa ủa ma sa le p ư l p ầ ê p ầ lớ ê ộ ủa ma . C ẳ a 0 l mộ p ầ yê ựa ma sa : 1 2 3 4 5 6 7 8 9 H y ư m ả m yê ựa ủa mộ ma p p m ưa a ộ p p ủa . ài tập C mộ ma ướ MxN ồm số yê ả số m ư . H y ư m ma ủa ma sa p ầ ma lớ ượ max m m s m pla ea . H y ưa a ộ p p ủa s ụ . ài tập V ư p số ủa mộ a ả s số l yê a x l mộ số yê mộ x0. H y ủa a e ô H e sa : N x an*x n + an-1*x n-1+ .. +a1*x + a0 f(x) = a0 + x*(a1+x*(a2+x* .+x an-1+an*x Cô H e . ài tập C 4 ộp ướ a m m ủa ộp ượ ô 1 4 m xa m . H y ưa a ả x p ộp 1 y sa e p a ê x ố ướ sa ủa y ủ ả 4 m xa m . ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 12 ài tập 7 H y ư a ượ a ả số yê số a số. ài tập 8 p ụ s a ả số yê ố N. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 13 CHƯƠNG II: S P XẾP (S RTING) VÀ T IẾ (SE RCHING) 1. Bài toán s p ếp 1 1 S p ếp trong (Interna Sorting) Sắp x p ược xem là một trong nh l ực nghiên c u c n của khoa học máy . T ướ t toán chi ti t chúng ta cần nắm v ng một số khái ni m ản sau: + Mộ ư ng (field) là mộ d li ẳng h ư ê i, số n tho i của mộ ư i ... + Một bản ghi (record) là một t p hợp ư ng + Một file là một t p hợp các bản ghi Sắp x p (sorting) là một quá trình x p t các bản ghi của một file theo một th tự nào . V c x p y ược thực hi n dựa trên một hay nhi ư ô y ược gọi là khóa xắp x p (key). Th tự của các bả ượ x nh dựa trên các khóa khác nhau và vi c sắp x p ố ược thực hi ối với m i khóa theo các th tự khác nhau. Chúng ta s t p trung vào các thu t toán xắp x p và giả s khóa ch gồm 1 ư ng duy nh t. Hầu h t các thu t toán xắp x p ược gọi là các thu t toán xắp x p so sánh: chúng s dụng hai a ả l s s i ch (swap) các phần t cần sắp x p. C sắp x p ả ượ a l m a . Sắp x p (internal sorting): D l ầ sắp x p ượ lư ầy ủ ộ ớ trong ự sắp x p. 1 2 S p ếp ngoài (E terna Sorting) Sắp x p ex e al s : D l ầ sắp x p ướ lớ ô lư ộ ớ sắp x p a y p l m a . T p m ủa mô ọ y a xem x sắp x p . Cụ l sắp x p s l mộ mả ả ồm a ư l ư l ư a p a xem x ư a ủa ả y ụ m ọa ượ ự ê mả số yê ư l ư a ủa ả . 1 3 S p ếp gián tiếp Khi các bả ước lớn vi i các bản ghi là r t tố m giảm p ư i ta có th s dụ p ư p p sắp x p gián ti p. Vi c này có th ược thực hi n theo nhi u cách khác nhau và môt trong nh p ư p p l o ra một file mới ch a ư ng khóa của le a ầu, ho c con tr tới ho c là ch số của các bản ghi ban ầu. Chúng ta s sắp x p trên file mới này với các bả ước nh sa y c p vào các bả le a ầu thông qua các con tr ho c ch số y l l m ư ng th y ối với các h quản tr s d li u). ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 14 Ví dụ: chúng ta muốn sắp x p các bản ghi của le sa y: Index Dept Last First Age ID number 1 123 Smith Jon 3 234-45-4586 2 23 Wilson Pete 4 345-65-0697 3 2 Charles Philip 9 508-45-6859 4 45 Shilst Greg 8 234-45-5784 Sau khi sắp x p x truy c p vào các bản ghi theo th tự sắp x p chúng ta s dụng th tự ược cung c p b i cột index (ch số . T ư ng hợp này là 3, 2, 4, 1. (chúng ta không nh t thi t phả i các bả a ầu). 1.3 Các tiêu chuẩn đánh giá một thuật toán s p ếp Các thu t toán sắp x p có th ược so sánh với nhau dựa trên các y u tố sa y: + Th i gian thực hi n (run-time): số các thao tác thực hi ư ng là số các phép so s i các bản ghi). + Bộ nhớ s dụ Mem y : l lượng bộ nhớ cần thi thực hi n thu t toán lượng bộ nhớ s dụ ch a d li u cần sắp x p. + Một vài thu t toán thuộc lo “ pla e ô ần (ho c cần một số cố nh) thêm bộ nhớ cho vi c thực hi n thu t toán. + Các thu ư ng s dụng thêm bộ nhớ t l thu n theo hàm tuy n tính ho c m m ớ ước file sắp x p. + T t nhiên là bộ nhớ s dụng càng nh càng tốt m c dù vi ối gi a th i gian và bộ nhớ cần thi t có th là có lợi. + Sự nh (Stability):Một thu ược gọi là nh n ư gi ược quan h th tự của các khóa b a ô l m ay i th tự của các khóa b ng nhau). C a ư ng lo lắng nhi u nh t là v th i gian thực hi n của thu t toán vì các thu t toán mà chúng ta bàn v ư ng s dụ ước bộ nhớ ư ư a . Ví dụ v sắp x p nh: Chúng ta muốn sắp x p le sa y ự trên ký tự ầu của các bả ướ y l t quả sắp x p của các thu t toán nh và không nh: ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 15 Chúng ta s xem xét t i sao tính nh trong các thu t toán sắp x p l ượ quan trọ ư y. 2. Các ph ng pháp s p ếp c ản 2.1. S p ếp chọn (Selection sort) Mô ả : Tìm phần t có khóa lớn nh t (nh nh sa sắp x p phần còn l i của mảng. S ồ : ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 16 Bắ ầu K t c Nh p n, a[0..n-1] i=0 i<n vtmin=i j<n j=i+1 a[j]<a[vtmin] vtmin=j vtmin!=i Đ i ch a[i], a[vtmin] Đ S i=i+1 j=j+1 Đ S S Đ Đ S Đ n mã sau minh họa cho thu t toán: void selection_sort(int a[], int n) { int i, j, vtmin; ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 17 for(i=0; i<n-1;i++) { vtmin = i; // m lư p ầ a .. -1] for(j=i+1;j<n;j++) if(a[j] < a[vtmin]) vtmin = j; swap(a[vtmin], a[i]); // m a m a } } Ví dụ: Với m i giá tr của i thu t toán thực hi n (n – i – 1) phép so sánh và vì i ch y t 0 cho tới (n–2), thu t toán s cần (n-1) + (n- + + 1 -1)/2 t c là O(n2) phép so sánh. T mọ ư ợp số lầ s s ủa l ô . M lầ y ủa l p ố ớ mộ lầ a p ầ ê số lầ ủa l . N ư y ư ợp ố ầ 0 lầ ầ / lầ ồ ầ lầ . 2 2 S p ếp đổi ch trực tiếp (E change sort) Tư ự ư sắp x p ọ ư ầm ớ sắp x p è l sắp x p ự p mộ số l ọ l I e a e s ay S a Sele S . Mô ả: Bắ ầ x p ầ ầ ê a ớ 0 a x ả p ầ sa a ọ l a ớ y +1 ớ -1 ố ù . Vớ m p a a ý l a l p ầ sa a a a l xảy a sa a s a a[j]. Ví dụ minh họa G ả s mả a ầ l a 1 19 3 1 . C ướ ủa s ượ ự ư sa : i=0, j=2: 1, 6, 2, 19, 3, 12 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 18 i=1, j=2: 1, 2, 6, 19, 3, 12 i=2, j=4: 1, 2, 3, 19, 6, 12 i=3, j=4: 1, 2, 3, 6, 19, 12 i=4, j=5: 1, 2, 3, 6, 12, 19 K ả ố ù : 1 3 1 19. S ồ : Bắ ầu K t c Nh p n, a[0..n-1] i=0 i<n j<n j=i+1 a[j]<a[i] Đ S i=i+1 j=j+1 Đ S S Đ Đ i ch a[i], a[j] C ủa : void exchange_sort(int a[], int n) { int i, j; int tam; for(i=0; i<n-1;i++) ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 19 for(j=i+1;j<n;j++) if(a[j] < a[i]) { // a a tam = a[i]; a[i] = a[j]; a[j] = tam; } } Độ p p ủa : C y s ớ sắp x p ọ sắp x p ự p ầ số ướ s s ư ư : l * -1 / lầ s s . N ư số ướ a p ầ ớ số lầ s s : * -1 / . T ư ợp x số ướ ủa ớ số lầ s s ư ợp số ướ l * -1 /4. C ư ợp ố số ướ 0. N ư y sắp x p ự p l m s ớ sắp x p ọ số lầ . 2.3. S p ếp ch n (Insertion sort) Mô ả : T ựa a l hèn m i khóa vào mộ y ược sắp x p của dãy cần sắp. P ư p p y ư ược s dụng trong vi c sắp x p các cây bài trong . S ồ ả ủa ư sa : ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 20 Bắ ầu K t c i=1 i<n tam=a[i] j=i-1 Đ j>=0 a[j]>tam a[j]=a[j-1] j=j-1 S a[j+1]=tam i=i+1 S Đ Đ S C mô ả l ư sa : a ầ a ư mả a 0.. -1 ồm p ầ ư ợp ầ ê 1 l ượ sắp ướ ủa a s è a mả a 0.. -1] sao c sa è p ầ ẫ e ự ă ầ . Bướ p e s è a +1 mả a 0.. mộ ư ự. T ớ mả è a -1 mả a 0.. -2]). Đ è a mả a 0.. -1 a ù mộ m lư a sa ù mộ số -1 ớ ầ mả a am s py a a +1 a l lù mả l mộ è am mả . V l p s a am -1 a a +1 tam. Đ m ư ư sa : void insertion_sort(int a[], int n) { int i, j, temp; for(i=1;i<n;i++) ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 21 { int j = i; temp = a[i]; while(j>0 && temp < a[j-1]) { a[j] = a[j-1]; j = j-1; } a[j] = temp; } } Ví dụ: T sắp x p è l mộ sắp x p s a le l a số sắp x p ả . Với m i i chúng ta cần thực hi n so sánh khóa hiên t i (a[i]) với nhi u nh t là i khóa và vì i ch y t 1 tới n-1 nên chúng ta phải thực hi n nhi u nh : 1 + + + -1 = n(n-1)/2 t c là O(n2 p p s s ư ự ư t toán sắp x p chọn. Tuy nhiên l p le ô p ả l ượ ự ự ô l l p lầ ê ê ự sắp x p è a s ớ sắp x p ọ . T ư ợp ố ầ s ụ lầ s s 0 lầ . T ê ự mộ mả ỳ ồm mả ượ sắp ê è ộ ả. T sắp x p è l a sắp x p ả ộ p p O(n2)). 2.4. S p ếp nổi ọt ( u e sort) Mô ả : ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 22 T sắp x p ọ ựa ê s s a p ầ a : + Duy t qua danh sách các bản ghi cần sắp theo th tự i ch hai phần t k nhau n u chúng không theo th tự. + L p l u này cho tới khi không có hai bản ghi nào sai th tự. K ô th y r ng n pha thực hi l ủ ự x . Thu y ư ự ư t toán sắp x p chọn ngo i tr vi c có thêm nhi u a i ch hai phần t . S ồ : Bắ ầu K t c Nh p n, a[0..n-1] i=0 i<n j>i j=n-1 a[j]<a[j-1] Đ S i=i+1 j=j-1 Đ S S Đ Đ i ch a[j], a[j-1] C : void bubble_sort1(int a[], int n) { int i, j; ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 23 for(i=n-1;i>=0;i--) for(j=1;j<=i;j++) if(a[j-1]>a[j]) swap(a[j-1],a[j]); } void bubble_sort2(int a[], int n) { int i, j; for(i=0;i<n;i++) for(j=n-1;j>i;j--) if(a[j-1]>a[j]) swap(a[j-1],a[j]); } T ộ p p l O(N*(N-1)/2) = O(N2), số lầ s s số lầ ủa ư ợp ồ . T sắp x p ọ l m số sắp x p ả m sắp x p ự p m ù số lầ s s a ư a p ầ a ê số lầ . 2.5 So sánh các thuật toán s p ếp c ản S p xếp chọn: + T i n2/ p p s s ướ i ch . + T ư ng hợp x u nh ư ự. S p xếp chèn: + Trung bình cần n2/4 phép so sánh, n2/8 ướ i ch . + X u nh t cần g p ô ước so vớ ư ng hợp trung bình. + Th i gian là tuy ối với các file hầ ư sắp l a số sắp x p ả . S p xếp nổi bọt: + Trung bình cần n2/2 phép so sánh, n2/ a i ch . + X u nh ư ự. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 24 3. Cấu tr c dữ iệu Heap, s p ếp vun đống (Heap sort). 3.1. Cấu tr c Heap T ướ m eap s a s m mộ ọ l Heap eap a a s e ay ọ l ố . Heap l mộ y p ầy ủ m a ey l ey pa e . H y ớ l mộ y p ầy ủ l mộ y p ầy ả ầ ủa y ầ ố ù ầy p a ủa y . C mô ả l mộ y p m m sa : l mộ ủa y ô m ố ù s l mộ m ố ù s ô a em ê ủa ô 1 s 1 ư a em ê ủa ủ m l l m ố ù mộ s số số ủa a em ê ủa . Ví dụ Chiều cao của một heap Mộ eap s a l O l . Chứng minh G ả s l số ủa mộ eap a l . V mộ y p số ố a l 2 h -1 nên suy ra: 12h 2 h -1 L y l a a ủa ẳ a ượ : h – 1 l T êm 1 ủa ẳ l l y l a a a l ượ : log(n + 1) T ê s y a: 3 7 4 5 1 7 7 2 6 9 1 3 1 ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 25 l + 1 l (n) + 1 Các ví dụ về cấu tr c Heap: Heap ớ a 3: eap ớ a 4 i u diễn Heap C a mộ y p ê mộ eap ô ư ự ố ư mộ y p mộ mả . Đố ớ mộ eap lư mộ mả a a sa ả s a ắ ầ 0): Left(i) = 2*i + 1 Right(i) = 2*i + 2 Parent(i) = (i-1)/2 Ví dụ ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 26 Thủ tục heapri y Đ y l ủ ụ ả ả ủ ụ a ê eap Input: + Mộ mả A mộ số mả + G ả s a y Le R l eap + A p ỡ Heap y ớ Le R . Output: + Mả A y ố l l mộ Heap K ô a y ộ p p l O(log n). C a s y y l mộ ủ ụ m y ư ượ l a ay ủa mộ a eap ủa eap s p ỡ y p ả sự s a . Sa y l C ủa ủ ụ : void heaprify(int *A, int i, int n) { l = Left(i); /* l = 2*i +1*/ r = Right(i); /* r = 2*i + 2 */ if(l A[i]) largest = l; ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 27 else largest = i; if(r A[largest]) largest = r; if(lagest !=i) { swap(A[i], A[largest]); heaprify(A, largest, n); } } V ả y l mộ ủ ụ ả s ớ a ảm . T ủ ụ y ả ớ ướ ư sa : + X p ầ lớ 3 p ầ A A Le A R . + N A ô p ả l p ầ lớ 3 p ầ ê A ớ A la es A la es s l A Le A R . + Gọ ủ ụ ớ la es l m ay ủa eap l A la es . Ví dụ ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 28 Thủ tục ui dheap T ủ ụ l eap s y mộ mả ỳ mộ eap. V ả ủ ụ y ự ọ ớ ủ ụ eap y ê e ự ượ l . V y e ự ượ l ê a y ố l eap. N a ố ủa mả ư ớ l ê a ô ầ p ả ự ủ ụ eap ố ớ . Đ m C ự l eap: void buildheap(int *a, int n) { int i; for(i=n/2; i>=0; i--) heaprify(a, i, n); } Dựa y y eap mả ộ p p l O(n*log n . T ê ự eap ộ p p l O . T a ự ủa eap y ê mộ y ướ mộ ụ l mố a a p ầ a a Le a R l O 1 . Cộ êm ớ a ủ ụ y ự ê mộ y ố mộ l ủa . Số y ủa ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 29 ủa l ố l /3. S y a a ô ộ p p ủa l : T T /3 + O 1 T O l y s y a ộ p p ủa l eap l *l . C lý l ư sa : K ướ ủa p ủa y l : /4 /8 /1 1 l số ủa y. T a ự eap y ố ớ ướ y l 1 3 l – 1 a s x p x l : 1*n/4 + 2 * n/8 + 3 * /1 + + l -1) * 1 < n/4(1 + 2* ½ + 3 * ¼ + 4 * 1/8 + ...) = O(n). Ví dụ Các thao tác trên heap khác N eap a sa y ư ự ố ớ mộ eap: + Insert() + Extract_Max() C a ô a y y ư a y ô ự ớ s ụ ủ ụ eap y m a ê . Vớ a y a s ụ mộ eap mộ ợ ư ê . Mộ ợ ư ê l ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 30 mộ l ớ a ả l se max m m ex a max m m a s p ầ sa ủa a ọ . 3.2. S p ếp vun đống (Heap sort) T Heap s ý ư ả : + T ự ủ ụ l eap mả A mộ eap + V A l mộ eap ê p ầ lớ s l A 1 . + Đ A 0 A -1], A[n-1 m ủa a a ư mả y ướ l -1 ay l xem x p ầ ầ ủa mả ô l mộ eap a. + V A 0 l ê a s ọ ủ ụ eap y ố ớ l mả mộ eap. + L p l a ê ớ mộ p ầ eap mả ượ sắp. C C ủa : void heapsort(int *A, int n) { int i; buildheap(A, n); for(i=n-1;i>0;i--) { swap(A[0], A[i]); heaprify(A, 0, i-1); } } Ch ý: Đ ọ sắp x p ê mả a n p ầ ọ m eaps ư sa : heapsort(a, n); Độ phức tạp của thuật toán heapsort T ủ ụ l eap ộ p p l O . T ủ ụ eap y ộ p p l O l . Heaps ọ ớ l eap 1 lầ -1 lầ ọ ớ eap y s y a ộ p p ủa l O(n + (n-1)logn) = O(n*log n). T ê ự eaps ô a quicksort. ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 31 4. T m kiếm tuyến tính 4.1 ài toán t m kiếm T m m l mộ ộ l ự ê ủa a ọ m y ượ ụ ộ ê ự . Bả m ư a p ư p p ma ự ự m m. T ô y a ư x yê p ả m m: m m mộ ố s ọ mộ ầ a m m mộ l lư ê m y ê m m mộ m mộ ả a m mộ s l m m ê m I e e . T mô ọ y a a m ớ m m ê mộ mả mộ a s p ầ ù . T ô ư p ầ y l mộ ả ượ p a a ư ê : ư lư l mộ ư p p ầ ớ a ô ư l ố a ọ l ư a p p ầ y ượ ọ l ô a m m ủa m m ô a m m ượ lư ê ộ ớ ủa m y m m. K ả m m l v trí của phần tử th a mãn điều kiện t m kiếm: ư a ớ mộ a ướ a m m . T m y y a y p ớ ô ượ a ư l ủa p ầ m y. N ả l ô m y ư ợp y ẫ ô ả s ượ mộ ư ư ớ ô ồ p ầ : ẳ ư -1 ố ớ mả NULL ố ớ a s l ê . C m m : m m m m ầ ự m m p ớ m m ựa ê l ư l y ư y m m p y y e T y ê p ầ y a s xem x a p ư p p m m ượ p ụ ớ l mả l m m ượ a ộ ớ ủa m y . Đ ầ ê m a ầ lư ý l ố ớ mả y y p ớ p ầ a l ư a ựa số p a s p ê ư m p ầ ư a l số yê . 4.2 T m kiếm tuần tự (Sequentia search) ư ủa m m ầ ự ả : y a ả p ầ ủa mả y m y p ầ a ớ a m m ả ủa p ầ . C y ớ mả m ẫ ô p ầ a ớ a m m ả -1 ô m y . T s ồ ả ư sa : ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 32 C C ủa : int sequential_search(int a[], int n, int k) { int i; for(i=0;i<n;i++) if(a[i]==k) return i; return -1; } D a s ả ả l ủa p ầ ầ ê a m m m ồ p ầ . Độ p p ư ợp ồ : O(n). T ư ợp ố ộ p p O(1). C m p ầ lớ m p ầ ủa mộ mả a s l m m ầ ự. Mộ y l số p ầ ủa mả ỡ 10000000 l m ố ộ p ượ ư số p ầ ủa mả lê ẳ ư m ê mộ ư số ê ư ủa ả ớ a ô ả. Begin mả a[0..n-1] a i = 0 k==a[i] return i; End sai i >= n return -1; i = i + 1; sai ài giảng môn học Phân tích thiết kế và đánh giá giải thuật 33 5 Các vấn đề khác N ượ y ê ẫ mộ số m a am ả : ẳ ư sắp x p S ell s sắp x p m Counting sort sắp x p số Ra x s . C y ượ xem ư p ầ ự m ủa s ê . 6. ài tập ài tập 1: C sắp x p ả ô l p C ê 1 mả số yê l ủa ư ượ p le ex ượ s ẫ ê số p ầ ả 10000 s s a ự ự ủa . ài tập 2: C sắp x p a ô C ớ mộ mả s ê ê : x ý ự ộ ố a l 0 : số yê m : số a sắp x p l ư ê . S s a ự ủa s s ớ m s s ủa C. ài tập 3[6, trang 52]: C ủa sắp x p ự e a . H y m p l mả a 0.. p ầ số 0 ớ số -1 ượ sắp x p ă ầ a ô a p ầ mộ số x è x mả a 0.. -1 sa sa è ả ượ l a 0.. l mộ mả ượ sắp x p. S ụ m a x y ự sắp x p è . G i ý C è p ầ mả ư p ầ ủa sắp x p è ượ y s ụ p ư p p .
File đính kèm:
- bai_giang_phan_tich_thiet_ke_va_danh_gia_thuat_toan_phan_1.pdf