Định nghĩa thuật toán: Thuật toán để giải một bài toán là một dãy hữu hạn các thao tác được sắp xếp theo một trình tự xác định sao cho sau khi thực hiện dãy thao tác ấy, từ Input của bài[r]
(1)Bài BÀI TOÁN VÀ THUẬT TOÁN (2) • Khái niệm bài toán • Khái niệm thuật toán • Các ví dụ minh họa thuật toán (3) I Bài toán Ví dụ: VD1: Bài toán tìm ước chung lớn hai số nguyên dương - Input: Hai số nguyên dương m và n - Output: UCLN m và n VD2: Tìm nghiệm PT bậc hai 𝑎𝑥 + 𝑏𝑥 + 𝑐 = (a ≠ 0) - Input: các số thực a, b, c (a ≠ 0) - Output: Tất các nghiệm x thỏa mãn pt: 𝑎𝑥 + 𝑏𝑥 + 𝑐 = Khái niệm bài toán: Bài toán là việc nào đó ta muốn máy tính thực - Chú ý: Hai yếu tố cần quan tâm là Input và Output tức là thông tin đưa vào và xuất (4) II Thuật toán Các ký hiệu: – – – – – – : bắt đầu, kết thúc : nhập liệu : xử lý : điều kiện so sánh : quy trình thao tác : Xuất KQ màn hình (5) Ví dụ: Tìm giá trị lớn dãy số nguyên? - Xác định bài toán + Input: số nguyên N và dãy N số nguyên: 𝑎0 …𝑎𝑛−1 + Output: GTLN dãy số - Ý tưởng + Khởi tạo giá trị Max là Temp = 𝑎0 + Chạy vòng lặp với i = và i <= n-1, 𝑎𝑖 > temp thì temp = 𝑎𝑖 + Thuật toán kết thúc i > n-1 (6) - C1: Sơ đồ khối (7) - C2 : Thuật toán tìm kiếm (vét cạn) + Bước 1: Nhập N và dãy số 𝑎0 , … , 𝑎𝑛−1 ; + Bước 2: Max ← 𝑎0 , i← 1; + Bước 3: Nếu i>N thì xuất giá trị Max và kết thúc; + Bước 4: - Bước 4.1: Nếu 𝑎𝑖 > 𝑀𝑎𝑥 𝑡ℎì 𝑀𝑎𝑥 ← 𝑎𝑖 ; - Bước 4.2: i← 𝑖 + quay lại bước • Ghi chú: i là số biến, I thay đổi từ đến N-1; ←: hiểu là gán giá trị biểu thức Định nghĩa thuật toán: Thuật toán để giải bài toán là dãy hữu hạn các thao tác xếp theo trình tự xác định cho sau thực dãy thao tác ấy, từ Input bài toán, ta nhận Output bài toán cần tìm (8) • Giải bài toán trên với N=11 và dãy số: 5,1,4,7,6,3,15,8,4,9,12 Dãy số 15 i Max 5 7 15 15 15 15 • Tính chất thuật toán: - Tính dừng: thuật toán kết thúc sau số hữu hạn lần thực các thao tác - Tính xác định: Thuật toán kết thúc xác định để thực tiếp - Tính đúng đắn: thuật toán kết thúc ta phải nhận Output cần tìm (9) III Một số ví dụ thuật toán - Thuật toán xếp tráo đổi - Thuật toán tìm kiếm hay vét cạn - Thuật toán tìm kiếm nhị phân Ví dụ: Cho a là dãy gồm các số nguyên: 6, 1, 5, 3, 7, 8, 10, 7, 12, Sau xếp ta có dãy: 1, 3, 4, 5, 6, 7, 7, 8, 10, 12 (10) - Thuật toán xếp tráo đổi: Cho dãy a gồm N số nguyên 𝑎1 , … , 𝑎𝑛 𝐶ầ𝑛 𝑠ắ𝑝 𝑥ế𝑝 𝑐á𝑐 𝑠ố ℎạ𝑛𝑔 để 𝑑ã𝑦 𝑎 𝑡𝑟ở 𝑡ℎà𝑛ℎ 𝑑ã𝑦 𝑘ℎô𝑛𝑔 𝑔𝑖ả𝑚 (𝑡ứ𝑐 𝑙à 𝑠ố ℎạ𝑛𝑔 𝑡𝑟ướ𝑐 𝑘ℎô𝑛𝑔 𝑙ớ𝑛 ℎơ𝑛 𝑠ố ℎạ𝑛𝑔 𝑠𝑎𝑢) - Xác định bài toán + Input: Dãy a gồm N số nguyên: 𝑎0 , … , 𝑎𝑛−1 ; + Output: Dãy a đã xếp tăng dần - Ý tưởng: Với cặp số hạng đứng liền kề dãy, số trước lớn số sau ta đổi chỗ chúng Việc dó lặp lại không có đổi chỗ nào xảy Thuật toán: B1: Nhập N, dãy a: 𝑎0 , … , 𝑎𝑛−1 B2: 𝑗 ← 𝑛-1 B3: Nếu 𝑗 < thì xuất dãy a và kết thúc B4: j ← 𝑗 − 1, 𝑖 ← B5: 𝑖 ← 𝑖 + B6: Nếu i > 𝑗 𝑡ℎì 𝑞𝑢𝑎𝑦 B3 B7: Nếu 𝑎𝑖 > 𝑎𝑖+1 thì hoán vị 𝑎𝑖 , 𝑎𝑖+1 cho B8: quay lại B5 Ghi chú: - i, j là số biến với i từ đến n-1 và j từ n-1 đến - Mỗi lượt so sánh bỏ bớt số hạng cuối dãy j khời tạo là n-1, sau vòng lặp j giảm j<1 (11)