Nối tiếp phần 1 bộ bài giảng Tin học đại cương mời các bạn cùng tìm hiểu phần 2 (Chương 1) với các nội dung chính như: Giải quyết bài toán bằng máy tính: Khái niệm về bài toán; quá trình giải quyết bài toán bằng máy tính; các phương pháp giải quyết bài toán bằng máy tính; phân loại bài toán;...
IT1110 Tin học đại cương Phần II Giải tốn Nguyễn Bá Ngọc Ơn tập nội dung phần I Phần I: TIN HỌC CĂN BẢN Thông tin Biểu diễn liệu máy tính Máy tính mạng máy tính Hệ điều hành hệ thống ứng dụng Nội dung phần II Chương 1: Giải tốn máy tính Khái niệm toán Q trình giải tốn máy tính Các phương pháp giải tốn máy tính Phân loại toán Chương 2: Thuật toán Định nghĩa thuật toán Biểu diễn thuật toán Một số thuật tốn thơng dụng Thuật tốn đệ quy Thuật giải heuristic Nội dung phần II Chương 1: Giải tốn máy tính Khái niệm tốn Q trình giải tốn máy tính Các phương pháp giải tốn máy tính Phân loại toán Chương 2: Thuật toán Định nghĩa thuật toán Biểu diễn thuật toán Một số thuật tốn thơng dụng Thuật tốn đệ quy Thuật giải heuristic 1.1 Khái niệm vấn đề toán Vấn đề rộng toán? Pitago chia vấn đề ra: Theorema vấn đề cần khẳng định đúngsai Problema vấn đề cần tìm giải pháp để đạt mục tiêu xác định từ điều kiện ban đầu Diễn đạt sơ đồ: A → B A giả thiết, điều kiện ban đầu B kết luận, mục tiêu cần đạt → suy luận, giải pháp cần xác định 1.2 Các bước giải toán máy tính Bước 1: Xác định vấn đề-bài tốn Bước 2: Lựa chọn phương pháp giải Bước 3: Xây dựng thuật tốn thuật giải Bước 4: Cài đặt chương trình Bước 5: Hiệu chỉnh chương trình Bước 6: Thực chương trình 1.3 Các phương pháp giải vấn đề máy tính Giải vấn đề theo hướng xác định trực tiếp lời giải xác định trực tiếp lời giải qua thủ tục tính tốn thủ tục bao gồm số hữu hạn thao tác sơ cấp Giải vấn đề theo hướng tìm kiếm lời giải nguyên lý "thử sai" phương pháp liệt kê hay vét cạn thử ngẫu nhiên quay lui chia để trị 1.4 Phân loại toán Bài tốn đa thức Bài tốn khơng đa thức NP Problems Nội dung phần II Chương 1: Giải tốn máy tính Khái niệm tốn Q trình giải tốn máy tính Các phương pháp giải tốn máy tính Phân loại tốn Chương 2: Thuật toán Định nghĩa thuật toán Biểu diễn thuật toán Một số thuật toán thơng dụng Thuật tốn đệ quy Thuật giải heuristic 2.1 Định nghĩa thuật toán Là khái niệm sở toán học tin học Bao gồm dãy hữu hạn lệnh/chỉ thị rõ ràng thi hành để hướng dẫn thực hành động nhằm đạt mục tiêu đề Thuật toán thể phương pháp để giải vấn đề 10 Ngôn ngữ lưu đồ (2) Nút điều kiện: hình thoi có ghi điều kiện cần kiểm tra, thường có cung vào cung (tương ứng với trường hợp đúng/sai) Đúng a0 Δ=0 sai x=-b/(2a) Xuất: phương trình có nghiệm kép x Kết thúc Xuấtphương trình vơ nghiệm 17 Mã giả Sử dụng mệnh đề có cấu trúc chuẩn hóa dùng ngôn ngữ tự nhiên Sử dụng ký hiệu toán học, biến, cấu trúc kiểu thủ tục Hành động gán: i i+1 Tiện lợi, đơn giản, dễ hiểu 18 Mã giả (2) Các cấu trúc thường gặp: Cấu trúc chọn: Cấu trúc lặp if (điều kiện) then (hành động) end if if (điều kiện) then (hành động 1) else (hành động 2) end if while (điều kiện) (hành động) end while repeat (hành động) until (điều kiện) for (biến)=(giá trị đầu) to (giá trị cuối) (hành động) end for for (biến)=(giá trị cuối) downto (giá trị đầu) (hành động) end for Cấu trúc nhảy goto nhãn x; 19 Ví dụ: thuật tốn giải phương trình bậc Nhập: hệ số a, b, c Xuất: kết luận nghiệm phương trình bậc hai Thuật tốn: if a = then Xuất: Khơng phải phương trình bậc hai, Dừng end if delta b*b-4*a*c if delta > then x1 (-b-sqrt(Δ))/(2*a) x2 (-b+sqrt(Δ))/(2*a) Xuất: x1 x2, Dừng else if delta = then x12 -b/(2*a), Xuất: nghiệm kép x12 else Xuất: phương trình vơ nghiệm end if 20 2.3 Một số thuật tốn thơng dụng Thuật toán Thuật toán nguyên Thuật toán dãy Thuật tốn Thuật tốn kiểm tra số ngun tố tìm USCLN, BSCNN số tìm phần tử lớn xếp tìm kiếm 21 Tìm phần tử lớn dãy hữu hạn số Nhập: dãy số a[1], a[2], a[3],… a[n] Xuất: max giá trị lớn dãy số cho Thuật toán: max a[1] for i = to n if max < a[i] then max a[i] end if end for Xuất: max giá trị lớn dãy số 22 2.4 Thuật toán đệ quy Có số trường hợp, cách giải vi phạm tính chất thuật tốn lại đơn giản chấp nhận Bài tốn phân tích đưa tới việc giải tốn loại cấp độ thấp Ví dụ: Định nghĩa giai thừa 0! = n! = n*(n-1)! với n>0 Định nghĩa dãy số Fibonacci: 1, 1, 2, 3, 5, 8, 13, f1 = 1, f2 = 1, fn = fn-1 + fn-2 23 Thuật toán đệ quy (2) Thuật tốn đệ quy tính giai thừa số tự nhiên: Input: số tự nhiên n Output: F(n) n! Thuật giải: if n=0 then F if n>0 then F F(n-1)*n Output F 24 Thuật toán đệ quy (3) Thuật tốn đệ quy tính số hạng thứ n dãy số Fibonacci: Input: số tự nhiên n Output: F(n) số hạng thứ n dãy Thuật giải: if n=1 or n=2 then F if n>2 then F F(n-1)+F(n-2) Output F 25 Thuật toán đệ quy (4) Đặc điểm thuật tốn đệ quy: Có trường hợp sở/trường hợp dừng Có phần đệ quy bên thuật tốn (nó gọi đến nó) Có biến đổi tiến tới trường hợp sở 26 Bài tập Viết thuật tốn tìm USCLN hai số tự nhiên Viết thuật tốn tìm BSCNN hai số tự nhiên Viết thuật tốn tìm phần tử lớn dãy số hữu hạn Viết thuật toán xếp Viết thuật toán tìm kiếm 27 2.5 Thuật giải heuristic Thường tìm lời giải tốt (những chưa tốt nhất) Dễ dàng nhanh chóng so với giải thuật tối ưu Thể cách hành động tự nhiên, gần gũi với suy nghĩ hành động người 28 Thuật giải heuristic (2) Các nguyên lý Nguyên lý vét cạn thơng minh: tốn tìm kiếm khơng gian tìm kiếm lớn => giới hạn khơng gian tìm kiếm thực dị tìm đặc biệt dựa vào đặc thù tốn để nhanh chóng tìm mục tiêu Nguyên lý tham lam: lấy tiêu chuẩn tối ưu toàn cục làm tiêu chuẩn chọn lựa hành động cục bước trình tìm kiếm lời giải Nguyên lý thứ tự: thực hành động theo thứ tự hợp lý không gian khảo sát nhằm nhanh chóng đạt lời giải tốt 29 30 ... b*b-4*a*c if delta > then x1 (-b-sqrt(Δ))/ (2* a) x2 (-b+sqrt(Δ))/ (2* a) Xuất: x1 x2, Dừng else if delta = then x 12 -b/ (2* a), Xuất: nghiệm kép x 12 else Xuất: phương trình vơ nghiệm end if 20 ... : Không phải phương trình bậc a≠ Δ = b2 - 4ac x1 = (-b-sqrt(Δ))/ (2* a) x2 = (-b+sqrt(Δ))/ (2* a) Xuất: phương trình có nghiệm x1, x2 sai Δ>0 Δ=0 sai x=-b/(2a) Xuất: phương trình có nghiệm kép x... thức: x1 = (-b-sqrt(Δ))/ (2* a) x2 = (-b+sqrt(Δ))/ (2* a) 3 .2 Xuất kết quả: phương trình có hai nghiệm x x2 Nếu Δ xuất kết quả: phương trình có nghiệm kép -b/ (2* a) Nếu Δ