Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 21 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
21
Dung lượng
384,18 KB
Nội dung
Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 1 Cấutrúcdữ liệuvàGiảithuật Chương I: Các kiếnthứccơ bản Các kiếnthứccơ bản Nội dung Các khái niệm Giảithuật Cấutrúcdữ liệu Phân tích giảithuật Giả ngôn ngữ Thờigianthựchiệngiảithuật Đánh giá độ phứctạpsử dụng tiệmcận Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 2 – Mộtthủ tục bao gồmmột dãy hữuhạncácbước cầnthựchiện để thu được đầurachođầuvào cho trướccủamột bài toán Giảithuật Giảithuật z Đặctrưng củagiảithuật – Đầuvào – Đầura – Tính hữuhạn – Tính hiệuquả – Tính xác định Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 3 GiảithuậtvàChương trình Chươngtrìnhlàmộtthể hiệncủaGiảithuật trong một ngôn ngữ lập trình nào đó Cấutrúcdữ liệu z Kiểudữ liệutrừutượng (Abstract Data Type) – Là mô hình toán họcvànhững phép toán thực hiệntrênmôhìnhtoánhọc này – Ví dụ: ADT List z Dữ liệu: Các nút z Các phép toán: – Bổ sung mộtnútmới – Loạibỏ mộtnút – Tìm kiếmmột nút có giá trị cho trước – … Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 4 Cấutrúcdữ liệu z Cấu trúc dữ liệu – Sử dụng để biểudiễnmôhìnhtoánhọc trong ADT – Việccàiđặtcáckiểudữ liệutrừutượng đòi hỏi phảichọncáccấutrúcdữ liệu để biểudiễn – Liên quan đếncáchthứctổ chứcvàtruynhập các phầntử dữ liệu – Ví dụ: ADT List z Cài đặtsử dụng cấutrúcmảng đơngiản z Cài đặtsử dụng cấu trúc con trỏ Xây dựng chương trình giảibàitoán – Lờigiảimột bài toán bao gồm z Cấutrúcdữ liệu z Thuật toán – Xây dựng chương trình giải bài toán z Tương tự như vòng đờicủaphầnmềm z Gồmcácbước – Thu thậpyêucầu: Hiểurõđầuvàovàkếtquảđầura – Thiếtkế : Xây dựng giảithuật, bỏ qua các chi tiếtvề cách thức cài đặtdữ liệu hay các phương thức, tập trung vào các bướcxử lý – Phân tích : Tìm, so sánh vớigiảithuật khác – Cài đặt: Xây dựng chương trình, quan tâm đếncáchthứctổ chức, biểudiễnvàcàiđặt các phương thức – Kiểmthử : Bao gồmchứng minh tính đúng đắncủachương trình, kiểmthử các trường hợp, tìm, sửalỗi Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 5 Thuậttoánvàđộ phứctạp – Đánh giá lượng tài nguyên các loạimàmộtgiải thuật đãsử dụng. z Giảithuậtnàythựchiện trong thờigianthế nào Æ Phân tích về thờigianthựchiệngiảithuật z Giảithuậtnàysử dụng bao nhiêu bộ nhớ Æ Phân tích độ khônggiannhớ mà giảithuật(chương trình) cầncó. Phân tích thờigianthựchiệngiảithuật – Mụctiêucủaviệcxácđịnh thờigianthựchiện mộtgiảithuật: z Để ướclượng mộtchương trình sẽ thựchiện trong bao lâu z Để ướclượng kích thướcdữ liệu đầuvàolớnnhấtcó thể cho mộtgiảithuật z Để so sánh hiệuquả của các giảithuật khác nhau, từđó lựachọnramộtgiảithuậtthíchhợpchomột bài toán z Để giúp tập trung vào đoạngiảithuật đượcthựchiện vớithờigianlớnnhất Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 6 Phân tích thờigianthựchiệngiảithuật z Cách thức – Xác định độ phụ thuộccủathời gian tính của thuật toán vào kích thướccủadữ liệu đầuvào – Các phương pháp thựchiện z Phương pháp thực nghiệm z Phương pháp phân tích dựatrênmôhìnhlýthuyết Phân tích thờigianthựchiệngiảithuật z Phương pháp thực nghiệm – Cài đặtgiảithuậtbằng ngôn ngữ lậptrình – Chạychương trình vớicácdữ liệu đầu vào khác nhau – Đothờigianthựcthichương trình và đánh giá độ tăng trưởng so vớikíchthướccủadữ liệu đầuvào z Hạnchế: – Sự hạnchế về số lượng và chấtlượng củamẫuthử – Đòi hỏimôitrường kiểmthử (phầncứng và phầnmềm) thống nhất, ổn định Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 7 Phân tích thờigianthựchiệngiảithuật z Phương pháp lý thuyết – Có khả năng xem xét dữ liệu đầuvàobấtkỳ – Sử dụng để đánh giá các giảithuật mà không phụ thuộc vào môi trường kiểmthử – Sử dụng vớinhững mô tảởmứccaocủagiảithuật z Thựchiệnphương pháp này cần quan tâm – Ngôn ngữ mô tả giảithuật – Xác định độ đothời gian tính – Mộtcáchtiếpcận để khái quát hóa độ phứctạpvề thờigian Mô tả giảithuật–Giả ngôn ngữ z Giả ngôn ngữ (Pseudo-code) – Mô tả mức khái quát cao đượcsử dụng trong diễntả giảithuật Giả ngôn ngữ = Cấutrúclập trình + Ngôn ngữ tự nhiên Algorithm arrayMax(A,n) Input: Mảng chứan phầntử là số nguyên Output: Phầntử lớnnhất trong mảng Begin currentMax = A[0] for i = 1 to n-1 do if currentMax < A[i] then currentMax = A[i] return currentMax End. Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 8 Giả ngôn ngữ – Các cấutrúclập trình trong giả ngôn ngữ z Câu lệnh gán: V = E hoặcV Å E z Cấutrúcđiềukhiển: – if B then S 1 [else S 2 ] – Case B 1 : S 1 ; B 2 : S 2 ; … B n : S n else S n+1 end case; Giả ngôn ngữ z Câu lệnh lặp z Vòng lặpvớisố lầnlặpbiếttrước for i = m to n do S hoặc for i = n down to m do S z Vớisố lầnlặp không biếttrước while B do S hoặc repeat S until B z Câu lệnh vào ra – Đọcdữ liệuvào read (<danh sách biến>); Ghi dữ liệu write (<danh sách biếnhoặc dòng ký tự>); Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 9 Giả ngôn ngữ z Khai báo hàm Function <tên hàm> (<danh sách tham số>) Begin <các câu lệnh> return (giá trị) End z Gọihàm: Hàm đượcgọibằng tên hàm cùng danh sách giá trị tham số thựcsự, nằm trong biểuthức Giả ngôn ngữ Function AVERAGE(A,n) Begin {A là mộtmảng gồmn phầntử là số nguyên. Giảithuậttrả ra giá trị trung bình của các giá trị trong mảng} 1. sum = 0; 2. {Duyệtmảng} for I = 1 to n do sum = sum + A[i]; 3. average = sum/n 4. return(average) End. Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 10 Giả ngôn ngữ – Khai báo thủ tục – Thủ tục đượcgọibằng cách sử dụng câu lệnh Call <tên thủ tục> (<danh sách giá trị tham số>) Procedure <tên thủ tục> (<danh sách tham số>) Begin <các câu lệnh> End Phân tích thờigianthựchiệngiảithuật – Độ đothời gian tính sử dụng trong phương pháp phântíchlỳ thuyết z Phép toán cơ bản là phép toán có thểđượcthựchiện vớithời gian bi chặnbởimộthằng số không phụ thuộc vào kích thướcdữ liệu – Thời gian tính củagiảithuật đượcxácđịnh bằng cách đếmsố phép toán cơ bảnmàgiảithuậtthực hiện T T ( ( n n ) ) ≈ ≈ c c op* op* C C ( ( n n ) ) [...]... được c = 8 và n0 = 2 Ký hiệu tiệm cận Big - O – Ví dụ: Giải thuật có T(n) = 2n + 10 thì có độ 10 ,000 phức tạp là O(n) 2n + 10 ≤ cn 1, 000 (c − 2) n ≥ 10 n ≥ 10 /(c − 2) Lấy c = 3 và n0 = 10 10 0 3n 2n +10 n 10 1 1 10 10 0 1, 000 n Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 14 Cấu trúc dữ liệu và Giải thuật Ký hiệu tiệm cận Big - O – Đồ thị một số hàm cơ bản Ký hiệu tiệm cận Big - O – Big-O và độ tăng trưởng Big-O là ký... hiện thuật toán trên tập hữu hạn các đầu vào kích thước n Phân tích thời gian thực hiện giải thuật worst-case 5 ms } 4 ms average-case? 3 ms best-case 2 ms 1 ms A B Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN C D Input E F G 12 Cấu trúc dữ liệu và Giải thuật Phân tích thời gian thực hiện giải thuật – Ví dụ : Tìm kiếm tuần tự một giá trị trên một mảng a [1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a [10 ] a [11 ] a [12 ]... P1 và P2 với thời gian thực hiện tương ứng là T1(n) và T2(n) Thời gian thực hiện P1 và P2 kế tiếp nhau là: T1(n) + T2(n) Độ phức tạp của hai đoạn chương trình P1 và P2 liên tục nhau có thể xác định là O(max(f(n), g(n))) nếu T1(n) = O(f(n)) và T2(n) = O(g(n)) Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 16 Cấu trúc dữ liệu và Giải thuật Ký hiệu tiệm cận Big - O – Qui tắc xác định độ phức tạp Cấu trúc lồng - Quy... P ; {đoạn giải thuật với thời gian thực hiện T} j := j × 2; end i =: i + 1; end Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 18 Cấu trúc dữ liệu và Giải thuật Ký hiệu tiệm cận Big - O Ví dụ i =1 while (i 0 và c’’ > 0 và một số nguyên n0 ≥ 1 sao cho c’*g(n) ≤ T(n) ≤ c’’*g(n) với mọi n ≥ n0 t(n) ∈ Θ(g(n)) Các khái niệm tiệm cận khác – – – – 5n2 = Ω(n2) với c = 5 và n0 = 1 5n2 = Ω(n) với c = 1 và n0 = 1 5n2 = Θ(n2) với c = 5 và n0 = 1 3 log(n)... O(g(n)) Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 13 Cấu trúc dữ liệu và Giải thuật Ký hiệu tiệm cận Big - O – 7n -2 7n-2 là O(n) tìm c > 0 và n0 ≥ 1 sao cho 7n-2 ≤ c*n với n ≥ n0 điều này đúng với c = 7 và n0 = 1 – 3n3 + 20n2 + 5 3n3 + 20 n2 + 5 là O(n3) tìm c > 0 và n0 ≥ 1 sao cho 3n3 + 20n2 + 5 ≤ c*n3 vơi n ≥ n0 điều này đúng với c = 4 và n0 = 21 – 3 log n + 5 3 log n + 5 là O(log n) cần c > 0 và n0 ≥ 1 sao cho... P; {đoạn giải thuật với thời gian thực hiện T} i: = i+2; end Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 17 Cấu trúc dữ liệu và Giải thuật Ký hiệu tiệm cận Big - O i := 1 while (i= 1) do begin P; {đoạn giải thuật với thời gian thực hiện T} i:= i/2 end Ký hiệu tiệm cận Big - O i =1 while (i 0 và a > 1 log nx = O(log n), với x > 0 Ký hiệu tiệm cận Big - O – Qui tắc xác định độ phức tạp Cấu trúc tuần tự - Qui tắc tổng Cho 2 đoạn của thuật toán P1... thực hiện n -1 lần, trong thân, tối thiểu phải thực hiện phép so sánh (2 phép toán cơ bản) , tăng i lên 1 (2 phép toán cơ bản) tối đa phải có thêm phép gán (2 phép toán cơ bản) – Dòng 3: 1 phép toán cơ bản Tổng số phép toán cơ bản trong Trường hợp xấu nhất : 7n-2 – – Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN Function ARRAY-MAX(A,n) Đâu vào : mảng A gồm n phần tử Đầu ra: phần tử lớn nhất trong mảng Begin 1 currentMax... = A[0] 2 for i = 1 to n -1 do if currentMax < A[i] then currentMax = A[i] 3 return currentMax End 11 Cấu trúc dữ liệu và Giải thuật Phân tích thời gian thực hiện giải thuật – Thời gian tính tồi nhất (Worst-case) Thời gian nhiều nhất để thực hiện thuật toán với một bộ dữ liệu vào kích thước n – Thời gian tính tốt nhất (Best-case) Thời gian ít nhất để thực hiện thuật toán với một bộ dữ liệu cũng với kích . Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 1 Cấutrúcdữ liệuvàGiảithuật Chương I: Các kiếnthứccơ bản Các kiếnthứccơ bản Nội dung Các khái niệm Giảithuật Cấutrúcdữ liệu . 2n +10 thìcóđộ phứctạplàO(n) z 2n +10 ≤ cn z (c − 2) n ≥ 10 z n ≥ 10 /(c − 2) z Lấy c = 3 và n 0 = 10 1 10 10 0 1, 000 10 ,000 1 10 10 0 1, 000 n 3n 2n +10 n Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp. đầurachođầuvào cho trướccủamột bài toán Giảithuật Giảithuật z Đặctrưng củagiảithuật – Đầuvào – Đầura – Tính hữuhạn – Tính hiệuquả – Tính xác định Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT-