Chương 5 Thuật toán và độ phức tạp của thuật toán 5.1. Tổng quan về thuật toán Thuật toán là một dãy các bước, mỗi bước mô tả chính xác các phép toán hoặc hành động cần thực hiện để giải quyết một vấn đề. Thuật toán tìm ước số chung lớn nhất của hai số nguyên. Input: m, n nguyên dương. Output: g, ước chung lớn nhất của m và n. Bước 1: tìm r, phần dư của phép chia m cho n. Bước 2: Nếu r = 0 thì g := n và dừng thuật toán. Ngược lại, (r 0) m := n; n := r; Quay lại bước 1. 5.2. Các đặc trưng của thuật toán. Input. Là các giá trị cần đưa vào (có thể là rỗng) khi cần thực hiện thuật toán Output. Là các giá trị có quan hệ hoàn toàn xác định với các dữ liệu vào và là kết quả của sự thực hiện thuật toán Tính xác định. Mỗi bước của thuật toán cần phải được mô tả một cách chính xác. Tính khả thi. Các phép toán trong các bước của thuật toán phải đủ đơn giản. Tính dừng. Thuật toán phải dừng sau hữu hạn bước ứng với mọi bộ dữ liệu thõa mãn điều kiện của dữ liệu vào. 5.3. Đặc tả thuật toán Đặc tả thuật toán cần chỉ ra các đặc điểm sau : 1. Các đối tượng và phương tiện của thuật toán cần sử dụng (nhập). 2. Điều kiện ràng buộc (nếu có) trên các đối tượng và phương tiện đó. 3. Các sản phẩm ,kết quả (xuất). 4. Các yêu cầu trên sản phẩm, kết quả. Thường xuất hiện dưới dạng quan hệ giữa kết quả và các đối tượng, phương tiện sử dụng.
Chương Thuật toán độ phức tạp thuật toán 5.1 Tổng quan thuật toán Thuật toán dãy bước, bước mơ tả xác phép toán hành động cần thực để giải vấn đề Thuật tốn tìm ước số chung lớn hai số nguyên Input: m, n nguyên dương Output: g, ước chung lớn m n Bước 1: tìm r, phần dư phép chia m cho n Bước 2: Nếu r = g := n dừng thuật tốn Ngược lại, (r 0) m := n; n := r; Quay lại bước 5.2 Các đặc trưng thuật toán Input Là giá trị cần đưa vào (có thể rỗng) cần thực thuật tốn Output Là giá trị có quan hệ hoàn toàn xác định với liệu vào kết thực thuật toán Tính xác định Mỗi bước thuật tốn cần phải mơ tả cách xác Tính khả thi Các phép toán bước thuật toán phải đủ đơn giản Tính dừng Thuật tốn phải dừng sau hữu hạn bước ứng với liệu thõa mãn điều kiện liệu vào 5.3 Đặc tả thuật toán Đặc tả thuật toán cần đặc điểm sau : Các đối tượng phương tiện thuật toán cần sử dụng (nhập) Điều kiện ràng buộc (nếu có) đối tượng phương tiện Các sản phẩm ,kết (xuất) Các yêu cầu sản phẩm, kết Thường xuất dạng quan hệ kết đối tượng, phương tiện sử dụng 5.3 Các vấn đề liên quan đến thuật toán Thiết kế thuật toán: Tức làm để tìm thuật tốn cho tốn đặt Tính đắn thuật tốn:Ta cần phải chứng minh thuật toán làm phải cho kết với liệu vào hợp lệ Phân tích thuật tốn: Tức việc đánh giá độ phức tạp thuật toán 5.4 Độ phức tạp thuật toán Độ phức tạp thuật toán:là lượng thời gian nhớ cần thiết để thực thuật toán Chúng ta quan tâm đến: - Thời gian tối thiểu để thực - Thời gian tối đa để thực thuật toán - Thời gian trung bình thực thuật tốn 5.4 Độ phức tạp thuật tốn Tính hiệu quả: Thông thường ta dựa vào hai tiêu chuẩn sau: - Thuật toán đơn giản, dễ hiểu, dễ cài đặt - Thuật toán sử dụng tiết kiệm nguồn tài nguyên máy tính chạy nhanh được: Dung lượng khơng gian nhớ cần thiết để lưu trữ liệu vào, kết tính tốn trung gian kết thuật toán Thời gian cần thiết để thực thuật toán (thời gian chạy) 5.4 Độ phức tạp thuật tốn Có hai cách để đánh giá thời gian thực thuật toán: - Phương pháp thử nghiệm: Các liệu vào Chương trình dịch Tốc độ thực phép tốn máy tính - Phương pháp lý thuyết: cỡ liệu vào 5.4 Độ phức tạp thuật tốn Bài tốn tháp Hà Nội Ta tính số lần thực việc chuyển đĩa từ cọc sang cọc khác (không đặt đĩa to lên đĩa nhỏ) để chuyển từ cọc A sang cọc B Gọi số F(n), ta có: F(1) = 1; F(n) = 2F(n-1) + 1; với n > Một cách quy nạp, ta có F(n) = 2n-1 Với n = 64 ta có F(n) = 264 – lần chuyển, giả sử lần chuyển giây, ta có 5*1011 năm thực 5.4 Độ phức tạp thuật toán 10 5.5 Quy tắc đánh giá thời gian thuật toán Qui tắc tổng Nếu T1(n) = O(f1(n)) T2(n) = O(f2(n)) T1(n) + T2(n) = O(max{f1(n),f2(n)}) Thời gian thực lệnh đơn: gán (không chưa lời gọi hàm), đọc, viết, goto O(1) Thời gian thực câu lênh phức xác định qua câu lệnh thành phần Lệnh if Ví dụ if E then S1 else S2 Và giả sử thời gian thực lện S1 S2 O(f1(n)) O(f2(n)) Khi thời gian thực lệnh if O(max{f1(n),f2(n)}) 11 5.5 Quy tắc đánh giá thời gian thuật toán Lệnh case Được đánh lệnh if Lệnh while Ví dụ: while E S Giả sử thời gian thực lệnh S O(f(n)) Và giả sử g(n) số tối đa lần thực lệnh S Thì thời gian thực lệnh while là: O(f(n))g(n) Lệnh repeat Được đánh lệnh while Lệnh for Được đánh lệnh repeat, while 12 13 ... Với n = 64 ta có F(n) = 264 – lần chuyển, giả sử lần chuyển giây, ta có 5* 1011 năm thực 5. 4 Độ phức tạp thuật toán 10 5. 5 Quy tắc đánh giá thời gian thuật toán Qui tắc tổng Nếu T1(n) = O(f1(n))... sử thời gian thực lện S1 S2 O(f1(n)) O(f2(n)) Khi thời gian thực lệnh if O(max{f1(n),f2(n)}) 11 5. 5 Quy tắc đánh giá thời gian thuật toán Lệnh case Được đánh lệnh if Lệnh while Ví dụ: while... giản Tính dừng Thuật tốn phải dừng sau hữu hạn bước ứng với liệu thõa mãn điều kiện liệu vào 5. 3 Đặc tả thuật toán Đặc tả thuật toán cần đặc điểm sau : Các đối tượng phương tiện thuật toán