1. Trang chủ
  2. » Công Nghệ Thông Tin

GT TOANRR21 CD CNTT

56 4 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Bé n«ng nghiÖp vµ ptnt 1 ỦY BAN NHÂN DÂN TỈNH QUẢNG BÌNH TRƯỜNG CAO ĐẲNG KỸ THUẬT – CÔNG NÔNG NGHIỆP GIÁO TRÌNH MÔ ĐUN TOÁN RỜI RẠC NGHỀ CÔNG NGHỆ THÔNG TIN TRÌNH ĐỘ CAO ĐẲNG (Ban hành kèm theo Quyết.

ỦY BAN NHÂN DÂN TỈNH QUẢNG BÌNH TRƯỜNG CAO ĐẲNG KỸ THUẬT – CƠNG NƠNG NGHIỆP GIÁO TRÌNH MƠ ĐUN: TỐN RỜI RẠC NGHỀ: CƠNG NGHỆ THƠNG TIN TRÌNH ĐỘ: CAO ĐẲNG (Ban hành kèm theo Quyết định số: …QĐ/ ngày… tháng… năm 2021 Hiệu trưởng Trường Cao đẳng Kỹ thuật Cơng – Nơng nghiệp Quảng Bình) Quảng Bình, năm 2021 TUYÊN BỐ BẢN QUYỀN Tài liệu thuộc loại sách giáo trình nên nguồn thơng tin phép dùng ngun trích dùng cho mục đích đào tạo tham khảo Mọi mục đích khác mang tính lệch lạc sử dụng với mục đích kinh doanh thiếu lành mạnh bị nghiêm cấm LỜI GIỚI THIỆU Toán rời rạc lĩnh vực toán học nghiên cứu đối tượng rời rạc, đặc biệt vai trị Tốn rời rạc lĩnh vực tin học Khi phải đếm đối tượng rời rạc, nghiên cứu quan hệ đối tượng rời rạc đặc biệt việc cất giữ xử lý thông tin máy tính Với phương pháp trình bày ngắn gọn, trực quan, hy vọng giáo trình mang đến cho sinh viên kiến thức bổ ích cho ngành học áp dụng tốt cho công việc sau Chúng xin chân thành cảm ơn Ban Giám hiệu Nhà trường, Thầy, cô giáo Khoa bản, đồng nghiệp Tổ Tin học tạo điều kiện thời gian, hỗ trợ có ý kiến đóng góp nội dung để hồn thiện giáo trình Mặc dầu có nhiều cố gắng, khơng tránh khỏi khiếm khuyết, mong nhận đóng góp ý kiến đồng nghiệp độc giả để giáo trình hồn thiện Quảng Bình, ngày 18 tháng năm 2021 Tham gia biên soạn Chủ biên ThS Võ Phi Thanh MỤC LỤC LỜI GIỚI THIỆU MỤC LỤC BÀI 1: LÝ THUYẾT TỔ HỢP Sơ lược tổ hợp 1.1 Chỉnh hợp lặp 1.2 Chỉnh hợp không lặp 1.3 Tổ hợp 1,4, 1.5 Hoán vị lặp Tổ hợp lặp Bài toán đếm phơng pháp giải 2.1 Nguyên lý cộng 2.2 Nguyên lý nhân 10 2.3 Nguyên lý bù trừ: 12 2.4 Nguyên lý Dirichlet 13 BÀI 2: ĐỒ THỊ Mã bài: MĐ24-02 20 Mục tiêu: 20 Định nghĩa đổ thị 20 Các thuật ngữ 20 Đường đi, chu trình đổ thị liên thông 21 3.1 Đường 21 3.2 Chu tr×nh 22 3.3 Đồ thị liên thông 22 3.4 Một số dạng thị 3.4.1 Đồ thị ầy ủ: 23 BÀI 3: BIỂU DIỄN ĐỐ THỊ VÀ CÁC THUẬT TỐN TÌM KIẾM 26 Ma trận kề - ma trận trọng số 26 Danh sách cạnh, danh sách liên kết 27 2.1 Danh sách cạnh 27 2.2 Danh sách liên kết 28 Tìm kiếm theo chiều rộng chiều sâu 28 3.1 Tìm kiếm chiều sâu (Depth-First Search) 28 3.2 Tìm kiếm theo chiều rộng (Breadth-First Search) 30 4 Một số ứng dụng 31 4.1 Bài tốn tìm đường 31 } 32 4.2 Bài tốn tìm mảng liên thông 33 BÀI 4: CÂy VÀ CÂY KHUNG CỦA ĐỒ THỊ 36 Cây tính chất 36 1.1.Định nghĩa 36 1.2 Định lý 37 1.3 Cây khung (cây bao trùm) 37 Cây khung nhỏ 39 2.1 Thuật toán Kruskal 40 2.2 Thuật toán Prim 41 Đổ thị Euler đổ thị Hamilton 43 3.1 Đổ thị Euler 43 3.2 Đổ thị Hamilton 45 BÀI 5: ĐƯỜNG ĐI NGẮN NHẤT 50 Các khái niệm mở đầu 50 Thuật toán Dijkstra 51 Thuật toán Floyd 53 TÀI LIỆU THAM KKHẢO 56 GIÁO TRÌNH MƠ ĐUN Tên mơ đun: Tốn rời rạc Mã mơ đun: MĐ24 Vị trí, tính chất, ý nghĩa vai trị mơn học/mơ đun: - Vị trí: Đây mơn học bắt buộc giúp người học có kiến thức để học mơn lập trình mơn có tính logic - Tính chất: Mơn học mơn học dựa tảng toán học kiến thức lập trình - Ý nghĩa vai trị mơn học/mơ đun: Tốn rời rạc tảng thuật tốn nhiều mơ hình quan trọng máy tính (Logic, đại số bool, lý thuyết đồ thị, xác suất, tổ hợp ) Nó tốn học quan trọng máy tính Mục tiêu mơ đun: - Kiến thức + Trình bày khái niệm tổ hợp + Trình bày khái niệm đồ thị, phân loại đồ thị, tốn tối ưu đồ thị + Trình bày khái niệm cây, tính chất cây, phương pháp duyệt + Trình bày hàm đại số logic - Kỹ + Giải toán tối ưu thực tế như: toán đếm, toán tồn tại, toán liệt kê, toán tối ưu + Giải toán tìm đường ngắn nhất, tơ màu đồ thị, luồng cực đại + Giải tốn tìm khung nhỏ nhất, toán quay lui - Năng lực tự chủ trách nhiệm Coi việc học mô đun tảng cho mô đun chuyên mơn tiếp theo, nghiêm túc tích cực việc học lý thuyết làm tập, chủ động tìm kiếm nguồn tài liệu liên quan đến mô đun Nội dung môn học: BÀI 1: LÝ THUYẾT TỔ HỢP Mã : MĐ24-01 Giới thiệu: Trình bày vấn đề lý thuyết tổ hợp, soay quanh toán bản: Bài toán đếm, toán tồn Mục tiêu: - Trình bày khái niệm tổ hợp; - Thực toán lý thuyết tổ hợp; - Nghiêm túc học tập, đảm bảo an toàn cho người trang thiết bị Nội dung chính: Sơ lược tổ hợp Tổ hợp lĩnh vực toán học rời rạc, xuất vào đầu kỷ 17 Hiện lý thuyết tổ hợp áp dụng nhiều lĩnh vực khác nhau: lý thuyết số, hình học, thống kê xác suất, 1.1 Chỉnh hợp lặp Định nghĩa: Một chỉnh hợp lặp chạp k n phần tử có thứ tự gồm có k thành phần, thành phần lấy từ tạp n phần tử cho tr- ớc trùng K/h: Ví dụ: Tính số dãy nhị phân độ dài Giải: Mỗi dãy nhị phân độ dài gồm thành phần (mỗi thành phần nhạn hai giá trị 1) -> Số xâu nhị phân độ dài 23 Suy rộng: số dãy nhị phân cố độ dài n 2n 1.2 Chỉnh hợp không lặp Một chỉnh hợp không lặp chạp k n phần tử có thứ tự gồm k phần tử, phần tử lấy từ tạp n phần tử cho trước không trùng k/h: 1.3 Tổ hợp Định nghĩa: Một tổ hợp chạp k n phần tử (k < =n) tập hợp k phần tử chọn từ tạp n phần tử cho trước k/h: Chứng minh: Xét tạp chỉnh hợp không lặp chạp k n phần tử, tập có phần tử chia thành lớp Mà lớp gồm có thứ tự khác -> số phần tử lớp k! => số lớp tổ hợp Tính chất: * Các số tổ hợp có quan hệ với biểu thức khai triển nhị thức Newton Ví dụ: Tính hệ số khai triển x3y7 (x+y)10 là: 𝐶10 =𝐶10 1,4, Hốn vị lặp Ví dụ: Cho chữ ACCESS Hỏi có bao cách xếp tất chữ thành chữ khác nhau? Giải: Chữ ACCESS gịm có chữ đánh thứ tự sau: - Ta thấy chuỗi ACCESS, có chữ A -> có cách đặt chữ A vào vị trí - Ta thấy chuỗi ACCESS, có chữ C -> có C52 cách đặt chữ C vào vị trí cịn lại - Ta thấy chuỗi ACCESS, có chữ E -> có 𝐶31 cách đặt chữ A vào vị trí cịn lại - Cuối lại chữ S đặt vào vị trí cịn lại -> có 𝐶22 cách đặt chữ S vào vị trí Như vậy: cách Tổng quát: 1.5 Tổ hợp lặp Tổng quát: Cần lấy k vật từ tập n loại (phần tử) Số cách lấy= 𝑪𝒌𝒌−𝟏+𝒌 Ví dụ: Cho phương trình X1 + phương trình x + X3=10 đếm số nghiệm nguyên Giải: Ta có: với cách lấy nghiệm ứng với việc lấy X1 phần tử loại 1; X2 phần tử loại 2; X3 phần tử loại 3; Số lần chọn l 10 -> S cỏch ly: Bài toán đếm phơng pháp giải 2.1 Nguyên lý cộng Quy tc cộng: Giả sử có A cơng việc A1, A2, , Ak Các việc làm t- ong ứng n1, n2, , nk cách giả sử hai việc làm thời Khi số cách làm k việc n1+n2+ + nk Ví dụ: Một sinh viên chọn thực hành máy tính từ ba danh sách tương ứng có 23, 15 19 Vì vạy, theo quy tắc cộng có 23 + 15 + 19 = 57 cách chọn thực hành Giá trị biến m sau đoạn ch-ong trình sau thực hiện? m := for i1 := to n1 m := m+1 for i2 :=1 to n2 m := m+1 for ik := to nk m := m+1 Giá trị khởi tạo m Khối lệnh gồm k vòng lặp khác Sau bước lặp vòng lặp giá trị k đ- ợc tăng lên đơn vị Gọi Ti việc thi hành vịng lặp thứ i Có thể làm Ti ni cách vịng lặp thứ i có ni b- ớc lặp Do vịng lặp khơng thể thực đồng thời nên theo quy tắc cộng, giá trị cuối m số cách thực số nhiệm vụ Ti, tức m = ni+n2+ + nk Quy tắc cộng phát biểu d- ới dạng ngôn ngữ tạp hợp nh- sau: Nếu A1, A2, , Ak tạp hợp đôi rời nhau, số phần tử hợp tạp hợp tổng số phần tử tạp thành phần Giả sử Ti việc chọn phần tử từ tạp Ai với i =1,2, , k Có lAil cách làm Ti khơng có hai việc đ- ợc làm lúc Số cách chọn phần tử hợp tạp hợp này, mặt số phần tử nó, mặt khác theo quy tắc cộng |A1|+|A2|+ +|Ak| Do ta có: |A1 U A2 U U Ak| = |Ai| + |A2| + + |Ak Tổng quát: Cho hai tập A, B  X A ∩ B = ∅ N(A ∪ B) = N(A) + N(B) 2.2 Nguyên lý nhân 2.2.1 Nguyên lý: Giả sử nhiệm vụ T tách thành k việc T1, T2, , Tk Nếu việc Ti làm ni cách sau việc T1, T2, Ti1 làm, có n1.n2 nk cách thi hành nhiệm vụ cho 2.2.2 Ví dụ: 2.2.2.1 Người ta ghi nhãn cho ghế giảng đường chữ số nguyên d-ơng không v-ợt 100 Bằng cách vậy, nhiều có ghế ghi nhãn khác nhau? Thủ tục ghi nhãn cho ghế gồm hai việc, gán 26 chữ sau gán 100 số nguyên d- ơng Quy tắc nhân có 26.100=2600 cách khác để gán nhãn cho ghế Nh- vạy nhiều ta gán nhãn cho 2600 ghế 10 { d[v] = C[v,u]; truoc[u]=v; } // thực bước lặp Stop = false; While (!stop ) { Tìm k  V \ VT cho D[k] = min( d[u]); VT = VT + k; T = T + e ; //với cạnh e = (k,truoc[k]) If(|VT| = n ) Stop = true; Else For( u e V \ VT) If(d[u] > C[u,k]); { d[u] = C[u,k]; truoc[u]=k; } } } 42 Ví dụ: Tìm khung nhỏ thuật toán Prim đổ thị gồm đỉnh A, B, C, D, E, F, H, I cho ma trận trọng số sau: Vậy độ dài khung nhỏ là: 15 + 12 + 11 + 13 + 14 + 17 + 21 = 103 Đổ thị Euler đổ thị Hamilton 3.1 Đổ thị Euler 3.1.1 Định nghĩa: Chu trình đơn đổ thị G qua tất cạnh, cạnh lần gọi chu trình Euler Đường đơn G qua tất cạnh, cạnh lần gọi đường Euler Đổ thị G gọi đổ thị Euler có chu trình Euler gọi đổ thị nửa Euler có đường Euler 3.1.2 Định lý: Đổ thị vơ hướng liên thông G đổ thị Euler tất đỉnh G đề có bạc chẵn Chứng minh: Chiều thuận =>: Giả sử G đổ thị Euler -> Trong G có chu trình Euler đỉnh v G V Ta tính bậc v Vì G liên thơng -> v thuộc cạnh e Coi v đỉnh xuất phát chu trình Euler Mỗi chu trình qua v bậc v tăng lên đơn vị (1 ứng với xuất phát, ứng với quay lại) -> Deg(v) _ Chẵn Chiều nghịch  v  V -> deg(v)>0 43 Vì v  V, deg(v)_chẵn -> deg(v) >= - Lấy đỉnh v tùy ý, xét đường Theo Dirichlet tổn i, j cho Xi = Xj -> đường chu trình 3.1.3 Hệ quả: Đổ thị G nửa Euler G có khơng hai đỉnh bậc lẻ Chứng minh: Nếu G nửa Euler tổn đường Euler G từ đỉnh u đến đỉnh v Gọi G đổ thị thu từ G cách thêm vào cạnh (u,v) Khi G đổ thị Euler nên đỉnh G có bạc chẵn (kể u v) Vì vạy u v hai đỉnh G có bậc lẻ Đảo lại, có hai đỉnh bạc lẻ u v gọi G đổ thị thu từ G cách thêm vào cạnh (u,v) Khi đỉnh G có bậc chẵn hay G đổ thị Euler Bỏ cạnh (u,v) thêm vào khỏi chu trình Euler G ta có đường Euler từ u đến V G hay G nửa Euler 3.1.4 Thuật tốn tìm chu trình Euler Void Euler_Cycle { - Kiểm tra: - G - liên thông - Tất dỉnh bạc chẵn - Dùng ngăn xếp s - Xuất phát từ đỉnh u tùy ý addStack(u,s); CE =  While( !isEmpty(s )) { x = removeStack(s); if (ke(x) ) { 44 y = đỉnh ke(x); addStack(y,s); Ke(x) = ke(x) \ {y}; Ke(y) = ke(y \ {x}; } Else { removeStack(S,x); CE = CE + {x}; } } } Ví dụ: áp dụng thuật tốn cho đổ thị vơ hướng với đỉnh bạc chẵn Ta nhận chu trình Euler là: [1, 2, 3, 4, 5, 6, 7, 2, 8, 6, 9, 7, 8, 5, 3, 1] 3.2 Đổ thị Hamilton Năm 1857, nhà toán học người Ailen Hamilton(1805-1865) đưa trò chơi “đi vòng quanh giới” sau: Cho hình thập nhị diện (đa diện có 12 mặt, 20 đỉnh 30 cạnh), đỉnh hình mang tên thành phố tiếng, cạnh hình (nối hai đỉnh) đường lại hai thành phố tương ứng Xuất phát từ thành phố, tìm đường thăm tất thành phố khác, thành phố lần, trở chỗ cũ Trò chơi dẫn tới việc khảo sát lớp đồ thị đặc biệt, đồ thị 45 Hamilton 3.2.1 Đường Hamilton Trong đồ thị G = (V,E) đường qua tất đỉnh đồ thị đỉnh lần gọi đường Hamilton Ví dụ: Đồ thị có đường Hamilton a →b → c → d 3.2.2 Chu trình Hamilton Chu trình đỉnh V qua tất đỉnh lại đỉnh lần quay trở V gọi chu trình Hamilton 3.2.3 Đồ thị Hamilton Đồ thị G gọi đồ thị Hamilton chứa chu trình Hamilton gọi đồ thị nửa Hamilton có đường Hamilton Rõ ràng đồ thị Hamilton nửa Hamilton, điều ngược lại khơng cịn Ví dụ đồ thị Hamilton: Đồ thị Hamilton Bài tốn chu trình Hamilton (HC) phát biểu sau: 46 Instance: Một đồ thị G = (V,E) Question: G có chu trình Hamilton hay khơng? Bài tốn HC Karp (1972, [15]) chứng minh tốn NP-C (NPđầy đủ), mà khơng tồn thuật tốn đa thức xác định tồn chu trình Hamilton đồ thị cho trước Cho đến chưa tìm điều kiện cần đủ để kiểm tra xem đồ thị cho trước có Hamilton hay khơng, vấn đề cịn vấn đề mở Hiện có điều kiện đủ để đồ thị đồ thị Hamilton hay có đường Hamilton 3.2.4 Định lý Giả sử G đồ thị Hamilton Khi đó: a) Mọi đỉnh đồ thị G phải có bậc khơng nhỏ b) Nếu đỉnh có bậc hai cạnh phải nằm chu trình Hamilton G c) Nếu đỉnh có bậc lớn hai cạnh liền kề nằm chu trình Hamilton cạnh cịn lại khơng nằm chu trình Hamilton Bài tập thực hành: Bài 1: Có thể tìm đ-ợc có đỉnh thoả điều kiện hay khơng? Nếu có, vẽ ra, khơng, giải thích sao? a) Mọi đỉnh có bạc b) Mọi đỉnh có bạc c) Có đỉnh bạc đỉnh bạc d) Có đỉnh bạc đỉnh bạc Bài 2: Cho đổ thị sau: - Tìm khung nhỏ đổ thị theo thuật toán Kruskal 47 - Tìm khung nhỏ đổ thị theo thuạt tốn Prim Mơ tả bảng giá trị? Bài 3: Tìm khung nhỏ thuật tốn Prim, mơ tả bảng giá trị đổ thị gồm đỉnh A, B, C, D, E, F, H, I cho ma trận trọng số sau Bài 4: Duyệt sau thuật toán DFS BFS 48 49 BÀI 5: ĐƯỜNG ĐI NGẮN NHẤT Mã bài: MĐ24-05 Giới thiệu: Giúp người học xây dựng đường đi, tìm đường ngắn đồ thị Mục tiêu: - Trình bày khái niệm đường ngăn nhất; - Tìm đường ngắn đồ thị; - Áp dụng thuật tốn Dikstra, Floyd tìm đường ngắn nhất; - Nghiêm túc học tập, đảm bảo an tồn cho người trang thiết bị Nội dung chính: Các khái niệm mở đầu Trước chuyến xuất hành, thường phải suy nghĩ chọn cho hành trình tiết kiệm theo nghĩa tốn thời gian, tốn nhiên liệu tốn tiền Lý thuyết Đổ thị giúp tìm giải pháp Bài tốn 1: Cho Đổ thị G = (V, E) hai đỉnh a, b Tìm đường ngắn (nếu có) từ đỉnh a đến đỉnh b đổ thị G ý nghĩa thực tế: Bài toán giúp chọn hành trình tiết kiệm (quãng đường, thời gian, chi phí ) giao thơng, lập lịch thi cơng cơng trình cách tối ưu, xử lý truyền tin Ví dụ (Bài tốn sói, dê bắp cải): Một sói, dê bắp cải bờ sơng Người lái đị phải đ- a chúng sang sơng Nhưng thuyền bé nên chuyến chở hành khách thơi Vì lý mà biết, khơng thể bỏ mặc sói với dê dê với bắp cải mà khơng có người trơng Vạy người lái đị phải xử trí mà đưa sói, dê bắp cải sang bên sông Xây dựng đổ thị vô hướng với đỉnh thể hành khách cịn lại bên phía xuất phát thời điểm khác Cạnh nối hai đỉnh thể chuyến đị qua sơng L-u ý: L _ người lái đị S _ sói 50 D _ Dê B _ Bắp cải Hành trình qua sơng sói, dê bắp cải Bài tốn đưa việc tìm đường ngắn từ đỉnh a đến đỉnh b đổ thị Đường mũi tên hình Định nghĩa: Đổ thị G gọi đồ thị có trọng số cạnh (i, j) đổ thị gán số nguyên không âm c(ij) Nhãn c(ij) cạnh (ij) đổ thị thường biểu diễn chi phí thực tế để qua cạnh Ta thường ký hiệu đổ thị có trọng số (G, c) Độ dài đường đổ thị có trọng số tổng trọng số cạnh đường Bài tốn: Cho đổ thị có trọng số (G, c) hai đỉnh a, b thuộc G Hãy tìm đường có trọng số bé (nếu có) từ đỉnh a đến đỉnh b Độ dài đường ngắn từ đỉnh a đến đỉnh b gọi khoảng cách từ đỉnh a đến đỉnh b đổ thị Nếu khơng có đường từ a đến b đặt khoảng cách T Thuật toán Dijkstra Năm 1959 E W Dijkstra đưa thuật toán hiệu để giải toán đường ngắn Thuật toán thực việc gán giảm giá trị nhãn l(i) đỉnh I đổ thị G sau: Thuật tốn 4.2 (Tìm đ-ờng ngắn nhất): Với đỉnh xuất phát a, gán nhãn l(a) := Nếu có cạnh (ij) mà đỉnh i đ- ợc gán nhãn đỉnh j ch- a đ- ợc gán nhãn đỉnh j gán nhãn nh- ng l(i) + c(ij) < l(j) giảm nhãn l(j) := l(i) + c(ij) Lặp lại bước không gán giảm nhãn 51 Void Dijkstra(a) ; { for (j V ) { Lj] := C[a, j] ; Truoc[j] := a; } T := V \ {a} ; while ( T  ) { chọn đỉnh i T mà L[i] = min(L[j] cho j T); T := T \ i ; for (j T ) if ( L[j] > L[i] + C[i, j] ) { L[j] := L[i] + C[i, j] ; Truoc[j] := i ; } } } Biến mảng Truoc dùng để khơi phục đường Ví dụ: Tìm khoảng cách d(a,v) từ a đến đỉnh v đổ thị tìm đường ngắn từ a đến v cho đổ thị G sau 52 Theo thuật toán Dijkstra ta có đường ngắn từ đỉnh a tới tất đỉnh sơ đổ sau: Thuật tốn Floyd Cho G=(V,E) đổ thị có hướng, có trọng số Để tìm đường ngắn cặp đỉnh G, ta áp dụng thuật toán Dijkstra nhiều lần áp dụng thuật toán Floyd đ- ợc trình bày Giả sử V={vi, V2, , Vn} có ma trận trọng số W = Wo Thuật toán Floyd xây dựng dãy ma trận vuông cấp n Wk (0

Ngày đăng: 05/05/2023, 16:53

Xem thêm:

w