Khái niệm bài toán và thuật toán Trước khi xem xét đặc trưng của “bài toán” ta xét một sốví dụ. Ví dụ1. Bài toán kiểm tra tính nguyên tố. Cho : sốnguyên dương N; Cần biết: N có là sốnguyên tốhay không? Ví dụ2. Bài toán quản lý hồsơcán bộ. Có : Hồsơgốc của các cán bộtrong cơquan Cần : Bảng thống kê, phân loại cán bộtheo trình độvăn hoá Qua các ví dụtrên, ta thấy các bài toán được cấu tạo bởi hai thành phần cơbản: Thông tin vào (input): Thông báo cho ta biết các dữliệu đã có; Thông tin ra (output) : Thông báo cho ta cái cần tìm từinput; Nhưvậy, việc cho một bài toán có nghĩa là cho input và output của nó. Cho bài toán nghĩa là làm rõ câu hỏi Có các dữkiện gì và phải làm gì? nhưng không cho biết Phải làm thếnào. Việc giải bài toán có nghĩa là xuất phát từinput dùng một sốhữu hạn các bước thao tác thích hợp đểtìm được output theo yêu cầu của bài toán đã đềra.
MODULE THUẬT TOÁN XỬ LÝ THÔNG TIN 7.1 Khái niệm toán thuật toán Trước xem xét đặc trưng “bài toán” ta xét số ví dụ Ví dụ Bài toán kiểm tra tính nguyên tố Cho : số nguyên dương N; Cần biết: N có số nguyên tố hay không? Ví dụ Bài toán quản lý hồ sơ cán Có : Hồ sơ gốc cán quan Cần : Bảng thống kê, phân loại cán theo trình độ văn hoá Qua ví dụ trên, ta thấy toán cấu tạo hai thành phần bản: Thông tin vào (input): Thông báo cho ta biết liệu có; Thông tin (output) : Thông báo cho ta cần tìm từ input; Như vậy, việc cho toán có nghĩa cho input output Cho toán nghĩa làm rõ câu hỏi "Có kiện phải làm gì?" không cho biết "Phải làm nào" Việc giải toán có nghĩa xuất phát từ input dùng số hữu hạn bước thao tác thích hợp để tìm output theo yêu cầu toán đề Lưu ý toán học có xu hướng nghiên cứu định tính toán Theo xu hướng này, xem xét toán, người ta cần chứng tỏ tồn output cho input có thể, xét xem có "lời giải" nghiên cứu tính chất chúng Trong nghiên cứu vậy, nhiều ta không cần tìm lời giải cách tường minh cách dùng công cụ toán học khác cách thích hợp ta chứng minh chặt chẽ điều khẳng định liên quan đến lời giải Chẳng hạn, định lý toán học khẳng định hàm f(x) liên tục đoạn [a, b] f(a) f(b)b USCLN(a,b) = USCLN(b, a-b) Bài toán Input : a, b nguyên dương Output: UCLN a b Thuật toán Euclid Bước 1: Nếu a = b lấy giá trị chung làm USCLN kết thúc Bước 2: Nếu a> b bớt a lượng b quay trở lại bước Bước 3: Ngược lại, bớt b lượng a quay trở lại bước Các thao tác bao gồm: Phép gán giá trị: xây dựng giá trị đối tượng (ví dụ bớt a lượng b hay cho USCLN a) Phép dừng, kết thúc trình xử lý Phép chuyển có điều kiện cho phép thực tiếp từ bước ví dụ sau bước quay trở lại bước Ở cuối bước thuật toán ta gặp thao tác "thực bước 1" Trong trường hợp xử lý chuyển sang thực bước thuật toán Khi diễn đạt thuật toán ta ngầm qui định không gặp phép chuyển điều khiển xử lý thực tuần tự: sau bước thứ i chuyển sang bước thứ i + Như bước không quay bước thực tiếp bước 7.2 Một số đặc trưng thuật toán Knuth – tác giả sách tiếng “Nghệ thuật lập trình” đưa đặc trưng sau thuật toán: Input (dữ liệu vào): Mỗi thuật toán cần có số (có thể 0) liệu ban đầu Trong ví dụ thuật toán Euclid nói hai số m n Output (Kết quả): Thuật toán phải cho kết - mục đích giải toán thông qua thuật toán Tính xác định:Tính xác định thuật toán đòi hỏi bước thao tác phải hoàn toàn xác định, nhập nhằng, lẫn lộn, tuỳ tiện Nói cách khác, điều kiện, chủ thể xử lý dù người hay máy thực bước thuật toán phải cho kết Chính vậy, ngôn ngữ mô tả thuật toán phải chặt chẽ để hiểu lầm Tính khả thi: Các dẫn thuật toán phải có khả thực thời gian hữu hạn Ví dụ sau đâu mô tả thuật toán: gán cho x giá trị toán tô màu giải cho giá trị toán tô màu không giải (Bài toán tô màu khẳng định không cần dùng màu để tô nước đồ đề hai nước có biên giới chung phải có màu khác Người ta kiểm chứng thực tế chưa tìm chứng minh cho toán này) Tính kết thúc (tính dừng): Việc thực bước theo thuật toán phải dừng sau số hữu hạn bước Thuật toán Euclid tìm UCLN thoả mãn tính dừng sau bước ta thấy tổng a+b giảm thực không nhỏ Vì trình định phải dừng sau số hữu hạn bước Ngoài đặc trưng trên, số tài liệu khác người ta nói đến tính phổ dụng Tính phổ dụng: Tính phổ dụng có nghĩa thuật toán áp dụng với lớp toán với input thay đổi không áp dụng cho trường hợp cụ thể Thuật toán Euclid nói áp dụng cho cặp hai số tự nhiên Cần lưu ý tính dừng tính xác định điều kiện cần để trình thuật toán tính phổ dụng tính chất thường thấy có nhiều toán có input hoàn toàn xác định, không tồn lớp toán tương tự 7.3 Các phương pháp diễn tả thuật toán Người ta thường diễn tả thuật toán ba cách thức sau 7.3.1 Liệt kê bước Liệt kê quy tắc, thị thực giống ví dụ nói Ta xét thêm ví dụ sau Có 43 que diêm Hai người chơi luân phiên bốc diêm Mỗi lượt, người bốc từ đến que diêm Người bốc cuối thắng Thuật toán để người trước thắng diễn tả cách liệt kê bước sau: Bước 1: Bốc que đợi đối phương Bước 2: Đối phương bốc (giả sử x que, 0 Tuyên bố thắng + Đối phương lấy x que diêm Ta lấy 4-x que Hình 7.3 Lưu đồ thuật toán trò chơi bốc diêm 7.3.3 Ngôn ngữ thuật toán Với cách thức này, thuật toán diễn đạt gần ngôn ngữ tự nhiên số cách nói “trong điều kiện thoả mãn lặp lại nhóm thao tác“ hay “nếu điều kiện thoả mãn thực nhóm thao tác ngược lại thực nhóm thao tác kia” hay “sau thao tác thực thao tác kia” Như diễn đạt rõ cách thiết lập thứ tự thao tác gọi cấu trúc điều khiển Cấu trúc điều khiển cách thể thuật toán ngôn ngữ lập trình bậc cao mà ta thảo luận kỹ phần ngôn ngữ lập trình Ví dụ thuật giải Euclid thể sau: Trong a ≠ b lặp lại khối sau Nếu a > b Bớt a lượng b Nếu không Bớt b lượng a Cho tới a= b tuyên bố USCLN giá trị chung a b Hình 7.4 Thể thuật toán Euclid cấu trúc điều khiển 7.4 Sơ lược đánh giá thuật toán Đối với toán, có nhiều thuật toán chúng phải cho output input Tuy nhiên chúng khác hiệu quả: Hiệu thời gian: cách xử lý nhanh hay chậm Ta đánh giá vào số bước thực Hiệu không gian Có thể đánh giá không gian lưu trữ theo số đối tượng dùng để ghi nhớ kết (kể kết trung gian) Ví dụ: Để tìm USCLN có nhiều thuật toán Thuật toán 1: Bước 1: Phân tích số a b thành tích thừa số nguyên tố Bước 2:lấy tích thừa số chung với số mũ nhỏ làm USCLN Bước 3: Kết thúc xử lý Thuật toán : Thuật toán Euclid cải tiến Bước 1: Chia a cho b tìm số dư r; Bước 2: Nếu r = thông báo kết quả: UCLN b kết thúc công việc Bước 3: Nếu r > gán giá trị b cho a, gán giá trị r cho b quay trở lại thực bước Về hiệu không gian thời gian thuật toán tồi thuật toán Euclid trình bày trước nhiều số bước cần thiết thực để phân tích thừa số nguyên tố lớn Thuật toán thực cải tiến so với thuật toán Euclid mà ta trình bày trước phép chia lấy phần dư thực tế thay cho hàng loạt phép trừ nói thuật toán Euclid Vì trường hợp chung tìm USCLN với số bước xử lý nhiều Trong tin học có ngành chuyên đánh giá độ phức tạp thuật toán, chủ yếu đánh giá hiệu thời gian Thực tế sử dụng cho thấy thách thức không gian lưu trữ giải dễ thách thức thời gian thực ... dương a, b Cần xây dựng thuật toán để tìm ước số chung lớn (UCLN) a b Dưới thuật toán Euclid đề xu t cho toán nêu dựa tính chất hiển nhiên : Nếu a = b b USCLN a b Ngược lại a < b USCLN(a,b) =... loạt phép trừ nói thuật toán Euclid Vì trường hợp chung tìm USCLN với số bước xử lý nhiều Trong tin học có ngành chuyên đánh giá độ phức tạp thuật toán, chủ yếu đánh giá hiệu thời gian Thực tế