Bài giảng Toán rời rạc ứng dụng trong tin học - Chương 2: Các bài toán về đường đi - Cao Thanh Tình

Bài toán

Có thể xuất phát tại một điểm nào đó trong thành phố, đi qua tất cả 7 cây cầu, mỗi cây một lần, rồi trở về điểm xuất phát được không?

Leonhard Euler đã tìm ra lời giải cho bài toán vào năm 1736

 

ppt48 trang | Chia sẻ: phuongt97 | Lượt xem: 364 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Bài giảng Toán rời rạc ứng dụng trong tin học - Chương 2: Các bài toán về đường đi - Cao Thanh Tình, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
1TOÁN RỜI RẠC ỨNG DỤNG TRONG TIN HỌCCÁC BÀI TOÁN VỀ ĐƯỜNG ĐI2Chu trình và đường đi EulerBài toánCó thể xuất phát tại một điểm nào đó trong thành phố, đi qua tất cả 7 cây cầu, mỗi cây một lần, rồi trở về điểm xuất phát được không?Leonhard Euler đã tìm ra lời giải cho bài toán vào năm 17363Leonhard Euler 1707 - 1783Leonhard Euler (15/04/1707 – 18/9/1783) là một nhà toán học và nhà vật lý học Thụy Sĩ. Ông (cùng với Archimedes và Newton) được xem là một trong những nhà toán học lừng lẫy nhất. Ông là người đầu tiên sử dụng từ "hàm số" (được Gottfried Leibniz định nghĩa trong năm 1694) để miêu tả một biểu thức có chứa các đối số, như y = F(x). Ông cũng được xem là người đầu tiên dùng vi tích phân trong môn vật lý.4Leonhard Euler 1707 - 1783Ông sinh và lớn lên tại Basel, và được xem là thần đồng toán học từ nhỏ. Ông làm giáo sư toán học tại Sankt-Peterburg, sau đó tại Berlin, rồi trở lại Sankt-Peterburg. Ông là nhà toán học viết nhiều nhất: tất cả các tài liệu ông viết chứa đầy 75 tập. Ông là nhà toán học quan trọng nhất trong thế kỷ 18 và đã suy ra nhiều kết quả cho môn vi tích phân mới được thành lập. Ông bị mù hoàn toàn trong 17 năm cuối cuộc đời, nhưng khoảng thời gian đó là lúc ông cho ra hơn nửa số bài ông viết.Tên của ông đã được đặt cho một miệng núi lửa trên Mặt Trăng và cho tiểu hành tinh 2002.5Chu trình và đường đi EulerBài toánMô hình hóa bài toánXây dựng đồ thị GĐỉnh: Các vùng đất trong sơ đồCạnh: các cây cầu nối giữa hai vùng đấtYêu cầuTồn tại hay không một chu trình đơn trong đa đồ thị G = (V, E) có chứa tất cả các cạnh của đồ thị?6Chu trình và đường đi EulerĐịnh nghĩaCho G=(V,E) là một đa đồ thị vô hướngChu trình EulerChu trình đơn chứa tất cả các cạnh của đồ thị G.Đồ thị EulerĐồ thị có chứa một chu trình Euler Đường đi EulerĐường đi đơn chứa tất cả các cạnh của đồ thị G7Chu trình và đường đi EulerĐịnh nghĩaVí dụ: Chỉ ra đường đi và chu trình (nếu có) trong các đồ thị sau đây?8Chu trình và đường đi EulerTrong đồ thị vô hướngĐịnh lý về chu trình EulerMột đa đồ thị liên thông G=(V, E) có chu trình Euler khi và chỉ khi mỗi đỉnh của nó đều có bậc chẵnChứng minh9Chu trình và đường đi EulerTrong đồ thị vô hướngThuật toán FleuryQui tắc 1: Xóa cạnh vừa đi quaXóa đỉnh cô lập (nếu có)Qui tắc 2Tại mỗi đỉnh, ta chỉ đi theo một cạnh là cầu nếu không có sự lựa chọn nào khác10Chu trình và đường đi EulerTrong đồ thị vô hướngThuật toán FleuryVí dụ11Chu trình và đường đi EulerTrong đồ thị vô hướngĐịnh lý về đường đi EulerĐa đồ thị liên thông G có đường đi Euler, không có chu trình Euler khi và chỉ khi G có đúng 2 đỉnh bậc lẻChứng minh12Chu trình và đường đi EulerTrong đồ thị vô hướngĐịnh lý về đường đi EulerVí dụ: Đồ thị nào có đường đi Euler?13Chu trình và đường đi EulerTrong đồ thị có hướngĐịnh lý về chu trình EulerMột đa đồ thị liên thông G=(V, E) có chu trình Euler khi và chỉ khi G liên thông yếudeg+(v) = deg-(v) vVChứng minh14Chu trình và đường đi EulerTrong đồ thị có hướngĐịnh lý về chu trình EulerVí dụ: Đồ thị nào có chu trình Euler?15Chu trình và đường đi EulerTrong đồ thị có hướngĐịnh lý về đường đi EulerG = (V, E) là một đa đồ thị có hướngG có đường đi Euler nhưng không có chu trình Euler khi và chỉ khiG liên thông yếu sV : deg+(s) = deg-(s) + 1 tV : deg+(t) = deg-(t) - 1deg+(v) = deg-(v) vV \ {s, t}16Chu trình và đường đi EulerTrong đồ thị có hướngĐịnh lý về đường đi EulerVí dụ17Chu trình và đường đi EulerTrong đồ thị có hướngĐịnh lý về đường đi EulerVí dụ18Chu trình và đường đi EulerBài tậpChứng minh rằng ta có thể sắp xếp tất cả các con cờ của bộ cờ Đôminô thành một vòng khép kínSử dụng thuật toán Fleury, tìm chu trình Euler cho đồ thị sau19Chu trình và đường đi EulerBài tậpHội nghị bàn trònTổng thư ký Đại hội đồng Liên hợp quốc triệu tập một cuộc họp có N nhà ngoại giao của N tổ chức tham gia. Các đại diện ngoại giao được bố trí ngồi quanh một bàn tròn. Giữa một số tổ chức có quan hệ căng thẳng, vì vậy không thể xếp họ ngồi cạnh nhau được. Hãy lập trình giúp Tổng thư ký Liên hợp quốc bố trí chỗ ngồi quanh bàn họp20Chu trình & đường đi HamiltonChu trình HamiltonĐịnh nghĩaChu trình HamiltonMột chu trình sơ cấp đi qua tất cả các đỉnh của đồ thị mỗi đỉnh chỉ đúng một lầnĐồ thị HamiltonĐồ thị có chứa chu trình Hamilton21Chu trình & đường đi HamiltonChu trình HamiltonĐiều kiện đủĐịnh lý Ore (1960)Cho G = (V, E) là một đơn đồ thị liên thông|V|  3deg(v) + deg(w)  n, với mọi v không kề wKhi đó G có chu trình HamiltonChứng minh22Chu trình & đường đi HamiltonChu trình HamiltonĐiều kiện đủHệ quả (Định lý Dirac-1952)Cho G = (V, E) là một đơn đồ thị|V|  3deg(v) > n/2, vVKhi đó G có chu trình Hamilton23Chu trình & đường đi HamiltonChu trình HamiltonĐiều kiện đủĐịnh lý PósaCho G = (V, E) là một đơn đồ thị|{vV: deg(v)  k}|  k-1  k  [1, (n-1)/2)|{vV: deg(v)  (n-1)/2}|  (n-1)/2, nếu n lẻKhi đó G có chu trình HamiltonChứng minh24Chu trình & đường đi HamiltonChu trình HamiltonĐiều kiện đủVí dụ25Chu trình & đường đi HamiltonChu trình HamiltonPhương pháp tìm chu trình HamiltonQui tắc 1: Nếu tồn tại một đỉnh v của G có d(v)<=1 thì đồ thị G không có chu trình Hamilton.Qui tắc 2: Nếu đỉnh v có bậc là 2 thì cả 2 cạnh tới v đều phải thuộc chu trình Hamilton.Qui tắc 3: Chu trình Hamilton không chứa bất kỳ chu trình con thực sự nào.Qui tắc 4: Trong quá trình xây dựng chu trình Hamilton, sau khi đã lấy 2 cạnh tới một đỉnh v đặt vào chu trình Hamilton rồi thì không thể lấy thêm cạnh nào tới v nữa, do đó có thể xóa mọi cạnh còn lại tới v.26Chu trình & đường đi HamiltonChu trình HamiltonPhương pháp tìm chu trình HamiltonVí dụ 1: Tìm một chu trình Hamiltonabcghidef27Chu trình & đường đi HamiltonChu trình HamiltonPhương pháp tìm chu trình HamiltonVí dụ 2: Đồ thị sau có chu trình Hamilton không?28Chu trình & đường đi HamiltonChu trình HamiltonPhương pháp tìm chu trình HamiltonVí dụ 3: Đồ thị sau có chu trình Hamilton không?DABCFEHGIJK29Chu trình & đường đi HamiltonĐường đi HamiltonĐịnh nghĩaĐường đi sơ cấp đi qua tất cả các đỉnh của đồ thị G, mỗi đỉnh đúng một lần.Ví dụ30Chu trình & đường đi HamiltonĐường đi HamiltonĐịnh lý KönigMọi đồ thị có hướng đầy đủ (đồ thị vô hướng tương ứng là đầy đủ) đều có đường đi Hamilton31Chu trình & đường đi HamiltonMột số bài toánMã đi tuầnTìm hành trình của quân mã từ ô xuất phát, đi qua tất cả các ô, mỗi ô đúng một lần.32Bài toán đường đi ngắn nhấtMở đầuNhiều bài toán không chỉ quan tâm tồn tại hay không đường đi giữa 2 đỉnhLựa chọn đường đi với chi phí ít nhất33Bài toán đường đi ngắn nhấtMở đầuMô hình hóa bài toán về đồ thị có trọng sốĐồ thị có hướng G = (V,E) với hàm trọng số W: E ® R (gán các giá trị thực cho các cạnh)Trọng số của đường đi p = v1 ® v2 ® ® vk làĐường đi ngắn nhất là đường đi có trọng số nhỏ nhất34Bài toán đường đi ngắn nhấtMở đầuVí dụ35Bài toán đường đi ngắn nhấtThuật toán DijkstraÝ tưởngTìm độ dài đường đi đến đỉnh gần a nhất, rồi đến đỉnh gần kế tiếp, ...Sử dụng một tập hợp S chứa các đỉnh đã xét xongNhững đỉnh thuộc S là những đỉnh mà độ dài từ a đến nó đã được xác địnhỞ mỗi bước, chọn đỉnh u ”gần” nhất, thêm vào tập S và cập nhật độ dài đường đi qua các cạnh đi ra từ u36Bài toán đường đi ngắn nhấtThuật toán DijkstraÝ tưởngNhãn của đỉnh v: Li(v)Lưu trữ độ dài đường đi từ a đến v ở lần lặp thứ iNhững đỉnh thuộc S sẽ có nhãn cố địnhLk(v) = min { Lk-1(v); Lk-1(u) + w(uv) }avuL(v)w(uv)L(u)L(u) + w(uv)37Bài toán đường đi ngắn nhấtThuật toán DijkstraThuật toánBước 1: Khởi tạoL0(a) = 0; L0(v) =  ( v  a); S = Bước 2: Nếu S = V thì kết thúcBước 3: Cố định nhãnChọn u sao cho L(u) = min{ L(v) | v  S}Đưa u vào tập S: S = S  {u}Bước 4: Sửa nhãnVới mỗi đỉnh v kề với u L(v) = min { L(v); L(u) + w(uv) }Bước 5: Quay lại Bước 238¥¥¥¥0auvyx1051239467210¥5¥0auvyx10512394672uv814570ayx10512394672813570auvyx1051239467239Bài toán đường đi ngắn nhấtThuật toán tìm đường đi ngắn nhấtThuật toán DijkstraĐịnh lýThuật toán Dijkstra tìm được đường đi ngắn nhất giữa 2 đỉnh trong đơn đồ thị liên thông, có trọng số.Nhận xétChỉ đúng cho đồ thị có trọng số không âmNhãn sau cùng của mỗi đỉnh là độ dài đường đi ngắn nhất từ đỉnh xuất phát đến nó.40Bài toán đường đi ngắn nhấtThuật toán tìm đường đi ngắn nhấtThuật toán DijkstraBài toán vận dụngTrên bàn cờ 8x8 có đặt một con mã. Hãy tìm cách đi cho con mã với số bước di chuyển là ít nhất từ vị trí đang đứng đến một vị trí xác định trên bàn cờ.41Bài toán đường đi ngắn nhấtThuật toán tìm đường đi ngắn nhấtThuật toán DijkstraBài toán vận dụngCho một dãy số gồm n số nguyên. Hãy tìm một dãy con nhiều phần tử nhất của dãy đã cho mà tổng của 2 phần tử liên tiếp là số nguyên tốDãy con là dãy thu được sau khi xóa một số phần tử từ dãy số ban đầu42Bài toán đường đi ngắn nhấtThuật toán HedetniemiĐược công bố vào năm 1990Ma trận ”liền kề”aii = 0aij =  nếu vivj  Eaij = w(vi, vj) nếu ij43Bài toán đường đi ngắn nhấtThuật toán HedetniemiĐược công bố vào năm 1990Ma trận ”liền kề”aii = 0aij =  nếu vivj  Eaij = w(vi, vj) nếu ijVí dụ44Bài toán đường đi ngắn nhấtThuật toán HedetniemiPhép cộng HedetniemiKý hiệu:A2 = A ; A3 = A2 A...Ak = Ak-1 A45Bài toán đường đi ngắn nhấtThuật toán HedetniemiPhép cộng HedetniemiVí dụ 1Ví dụ 2=46Bài toán đường đi ngắn nhấtThuật toán HedetniemiĐịnh lýAk-1  Ak = Ak+1  Ak[i,j] là độ dài đường đi ngắn nhất giữa 2 đỉnh vi và vj.Thuật toánA là ma trận liền kề của đồ thịLần lượt tính A2, A3, ..., Ak thỏa Ak-1  Ak = Ak+1 Ak-1  Ak = Ak+1 47Bài toán đường đi ngắn nhấtThuật toán HedetniemiVí dụTìm độ dài đường đi ngắn nhất giữa đỉnh a và z?48Bài toán đường đi ngắn nhấtThuật toán HedetniemiVí dụTìm độ dài đường đi ngắn nhất giữa đỉnh 1 và 4?

Các file đính kèm theo tài liệu này:

  • pptbai_giang_toan_roi_rac_ung_dung_trong_tin_hoc_chuong_2_cac_b.ppt