Giáo trình Toán rời rạc (Nghề Lập trình máy tínhCĐ)

51 4 0
Giáo trình Toán rời rạc (Nghề Lập trình máy tínhCĐ)

Đ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À PHÁT TRIỂN NÔNG THÔN TRƯỜNG CAO ĐẲNG NGHỀ CƠ GIỚI NINH BÌNH GIÁO TRÌNH MƠN HỌC: TỐN RỜI RẠC NGÀNH/NGHỀ: LẬP TRÌNH MÁY TÍNH TRÌNH ĐỘ: CAO ĐẲNG Ban hành kèm theo Quyết định số: /QĐ-TCGNB ngày…….tháng… năm 201 Trường cao đẳng nghề Cơ giới Ninh Bình Ninh Bình, năm 2018 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ữ sử lý thơng tin máy tính Cuốn sách nhằm giới thiệu kiến thức về: Lý thuyết tổ hợp, lý thuyết đồ thị nhằm giúp em ngành Lập trình có tài liệu tham khảo, đồng thời tài liệu học tập cho em Tài liệu biên soạn gồm chương: Chương 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 Nội dung chương I giúp nâng cao tư tốn học mà cịn làm quen với thuật toán để giải toán thực tế Chương Trình bày kiến thức lý thuyết đồ thị Chương cung cấp kiến thức lý thuyết đồ thị, giúp người học có kiến thức sở để nghiên cứu đồ thị chương Chương Biểu diễn đồ thị máy tính thuật tốn tìm kiếm Sau người học tìm hiểu kiến thức đồ thị tiến hành xây dựng cấu trúc liệu để biểu diễn đồ thị máy tính, đồng thời xây dựng thuật tốn tìm kiếm đồ thị tổ chức máy tính Chương Trình bày kiến thức khung đồ thị, cách xây dựng chu trình đồ thị Chương Giúp người học xây dựng đường đi, tìm đường ngắn đồ thị Mặc dù tác giả cố gắng nhiều tài liệu không tránh khỏi thiếu sót Tác giả mong nhận ý kiến đóng góp bạn đọc quan tâm để tài liệu ngày hồn thiện Ninh Bình, ngày… tháng… năm 2018 Tham gia biên soạn Nguyễn Văn Thái Nguyễn Xuân Khôi Vũ Ánh Dương MỤC LỤC TRANG Lời giới thiệu Chương Lý thuyết tổ hợp Sơ lược tổ hợp Bài toán đếm phương pháp giải………… Bài toán tồn phương pháp giải……… 17 Chương Các khái niệm lý thuyết đồ thị 20 Định nghĩa đồ thị 20 Các thuật ngữ 20 Đường đi, chu trình đồ thị liên thơng 21 Chương Biểu diễn đồ thị thuật tốn tìm kiếm 25 Ma trận kề, ma trận trọng số 25 Danh sách cạnh, danh sách liên kết 26 Tìm kiếm theo chiều rộng chiều sâu 27 Một số ứng dụng 30 Bài tập 33 Chương Cây khung đồ thị 34 Cây tính chất 34 Cây khung nhỏ 37 Đồ thị Euler đồ thị Hamilton 40 Bài tập 44 Chương Đường ngắn 46 Các khái niệm mở đầu 46 Thuật toán Dijkstra 47 Thuật toán Floy 49 Bài tập 50 GIÁO TRÌNH MƠN HỌC Tên mơn học: Tốn rời rạc Mã mơn học: MH12 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 tố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ơn học: - Về kiến thức: Vận dụng kiến thức sinh viên viên xây dựng thuật tốn tính : tổ hợp, hốn vị, giải hệ phương trình, phương trình, tính tích phân - Về kỹ năng: + Sử dụng kiến thức sinh viên viên xây dựng thuật toán quay lại, toán tối ưu, toán tồn tại; + Là tảng để sinh viên học môn cấu trúc liệu giải thuật, cài đặt thuật toán tin học - Về lực tự chủ trách nhiệm: Có khả tổ chức, thực nhiệm vụ chịu trách nhiệm kết cơng việc Nội dung mơn học: CHƯƠNG 1: LÝ THUYẾT TỔ HỢP Mã chương: Mh12.1 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, tố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 nh- 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 đ- ợc á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 vµ cã thĨ trïng K/h: Ank  nk 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: Pnk  n! (n  k )! 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ư k chän tõ tËp n phÇn tư cho tr- íc k/h : Cn  n! k!(n  k )! Chứng minh: Xét tập chỉnh hợp không lặp chập k n phần tử, tập n! có phần tử chia thành lớp Mà lớp gåm c¸c bé cã thø tù (n  k )! n! cịng k! (n  k )! kh¸c số phần tử lớp k! số lớp tổ hợp Tính chất: - Cnk  Cnnk - Cn  Cn1  Cn1 k k k * Các số tổ hợp có quan hƯ víi biĨu thøc khai triĨn nhÞ thøc Newton ( x  y)  C x  C x y  C x y   C x y n n n n n1 n 2 n n1 n n1 VÝ dô: TÝnh hƯ sè khai triĨn cđa x3y7 cđa (x+y)10 lµ: n  C y  Cni x ni y i n n n i C103 C107 1.4 Hoá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ữ đ- ợc đánh thứ tự nh- sau: A C C E S S - Ta thấy chuỗi ACCESS, có chữ A có C61 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í lại - Ta thấy chuỗi ACCESS, có chữ E có C31 cách đặt chữ A vào vị trí lại - Cuối lại chữ S đặt vào vị trí lại có C2 cách đặt chữ S vào vị trí Nh- vậy: Có C61.C52 C31.C22 =180 cách Tổng quát: n1 số phần tử loại n số phần tử loại Cho n phần tử có: n số phần tử loại víi n1  n2  n3   nm n n m số phần tử loại m Số hoán vị lặp = Cnn Cnnn .C(nnn  n m 1 m)  n! n1!.n2! nm! 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ử) k  Sè c¸ch lÊy= Cn 1 k VÝ dơ: Cho ph- ơng trình x1 x2 x3 10 đếm số nghiệm nguyên ph- ơng trình 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; 12! 10 Số lần chọn 10 Số cách lấy: C10 66 ( 31) 10!.2! Bài toán đếm ph- ơng pháp giải 2.1 Nguyên lý cộng Quy tắc cộng: Giả sử có A công việc A1, A2, , Ak Các việc làm t- ơng ứng n1, n2, , nk cách giả sử hai việc làm đồng thời Khi số cách làm k việc n1+n2+ + nk VÝ dơ: Mét sinh viªn cã thể 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- ơng trình sau đ- ợc 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 thực đồng thời nên theo quy tắc cộng, giá trị cuối m số cách thùc hiƯn mét sè c¸c nhiƯm vơ Ti, tøc m = n1+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ó |Ai| cách làm Ti 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 nã b»ng | A1|+|A2|+ +|Ak| Do ®ã ta cã: |A1  A2   Ak| = |A1| + |A2| + + |Ak| Tỉng qu¸t: Cho hai tËp A, B  X vµ 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 đ- ợc tách thành k viƯc T1, T2, , Tk NÕu viƯc Ti cã thĨ làm ni cách sau việc T1, T2, Ti-1 đà đ- ợc 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 cã thĨ ghi nh·n cho ghế giảng đ- ờng chữ số nguyên d- ơng không v- ỵt qu¸ 100 B»ng c¸ch nh- vËy, nhiỊu nhÊt cã ghế đ- ợc ghi nhÃn kh¸c nhau? Thđ tơc ghi nh·n cho mét chiÕc 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- nhiỊu nhÊt ta cã thĨ g¸n nh·n cho 2600 chiÕc ghế 2.2.2.2 Có xâu nhị phân có độ dài n Mỗi n bit xâu nhị phân chọn hai cách bit hc b»ng hc b»ng Bëi vËy theo quy tắc nhân có tổng cộng 2n xâu nhị phân khác có độ dài n 2.2.2.3 Có thể tạo đ- ợc ánh xạ từ tập A có m phần tử vào tập B có n phần tử? Theo định nghĩa, ánh xạ xác định A có giá trị B phép t- ơng ứng phần tử A với phần tử B Rõ ràng sau đà chọn đ- ợc ảnh i - phần tử đầu, để chọn ảnh phần tử thứ i A ta có n cách Vì theo quy tắc nhân, ta có n.n n =nm ánh xạ xác định A nhận giá trị B 2.2.2.4 Có đơn ánh xác định tập A có m phần tử nhận giá trị tập B có n phần tử? Nếu m > n với ánh xạ, có hai phần tử A có ảnh, điều có nghĩa đơn ánh từ A đến B Bây giả sử m n gọi phần tử A a1,a2, ,am Rõ ràng có n cách chọn ảnh cho phần tử a1 Vì ánh xạ đơn ánh nên ảnh phần tử a2 phải khác ảnh a1 nên có n cách chọn ảnh cho phần tử a2 Nói chung, để chọn ảnh ak ta cã n - k + c¸ch Theo quy tắc nhân, ta có n(n 1)(n 2) (n m + 1) = n! đơn ánh từ tập A đến tập B (n m)! 2.2.2.5 Giá trị biến k sau ch- ơng trình sau đ- ợc thực hiện? m := for i1 := to n1 for i2 := to n2 for ik := to nk k := k+1 Giá trị khởi tạo k Ta có k vòng lặp đ- ợc lồng Gọi Ti việc thi hành vòng lặp thứ i Khi số lần qua vòng lặp số cách làm việc T1, T2, , Tk Số cách thực việc Tj nj (j=1, 2, , k), vòng lặp thứ j đ- ợc duyệt với giá trị nguyên ij nằm nj Theo quy tắc nhân vòng lặp lồng đ- ợc duyệt qua n1.n2 nk lần Vì giá trị cuối k n1.n2 nk Tóm lại: Nguyên lý nhân th- ờng đ- ợc phát biểu ngôn ngữ tập hợp nhsau Nếu A1, A2, , Ak tập hữu hạn, số phần tử tích Descartes 10 Cây khung nhỏ Bài toán tìm khung nhỏ đồ thị số toán tối - u đồ thị tìm đ- ợc ứng dụng nhiều lĩnh vực khác đời sống Trong phần ta có hai thuật toán để giải toán Tr- ớc hết, nội dung toán đ- ợc phát biểu nh- sau Cho G=(V,E) đồ thị vô h- ớng liên thông có trọng số, cạnh e E có trọng số C(e)0 Giả sử T=(VT,ET) khung đồ thị G (VT=V) Ta gọi độ dài C(T) khung T tổng trọng số cạnh nó: C(T)= C(e) e E T Bài toán đặt số tất khung đồ thị G, hÃy tìm khung có độ dài nhỏ Cây khung nh- đ- ợc gọi khung nhỏ đồ thị Để giải toán ta tìm hiểu số thuật toán sau: 2.1 Thuật toán Kruskal ý t- ëng cđa tht to¸n: Tht to¸n Kruskal áp dụng cho đồ thị cài đặt danh sách cạnh Tr- ớc hết xếp cạnh đồ thị G theo thứ tự không giảm trọng số Bắt đầu từ ET=, b- ớc ta lần l- ợt duyệt danh sách cạnh đà xếp, từ cạnh có độ dài nhỏ đến cạnh có độ dài lớn hơn, để tìm cạnh mà việc bổ sung vào tập ET không tạo thành chu trình tập Thuật toán kết thúc ta thu đ- ợc tập ET gồm n cạnh Thuật toán: B- ớc 1: xếp cạnh đồ thị theo thứ tự trọng số tăng dần B- ớc 2: Thực lặp - Chọn cạnh có trọng số nhỏ ch- a xét - Nếu cạnh không tạo thành chu trình với cạnh đà chọn bổ xung cạnh vào khung T B- ớc 3: Lặp lại b- ớc |T| = n- VÝ dơ 1: Thùc hiƯn tht toán Kruskal, tìm khung nhỏ đồ thị 20 v2 sau: v4 33 16 18 v1 17 v3 37 v5 v6 14 B1: S¾p xÕp cạnh theo thứ tự tăng dần: v3 v5 ; v4 v6 ; v5 v4 ; v5 v6 ; v3 v4 ; v3 v1 ; v2 v3 ; v2 v4 ; v1v2 B2: LỈp v3v5 ; v4v6 ; v4v5 ; v1v3 ; v2v3 B3: |T| = = n-1 33 Cây khung thu đ- ợc: (đ- ờng kẻ đậm) v2 16 18 v1 17 20 v3 v4 v6 v5 14 NhËn xÐt: - ViƯc kiĨm tra cạnh xét có tạo thành chu trình hay không t- ơng đối khó khăn - Trong trình xây dựng khung T không liên thông 2.2 Thuật toán Prim Thuật toán Kruskal làm việc hiệu đồ thị dày (đồ thị có số cạnh m n(n1)/2) Trong tr- ờng hợp đó, thuật toán Prim tỏ hiệu Thuật toán Prim đ- ợc gọi ph- ơng pháp lân cận gần Thuật toán: B- ớc 1: Xuất phát từ đỉnh B- ớc 2: Thực lặp - Tìm đỉnh ch- a chọn có khoảng cách nhỏ với tập đỉnh đà chọn - Giả sử e cạnh t- ơng ứng với khoảng cách nhỏ - Bổ sung đỉnh v vào tập đỉnh đà chọn - Bổ sung cạnh e vào c©y khung T B- íc 3: Tíi |T| = n – Void Prim(v); { VT = v ; T = ; For ( u  V \ VT) { d[v] = C[v,u]; truoc[u]=v; } 38 // thùc hiÖn 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  V \ VT) If(d[u] > C[u,k]); { d[u] = C[u,k]; truoc[u]=k; } } } Ví dụ: Tìm khung nhỏ thuật toán Prim đồ thị gồm đỉnh A, B, C, D, E, F, H, I ®- ỵc cho bëi ma trËn träng sè sau A B C D E F H I B- íc lỈp Khëi t¹o A     B A   B 15 C 16  D 19 E  23 F  20  H  32  I 18 15  33 13 34 19 20 12 D R C 16 33  13 29 21 20 19 19 13 13  22 30 21 11 23 34 29 22  34 23 21 F 20 19 21 30 34  17 18 H 32 20 20 21 23 17  14 I [A,15] [A,16] [A,19] [A,23] [A,20] [A,32] [A,18]    [A,16] [B,13] [A,23] [B,19] [B,20] [B,12] [A,16] [I,11] [I,21] [I,18] [I,14] [D,13]  [I,21] [I,18] [I,14] 39   18   12  19   11 21 18  14    VT t A  A, B A, B, I A, B, I, D (A,B) (A,B), (B,I) (A,B), (B,I), (I,D) B- íc lỈp A B C D R F H     [I,21] [I,18] [I,14]     [I,21] [H,17]     [I,21]      I          VT t A, B, I, D, C (A,B), (B,I), (I,D), (D,C) A, B, I, D, C, (A,B), (B,I), (I,D), H (D,C), (I,H) A, B, I, D, C, (A,B), (B,I), (I,D), H, F (D,C), (I,H), (H,F) A, B, I, D, C, (A,B), (B,I), (I,D), H, F, E (D,C), (I,H), (H,F), (I,E) VËy độ dài khung nhỏ là: 15 + 12 + 11 + 13 + 14 + 17 + 21 = 103 43 Đồ 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 đ- ợc 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  V Ta ®i tÝnh bËc cña 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 : Giả sử v V có deg(v) chẵn Ta cần chứng minh G_Euler - Chứng minh G có chu trình Euler Vì G liên thông   v  V  deg(v)>0 V× v  V, deg(v)_chẵn deg(v) - Lấy đỉnh v tïy ý, xÐt ®- êng ®i x  v  x1  x2  ®ã xi  xi deg(xi) Theo Dirichlet tồn i, j cho xi = xj  ®- êng ®i x  v  x1  x2  lµ chu trình 3.1.3 Hệ quả: Đồ thị G nửa Euler G có không hai đỉnh bậc lẻ 40 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 đ- ợc 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ì 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 đ- ợc từ G cách thêm vào cạnh (u,v) Khi ®ã mäi ®Ønh cđa G ®Ịu 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ó ®- ỵc ®- êng ®i Euler tõ u ®Õn v G hay G nửa Euler 3.1.4 Thuật toán t×m mét 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) ) { y = ®Ønh ke(x); addStack(y,s); Ke(x) = ke(x) \ {y}; Ke(y) = ke(y \ {x}; } Else { removeStack(S,x); CE = CE + {x}; } } } 41 VÝ dô: áp dụng thuật toán cho đồ thị vô h- ớng với đỉnh bậc chẵn d- ới Hình Đồ thị vô h- ớng với đỉnh bậc chẵn Ta nhận đ- ợc 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 Nm 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ị 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 a b d c Hình 2.1 Đồ thị có đường Hamilton, khơng có chu trình Hamilton 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 42 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: 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 toán NP-C (NPđầy đủ), mà khơng tồn thuật toá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 đề 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 43 Bµi tËp 4.1 Cã thể tìm đ- ợc có đỉnh thoả điều kiện d- ới hay không? Nếu có, vẽ ra, không, giải thích sao? a) Mäi ®Ønh ®Ịu cã bËc b) Mäi ®Ønh ®Òu cã bËc c) Cã ®Ønh bËc đỉnh bậc d) Có đỉnh bậc đỉnh bậc 4.2 Cho đồ thị sau a a b c d e h b f g i a j b c d e g f j i h l k c 42 a 10 c d 15 g 20 b 14 11 e f h - Tìm khung nhỏ đồ thị theo thuật toán Kruskal - Tìm khung nhỏ đồ thị theo thuật toán Prim Mô tả bảng giá trị? 44 4.3 Tìm khung nhỏ thuật toán Prim, mô tả bảng giá trị đồ thị gồm đỉnh A, B, C, D, E, F, H, I ®- ỵc cho bëi ma trËn träng sè sau A B C A   B 16 C 15 D  23 E 19 F 18 G  32 H  20 16  13 33 24 20 19 11 15 13  13 29 21 20 19 D E 23 33 13  22 30 21 12 19 24 29 22  34 23 21 F G H 18 20 21 30 34  17 14 32 19 20 21 23 17  18 20   11  19   12  21 14   18 4.4 Duyệt sau lần l- ợt thuật toán DFS BFS a b 1 12 10 11 12 10 14 17 45 15 16 Ch- ơng 5: đ- ờng đI ngắn Mà ch-ơng: Mh12.5 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 toàn cho người trang thiết bị Ni 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 nhÊt theo nghÜa tèn Ýt 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 toá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 nhÊt (qu·ng ®- êng, thêi gian, chi phÝ ) giao thông, lập lịch thi công công trình mét c¸ch tèi - u, xư lý trun tin Ví dụ (Bài toá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ở đ- ợc hành khách Vì lý mà biết, bỏ mặc sói với dê dê với bắp cải mà ng- ời trông Vậy ng- ời lái đò phải xử trí mà đ- a đ- ợc 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 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 D _ Dê B _ Bắp cải 46 Hành trình qua sông sói, dê bắp cải Bài toán đ- a việc tìm đ- ờng ngắn từ đỉnh a đến đỉnh b đồ thị Đ- ờng nh- đ- ợc mũi tên hình Định nghĩa: Đồ thị G đ- ợc gọi đồ thị có trọng số cạnh (i, j) đồ thị đ- ợc gán số nguyên không âm c(i,j) NhÃn c(i,j) cạnh (i,j) đồ 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 ®i ®å thÞ cã träng sè b»ng tổng trọng số cạnh đ- ờng Bài toá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 ®i ng¾n nhÊt tõ ®i ®Ønh a ®Õn đỉnh b đ- ợc gọi khoảng cách từ đỉnh a đến đỉnh b đồ thị Nếu đ- ờng từ a đến b đặt khoảng cách 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 nh- sau: Thuật toá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 (i,j) mà đỉnh i đà đ- ợc gán nhÃn đỉnh j ch- a đ- ợc gán nhÃn đỉnh j đà đ- ợc gán nhÃn nh- ng l(i) + c(i,j) < l(j) giảm nhÃn l(j) := l(i) + c(i,j) Lặp lại b- ớc không gán giảm nhÃn đ- ợc Void Dijkstra(a) ; { for (j V ) { L[j] := C[a, j] ; Truoc[j] := a; 47 } 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 b 1 a 2 e d g h n c m k Theo thuËt to¸n Dijkstra ta cã ®- êng ®i ng¾n nhÊt tõ ®Ønh a tíi tÊt đỉnh nh- sơ đồ sau: 48 Thuật toá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 d- ới Giả sử V={v1, v2, , vn} có ma trận trọng số W W0 Thuật toán Floyd xây dựng dÃy ma trận vuông cấp n Wk (0 k n) nh- sau: private Xác định Wn { for (i = 1;i

Ngày đăng: 28/12/2021, 19:25

Hình ảnh liên quan

Cho một hình thập nhị diện đều (đa diện đều có 12 mặt, 20 đỉnh và 30 cạnh), mỗi đỉnh của hình mang tên một thành phố nổi tiếng, mỗi cạnh của hình  - Giáo trình Toán rời rạc (Nghề Lập trình máy tínhCĐ)

ho.

một hình thập nhị diện đều (đa diện đều có 12 mặt, 20 đỉnh và 30 cạnh), mỗi đỉnh của hình mang tên một thành phố nổi tiếng, mỗi cạnh của hình Xem tại trang 42 của tài liệu.

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan