Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 75 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
75
Dung lượng
708 KB
Nội dung
1. 1. Khái niệm thuậttoán Khái niệm thuậttoán - Thuậttoán (Algorithm) được biết đến từ Thuậttoán (Algorithm) được biết đến từ thế kỷ IX do nhà toán học người Ba tư thế kỷ IX do nhà toán học người Ba tư al-Khowarizmi đưa ra. al-Khowarizmi đưa ra. - Bài toán tính toán (Computation) là một ánh xạ từ tập các đầu vào nào đó vào tập các đầu ra nhất định. - Thuậttoán là một thủ tục xác định, bao gồm một dãy các bước cần thực hiện để từ một đầu vào cho trước nó cho một đầu ra. Ví dụ Ví dụ : Bài toán sắp xếp một dãy số theo : Bài toán sắp xếp một dãy số theo thứ tự tăng dần. thứ tự tăng dần. Đầu vào Đầu vào : Một dãy số (a : Một dãy số (a 1 1 , ., a , ., a n n ) ) Đầu ra Đầu ra : Một hoán vị (a : Một hoán vị (a 1 1 (k) (k) , .,a , .,a n n (k) (k) ) sao cho ) sao cho a a 1 1 (k) (k) <=. . . <= a <=. . . <= a n n (k) (k) Thuậttoán Insertion-Sort: Thuậttoán Insertion-Sort: Procedure Insertion-Sort (a, n) Procedure Insertion-Sort (a, n) For i:=2 to n do do For i:=2 to n do do Begin Begin key := a key := a i i ; ; (* (* Chèn a Chèn a i i vào dãy đã sắp a vào dãy đã sắp a 1 1 a a i-1 i-1 *) *) j:=i-1 j:=i-1 While j>0 and a While j>0 and a i i >key do >key do Begin Begin a a i+1 i+1 := a := a i i ; ; j := j-1; j := j-1; End; End; a a i+1 i+1 := key; := key; End; End; 2. Các tính chất của thuậttoán 2. Các tính chất của thuậttoán - Tính chính xác (Precision): Thuậttoán phải được mô Tính chính xác (Precision): Thuậttoán phải được mô tả chính xác. tả chính xác. - Tính hữu hạn (Finiteness): Dừng và cho kết quả sau Tính hữu hạn (Finiteness): Dừng và cho kết quả sau hữu hạn bước. hữu hạn bước. - Tính đơn trị (Uniqueness): Các kết quả trung gian ở Tính đơn trị (Uniqueness): Các kết quả trung gian ở mỗi bước phải được xác định đơn trị phụ thuộc vào mỗi bước phải được xác định đơn trị phụ thuộc vào đầu vào và kết quả của bước trước. đầu vào và kết quả của bước trước. - Tính phổ dụng (Generality): Áp dụng được cho một Tính phổ dụng (Generality): Áp dụng được cho một lớp bài toán. lớp bài toán. Ví dụ Ví dụ : Với thuậttoán Insertion-Sort : Với thuậttoán Insertion-Sort - Thuậttoán mô tả chính xác từng bước thực hiện Thuậttoán mô tả chính xác từng bước thực hiện - Thuậttoán dừng sau hữu hạn bước Thuậttoán dừng sau hữu hạn bước - Các kết quả trung gian ở mỗi bước được xác định một Các kết quả trung gian ở mỗi bước được xác định một cách đơn trị, chỉ phụ thuộc vào và kết quả ở bước cách đơn trị, chỉ phụ thuộc vào và kết quả ở bước trước trước - Thuậttoán áp dụng được cho một lớp bài toánThuậttoán áp dụng được cho một lớp bài toán 3. Các cấu trúc của thuậttoán 3. Các cấu trúc của thuậttoán - Cấu trúc tuần tự Cấu trúc tuần tự - Cấu trúc lựa chọn Cấu trúc lựa chọn - Cấu trúc lặp Cấu trúc lặp 4. Biểu diễn thuậttoán 4. Biểu diễn thuậttoán - Có nhiều cách biểu diễn Có nhiều cách biểu diễn - Quy ước về biểu diễn thuậttoán bằng ngôn Quy ước về biểu diễn thuậttoán bằng ngôn ngữ giả code: ngữ giả code: + Việc viết dòng thụt vào biểu thị cấu trúc khối + Việc viết dòng thụt vào biểu thị cấu trúc khối + Ký hiệu “ + Ký hiệu “ ” : Lời chỉ dẫn phía sau ” : Lời chỉ dẫn phía sau + j + j i: Gán giá trị của i cho j i: Gán giá trị của i cho j + j + j i i e: Gán giá trị của e cho i và j e: Gán giá trị của e cho i và j + Các cấu trúc lặp WHILE, FOR, và REPEAT + Các cấu trúc lặp WHILE, FOR, và REPEAT và các cấu trúc điều kiện IF, THEN, và ELSE và các cấu trúc điều kiện IF, THEN, và ELSE được thể hiện giống như trong Pascal. được thể hiện giống như trong Pascal. 5. Phân tích thuật toán? 5. Phân tích thuật toán? - Phân tích thuậttoán Phân tích thuậttoán là quá trình tìm ra là quá trình tìm ra những đánh giá về thời gian tính và bộ những đánh giá về thời gian tính và bộ nhớ cần thiết để thực hiện thuật toán. nhớ cần thiết để thực hiện thuật toán. - Phân tích có thể cho biết tính khả thi Phân tích có thể cho biết tính khả thi của thuậttoán từ đó có thể loại các của thuậttoán từ đó có thể loại các thuậttoán không tốt. thuậttoán không tốt. - Lượng thời gian tính và bộ nhớ cần Lượng thời gian tính và bộ nhớ cần thiết để thực hiện thuậttoán được gọi là thiết để thực hiện thuậttoán được gọi là độ phức tạp của thuậttoán độ phức tạp của thuậttoán . . * * Ở đậy ta chỉ quan tâm đánh giá về thời gian Ở đậy ta chỉ quan tâm đánh giá về thời gian tính. tính. 6. Một số khái niệm cơ bản 6. Một số khái niệm cơ bản . . - Kích thước dữ liệu đầu vào: Kích thước dữ liệu đầu vào: Số bít cần thiết Số bít cần thiết để biểu diễn nó. để biểu diễn nó. - Phép toán cơ bản Phép toán cơ bản : Phép toán có thể thực : 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ố 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 đầu không phụ thuộc vào kích thước dữ liệu đầu vào ( vào ( Phép tính số học, so sánh, gán, . Phép tính số học, so sánh, gán, . ). ). Từ số lượng phép toán cơ bản => Thời gian Từ số lượng phép toán cơ bản => Thời gian thuậttoán đòi hỏi. thuậttoán đòi hỏi. Đánh giá độ phức tạp thuậttoán Đánh giá độ phức tạp thuậttoán l l à đánh giá à đánh giá số phép toán cơ bản như là hàm của kích số phép toán cơ bản như là hàm của kích thước dữ liệu đầu vào. thước dữ liệu đầu vào. [...]... tính tốt nhất của thuật toán là thời gian tối thiểu để thực hiện thuậttoán với mọi bộ dữ liệu đầu vào kích thước n Thời gian tính tồi nhất của thuậttoán là thời gian nhiều nhất để thực hiện thuậttoán với mọi bộ dữ liệu đầu vào kích thước n Thời gian tính trung bình của thuậttoán là thời gian trung bình để thực hiện thuậttoán với mọi bộ dữ liệu đầu vào kích thước n Ví dụ Xét thuậttoán tìm số lớn... thời gian tính của thuậttoán Nếu thuậttoán đòi hỏi thời gian tính tốt nhất là t(n) với kích thước đầu vào n và t(n)=O(g(n)) thì thời gian tính tốt nhất của thuậttoán có bậc không quá g(n) (hay thời gian tính tốt nhất của thuậttoán có bậc là O(g(n)) Nếu thuậttoán đòi hỏi thời gian tính tồi nhất là t(n) với kích thước đầu vào n và t(n)=O(g(n)) thì thời gian tính tồi nhất của thuậttoán có bậc không... (hay thời gian tính tồi nhất của thuậttoán có bậc là O(g(n)) Nếu thuậttoán đòi hỏi thời gian tính trung bình là t(n) với kích thước đầu vào n và t(n)=O(g(n)) thì thời gian tính tồi nhất của thuật toán có bậc không quá g(n) (hay thời gian tính trung bình của thuậttoán có bậc là O(g(n)) Khái niệm bậc ít nhất của thời gian tính tốt nhất, tồi nhất, trung bình của thuật toán được định nghĩa tương tự bằng... nghĩa trên Nếu thời gian tính tốt nhất (tồi nhất, trung bình) của thuậttoán vừa là O(g(n)) vừa là Ω(g(n)) thì ta nói thời gian tính tốt nhất (tồi nhất, trung bình) của thuật toán là Θ(g(n)) !!! Khi nói thời gian tính của thuật toán là O(f(n)) ta hiểu đó là thời gian tính trong tình huống tồi nhất Còn khi nói thời gian tính của thuậttoán là Ω(f(n)) ta hiểu đó là thời gian tính trong tình huống tốt... Θ(n2) Ví dụ 3 Đánh giá thời gian tính của thuậttoán sau: Function Linear_Search (s, n, key); Begin i:=0; Repeat i:=i+1; Until (i>=n) or (si=key); Linear_Search := i; End; Rõ ràng, thời gian tính của thuậttoán có thể đánh giá bởi số lần thực hiện của câu lệnh i:=i+1; Ta có: Nếu s1:=key => câu lệnh i:=i+1 thực hiện 1 lần => thời gian tính tốt nhất của thuậttoán là Θ(1); Nếu key không có trong dãy =>... không có trong dãy => câu lệnh i:=i+1 thực hiện n+1 lần => thời gian tính tồi nhất của thuậttoán là Θ(n); Ta sẽ tính thời gian trung bình t(n) của thuậttoán Nếu si=key (i=1, 2, , n) => câu lệnh i:=i+1 thực hiện i lần và nếu không tìm thấy thì câu lệnh i:=i+1 thực hiện n lần => thời gian tính trung bình của thuậttoán là [(1+2+ +n) +n ]/(n+1) Ta có [(1+2+ +n) +n ]/(n+1)=[n(n+1)/2+n]/(n+1) . - Thuật toán áp dụng được cho một lớp bài toán Thuật toán áp dụng được cho một lớp bài toán 3. Các cấu trúc của thuật toán 3. Các cấu trúc của thuật toán. bài toán. lớp bài toán. Ví dụ Ví dụ : Với thuật toán Insertion-Sort : Với thuật toán Insertion-Sort - Thuật toán mô tả chính xác từng bước thực hiện Thuật