Ứng dụng đồ thị trong tin học (1)
Luận văn tốt nghiệp Phan Thanh LongChơng 3Chu trình, đờng đi Euler và Hamilton trong đồ thị Lý thuyết về chu trình, đờng đi Euler và Hamilton đã có từ lâu và đợc nghiên cứu nhiều. Ta có thể bắt gặp nhiều bài toán trong thực tiễn mà có thể sử dụng các lý thuyết về chu trình, đờng đi Euler và Hamilton để giải quyết, ví dụ sử dụng lý thuyết đờng đi, chu trình Euler để tìm hành trình đờng đi cho ngời phát th, cho xe rửa đờng . sao cho hành trình là tối u nhất. Hoặc là trong một hệ thống mạng, một máy đơn cần gửi 1 thông điệp đến tất cả các máy còn lại vậy thì đờng truyền tin sẽ đi nh thế nào để cho hiệu quả nhất, bài toán này có thể đợc giải quyết bằng cách vận dụng các lý thuyết chu trình và đờng đi Hamilton.I. Chu trình và đờng đi Euler1. Chu trình Euler1.1 Định nghĩa Cho đồ thị vô hớng G = <X,U>. Một chu trình trong đồ thị G đợc gọi là chu trình Euler nếu nó đi qua tất cả các cạnh của G và đi qua mỗi cạnh đúng một lần.Định lý 1: Đồ thị vô hớng G = <X,U> có chu trình Euler khi và chỉ khi G là liên thông và bậc của tất cả các đỉnh trong đồ thị G là số chẵn.Chứng minh- Điều kiện cần: Giả sử đồ thị G = <X, U> có chu trình Euler. Ta cần chứng minh G là đồ thị liên thông và với mỗi x X có m(x) = 2k với k là một số nguyên d-ơng nào đó. Thật vậy, giả sử G = <X, U> không liên thông hay G có ít nhất hai thành phần liên thông G1 = <X1, U1> và G2 = <X2, U2>. Trong đó X1 X2 = X , U1 U2 = U, giữa các đỉnh trong X1 và trong X2 không có cạnh hoặc đờng nối với nhau. Giả sử là 1 chu trình Euler trong G. Theo định nghĩa của chu trình Euler thì là chu trình đi qua tất cả các cạnh trong G, mỗi cạnh đúng 1 lần. Nếu có đỉnh chung với G1 = <X1, U1> thì là chu trình nằm gọn trong đồ thị G1. Điều này mâu thuẫn với định nghĩa của . Chứng tỏ đồ thị G = <X, U> là liên thông. Bây giờ ta chứng minh mỗi đỉnh x X trong G đều có bậc chẵn, tức là cần chỉ ra m(x) = 2k, với k {1,2, .}. Trớc hết thấy rằng k 0 bởi vì nếu k = 0 thì x là điểm cô lập trong G, tức là G không liên thông, trái với điều đã chỉ ra. Giả sử ngợc lại 35 Luận văn tốt nghiệp Phan Thanh Longtồn tại một đỉnh xi X mà m(xi) là một số lẻ, chẳng hạn m(xi) = 3. Đối với xi có 3 cạnh đi vào nó, giả sử đó là các cạnh (xi, xk), (xi, xj) và (xi, x1) U. Chu trình Euler sẽ đi qua 3 cạnh đó. Khi đó một trong 3 cạnh trên có ít nhất một cạnh mà chu trình Euler đi qua 2 lần. Điều đó mâu thuẫn với định nghĩa của chu trình . Vậy m(x) là một số chẵn với mọi x X.- Điều kiện đủ: Giả sử G = <X, U> là đồ thị liên thông và mỗi đỉnh x X đều có bậc chẵn: m(x) = 2k, k {1, 2, .} ta chứng minh trong đồ thị G tồn tại một chu trình Euler. Với giả thiết trên, trớc hết ta chứng minh rằng tại mỗi đỉnh của G có tồn tại chu trình đơn (tức là chu trình đi qua các cạnh, mỗi cạnh đúng một lần). Đề chứng minh điều đó, ta lu ý rằng không thể có một đỉnh x mà m(x) = 2. Điều đó đúng bởi vì khi đó tại đỉnh x có khuyên và do đó x cũng là một đỉnh cô lập, trái với giả thiết đồ thị G là liên thông. Giả sử x X là một đỉnh nào đó. Ta chỉ ra có chu trình đơn P qua x. Do m(x) > 2 suy ra tồn tại các đỉnh x1 sao cho x1 x và x kề với x1. Do m(x1) > 2 suy ra tồn tại các đỉnh xi sao cho xi xi-1 và xi kề với xi-1. Khi tới bớc thứ i thì ta đã có một đ-ờng đi t x đến xi, qua các cạnh, mỗi cạnh đúng một lần. Quá trình trên không thể kéo dài vô hạn do tính hữu hạn của đồ thị G. Giả sử số bớc hữu hạn đó là i. Điều này chứng tỏ x và xi kề nhau, tức là có cạnh nối x và xi. Điều đó là đúng vì bớc i là bớc cuối cùng. Nh vậy tại đỉnh x có chu trình đơn P đi qua. Bây giờ ta chứng minh rằng trong đồ thị G = <X, U> có chu trình Euler. Theo chứng minh trên với đỉnh x X có chu trình đơn đi qua là P1 và P1 là chu trình trong đồ thị G. Hãy "đánh dấu xoá" các cạnh trong P1. Nếu sau khi "đánh dấu xoá" các cạnh trên đờng P1 tạo ra một số đỉnh cô lập mới thì hãy "đánh dấu loại bỏ" các đỉnh cô lập mới đó. Kết quả thu đợc sẽ là một đồ thị mới G1 = <X1, U1> là đồ thị con của đồ thị G = <X, U> đã cho. Ta chỉ ra đồ thị G1 thoả mãn một số tính chất sau: - Chu trình P1 trong đồ thị G và G1 có đỉnh chung, bởi vì G là đồ thị liên thông. - Đồ thị G1 gồm các đỉnh x X1 có bậc chẵn. Thật vậy, nếu x X1 mà x không thuộc các đỉnh trong P1 thì m(x1) hiển nhiên là một số chẵn. Còn nếu x1 X1 mà x1 là đỉnh thuộc P1 thì sau khi "đánh dấu bỏ " hai cạnh của P1 chứa đỉnh đó thì bậc của đỉnh x1 sẽ giảm đi 2 đơn vị, do đó m(x1) cũng là chẵn. Tóm lại với mọi x X1 thì m(x) là một số chẵn.Ta có thể minh hoạ đồ thị với chu trình đơn P1 và đồ thị con G1 nh hình vẽ dới đây:36 G1 = <X1, U1>x x1 Luận văn tốt nghiệp Phan Thanh Longx1 là đỉnh chung giữa P1 và G1. Đối với G1 = <X1, U1> tại đỉnh x1 X1 có tồn tại chu trình đơn P2 mà cách xây dựng P2 cũng đối với P1. Trong P2 bỏ tất cả các cạnh, giữ lại các đỉnh có cạnh hoặc đờng nối với các đỉnh khác trong G1 ta đợc đồ thị con G2 = <X2, U2> của G1. Đồ thị cũng có tính chất nh G1, là liên thông, mọi x X2 đều có bậc chẵn và G2 và P2 có điểm chung chẳng hạn x2 Do tính hữu hạn của đồ thịi G, quá trình xây dựng các chu trình đơn sẽ dừng lại ở bớc thứ k nào đó. Nh vậy, trớc khi sang bớc thứ k ta đã có k - 1 chu trình đơn P1, P2, ., Pk-1 và đồ thị Gk-1 = <Xk-1, Uk-1> là đồ thị con của đồ thị Gk-2 = <Xk-2, Uk-2>. Đồ thị Gk-1 là liên thông và mọi đỉnh x Xk-1 có bậc chẵn, đồng thời Gk-1 và Pk-1 có điểm chung là xk. Vì quá trình trên dừng lại sau k bớc nên đồ thị Gk-1 là một chu trình đơn qua xk và bao gồm hết các cạnh trong đồ thị Gk-1. Vì nếu không sẽ dẫn tới mâu thuẫn do k là bớc cuối cùng. Ghép các chu trình đơn P1, P2, .,Pk tại các đỉnh chung ta đợc tập các chu trình Euler trong đồ thị G = <X, U>. Định lý đợc chứng minh.Định lý 2: Cho đồ thị có hớng G = <X, U> G có chu trình Euler khi và chỉ khi G là liên thông và mỗi đỉnh đều có bậc vào bằng bậc ra. 1.2 Thuật toán tìm chu trình Euler Cho đồ thị G = <X, U> xây dựng thuật toán tìm chu trình EulerBớc 1: Kiểm tra xem G có là đồ thị liên thông hay không. Nếu G là liên thông thì chuyển sang bớc 2. Ngợc lại thì thuật toán dừng và kết luận rằng đồ thị không có chu trình EulerBớc 2: Kiểm tra xem tất cả các đỉnh trong G đều có bậc chẵn hay không. Nếu tất cả các đỉnh đều có bậc là chẵn thì chuyển sang bớc tiếp theo. Nếu không dừng lại và kết luận đồ thị đã cho không có chu trình Euler.37G2 = <X2, U2>xx1x2x x1x2xk-1P1P2Pk-1Gk-1= Pkxk Luận văn tốt nghiệp Phan Thanh LongBớc 3: Xây dựng các chu trình đơn trong G sao cho tất cả các cạnh của đồ thị đều có các chu trình đơn đi qua và mỗi cạnh chỉ đi qua một lần. Ghép các chu trình đơn nh trên tại các đỉnh chung nhau ta đợc tập các chu trình Euler cần tìm.2. Đờng đi Euler2.1 Định nghĩa Đờng Euler trong đồ thị G = <X, U> là đờng đi qua tất cả các cạnh của đồ thị, mỗi cạnh đi qua đúng một lần.Đinh lý 3: Cho G = <X, U> là đồ thị vô hớng liên thông. Điều kiện cần và đủ để đồ thị có đờng Euler là số đỉnh bậc lẻ trong đồ thị là 0 hoặc 2.Chứng minh: Trờng hợp số đỉnh bậc lẻ bằng 0 thì G là đồ thị liên thông và mọi đỉnh đều có bậc chẵn. Theo định lý về chu trình Euler thì trong G có chu trình Euler, tức cũng là đờng Euler. Nếu số đỉnh bậc lẻ là 2, chẳng hạn đó là các đinh x1 và x2. Hãy thêm vào một đỉnh mới x và hai cạnh (x, x1) và (x, x2) vào đồ thị G = <X, U>. Ta có đồ thị mới G' = <X', U'>, ở đây X' = X {x}, U' = U {(x, x1), (x, x2)}. Rõ ràng là G' liên thông và mọi đỉnh đều có bậc chẵn. Theo định lý về chu trình Euler đã nêu ở trên thì trong G' có tồn tại chu trình Euler, cũng là đờng Euler.Định lý 4: Cho đồ thị có hớng G = <X, U>, điều kiện cần và đủ để có đờng đi Euler từ x đến y (x, y X) là G liên thông và đỉnh x có bậc ra lớn hơn bậc vào 1 đơn vị, đỉnh y có bậc vào lớn hơn bậc ra 1 đơn vị, còn tất cả các đỉnh khác đều có bậc vào bằng bậc ra.2.2 Thuật toán tìm đờng EulerBớc 1: Kiểm tra xem đồ thị G có liên thông hay không. Nếu có thì chuyển sang bớc 2. Ngợc lại, thì dừng thuật toán và khẳng định rằng không có đờng Euler.Bớc 2: Kiểm tra xem mọi đỉnh trong G đều có bậc chẵn hay không. Nếu có chuyển sang bớc 4. Nếu không chuyển sang bớc 3.Bớc 3: Kiểm tra xem số đỉnh bậc lẻ có bằng 2 hay không. Nếu có chuyển sang b-ớc 4. Nếu không thì dừng lại và kết luận không có đờng Euler.Bớc 4: Xây dựng đờng Euler trong G.II. Chu trình và đờng đi Hamilton1. Chu trình HamiltonĐịnh nghĩa: Giả sử G = <X, U> là đồ thị vô hớng. Chu trình Hamilton là chu trình đi qua tất cả các đỉnh của đồ thị, mỗi đỉnh đúng một lần.38 Luận văn tốt nghiệp Phan Thanh LongĐịnh lý 1: Nếu đơn đồ thị liên thông G = <X, U>, n đỉnh và n 3 có bậc ở mỗi đỉnh không nhỏ hơn nửa số đỉnh của đồ thị, tức là mọi x X ta luôn có m(x) n/2 thì trong đồ thị có tồn tại chu trình Hamilton.Chứng minh: Ta chứng minh định lý bằng phản chứng Giả sử G = <X, U> có n đỉnh là đồ thị không có chu trình Hamilton. Ta thêm vào một số đỉnh mới và nối mỗi đỉnh mới này với mọi đỉnh của G, ta đợc đồ thị G'. Giả sử có số k > 0 là số tối thiểu các đỉnh cần thiết để G' chứa một chu trình Hamilton. Nh vậy G' có n + k đỉnh. a) b)Hình 2.1 Gọi P là chu trình Hamilton ayb .a trong G', trong đó a và b là các đỉnh của G, còn y là một trong các đỉnh mới. Thế thì b không kề với a, vì nếu trái lại thì ta có thể bỏ đỉnh y và đợc chu trình ab .a, mâu thuẫn với giả thiết về tính chất tối thiểu của k. Hơn nữa nếu a' là một đỉnh kề nào đó của a (khác với y) và b' là đỉnh nối tiếp ngay a' trong chu trình P (hình 2.1.b) thì b' không thể là đỉnh kề của b (nếu trái lại thì ta có thể thay P bởi chu trình aa' bb' a, trong đó không có y). Nh vậy, với mỗi đỉnh kề với a ta có một đỉnh không kề với b, tức là số đỉnh không kề với b không thể ít hơn số đỉnh kề với a (số đỉnh kề với a không nhỏ hơn n/2 + k). Mặt khác, theo giả thiết, số đỉnh kề với b cũng không nhỏ hơn n/2 + k. Vì không có đỉnh nào vừa kề với b lại vừa không kề với b, nên số đỉnh của G' không ít hơn 2.(n/2 + k) = n + 2k, mâu thuẫn với giả thiết là số đỉnh của G' bằng n + k, (k > 0). Định lý đợc chứng minh.Ví dụ: Đồ thị trong hình 2.1.a có 8 đỉnh, đỉnh nào cũng có bậc 4. Vậy G có chu trình Hamilton. Có thể thấy một chu trình Hamilton a-g-c-k-d-h-b-e-a.2. Đờng HamiltonĐịnh nghĩa: Đờng Hamilton trong đồ thị G = <X, U> là đờng đi qua tất cả các đỉnh mỗi đỉnh đúng một lần.39abcdkgehayba'b' Luận văn tốt nghiệp Phan Thanh LongĐịnh lý 2: Giả sử G = <X, U> là đồ thị có hớng và đầy đủ khi đó trong đồ thị luôn tồn tại đờng Hamilton.Chứng minh: Giả sử = xi1 xi2 . xik xik+1 xim - 1 xim là một đờng sơ cấp bất kỳ trong đồ thị. Để đơn giản, ta chỉ viết các đỉnh mà không có các cạnh xen kẽ nh định nghĩa. Nếu trong đờng sơ cấp mà tất cả các đỉnh trong X đều có mặt thì chính là đ-ờng Hamilton. Còn nếu có những đỉnh trong X nhng cha có mặt trong thì ta có thể bổ sung hết những đỉnh đó vào đờng sơ cấp để nó trở thành đờng Hamilton theo nguyên tắc sau đây: Giả sử x X mà x không nằm trên đờng sơ cấp . Các trờng hợp sau đây xảy ra do tính đầy đủ của đồ thị G:- Nếu x có cung tới xi1 thì bổ sung x vào đầu và nó có dạng:x xi1 xi2 . xik xik+1 xim - 1 xim - Nếu từ xik có cung tới x và từ x có cung tới xik+1 thì ta bổ sung x vào giữa hai đỉnh xik và xik+1. Khi đó có dạng: xi1 xi2 . xik x xik+1 xim - 1 xim - Nếu từ xik và xik+1 có cung đi tới x và từ x lại cung đi tới xik+2 thì ta bổ sung x vào giữa hai đỉnh xik + 1 và xik+2 ta đợc có dạng: xi1 xi2 . xik xik+1 x xik + 2 xim - 1 xim - Nếu mọi k [1, m - 1] mà từ xik và xik+1 có cung sang x thì ta bổ sung x vào cuối, khi đó nó có dạng: xi1 xi2 . xik xik+1 x xik + 2 xim - 1 xim x Bằng cách đó ta có thể bổ sung vào các đỉnh trong đồ thị mà cha có mặt trong để nó trở thành đờng Hamilton. Định lý đợc chứng minh.Hệ quả: Giả sử G = <X, U> là đồ thị đầy đủ có số đỉnh n 3. Khi đó trong đồ thị luôn luôn tồn tại chu trình Hamilton. a) b)Hình 2.2Ví dụ đồ thị trong hình 2.2.a có chu trình Hamilton nhng nó không phải là đồ thị đầy đủ. Còn đồ thị hình 2.2.b không có đờng Hamilton.40413221 345 6 Luận văn tốt nghiệp Phan Thanh Long3. Thuật toán liệt kê tất cả các chu trình Hamilton Thuật toán đợc xây dựng dựa trên cơ sở thuật toán quay lui cho phép liệt kê tất cả các chu trình Hamilton của đồ thịProcedure Hamilton(k);{Liệt kê các chu trình Hamilton thu đợc bằng việc phát triển dãy đỉnh x[1], ., x[k-1] của đồ thị G = <X, U> cho bởi danh sách kề Ke(v), v X}BeginFor y Ke(x[k-1]) do if (k = n +1) and (y = v0) then GhiNhan(x[1], ,x[n],v0) Else if ChuaXet[y] then Beginx[k] := y; ChuaXet[y] := False;Hamilton(k+1);ChuaXet[y] := True;End;End;BEGIN For v X do ChuaXet[v] := True;x[1] := v0; {v0 là một đỉnh nào đó của đồ thị}ChuaXet[v0] := False;Hamilton(2);END. 41 . cả các đỉnh trong đồ thị G là số chẵn.Chứng minh- Điều kiện cần: Giả sử đồ thị G = <X, U> có chu trình Euler. Ta cần chứng minh G là đồ thị liên thông. một đồ thị mới G1 = <X1, U1> là đồ thị con của đồ thị G = <X, U> đã cho. Ta chỉ ra đồ thị G1 thoả mãn một số tính chất sau: - Chu trình P1 trong