Bài giảng Lý thuyết đồ thị - Chương 3: Các bài toán đường đi - Nguyễn Thanh Sơn

1. Đường đi ngắn nhất Bài toán Nguyên lý Bellman Thuật toán Dijkstra Thuật toán Floyd Thuật toán Ford-Bellman 2. Đồ thị Euler 3. Đồ thị Hamilton

ppt74 trang | Chia sẻ: candy98 | Lượt xem: 579 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Lý thuyết đồ thị - Chương 3: Các bài toán đường đi - Nguyễn Thanh Sơn, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
CÁC BÀI TOÁN ĐƯỜNG ĐIntsonptnk@gmail.comNỘI DUNGĐường đi ngắn nhấtBài toánNguyên lý BellmanThuật toán DijkstraThuật toán FloydThuật toán Ford-BellmanĐồ thị EulerĐồ thị HamiltonLý thuyết đồ thị , chương 3 - Nguyễn Thanh Sơn 2ĐƯỜNG ĐI NGẮN NHẤTLý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn3CBAEDF032858487125239Cho đồ thị có hướng có trọng G=(X, E) và hai đỉnh s, t X, gọi P là một đường đi từ đỉnh s đến đỉnh t, trọng lượng (hay giá) của đường đi P được định nghĩa là: L(P) = (eP)L(e)Bài toán: tìm đường đi từ s đến t có trọng lượng nhỏ nhấtBÀI TOÁN4Lý thuyết đồ thị - Nguyễn Thanh SơnBài toán được phát biểu cho đồ thị có hướng có trọng, nhưng các thuật toán sẽ trình bày đều có thể áp dụng cho các đồ thị vô hướng có trọng bằng cách xem mỗi cạnh của đồ thị vô hướng như hai cạnh có cùng trọng lượng nối cùng một cặp đỉnh nhưng có chiều ngược nhau.Khi tìm đường đi ngắn nhất có thể bỏ bớt đi các cạnh song song và chỉ chừa lại một cạnh có trọng lượng nhỏ nhất.Đối với các khuyên có trọng lượng không âm thì cũng có thể bỏ đi mà không làm ảnh hưởng đến kết quả của bài toán. Đối với các khuyên có trọng lượng âm thì có thể đưa đến bài toán đường đi ngắn nhất không có lời giải.NHẬN XÉT5Lý thuyết đồ thị - Nguyễn Thanh SơnP là một đường đi từ s đến t, giả sử P có chứa một mạch . Nếu L()  0 thì có thể cải tiến đường đi P bằng cách bỏ đi mạch . Nếu L() D[v]+Lvk thì D[k] = D[v]+Lvk và Labels[k]=vTHUẬT TOÁN DIJKSTRA11Lý thuyết đồ thị - chương 3 - Nguyễn Thanh SơnVÍ DỤLý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn12d(z) = 75 d(u) = 5010zsud(z) = 60 d(u) = 5010zsuCập nhật độ dài ĐĐ từ s đến đỉnh z: 75  60VÍ DỤĐồ thị G gồm 7 đỉnh, 12 cạnh như hình bên. Tìm đường đi ngắn nhất từ đỉnh 1 đến đỉnh 5Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn13912345673481562417128VÍ DỤV: đỉnh chưa bị tô màu; D[k]: số có màu đỏ; Labels[k]: số có màu xanh láLý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn149123456734815624171280-1-1-1-1-1-1-1VÍ DỤLý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn159123456734815624171280-191-1-161-131V: đỉnh chưa bị tô màu; D[k]: số có màu đỏ; Labels[k]: số có màu xanh láVÍ DỤLý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn169123456734815624171280-1744411461-131V: đỉnh chưa bị tô màu; D[k]: số có màu đỏ; Labels[k]: số có màu xanh láVÍ DỤLý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn179123456734815624171280-174449361-131V: đỉnh chưa bị tô màu; D[k]: số có màu đỏ; Labels[k]: số có màu xanh láVÍ DỤLý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn189123456734815624171280-174449361-131V: đỉnh chưa bị tô màu; D[k]: số có màu đỏ; Labels[k]: số có màu xanh láVÍ DỤĐĐNN từ 1 đến 5 có trọng lượng D[5]=9: 5  3  4  1 Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn199123456734815624171280-17444936126531GIÁ TRỊ CÁC BIẾN D, Labels20Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn123456700193627411637964795912345670-1-1-1-1-1-1-111-11-1-112444-11343-11443-153-1DLabelsVÍ DỤLý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn21CBAEDF0428487125239CBAEDF0328511487125239CBAEDF032858487125239CBAEDF032758487125239VÍ DỤLý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn22CBAEDF032758487125239CBAEDF032758487125239Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn23THUẬT TOÁN DIJKSTRA – CÀI ĐẶTGraph Graph::Dijkstra(int s, int t){ //Tìm đường đi ngắn nhất từ s đến t}Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn24THUẬT TOÁN DIJKSTRA – CÀI ĐẶTGraph Graph::PrintPath(int s, int t){ int temp[MAX]; int dem = 0; //In đường đi ngắn nhất từ s đến t dựa vào Labels while(Labels[t] != -1) { temp[dem++]=t; t=Labels[t]; } temp[dem++]=s; while (dem > 0) printf(“%d “, temp[--dem]);}THUẬT TOÁN FLOYDTÌM ĐƯỜNG ĐI NGẮN NHẤT GIỮA CÁC CẶP ĐỈNH TRÊN ĐỒ THỊLý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn25Input: N, L – số đỉnh, ma trận trọng lượng của G(X, E)Output: L, Nexts – L[u, v]: trọng lượng ĐĐNN uv, Nexts[u, v]: đỉnh ngay sau u trong ĐĐNN uvNếu L[u, v]: Nexts[u, v]=v Ngược lại: Nexts[u, v]=-1 , (u, v)X2.Với mọi t  X Với mọi u  X có L[u, t] Với mọi v  X có L[t, v] Nếu L[u, v] > L[u, t] + L[t, v] thìL[u, v] = L[u, t] + L[t, v]Nexts[u, v] = Nexts[u, t]THUẬT TOÁN FLOYD26Lý thuyết đồ thị - chương 3 - Nguyễn Thanh SơnXác định đường đi ngắn nhất giữa các cặp đỉnh trên đồ thị gồm 4 đỉnh 6 cạnhVÍ DỤ27Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn9123434815VÍ DỤ28Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn123492-142-183-134-113-1-151VÍ DỤ29Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn123492-142-183-134-113-1-151141t = 1u = 3v = 2VÍ DỤ30Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn123492-142-18334-113-1-151141t = 1u = 3v = 481VÍ DỤ31Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn123492-142-18334-113-151141t = 2u = 1v = 381172VÍ DỤ32Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn123492-142-18334-11351141t = 2u = 3v = x81172VÍ DỤ33Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn123492-142-18334-11351141t = 2u = 4v = 381172VÍ DỤ34Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn123492-142-18334-11351141t = 3u = 1v = 281172VÍ DỤ35Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn123492-142-18334-11351141t = 3u = 1v = 481172VÍ DỤ36Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn123492133421638334-11351141t = 3u = 2v = 1, 481172VÍ DỤ37Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn123492133421638334631351141t = 3u = 4v = 1, 281172VÍ DỤ38Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn123474133421638334631351141t = 4u = 1v = 2, 38144VÍ DỤ39Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn123474133421638334631351141t = 4u = 2v = 1, 38144VÍ DỤ40Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn123474133421638334631351121t = 4u = 3v = 1, 28144THUẬT TOÁN BELLMANTÌM ĐƯỜNG ĐI NGẮN NHẤT TRÊN ĐỒ THỊ CÓ CẠNH ÂMLý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn41stkInput: N, L, u – số đỉnh, ma trận trọng lượng của G(X, E), đỉnh xuất phátOutput: , Labels – (k, v): trọng lượng ĐĐNN uv sau k bước lặp, Labels[v]: đỉnh ngay trước v trong ĐĐNN uv(0, u)=0; (0, v)= vX\{u}; Labels[v] = -1 vX;Lặp với k = 1, 2, N-1iX, chọn jX sao cho (k-1, j)+Lji đạt nhỏ nhất; nếu ji:(k, i)= (k-1, j)+LjiLabels[i] = j Nếu (k) = (k-1): (k, v) là đường đi ngắn nhất u  vNếu  vẫn còn thay đổi sau bước lặp N-1: từ u đã đi đến mạch âmTHUẬT TOÁN BELLMAN42Lý thuyết đồ thị - chương 3 - Nguyễn Thanh SơnVÍ DỤ43Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn112-2324856514-12Tìm đường đi ngắn nhất từ đỉnh 3 đến các đỉnh còn lạiVÍ DỤ44Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn112-2324856514-120-1-1-1-1-1-1k = 0VÍ DỤ45Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn112-2324856514-120-1-1-1-1-1-1k = 15343-13VÍ DỤ46Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn112-2324856514-120-1-1-1k = 25343-1315VÍ DỤ47Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn112-2324856514-120-1-1-1k = 353-131526VÍ DỤ48Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn112-2324856514-120-1-1-1k = 4-131526DỪNGGIÁ TRỊ CÁC BIẾN , Labels49Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơnk/v12345600105-14205-11302-11402-11k/v1234560-1-1-1-1-1-11-1-1-13332-1-1-13353-1-1-16354-1-1-1635LabelsVÍ DỤ50Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn112-2324856514-12Tìm đường đi ngắn nhất từ đỉnh 1 đến các đỉnh còn lạiVÍ DỤ51Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn112-2324856514-12-10-1-1-1-1-1k = 0VÍ DỤ52Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn112-2324856514-12210-111-1-1-1k = 1VÍ DỤ53Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn112-2324856514-1221-1211736313k = 2VÍ DỤ54Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn112-2324856514-1211-1201733513k = 3VÍ DỤ55Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn112-2324856514-1211-2201633503k = 4VÍ DỤ56Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn112-2324856514-1201-22-11462503k = 5DỪNG – CÓ MẠCH ÂMĐỒ THỊ EULERLý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn57Konigsberg, HmmmLeonhard Euler(1707 – 1783)Thành phố Konigsberg (Đức) bị chia thành 4 vùng do 2 nhánh của 1 dòng sông. Có 7 chiếc cầu nối những vùng nầy với nhau. Bài toán: xuất phát từ một vùng đi dạo qua mỗi chiếc cầu đúng một lần và trở về nơi xuất phát.Năm 1736, nhà toán học Euler đã mô hình bài toán nầy bằng một đồ thị vô hướng với mỗi đỉnh ứng với một vùng, mỗi cạnh ứng với một chiếc cầuBÀI TOÁN 7 CHIẾC CẦU58Lý thuyết đồ thị - chương 3 - Nguyễn Thanh SơnBÀI TOÁN 7 CHIẾC CẦU59ABCDCADBLý thuyết đồ thị - chương 3 - Nguyễn Thanh SơnDÂY CHUYỀN EULER: dây chuyền đi qua tất cả các cạnh trong đồ thị, mỗi cạnh đúng một lần.CHU TRÌNH EULER: dây chuyền Euler có đỉnh đầu trùng với đỉnh cuối.ĐƯỜNG ĐI EULER: đường đi qua tất cả các cạnh của đồ thị, mỗi cạnh đúng một lần.MẠCH EULER: đường đi Euler có đỉnh đầu trùng với đỉnh cuối.ĐỒ THỊ EULER VÔ HƯỚNG: đồ thị vô hướng có chứa một chu trình Euler.ĐỒ THỊ EULER CÓ HƯỚNG: đồ thị có hướng có chứa một mạch Euler.ĐỊNH NGHĨA60Lý thuyết đồ thị - chương 3 - Nguyễn Thanh SơnĐồ thị vô hướng G=(X, E)G là đồ thị Euler  G liên thông và d(x) chẵn xX.G có chứa dây chuyền Euler và không chứa chu trình chu trình Euler  G liên thông có chứa đúng hai đỉnh bậc lẻ.Đồ thị có hướng G=(X, E)G là đồ thị Euler  G liên thông và d+(x)=d-(x) x  X.ĐỊNH LÝ EULER61Lý thuyết đồ thị - chương 3 - Nguyễn Thanh SơnVÍ DỤ62Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơnabcdeabcdabcde(G1)(G2)(G3)Liên thông và có 2 đỉnh bậc lẻ  có dây chuyền Euler: bacdaedbcLiên thông và các đỉnh đều có bậc chẵn  có chu trình Euler: bacdaedbcbcó đường đi Euler: bacbdCạnh e của đồ thị G được gọi là CẦU nếu xóa e khỏi đồ thị thì làm tăng số thành phần liên thông của G.Giải thuật Gọi chu trình cần tìm là CKhởi tạo: Chọn một đỉnh bất kỳ cho vào C.Lặp trong khi G vẫn còn cạnhChọn cạnh e nối đỉnh vừa chọn với một đỉnh kề với nó theo nguyên tắc: chỉ chọn cầu nếu không còn cạnh nào khác để chọn. Bổ sung e và đỉnh cuối của nó vào C.Xóa e khỏi G. GIẢI THUẬT FLEURY63Lý thuyết đồ thị - chương 3 - Nguyễn Thanh SơnVÍ DỤLý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn64123451234531Input: đồ thị Euler G(X, E)Output: chu trình Euler C của GChọn đỉnh v  X; C = {v}Lặp trong khi G còn cạnhChọn đỉnh v  C còn cạnh trong GTìm chu trình C’ xuất phát từ v.Ghép C’ vào CLoại bỏ các cạnh của C’ khỏi GGiẢI THUẬT XÁC ĐỊNH CÁC CHU TRÌNH THÀNH PHẦN65Lý thuyết đồ thị - chương 3 - Nguyễn Thanh SơnVÍ DỤLý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn661234512345313ĐỒ THỊ HAMILTONLý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn67Sir William Rowan Hamilton(1805-1865)“Xuất phát từ một đỉnh của khối thập nhị diện đều, hãy đi dọc theo các cạnh của khối đó sao cho đi qua tất cả các đỉnh khác, mỗi đỉnh qua đúng một lần, sau đó trở về đỉnh xuất phát”. Bài toán nầy được nhà toán học Hamilton đưa ra vào năm 1859BÀI TOÁN KHỞI ĐIỂM68Lý thuyết đồ thị - chương 3 - Nguyễn Thanh SơnĐồ thị vô hướng G(X, E)DÂY CHUYỀN HAMILTON: dây chuyền đi qua tất cả các đỉnh của đồ thị mỗi đỉnh đúng một lần.CHU TRÌNH HAMILTON: dây chuyền Hamilton và một cạnh trong đồ thị nối đỉnh đầu của dây chuyền với đỉnh cuối của nó.ĐỒ THỊ HAMILTON: đồ thị có chứa một chu trình Hamilton.ĐỊNH NGHĨA69Lý thuyết đồ thị - chương 3 - Nguyễn Thanh SơnĐồ thị đủ luôn là đồ thị Hamilton. Với n lẻ  3 thì Kn có (n-1)/2 chu trình Hamilton đôi một không có cạnh chung.Đồ thị lưỡng phân G với hai tập đỉnh X1, X2 và X1=X2=n. Nếu d(x)n/2 x của G thì G là đồ thị Hamilton.Đồ thị vô hướng đơn G gồm n đỉnh và m cạnh. Nếu m(n2-3n+6)/2 thì G là đồ thị Hamilton.MỘT SỐ KẾT QUẢ70Lý thuyết đồ thị - chương 3 - Nguyễn Thanh SơnĐồ thị vô hướng đơn G gồm n đỉnh với n3Nếu d(x)n/2 x của G thì G là đồ thị Hamilton.Nếu d(x)(n-1)/2 x của G thì G có dây chuyền Hamilton.Nếu d(x)+d(y)n với mọi cặp đỉnh x, y không kề nhau của G thì G là đồ thị Hamilton.71Lý thuyết đồ thị - chương 3 - Nguyễn Thanh SơnNếu G có đỉnh bậc < 2 thì G không có chu trình HamiltonNếu đỉnh có bậc 2 thì 2 cạnh kề với nó phải nằm trong chu trình HamiltonCác cạnh thừa (ngoài 2 cạnh đã chọn trong chu trình Hamilton) phải được bỏ đi trong quá trình xác định chu trìnhNếu quá trình xây dựng tạo nên một chu trình con thì đồ thị không có chu trình HamiltonQUI TẮC XÁC ĐỊNH72Lý thuyết đồ thị - chương 3 - Nguyễn Thanh SơnVÍ DỤ73Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn12345Chứng minh nguyên lý BellmanChứng minh tính đúng đắn của các thuật toán Dijkstra, Floyd, BellmanCài đặt thuật toán xác định chu trình EulerXác định các “nét” của Đồ thị K nét.BÀI TẬP74Lý thuyết đồ thị - chương 3 - Nguyễn Thanh Sơn
Tài liệu liên quan