BỘ GIÁO DỤC VÀ ðÀO TẠO TRƯỜNG ðẠI HỌC NÔNG NGHIỆP HÀ NỘI VŨ KIM THÀNH TOÁN RỜI RẠC (Giáo trình dành cho sinh viên ngành cơng nghệ thơng tin) Hà nội 2008 Trường ðại học Nông nghiệp Hà Nội – Giáo trình Giáo trình Tốn Rời rạc…….…………………… MỤC LỤC Lời nói đầu Chng THUẬT TỐN ðịnh nghĩa Mơ tả thuật tốn lưu đồ Mơ tả thuật tốn ngơn ngữ Pascal ðộ phức tạp thuật toán Thuật toán tìm kiếm Thuật tốn đệ quy Một số thuật toán số nguyên BÀI TẬP CHƯƠNG 7 14 18 19 23 28 Chng BÀI TOÁN ðẾM Nguyên lý cộng nguyên lý nhân Chỉnh hợp Hoán vị Tổ hợp Nguyên lý bù trừ Giải hệ thức truy hồi Bài toán liệt kê Bài toán tồn BÀI TẬP CHƯƠNG 32 32 35 42 44 51 61 64 Chng CÁC KHÁI NIỆM CƠ BẢN VỀ ðỒ THỊ Các ñịnh nghĩa ñồ thị biểu diễn hình học đồ thị Biểu diễn ñồ thị ñại số Sự ñẳng cấu đồ thị Tính liên thơng đồ thị Số ổn định trong, số ổn định ngồi nhân ñồ thị Sắc số ñồ thị BÀI TẬP CHƯƠNG 69 69 79 82 84 88 91 93 Chng ðỒ THỊ EULER, ðỒ THỊ HAMILTON, ðỒ THỊ PHẲNG ðồ thị Euler ðồ thị Hamilton ðồ thi phẳng BÀI TẬP CHƯƠNG 98 98 103 108 113 Chng CÂY VÀ MỘT SỐ ỨNG DỤNG CỦA CÂY Cây tính chất Cây nhị phân phép duyệt Một vài ứng dụng 117 118 122 126 Trường ðại học Nông nghiệp Hà Nội – Giáo trình Giáo trình Tốn Rời rạc…….…………………… Cây khung (cây bao trùm) ñồ thị Hệ chu trình độc lập Cây khung nhỏ BÀI TẬP CHƯƠNG 131 134 136 142 Chng MỘT SỐ BÀI TOÁN TỐI ƯU TRÊN ðỒ THỊ Bài tốn đường ngắn đồ thị Tâm, Bán kính, ðường kính đồ thị Mạng Luồng Bài toán du lịch BÀI TẬP CHƯƠNG 147 147 152 153 160 166 Chng ðẠI SỐ BOOLE Hàm Boole Biểu thức Boole ðịnh nghĩa ñại số Boole theo tiên ñề Biểu diễn hàm Boole Các cổng logic Tối thiểu hoá hàm Boole BÀI TẬP CHƯƠNG 172 172 174 176 177 183 185 193 Ph chng ðẠI CƯƠNG VỀ TỐN LOGIC Lơgic mệnh đề Cơng thức đồng cơng thức đồng lơgic mệnh đề ðiều kiện đồng lơgic mệnh đề Lơgic vị từ BÀI TẬP PHỤ CHƯƠNG 197 197 Một số tập làm máy tính Một số thuật ngữ dùng giáo trình Tài liệu tham khảo 216 218 221 Trường ðại học Nông nghiệp Hà Nội – Giáo trình Giáo trình Tốn Rời rạc…….…………………… 201 205 208 213 LỜI NĨI ðẦU Tốn Rời rạc (Discrete mathematics) mơn tốn học nghiên cứu đối tượng rời rạc Nó ứng dụng nhiều ngành khoa học khác nhau, ñặc biệt tin học q trình xử lý thơng tin máy tính thực chất q trình rời rạc Phạm vi nghiên cứu Toán Rời rạc rộng, chia thành mơn học khác Theo quy định chương trình mơn học, giáo trình ñề cập ñến lĩnh vực: Thuật toán tốn đếm; Lý thuyết đồ thị; ðại số Logic ñược chia thành chương: - Chương ñề cập ñến vấn ñề Thuật tốn độ phức tạp thời gian thuật tốn - Chương nói ngun lý Bài tốn đếm - Các chương 3, 4, trình bày Lý thuyết ñồ thị ứng dụng ðây phần chiếm tỷ trọng nhiều giáo trình Trong có chương khái niệm ñồ thị, ñồ thị ñặc biệt ñồ thị Euler, ñồ thị Hamilton, ñồ thị phẳng, Cây ứng dụng ñồ thi ñặc biệt Riêng chương dành cho vấn ñề trọng số tốn tối ưu đồ thị tốn tối ưu ñược giải cách ứng dụng lý thuyết ñồ thị - Chương kiến thức ðại số Boole, công cụ hữu hiệu việc thiết kế mạch ñiện, ñiện tử Cuối giáo trình phụ chương: Những khái niệm tốn Logic để người học tự nghiên cứu thêm Tốn Logic Trong chương chúng tơi cố gắng trình bày kiến thức chương thí dụ minh họa cụ thể Vì khn khổ số tiết học nên chúng tơi lược bỏ số chứng minh phức tạp Cuối chương có tập để người học ứng dụng, kiểm chứng lý thuyết ñã học, ñồng thời cung cấp số ñáp số tập cho Cũng cần nói thêm tốn Rời rạc khơng ứng dụng tin học mà cịn ứng dụng nhiều ngành khoa học khác Bởi giáo trình có ích cho cần quan tâm đến ứng dụng khác mơn học Tác giả xin chân thành cảm ơn bạn đồng nghiệp động viên góp ý cho việc biên soạn giáo trình ðặc biệt chúng tơi xin cảm ơn Nhà giáo ưu tú Nguyễn ðình Hiền hiệu đính cho nhiều ý kiến đóng góp bổ ích thiết thực Vì trình độ có hạn giáo trình biên soạn lần đầu nên khơng tránh khỏi thiếu sót Tác giả mong nhận ñược ý kiến ñóng góp ñồng nghiệp bạn ñọc khiếm khuyết sách TÁC GIẢ Trường ðại học Nông nghiệp Hà Nội – Giáo trình Giáo trình Tốn Rời rạc…….…………………… CHƯƠNG1 THUẬT TỐN ðịnh nghĩa Mơ tả thuật tốn lưu đồ Mơ tả thuật tốn ngơn ngữ Pascal 3.1 Câu lệnh Procedure (thủ tục) Function (hàm) 3.2 Câu lệnh gán 3.3 Khối câu lệnh 3.4 Câu lệnh diều kiện 3.5 Các câu lệnh lặp ðộ phức tạp thuật toán 4.1 Khái niệm ñộ tăng hàm 4.2 ðộ tăng tổ hợp hàm 4.3 ðộ phức tạp thuật toán Thuật tốn tìm kiếm 5.1 Thuật tốn tìm kiếm tuyến tính (cịn gọi thuật tốn tìm kiếm tuần tự) 5.2 Thuật tốn tìm kiếm nhị phân Thuật tốn đệ quy 6.1 Cơng thức truy hồi 6.2 Thuật tốn đệ quy 6.3 ðệ quy lặp Một số thuật toán số nguyên 7.1 Biểu diễn số nguyên 7.2 Cộng nhân hệ nhị phân ðịnh nghĩa Thuật toán (algorithm) dãy quy tắc nhằm xác ñịnh dãy thao tác ñối tượng cho sau số hữu hạn bước thực ñạt ñược mục tiêu ñặt Từ định nghĩa thuật tốn cho thấy đặc trưng (tính chất) thuật tốn là: a Yếu tố vào, ra: • ðầu vào (Input): Mỗi thuật tốn có giá trị giá trị ñầu vào từ tập xác ñịnh ñã ñược rõ • ðầu (Output): Từ giá trị ñầu vào, thuật toán cho giá trị cần tìm gọi kết tốn Trường ðại học Nơng nghiệp Hà Nội – Giáo trình Giáo trình Tốn Rời rạc…….…………………… b Tính dừng: Sau số hữu hạn bước thao tác thuật toán phải kết thúc cho kết c Tính xác định: Các thao tác phải rõ ràng, cho kết dù ñược xử lý xử lý khác (hai xử lý ñiều kiện khơng thể cho hai kết khác nhau) d Tính hiệu Sau ñưa liệu vào cho thuật tốn hoạt động phải đưa kết ý muốn e Tính tổng qt Thuật tốn phải áp dụng cho tốn dạng khơng phải cho tập ñặc biệt giá trị ñầu vào Có nhiều cách mơ tả thuật tốn như: Dùng ngơn ngữ tự nhiên; dùng lưu đồ (sơ đồ khối); dùng ngơn ngữ lập trình (trong giáo trình dùng loại ngơn ngữ mơ tả gần ngơn ngữ lập trình Pascal gọi Pascal); … Mơ tả thuật tốn lưu đồ Sau có thuật tốn để giải tốn, trước chuyển sang ngơn ngữ lập trình, người ta thường phải thể thuật tốn dạng sơ đồ Sơ đồ gọi lưu đồ thuật tốn Các ký hiệu quy ước dùng lưu đồ trình bày bảng Bảng Các ký hiệu quy ước dung lưu đồ thuật tốn Tên ký hiệu Khối mở ñầu kết thúc Khối vào Ký hiệu Khối tính tốn Vai trị ký hiệu Dùng để mở đầu kết thúc thuật tốn ðưa liệu vào in kết Khối ñiều kiện Biểu diễn cơng thức tính tốn thay đổi giá trị ñối tượng Kiểm tra ñiều kiện phân nhánh Chương trình Gọi chương trình Hướng thuật tốn Hướng chuyển thơng tin, liên hệ khối Thí dụ: Thuật tốn giải phương trình bậc hai ax2 + bx + c = gồm bước sau: 1) Xác ñịnh hệ số a, b, c (thơng tin đầu vào) 2) Kiểm tra hệ số a: - Nếu a = 0: Phương trình cho phương trình bậc nhất, nghiệm là: x = − c b - Nếu a ≠ 0: Chuyển sang bước Trường ðại học Nông nghiệp Hà Nội – Giáo trình Giáo trình Tốn Rời rạc…….…………………… 3) Tính biệt thức ∆ = b2 – 4ac 4) Kiểm tra dấu biệt thức ∆ - Nếu ∆ ≥ 0: Phương trình có nghiệm thực - Nếu ∆ < 0: Phương trình có nghiệm phức 5) In kết Lưu đồ thuật tốn trình bày hình Bắt ñầu Nhập a, b, c Sai a=0 ðúng ∆ = b2 = 4ac Sai b 2a −∆ 2a Phần thực = − Phần ảo = ∆≥0 x=− c b ðúng −b+ ∆ 2a −b+ ∆ x2 = 2a x1 = Thơng báo kết Kết thúc Hình Lưu đồ giải phương trình bậc hai Mơ tả thuật tốn ngơn ngữ Pascal ðể giải tốn máy tính điện tử phải viết chương trình theo ngơn ngữ lập trình (Pascal, C, Basic, ) Mỗi ngơn ngữ lập trình có quy tắc cấu trúc riêng ðể thay việc mơ tả thuật tốn lời, mơ tả thuật tốn cấu trúc lệnh tương tự ngơn ngữ lập trình Pascal gọi ngôn ngữ Pascal Các câu lệnh dùng để mơ tả thuật tốn gồm có: Procedure Function; câu lệnh gán; câu lệnh ñiều kiện; vịng lặp Ngồi cần giải thích câu lệnh lời, để lời giải thích dấu (* *) {…} Nghĩa ngơn ngữ Pascal hồn tồn tương tự ngơn ngữ lập trình Pascal, khơng có phần khai báo Tuy nhiên, phải nêu rõ ñầu vào (Input) ñầu (output) thuật tốn Trường ðại học Nơng nghiệp Hà Nội – Giáo trình Giáo trình Tốn Rời rạc…….…………………… 3.1 Câu lệnh Procedure (thủ tục) Function (hàm) ðứng sau câu lệnh tên thủ tục hoăc tên hàm Các bước thực thuật tốn mơ tả thủ tục (hàm) bắt ñầu từ khóa begin kết thúc từ khóa end Thí dụ Function Max(a, b, c) (* Hàm tìm số lớn số a, b, c *) Begin (* thân hàm*) End; Thí dụ Procedure Giai_phuong_trình_bac_hai (* Thủ tục giải phương trình bậc hai *) Begin (* thân thủ tục *) End; Chú ý rằng, mơ tả thuật tốn function, trước kết thúc (end) thuật toán phải trả (ghi nhận) giá trị function 3.2 Câu lệnh gán Dùng ñể gán giá trị cho biến Cách viết: Tên biến := giá trị gán Thí dụ: x := a; (*biến x ñược gán giá trị a*) max := b; (*biến max ñược gán giá trị b*) 3.3 Khối câu lệnh ðược mở đầu từ khóa begin kết thúc end sau: begin Câu lệnh 1; Câu lệnh 2; Câu lệnh n; end; Các lệnh ñược thực từ câu lệnh thứ ñến câu lệnh cuối 3.4 Câu lệnh ñiều kiện Có hai dạng: dạng ñơn giản dạng lựa chọn a Dạng ñơn giản: Cách viết: if then câu lệnh khối câu lệnh; Khi thực hiện, ñiều kiện ñược kiểm tra, ñiều kiện thỏa mãn câu lệnh (khối câu lệnh) thực hiện, điều kiện khơng thỏa mãn lệnh bị bỏ qua Trường ðại học Nông nghiệp Hà Nội – Giáo trình Giáo trình Tốn Rời rạc…….…………………… b Dạng lựa chọn: Cách viết: if then câu lệnh khối câu lệnh else câu lệnh khối câu lệnh 2; Khi thực hiện, ñiều kiện ñược kiểm tra, điều kiện thỏa mãn câu lệnh (khối câu lệnh) thực hiện, điều kiện khơng thỏa mãn câu lệnh (khối câu lệnh) thực Thí dụ Thuật tốn tìm số lớn số thực a, b, c - ðầu tiên cho max = a; - So sánh max với b, b > max max = b; - So sánh max với c, c > max max = c Function max(a,b,c) Input: số thực a,b,c; Output: Số lớn số ñã nhập; Begin x := a; if b > x then x:= b; if c > x then x:= c; max := x; End; Thí dụ Thuật tốn giải phương trình bậc hai ax2 + bx + c = Procedure Giai_phuong_trinh_bac2; Input: Các hệ số a, b, c; Output: Nghiệm phương trình; begin if a = then x := -c/b; if a ≠ then begin ∆ := b2 – 4ac; if ∆ ≥ then begin x1 = (– b – ∆ )/2a ; x2 = (– b + ∆ )/2a; end else begin Phần thực := -b/2a; Phần ảo := ( − ∆ )/2a; end; end; end; Trường ðại học Nơng nghiệp Hà Nội – Giáo trình Giáo trình Tốn Rời rạc…….…………………… 3.5 Các câu lệnh lặp Có hai loại: Loại có bước lặp xác định loại có bước lặp khơng xác định a Loại có bước lặp xác định: Cách viết sau: for biến ñiều khiển := giá trị ñầu to giá trị cuối câu lệnh khối câu lệnh; Khi thực hiện, biến ñiều khiển ñược kiểm tra, biến ñiều khiển nhỏ giá trị cuối câu lệnh (khối câu lệnh) thực Tiếp biến ñiều khiển tăng thêm ñơn vị trình lặp lại biến điều khiển lớn giá trị cuối vịng lặp dừng cho kết Như hết vòng lặp for số bước lặp giá trị cuối (của biến ñiều khiển) trừ giá trị đầu cộng Thí dụ: Tìm giá trị lớn dãy số a1, a2, …,an Thuật toán: ðầu tiên cho giá trị lớn (max) a1, sau so sánh max với số (i = 2, 3, …, n), max < max ai, max > max khơng đổi Function max_day_so; Input: Dãy số a1, a2, … ,an; Output: Giá trị lớn (max) dãy số ñã nhập; begin max := a1 ; for i:= to n if > max then max := ; max_day_so := max; end; Chú thích: Vịng lặp for cịn cách viết lùi biến điều khiển sau: for biến ñiều khiển := giá trị cuối downto giá trị ñầu câu lệnh khối câu lệnh; Việc thực câu lệnh tương tự viết biến điều khiển tăng dần b Loại có bước lặp khơng xác định: Có hai cách viết Cách thứ nhất: while ñiều kiện câu lệnh khối câu lệnh; Khi thực hiện, ñiều kiện ñược kiểm tra, điều kiện thoả mãn câu lệnh (khối câu lệnh) thực Nếu điều kiện khơng thoả mãn vịng lặp dừng cho kết Thí dụ: Kiểm tra xem số nguyên dương m ñã cho có phải số ngun tố khơng? Thuật tốn sau: Số m số ngun tố khơng chia hết cho số nguyên dương khác nhỏ m Thật vậy, m hợp số (không phải số nguyên tố), nghĩa tồn số nguyên dương a, b cho: m = a.b ⇒ a≤ m b ≤ m Vậy, m số nguyên tố m khơng chia hết cho số ngun dương i, 2≤ i≤ Trường ðại học Nông nghiệp Hà Nội – Giáo trình Giáo trình Tốn Rời rạc…….…………………… m
Ngày đăng: 20/10/2022, 08:39
HÌNH ẢNH LIÊN QUAN
Bảng 1.
Các ký hiệu quy ước dung trong lưu ñồ thuật toán (Trang 6)
u
ñồ của thuật toán ñược trình bày trong hình 1 (Trang 7)