Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 198 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
198
Dung lượng
3,88 MB
Nội dung
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG - - SÁCH HƯỚNG DẪN HỌC TẬP TOÁN RỜI RẠC Biên soạn : Ths NGUYỄN DUY PHƯƠNG Lưu hành nội HÀ NỘI - 2006 www.facebook.com/groups/TaiLieuOnThiDaiHoc01/ LỜI GIỚI THIỆU Toán rời rạc lĩnh vực nghiên cứu xử lý đối tượng rời rạc dùng để đếm đối tượng, nghiên cứu mối quan hệ tập rời rạc Một yếu tố làm Toán rời rạc trở nên quan trọng việc lưu trữ, xử lý thông tin hệ thống máy tính chất rời rạc Chính lý đó, Toán học rời rạc môn học bắt buộc mang tính chất kinh điển ngành Công nghệ thông tin Điện tử Viễn thông Tài liệu hướng dẫn môn học Toán học rời rạc xây dựng cho hệ đào tạo từ xa Học viện Công nghệ Bưu Viễn thông xây dựng dựa sở kinh nghiệm giảng dạy môn học kế thừa từ giáo trình “Toán học rời rạc ứng dụng tin học” Kenneth Rossen Tài liệu trình bày thành hai phần: Phần I trình bày kiến thức lý thuyết tổ hợp thông qua việc giải bốn toán là: Bài toán đếm, Bài toán tồn tại, Bài toán liệt kê Bài toán tối ưu Phần II trình bày kiến thức Lý thuyết đồ thị: khái niệm, định nghĩa, thuật toán đồ thị, đồ thị Euler, đồ thị Hamilton Một số toán có ứng dụng thực tiễn quan trọng khác lý thuyết đồ thị trọng giải Bài toán tô màu đồ thị, Bài toán tìm đường ngắn Bài toán luồng cực đại mạng Trong phần tài liệu, cố gắng trình bày ngắn gọn trực tiếp vào chất vấn đề, đồng thời cài đặt hầu hết thuật toán ngôn ngữ lập trình C nhằm đạt hai mục tiêu cho người học: Nâng cao tư toán học phân tích, thiết kế thuật toán rèn luyện kỹ lập trình với thuật toán phức tạp Mặc dù cẩn trọng trình biên soạn, nhiên tài liệu không tránh khỏi thiếu sót hạn chế Chúng mong góp ý quí báu tất đọc giả bạn đồng nghiệp Mọi góp ý xin gửi về: Khoa Công nghệ Thông tin - Học viện Công nghệ Bưu Viễn thông Hà Nội, tháng 05 năm 2006 www.facebook.com/groups/TaiLieuOnThiDaiHoc01/ Chương 1: Những kiến thức PHẦN I: LÝ THUYẾT TỔ HỢP CHƯƠNG I: NHỮNG KIẾN THỨC CƠ BẢN Nội dung chương đề cập đến kiến thức logic mệnh đề lý thuyết tập hợp Bao gồm: Giới thiệu tổng quan lý thuyết tổ hợp Những kiến thức logic Những kiến thức lý thuyết tập hợp Một số ứng dụng logic lý thuyết tập hợp tin học Bạn đọc tìm thấy kiến thức sâu chi tiết tài liệu [1] [2] tài liệu tham khảo 1.1 GIỚI THIỆU CHUNG Tổ hợp lĩnh vực quan trọng toán học rời rạc đề cập tới nhiều vấn đề khác toán học Lý thuyết Tổ hợp nghiên cứu việc phân bố phần tử vào tập hợp Thông thường phần tử tập hợp hữu hạn việc phân bố chúng phải thoả mãn điều kiện định tuỳ theo yêu cầu toán nghiên cứu Mỗi cách phân bố coi “cấu hình tổ hợp” Nguyên lý chung để giải toán tổ hợp dựa nguyên lý sở nguyên lý cộng, nguyên lý nhân số nguyên lý khác, đặc thù tách rời toán học tổ hợp việc chứng minh kiểm chứng phương pháp giải toán tách rời máy tính Những dạng toán quan trọng mà lý thuyết tổ hợp đề cập toán đếm, toán liệt kê, toán tồn toán tối ưu Bài toán đếm: dạng toán nhằm trả lời câu hỏi “có cấu hình thoả mãn điều kiện nêu?” Bài toán đếm áp dụng có hiệu vào công việc mang tính chất đánh xác suất kiện, độ phức tạp thuật toán Bài toán liệt kê: toán liệt kê quan tâm đến tất cấu hình có được, lời giải biểu diễn dạng thuật toán “vét cạn” tất cấu hình Bài toán liệt kê thường làm cho nhiều toán khác Hiện nay, số toán tồn tại, toán tối ưu, toán đếm chưa có cách giải phương pháp liệt kê Phương pháp liệt kê trở nên quan trọng hỗ trợ hệ thống máy tính www.facebook.com/groups/TaiLieuOnThiDaiHoc01/ Chương 1: Những kiến thức Bài toán tối ưu: khác với toán liệt kê, toán tối ưu quan tâm tới cấu hình “tốt nhất” theo nghĩa Đây toán có nhiều ứng dụng thực tiễn lý thuyết tổ hợp đóng góp phần đáng kể việc xây dựng thuật toán để đưa mô hình tối ưu Bài toán tồn tại: toán đếm thực đếm cấu hình có, toán liệt kê: liệt kê tất cấu hình có, toán tối ưu cấu hình tốt toán tồn giải vấn đề nghi vấn nghĩa kể vấn đề có hay không cấu hình chưa biết Những toán thường toán khó, việc sử dụng máy tính để chứng tỏ toán tồn hay không tồn (hoặc không) cấu hình trở nên quan trọng 1.2 NHỮNG KIẾN THỨC CƠ BẢN VỀ LOGIC Các qui tắc Logic cho ta ý nghĩa xác mệnh đề Những qui tắc sử dụng lập luận toán học không Vì mục tiêu giáo trình trang bị cho sinh viên hiểu xây dựng phương pháp lập luận toán học đắn, nên bắt đầu nghiên cứu toán học rời rạc kiến thức môn logic học Hiểu phương pháp lập luận toán học có ý nghĩa quan trọng tin học Những qui tắc logic công cụ sở để xây dựng nên ngôn ngữ lập trình, mạng máy tính, kiểm chứng tính đắn chương trình nhiều ứng dụng quan trọng khác 1.2.1 Định nghĩa & phép toán Đối tượng nghiên cứu logic học mệnh đề Một mệnh đề hiểu câu khẳng định hoặc sai vừa vừa sai Ví dụ: Những câu khẳng định sau mệnh đề: “Hà Nội thủ đô Việt Nam.” 1+1=2 2+2=3 Các mệnh đề “Hà Nội thủ đô Việt Nam”, “1 +1 =2 “là mệnh đề đúng, mệnh đề “2 +2 =3” sai Nhưng câu ví dụ sau mệnh đề câu không cho ta khẳng định chẳng cho ta khẳng định sai “Bây ?” “Hãy suy nghĩ điều cho kỹ lưỡng” x +1 =2 x+y=z www.facebook.com/groups/TaiLieuOnThiDaiHoc01/ Chương 1: Những kiến thức Ta ký hiệu chữ A, B, C, D, p, q, r, s mệnh đề Giá trị mệnh đề ký hiệu T, giá trị mệnh đề sai ký hiệu F Tập giá trị { T, F } gọi giá trị chân lý mệnh đề Định nghĩa Mệnh đề p tuyển với mệnh đề q (ký hiệu p ∨ p) mệnh mà nhận giá trị T hai mệnh đề p, q nhận giá trị T Mệnh đề p ∨ q nhận giá trị F p, q nhận giá trị F Định nghĩa Mệnh đề p hội mệnh đề q (ký hiệu p ∧ q ) mệnh đề mà nhận giá trị T p, q nhận giá trị T Mệnh đề p ∧ q nhận giá trị F p, q, hai nhận giá trị F Định nghĩa Phủ định mệnh đề p (kí hiệu ¬p) mệnh đề nhận giá trị F mệnh đề p nhận giá trị T, nhận giá trị F p nhận giá trị T Định nghĩa Mệnh đề tuyển loại p q, ký hiệu p⊕q, mệnh đề p q sai trường hợp khác lại Định nghĩa Mệnh đề p suy mệnh đề q (ký hiệu p → q) nhận giá T p nhận giá trị F p q nhận giá trị T Mệnh đề p→q nhận giá trị F p nhận giá trị T q nhận giá trị F Định nghĩa Hai mệnh đề p, q gọi kéo theo (ký hiệu: p ⇔ q) có giá trị p q có giá trị chân lý sai trường hợp khác lại Các phép toán: ∨, ∧, ¬, ⊕,→ ,⇔ định nghĩa thông qua bảng giá trị chân lý sau: Bảng 1.1: Bảng giá trị chân lý phép toán ∨, ∧, ¬, ⊕, →,⇔ p q p∨q p∧q ¬p p⊕q p→q p⇔q T T T T F F T T T F T F F T F F F T T F T T T F F F F F T F T T 1.2.2 Sự tương đương mệnh đề Một vấn đề quan trọng lập luận toán học việc thay mệnh đề khác có giá trị chân lý Hai mệnh đề có giá trị chân lý hiểu theo cách thông thường chúng tương đương ngữ nghĩa Do vậy, ta tiếp cận phân loại mệnh đề phức hợp thông qua giá trị chân lý chúng Định nghĩa Một mệnh đề phức hợp mà luôn với giá trị chân lý mệnh đề thành phần gọi (tautology) Một mệnh đề luôn sai với giá trị chân lý mệnh đề thành phần gọi mâu thuẫn www.facebook.com/groups/TaiLieuOnThiDaiHoc01/ Chương 1: Những kiến thức Ví dụ: mệnh đề phức hợp p ∨¬q đúng, p ∧ ¬q mâu thuẫn giá trị chân lý mệnh đề luôn đúng, luôn sai bảng 1.2 Bảng 1.2 Ví dụ mệnh đề & mệnh đề mâu thuẫn p ¬p p ∨¬q p∧¬q T F T F F T T F Định nghĩa Hai mệnh đề p, q gọi tương đương logic với (ký hiệu: p ≡ q) cột cho giá trị chân lý chúng giống Hay mệnh đề p→q Ví dụ: hai mệnh đề ¬ (p ∨ q) ¬p ∧ ¬q tương đương logic cột giá trị chân lý chúng thể qua bảng sau: Bảng 1.3 Bảng giá trị chân lý ¬(p ∨ q) ¬p∧¬q p q p∨q ¬(p∨q) ¬p ¬q ¬p∧¬q T T T F F F F T F T F F T F F T T F T F F F F F T T T T Dùng bảng giá trị chân lý để chứng minh tính tương đương logic hai mệnh đề phức hợp cho ta phương pháp trực quan dễ hiểu Tuy nhiên, với mệnh đề logic phức hợp có k mệnh đề cần tới 2k giá trị chân lý để biểu diễn bảng giá trị chân lý Trong nhiều trường hợp chứng minh tính tương logic việc thay mệnh đề phức hợp tương đương logic có trước Bằng phương pháp bảng chân lý, dễ dàng chứng minh tương đương công thức đây: p→ q ≡ ¬p∨ q p⇔q ≡ (p→q)∧(q→p) ¬(¬p) ≡p www.facebook.com/groups/TaiLieuOnThiDaiHoc01/ Chương 1: Những kiến thức Bảng 1.4 Bảng tương đương logic TƯƠNG ĐƯƠNG TÊN GỌI p∧T≡p Luật đồng p∨F≡p p∨T≡T Luật nuốt p∧F≡F p∨p≡p Luật luỹ đẳng p∧p≡p ¬(¬p) ≡ p Luật phủ định kép p∨q≡q∨p Luật giao hoán p∧q≡q∧p (p ∨ q) ∨ r ≡ p ∨ ( q ∨ r) Luật kết hợp (p ∧ q) ∧ r ≡ p ∧( q ∧ r) p ∨ ( q ∧ r) ≡ (p ∨ q ) ∧ (p ∨ r) Luật phân phối p ∧ ( q ∨ r) ≡ (p ∧ q) ∨ (p ∧ r) ¬(p ∧ q ) ≡ ¬p ∨ ¬q Luật De Morgan ¬(p ∨ q ) ≡ ¬p ∧ ¬q Ví dụ: Chứng minh ¬( p ∧ (¬q ∧ q ) tương đương logic với ¬p ∧ ¬q Chứng minh: ¬( p ∧ (¬q ∧ q ) ≡ ¬p ∧ ¬(¬p ∧ q ) theo luật De Morgan thứ ≡ ¬p ∧ [ ¬(¬p) ∨ ¬q theo luật De Morgan thứ ≡ ¬p ∧ [ p ∨ ¬q ] theo luật phủ định kép ≡ (¬p ∧ p ) ∨ (¬p ∧ ¬q) theo luật phân phối ≡ F ∨ (¬p ∧ ¬q) ¬p ∧ p ≡ F ≡ ¬p ∧ ¬q Mệnh đề chứng minh 1.2.3 Dạng chuẩn tắc Các công thức (mệnh đề) tương đương xem biểu diễn khác mệnh đề Để dễ dàng viết chương trình máy tính thao tác công thức, cần www.facebook.com/groups/TaiLieuOnThiDaiHoc01/ Chương 1: Những kiến thức chuẩn hóa công thức, đưa chúng dạng biểu diễn chuẩn gọi dạng chuẩn hội Một công thức gọi dạng chuẩn hội hội mệnh đề tuyển Phương pháp để biến đổi công thức dạng chuẩn hội cách áp dụng thủ tục sau: Bỏ phép kéo theo (→) cách thay (p→q) (¬p→q) Chuyển phép phủ định (¬) vào sát ký hiệu mệnh đề cách áp dụng luật De Morgan thay ¬(¬p) p Áp dụng luật phân phối thay công thức có dạng (p∨(q∧r)) (p∨q)∧(p∨r) Ví dụ: Ta chuẩn hóa công thức (p→q)∨¬(r∨¬s): (p→q)∨¬(r∨¬s) ≡ (¬p∨q) ∨(¬r∧s) ≡ ((¬p∨q)∨¬r) ∧((¬p∨q)∨s) ≡ (¬p∨q∨¬r)∧(¬p∨q∨s) Như công thức (p→q)∨¬(r∨¬s) đưa dạng chuẩn hội (¬p∨q∨¬r)∧(¬p∨q∨s) 1.3 VỊ TỪ VÀ LƯỢNG TỪ Trong toán học hay chương trình máy tính hay gặp khẳng định chưa phải mệnh đề Những khẳng định có liên quan đến biến Chẳng hạn khẳng định: P(x) = “x > 3” mệnh đề giá trị cụ thể x = x0 P(x0) lại mệnh đề Hoặc đoạn chương trình gặp câu lệnh: if ( x > ) then x:= x +1; chương trình đặt giá trị cụ thể biến x vào P(x), mệnh đề P(x) cho giá trị x tăng lên câu lệnh x:=x+1, P(x) có giá trị sai giá trị x giữ nguyên sau thực câu lệnh if Chúng ta phân tích khẳng định thành hai phần chủ ngữ vị ngữ (hay vị từ), câu “x lớn 3” ta coi x chủ ngữ, “lớn 3” vị ngữ, hàm P(x) gọi hàm mệnh đề Một hàm mệnh đề có nhiều biến, giá trị chân lý hàm mệnh đề giá trị cụ thể biến xác định mệnh đề thông thường Ví dụ: Cho Q(x, y, z) hàm mệnh đề xác định câu x2 = y2 +z2 xác định giá trị chân lý mệnh đề Q (3, 2, 1), Q ( 5, 4, 3) Giải: Đặt giá trị cụ thể x , y , z vào Q(x,y,z) ta có: Q(3,2,1) mệnh đề “32 = 22 + 12” sai Q(3,2,1) mệnh đề sai Trong đó, Q (5, 4, 3) mệnh đề “52 = 42 + 32” đúng, Q(5,4,3) mệnh đề 10 www.facebook.com/groups/TaiLieuOnThiDaiHoc01/ Chương 1: Những kiến thức Tổng quát, giả sử M tập hợp phần tử M thường gọi trường hay miền xác định phẩn tử thuộc M Khi đó, biểu thức P(x) gọi vị từ xác định trường M thay x phần tử trường M P(x) trở thành mệnh đề trường M Khi tất biến hàm mệnh đề gán giá trị cụ thể, mệnh đề tạo xác định giá trị chân lý Tuy nhiên, có phương pháp quan trọng khác để biến hàm mệnh đề thành mệnh đề mà không cần phải kiểm chứng giá trị chân lý hàm mệnh đề tương ứng với giá trị biến thuộc trường xét Phương pháp gọi lượng hoá hay lượng từ Chúng ta xét hai lượng từ quan trọng lượng từ với (ký hiệu:∀), lượng từ tồn (ký hiệu:∃ ) Định nghĩa Lượng từ với P(x) ký hiệu ∀x P(x) mệnh đề “P(x) với phần tử x thuộc trường xét” Ví dụ: Cho hàm mệnh đề P(x) = X2 + X + 41 nguyên tố Xác định giá trị chân lý mệnh đề ∀ P(x) với x thuộc không gian bao gồm số tự nhiên [0 39] Giải: P(x) với giá trị x ∈ [0 39] ⇒ ∀ P(x) Ví dụ: Cho P(x) hàm mệnh đề “x + > x” Xác định giá trị chân lý mệnh đề ∀ x P(x), không gian số thực Giải: P(x) với số thực x nên ∀x P(x) Định nghĩa Lượng từ tồn hàm mệnh đề P(x) (được ký hiệu là:∃ x P(x) ) mệnh đề “Tồn phần tử x không gian cho P(x) “ Ví dụ: Cho P(x) hàm mệnh đề “x > 3” Hãy tìm giá trị chân lý mệnh đề ∃ x P(x) không gian số thực Giải: P(4) “4 > 3” nên ∃ x P(x) Ví dụ: Cho Q(x) “x + > x” Hãy tìm giá trị chân lý mệnh đề ∃ x Q(x) không gian số thực Giải: Q(x) sai với x ∈ R nên mệnh đề ∃ x Q(x) sai Bảng 1.5: Giá trị chân lý lượng từ ∀, ∃ ∀x P(x) P(x) với x Có giá trị x để P(x) sai ∃x P(x) Có giá trị x để P(x) P(x) sai với x Dịch câu thông thường thành biểu thức logic: Dịch câu phát biểu ngôn ngữ tự nhiên (câu hỏi thông thường) thành biểu thức logic có vai trò quan trọng xây dựng ngôn ngữ lập trình, chương trình dịch xử lý ngôn ngữ tự nhiên Quá trình dịch câu từ ngôn ngữ tự nhiên thành biểu thức làm tính tự nhiên ngôn ngữ 11 www.facebook.com/groups/TaiLieuOnThiDaiHoc01/ Chương 1: Những kiến thức đa số ngôn ngữ không rõ ràng, biểu thức logic lại rõ ràng chặt chẽ từ cú pháp thể đến ngữ nghĩa câu Điều dẫn đến phải có tập hợp giả thiết hợp lý dựa hàm xác định ngữ nghĩa cuả câu Một câu chuyển dịch thành biểu thức logic, xác định giá trị chân lý biểu thức logic, thao tác biểu thức logic, biến đổi tương đương biểu thức logic Chúng ta minh hoạ việc dịch câu thông thường thành biểu thức logic thông qua sau Ví dụ dịch câu “Bạn không lái xe máy bạn cao 1.5 mét bạn 18 tuổi” thành biểu thức logic Giải: Ta gọi p câu : Bạn lái xe máy q câu : Bạn cao 1.5m r câu : Bạn 18 tuổi Khi đó: Câu hỏi dịch là: (q ∧ ¬r) → ¬p Ví dụ: Dịch câu “Tất sinh viên học tin học học môn toán học rời rạc” Giải: Gọi P(x) câu “x cần học môn toán học rời rạc” x xác định không gian sinh viên học tin học Khi phát biểu: ∀ x P(x) Ví dụ: Dịch câu “Có sinh viên lớp tất phòng nhà ký túc xá” Giải: Gọi tập sinh viên lớp không gian xác định sinh viên x, tập nhà ký túc xá không gian xác định nhà y, tập phòng không gian xác định phòng z Ta gọi P(z,y) “z thuộc y”, Q(x,z) “x z” Khi ta phát biểu: ∃ x ∃ y ∀ z (P(z,y) → Q(x,z)); 1.4 MỘT SỐ ỨNG DỤNG TRÊN MÁY TÍNH Các phép toán bít: Các hệ thống máy tính thường dùng bit (binary digit) để biểu diễn thông tin Một bít có hai giá trị chân lý hoặc Vì giá trị chân lý biểu thức logic có hai giá trị (T) sai (F) Nếu ta coi giá trị có giá trị giá trị sai phép toán với bít máy tính tương ứng với liên từ logic Một xâu bít (hoặc xâu nhị phân) dãy không nhiều bít Chiều dài xâu số bít xâu Ví dụ: Xâu nhị 101010011 có độ dài Một số nguyên đuợc biểu diễn xâu nhị phân có độ dài 16 bít 12 www.facebook.com/groups/TaiLieuOnThiDaiHoc01/ Chương 8: Một số toán quan trọng đồ thị Chương trình cài đặt thuật toán Dijkstra tìm đường ngắn từ đỉnh đến tất đỉnh khác đồ thị có hướng với trọng số không âm thực sau: #include #include #include #include #include #define MAX 50 #define TRUE #define FALSE int n, s, t; char chon; int truoc[MAX], d[MAX], CP[MAX][MAX]; int final[MAX]; void Init(void){ FILE * fp;int i, j; fp = fopen(“ijk1.in”,”r”); fscanf(fp,”%d”, &n); printf(“\n So dinh:%d”,n); printf(“\n Ma tran khoang cach:”); for(i=1; i