353.3 Tìm các chu trình Hamilton bằng phương pháp nhân ma trận 403.4 Ứng dụng: Thuật toán xấp xỉ cho bài toán tìm chu trình của người bán hàng có trọng số tối thiểu trong đồ thị có trọng
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2
LUẬN VĂN THẠC SĨ TOÁN HỌC
Người hướng dẫn khoa học
TS Trần Minh Tước
HÀ NỘI, 2018
Trang 3Sau một thời gian cố gắng, nỗ lực học tập và nghiên cứu, đến nay tôi
đã hoàn thành luận văn tốt nghiệp thạc sĩ của mình Để có được kết quảnày, tôi xin bày tỏ lòng biết ơn sâu sắc và lời cảm ơn chân thành nhất đếnthầy giáo, TS Trần Minh Tước, người đã định hướng nghiên cứu cho tôitrong suốt thời gian thực hiện luận văn của mình
Tôi xin chân thành cảm ơn sự giúp đỡ quý báu của các thầy cô giáotrong bộ môn Toán ứng dụng nói riêng và khoa Toán, trường Đại học Sưphạm Hà Nội 2 nói chung
Xin cảm ơn những người thân trong gia đình và tất cả những người bạnthân yêu đã hết sức thông cảm, chia sẻ và tạo điều kiện tốt nhất cho tôi
để tôi có thể học tập, nghiên cứu và thực hiện luận văn của mình
Tôi rất mong nhận được sự đóng góp ý kiến của các thầy cô và các bạn
để luận văn được hoàn thiện hơn
Tôi xin chân thành cảm ơn!
Hà Nội, tháng 11 năm 2018
Tác giảLưu Thị Thêm
Trang 4Lời cam đoan
Tôi xin cam đoan luận văn này là công trình nghiên cứu của riêng tôi,được thực hiện dưới sự hướng dẫn của thầy giáo TS Trần Minh Tước.Trong quá trình nghiên cứu, tôi đã kế thừa thành quả khoa học của cácnhà khoa học với sự trân trọng và biết ơn Các kết quả trích dẫn trongluận văn này đã được chỉ rõ nguồn gốc
Hà Nội, tháng 11 năm 2018
Tác giảLưu Thị Thêm
2
Trang 5Mở đầu 5
1.1 Đồ thị và phân loại đồ thị 7
1.1.1 Đồ thị có hướng 7
1.1.2 Đồ thị vô hướng 8
1.1.3 Đa đồ thị có hướng và đa đồ thị vô hướng 9
1.1.4 Đồ thị có trọng số 10
1.2 Đồ thị con và một số vấn đề liên quan 11
1.3 Bậc của đỉnh 12
1.4 Chu trình, mạch 12
1.5 Tính liên thông của đồ thị 13
1.6 Cây khung của đồ thị 13
1.7 Phương pháp duyệt đồ thị 14
1.8 Luồng trong mạng 14
1.9 Ghép cặp đồ thị 15
Chương 2 Vết Euler, mạch Euler và đồ thị Euler 16 2.1 Định nghĩa 16
2.2 Định lí về điều kiện cần và đủ để một đồ thị là đồ thị Euler 18 2.3 Thuật toán tìm các mạch Euler 20
2.3.1 Đối với đồ thị vô hướng 20
2.3.2 Đối với đồ thị có hướng 21
2.4 Ứng dụng đồ thị Euler giải bài toán người đưa thư 25
2.4.1 Thuật toán tìm lời giải cho bài toán người đưa thư trong đồ thị vô hướng có trọng số không là đồ thị Euler[[2]] 25
Trang 6Luận văn thạc sĩ
2.4.2 Thuật toán tìm lời giải cho bài toán người đưa thư
trong đồ thị có hướng có trọng số không là đồ thịEuler[[2]] 28Chương 3 Đường đi Hamilton, chu trình Hamilton và đồ
3.1 Định nghĩa đồ thị Hamilton 333.2 Một số định lí cơ bản 353.3 Tìm các chu trình Hamilton bằng phương pháp nhân ma trận 403.4 Ứng dụng: Thuật toán xấp xỉ cho bài toán tìm chu trình của
người bán hàng có trọng số tối thiểu trong đồ thị có trọng số 453.4.1 Đặt vấn đề 453.4.2 Xây dựng thuật toán xấp xỉ tìm chu trình Hamilton có
trọng số tối thiểu của đồ thị có trọng số 483.4.3 Thuật toán cải tiến 50
Lưu Thị Thêm 4 K20-Toán ứng dụng
Trang 71 Lí do chọn đề tài
Năm 1736 có thể coi là năm khai sinh của lý thuyết đồ thị với việccông bố lời giải bài toán “Bảy cây cầu ở K¨onigsberg” của nhà toán họclỗi lạc người Thụy Sĩ Leonhard Euler (1707 - 1783) Từ đó có khái niệm
và những nghiên cứu về một loại đồ thị được gọi là đồ thị Euler Năm
1858, nhà toán học Hamilton (1805 - 1865) đã đưa ra trò chơi “Đi vòngquanh thế giới”, mở ra một loạt các nghiên cứu cho một loại đồ thị là
đồ thị Hamilton Ra đời muộn hơn một số lĩnh vực toán khác nhưng lýthuyết đồ thị đang có rất nhiều các ứng dụng trong thực tế Khi nghiêncứu về lý thuyết đồ thị thì hai lớp đồ thị trên luôn luôn được nhắc đến vàtạo những hứng thú cho việc tìm hiểu, phát triển những ứng dụng Nhữngphép chứng minh, những thuật toán của lý thuyết đồ thị đã tạo cảm hứngcho không chỉ những người nghiên cứu toán học mà còn cho cả những lậptrình viên công nghệ thông tin Đã có rất nhiều những nghiên cứu về hailoại đồ thị này và cũng có rất nhiều định lý, các mối liên hệ và những ứngdụng đã được tìm thấy Được sự gợi ý của giảng viên hướng dẫn là T.STrần Minh Tước và với mong muốn có một sự hiểu biết đầy đủ hơn về mốiliên hệ giữa đồ thị Euler, đồ thị Hamilton với một số các khái niệm kháccủa lý thuyết đồ thị và một số ứng dụng của nó, tôi đã chọn đề tài: “Đồthị Euler và đồ thị Hamilton cùng một số ứng dụng”
2 Mục đích và nghiên cứu
Nghiên cứu về đồ thị Euler, đồ thị Hamilton và mối liên hệ của chúngvới một số khái niệm khác của lý thuyết đồ thị cùng một số ứng dụng củahai lớp đồ thị này
Trang 8Luận văn thạc sĩ
3 Nhiệm vụ nghiên cứu
• Tìm hiểu các tính chất của mạch Euler, chu trình Hamilton trong đồthị
• Tìm hiểu mối liên hệ của đồ thị Euler, đồ thị Hamilton với các kháiniệm khác để nghiên cứu các thuật toán liên quan tới hai loại đồ thịnày
• Tìm hiểu về một số ứng dụng của hai loại đồ thị trên
4 Đối tượng và phạm vi nghiên cứu
• Đồ thị có hướng và đồ thị vô hướng
• Mạch Euler, đồ thị Euler
• Chu trình Hamilton, đồ thị Hamilton
5 Phương pháp nghiên cứu
Chúng tôi sử dụng chủ yếu việc nghiên cứu lý thuyết, vận dụng cácluật logic trong toán học, cùng với một số công cụ của tổ hợp và tối ưurời rạc
Lưu Thị Thêm 6 K20-Toán ứng dụng
Trang 9Kiến thức cơ sở
Trong chương này, các khái niệm và kết quả tôi tham khảo từ tài liệu
"Lý thuyết Tổ hợp và Đồ thị", Nxb ĐHQG Hà Nội, 2005 của GS TS NgôĐắc Tân
1.1 Đồ thị và phân loại đồ thị
Khái niệm đồ thị xuất hiện từ nhiều lĩnh vực khác nhau trong cuộcsống Trong mỗi lĩnh vực riêng của mình, người ta cần tới một kiểu đồ thịnào đó Vì vậy mà cũng xuất hiện nhiều loại đồ thị khác nhau Song tựuchung lại ta có thể phân loại chúng theo bốn dạng chính sau đây: đồ thị
có hướng, đồ thị vô hướng, đa đồ thị có hướng, đa đồ thị vô hướng Ngoài
ra, tùy theo từng mục đích mà ta có thể gắn trọng số cho các đỉnh hoặccác cạnh của đồ thị
1.1.1 Đồ thị có hướng
Một đồ thị có hướng G là một cặp có thứ tự G = (V, E), ở đây V làmột tập, còn E là một tập con của tích đề các V × V, tức E là một quan
hệ hai ngôi trên V
Các phần tử của V được gọi là các đỉnh, còn các phần tử của E đượcgọi là các cung của đồ thị có hướng G Cụ thể hơn, nếu (a, b) ∈ E thì
(a, b) được gọi là cung của G với đỉnh đầu làa, đỉnh cuối làb và có hướng
đi từ a tới b
Ví dụ 1.1.1 Cho G = (V, E) với V = {a, b, c, d, e, f } và
E = {(a, a), (a, b), (b, d), (d, b), (c, e), (e, a)} Khi đó G là đồ thị có hướngđược biểu diễn bằng hình (1.1)
Trang 10Luận văn thạc sĩ
Hình 1.1: Ví dụ một đồ thị có hướng
Giả sử G = (V, E) là một đồ thị có hướng Nếu (a, b) ∈ E thì cácđỉnh a và b được gọi là liên thuộc với cung (a, b) Khi đó a và b cũng đượcgọi là kề nhau Hai cung bất kì của G được gọi là kề nhau nếu chúng cóđỉnh chung Cung dạng (a, a) với a ∈ V được gọi là khuyên Đỉnh khôngliên thuộc với một cung nào được gọi là đỉnh cô lập Số các đỉnh của G,tức là | V |, được gọi là cấp của G Số các cung của G, tức là | E |, đượcgọi là cỡ của G
1.1.2 Đồ thị vô hướng
Một đồ thị vô hướng G là một cặp có thứ tự G = (V, E), ở đây V làmột tập, còn E là tập với các phần tử là các đa tập lực lượng 2 trên V,trong đó đa tập là khái niệm mở rộng của khái niệm tập hợp Trong một
đa tập, mỗi phần tử có thể xuất hiện nhiều hơn một lần Tổng số tất cảcác lần xuất hiện của các phần tử được gọi là lực lượng của đa tập Cácphần tử của V cũng được gọi là các đỉnh, còn các phần tử của E được gọi
là các cạnh của đồ thị vô hướng G Nếu e = {a, b} là một cạnh của G thì
a và b được gọi là các đỉnh đầu mút của cạnh e hay các đỉnh liên thuộcvới e Ta cũng thường kí hiệu cạnh e = {a, b} ngắn gọn là ab
Ví dụ 1.1.2 Cho G = (V, E) với V = {a, b, c, d} và
E = {{a, a} , {a, b} , {b, d} , {b, c} , {c, d}} Khi đó G là đồ thị vô hướng
và được biểu diễn bằng hình (1.2)
Lưu Thị Thêm 8 K20-Toán ứng dụng
Trang 11Hình 1.2: Ví dụ một đồ thị vô hướng
1.1.3 Đa đồ thị có hướng và đa đồ thị vô hướng
Một đa đồ thị có hướng G là một cặp có thứ tự G = (V, E) ở đây V
là một tập, còn E là một đa tập với các phần tử đều thuộc tích Đề các
V × V Đa đồ thị có hướng cũng được biểu diễn trên mặt phẳng tương
tự như đồ thị có hướng, trong có các cung có cùng đỉnh đầu và đỉnh cuốiphải được biểu diễn bằng các đường cong khác nhau Tương tự, một đa
đồ thị vô hướng G là một cặp có thứ tự G = (V, E), ở đây V là một tập,còn E là một đa tập với các phần tử đều là đa tập lực lượng 2 trên V.Trong biểu diễn trên mặt phẳng của đa đồ thị vô hướng, các cạnh khácnhau nhưng có các đỉnh đầu mút như nhau phải được biểu diễn bằng cácđường cong khác nhau
Ví dụ 1.1.3 Đồ thị G1 = (V, E1) với V = {a, b, c, d} và
E1 = {(a, d), (a, d), (d, a), (a, c), (c, a), (b, a), (c, b), (b, c), (d, c)} là một đa
đồ thị có hướng:
Trang 12WE là các tập nào đấy Các phần tử của WV và WE có thể chỉ đơn thuần
là các dữ liệu nhưng thường thì có một ý nghĩa định lượng Giá trị f(v)cho v ∈ V được gọi là trọng số của đỉnh v, còn giá trị g(e) cho e ∈ E
được gọi là trọng số của cung e hoặc trọng số của cạnh e Người ta cũngthường kí hiệu đồ thị có trọng số là G = (V, E, f ) hay G = (V, E, g) hay
G = (V, E, f, g) tùy thuộc vào việc chỉ một hàm f, chỉ một hàm g hay cảhai hàm f và g được xác định
Ví dụ 1.1.5 Cho G = (V, E, g) với V = {a, b, c, d, e} và
E = {(a, b), (a, c), (b, e), (e, d), (b, d), (c, e)} và g : E → N được xác địnhnhư sau:
g(a, b) = g(b, e) = g(c, e) = 5
g(a, c) = 4
g(e, d) = g(b, d) = 7
Khi đó G là một trọng đồ thị có hướng được biểu diễn bởi hình (1.3)
Lưu Thị Thêm 10 K20-Toán ứng dụng
Trang 13Hình 1.3: Ví dụ một đồ thị có trọng số có hướng
1.2 Đồ thị con và một số vấn đề liên quan
Đồ thị G0 = (V0, E0) được gọi là đồ thị con của đồ thị G = (V, E)
nếu V0 ⊆ V và E0 ⊆ E Đồ thị con G0 = (V0, E0) của đồ thị G = (V, E)
được gọi là đồ thị con bao trùm của G nếu V0 = V Nếu E0 chứa tất cảcác cung hay cạnh của G, mà hai đỉnh liên thuộc với nó đều thuộc V0, thì
G0 = (V0, E0) được gọi là đồ thị con của G = (V, E)cảm sinh bởi tập đỉnh
V0 hay cũng được gọi là đồ thị con cảm sinh bởi G = (V, E) trên tập đỉnh
V0 Khi đó G0 cũng được kí hiệu là G0 = G[V0]
Ta thường phải xây dựng các đồ thị mới từ các đồ thị đã cho bằng cáchxóa hay thêm một số đỉnh hoặc cạnh Nếu W ⊆ V, thì G − W = G[V \W ],tức là đồ thị con của G nhận được từ G bằng cách xóa đi các đỉnh thuộc
W và mọi cung (hay cạnh) liên thuộc với các đỉnh trong W Tương tự, nếu
E0 ⊆ E, thì G − E0 = (V, E\E0) Nếu W = {w} và E0 = {(x, y)} (hay
E0 = {xy}) thì kí hiệu ở trên được đơn giản viết thành G − w vàG − (x, y)
(hay G − xy) Tương tự, nếu x và y không kề nhau trong G thì G + (x, y)
(hay G + xy) là đồ thị nhận được từ G bằng cách nối x với y bằng cung
(x, y) (tương ứng bằng cạnh xy) Nếu G1 = (V1, E1) và G2 = (V2, E2) làhai đồ thị đã cho thì hợp của hai đồ thị này, kí hiệu G1∪ G2, là đồ thị vớitập đỉnh là V1 ∪ V2 và tập cung (hay cạnh) là E1 ∪ E2 Nếu cả hai đồ thị
G1 và G2 là đồ thị vô hướng thì kết nối của hai đồ thị G1 và G2, kí hiệu
là G1+ G2, là đồ thị nhận được từ G1∪ G2 bằng cách thêm vào tất cả cáccạnh dạng xy với x 6= y và x ∈ V1, y ∈ V2
Trang 14Luận văn thạc sĩ
1.3 Bậc của đỉnh
a) Đối với đồ thị vô hướng
Bậc của đỉnh v, kí hiệu là deg(v), là số cạnh liên thuộc với v
Nhận xét 1.3.1 Nếu đồ thị vô hướng G = (V, E)có n cạnh thì tổng
số bậc của các đỉnh trongGbằng 2n và số đỉnh bậc lẻ luôn là số chẵn
b) Đối với đồ thị có hướng
Cho đồ thị có hướng G = (V, E) với m cung
– Bán bậc ra của đỉnh v, kí hiệu là deg+(v), là số cung đi ra khỏi
v
– Bán bậc vào của đỉnh v, kí hiệu là deg−(v), là số cung đi vàođỉnh v
Nhận xét 1.3.2 Tổng tất cả các bán bậc ra bằng tổng tất cả cácbán bậc vào của các đỉnh và bằng m
Cho G = (V, E) là đồ thị có hướng hoặc vô hướng
• Hành trình trong đồ thị có hướng G là dãy v0, v1, , vn với vi ∈ V và
vi−1vi ∈ E, ∀i = 1, n
• Hành trình trong đồ thị vô hướng Glà dãy v0, v1, , vn với vi ∈ V và
vi−1vi ∈ E hoặc vivi−1 ∈ E, ∀i = 1, n
• Hành trình trong đồ thị có các đỉnh phân biệt được gọi là đường đi
• Hành trình trong đồ thị có các cạnh phân biệt được gọi là vết
• Hành trình được gọi là khép kín nếu đỉnh đầu và đỉnh cuối trùngnhau
• Hành trình khép kín mà khi xóa đỉnh cuối thì trở thành một đường
đi được gọi là chu trình
• Vết có điểm đầu và điểm cuối trùng nhau được gọi là mạch
Lưu Thị Thêm 12 K20-Toán ứng dụng
Trang 151.5 Tính liên thông của đồ thị
a Đối với đồ thị vô hướng G = (V, E)
– Đồ thị G được gọi là liên thông nếu luôn tồn tại đường đi giữamọi cặp đỉnh phân biệt của G
– Đồ thị con liên thông cực đại của G được gọi là thành phần liênthông của G
– Nếu bỏ đi một cạnh mà làm tăng số thành phần liên thông của
đồ G thị thì cạnh đó được gọi là cạnh cắt hoặc cạnh cầu của G
b Đối với đồ thị có hướng G = (V, E)
– G được gọi là liên thông yếu nếu đồ thị vô hướng nền của nó là
đồ thị liên thông
– G = (V, E) được gọi là liên thông một chiều nếu với hai đỉnhkhác nhau bất kì vi và vj, tồn tại một hành trình có hướng vớiđỉnh đầu là vi và đỉnh cuối là vj hoặc một hành trình có hướngvới đỉnh đầu là vj và đỉnh cuối là vi (hoặc cả hai hành trình đó).– G = (V, E) được gọi là liên thông mạnh nếu với hai đỉnh bất kìkhác nhau vi và vj, luôn tồn tại cả hành trình có hướng với đỉnhđầu là vi và đỉnh cuối là vj và hành trình có hướng với đỉnh đầu
là vj và đỉnh cuối là vi
1.6 Cây khung của đồ thị
• Cây bao trùm (tiếng anh: spanning tree), còn được gọi là cây khung,của đồ thị G là cây con của đồ thị G, chứa tất cả các đỉnh của G.Nói cách khác, cây bao trùm của một đồ thị G là một đồ thị con của
G, chứa tất cả các đỉnh của G, liên thông và không có chu trình
• Mọi đồ thị liên thông đều có ít nhất một cây khung
• Cây khung ngoài của đồ thị có hướng là cây khung có đúng một đỉnh
có bán bậc vào bằng 0
• Cây khung trong của đồ thị có hướng là cây khung có đúng một đỉnh
có bán bậc ra bằng 0
Trang 16Luận văn thạc sĩ
1.7 Phương pháp duyệt đồ thị
a) Duyệt đồ thị ưu tiên chiều sâu (DFS)
Bước 1: Bắt đầu từ một đỉnh v0 vào thăm và lấy thông tin
Bước 2: Chọn một trong số các đỉnh kề với v0 mà chưa được thăm(gọi là u)
Bước 3: Khởi động quá trình duyệt bắt đầu từ u (giống như từ v0).b) Duyệt đồ thị ưu tiên chiều rộng (BFS)
Bước 1: Bắt đầu từ v0, thăm tất cả các đỉnh kề với v0
Bước 2: Lần lượt khởi động quá trình duyệt từ mỗi đỉnh vừa đượcthăm
1.8 Luồng trong mạng
• Ta gọi mạng là một đồ thị có hướng G = (V, E), trong đó có duynhất một đỉnh s không có cung đi vào (gọi là điểm phát) và có duynhất một đỉnh t không có cung đi ra (gọi là đỉnh thu) Mỗi cung
e = (u, v) ∈ E được gán với một số không âm w(e) = w(u, v) gọi làkhả năng thông qua của cung đó Ta quy ước rằng nếu không có cung
w(x, y) thì khả năng thông qua w(u, v) của nó được gán bằng 0
• Cho G = (V, E), ta gọi luồng f trong mạng G là một phép gán chomỗi cung e = (u, v) ∈ E một số thực không âm f (e) = f (u, v), gọi
là luồng trên cung e, thỏa mãn các điều kiện sau:
1) Với mọi cung (x, y) ∈ E ta luôn có 0 ≤ f (x, y) ≤ w(x, y); với
w(x, y) là khả năng thông qua của cung (x, y)
Lưu Thị Thêm 14 K20-Toán ứng dụng
Trang 17• Một ghép cặp lớn nhất là ghép cặp có số cạnh lớn nhất của đồ thị G.
• Một ghép cặp đầy đủ/ hoàn chỉnh/ hoàn hảo của G là ghép cặp màtất cả các đỉnh của Gđều là những đầu mút của các cạnh thuộc ghépcặp đó
Ví dụ 1.9.1 Xét đồ thị G trong hình vẽ dưới đây:
Trang 18• Nếu tồn tại một mạch C chứa tất cả các cạnh của G thì C được gọi
là mạch Euler trong G Khi đó G được gọi là đồ thị Euler
• Nếu tồn tại một vết T chứa tất cả các cạnh của G thì T được gọi làvết Euler trong G Khi đó G được gọi là đồ thị nửa Euler
Nhận xét 2.1.1 Nếu G là đồ thị Euler thì G là đồ thị nửa Euler
Ví dụ 2.1.1 Cho đồ thị G dưới đây:
Hình 2.1:
Đồ thị G trên hình (2.1) là đồ thị Euler với mạch Euler:
v1, v2, v3, v4, v8, v6, v7, v8, v3, v1, v5, v2, v4, v7, v5, v6, v1
16
Trang 19Ví dụ 2.1.2 Cho đồ thị G dưới đây:
Trang 20b) Điều kiện đủ.
Giả sử G = (V, E) có bậc của mọi đỉnh đều là số chẵn Suy ra
Lưu Thị Thêm 18 K20-Toán ứng dụng
Trang 21bậc của mọi đỉnh đều ≥ 2 Bắt đầu phân tích từ đỉnh v1, ta xây dựngmột đường đi như sau: v1 → v2 → v3 → , trong đó v2 là đỉnh kềvới v1 Với ∀i > 1, ta chọn vi+1 là đỉnh kề với vi sao cho vi+1 6= vi−1,(ta luôn chọn được như vậy vì bậc của vi ≥ 2, ∀i) Do số đỉnh của G
là hữu hạn nên sau một số hữu hạn bước ta sẽ gặp một đỉnh đã xuấthiện trước đó Gọi đỉnh đó là vk Khi đó đoạn đường giữa hai đỉnh vk
là một chu trình T trong G
Nếu T đi qua tất cả các cạnh của G thì T là một mạch Euler.Nếu T chưa đi qua tất cả các cạnh của G thì ta loại khỏi G cáccạnh thuộc T Gọi G0 là đồ thị mới nhận được Đồ thị G0 không nhấtthiết là đồ thị liên thông Ta có bậc của mỗi đỉnh trong G0 là bậcchẵn Theo giả thiết quy nạp, mỗi thành phần liên thông của G0 chứamột mạch Euler Vì G liên thông nên T phải đi qua ít nhất một đỉnhtrong mỗi thành phần liên thông củaG0 Khi đó một mạch Euler đượcxây dựng trong G bằng cách chèn vào T tại một trong những đỉnhchung với các thành phần của G0 một mạch Euler của thành phần
Thật vậy, gọi G0 là đồ thị có được bằng cách thêm cạnh (u, v)
vào G Khi đó ta có mạch Euler trong G0 Do đó G0 là đồ thị Euler.Suy ra mọi đỉnh trong G0 đều có bậc chẵn (kể cả u, v) Vì vậy G làliên thông và u, v là hai đỉnh duy nhất trong G có bậc lẻ
b) Điều kiện đủ
Giả sử đồ thị G = (V, E) là liên thông và có đúng hai đỉnh bậc
lẻ là u,v Gọi G0 là đồ thị thu được từ G bằng cách thêm vào cạnh
(u, v) Khi đó mọi đỉnh trong G0 đều có bậc chẵn Suy ra G0 là đồ thịEuler và trong G0 có một mạch Euler từ u đến v rồi về u Bỏ cạnh
(u, v) của mạch đó ta thu được một vết Euler từ u đến v trong G
Định lý 2.2.2 ([2]) Một đồ thị có hướng là đồ thị Euler khi và chỉ khi
nó liên thông và cân bằng, (bán bậc ra và bán bậc vào tại mỗi đỉnh bằng
Trang 222.3 Thuật toán tìm các mạch Euler
2.3.1 Đối với đồ thị vô hướng
Thuật toán Fleury
Xuất phát từ một đỉnh bất kì của đồ thị, đi dọc theo các cạnh của nó vàtuân theo hai quy tắc:
a) Mỗi khi đi qua một cạnh nào đó thì xóa bỏ cạnh đó khỏi đồ thị vàxóa đỉnh cô lập (nếu có)
b) Không đi qua cạnh cầu trừ khi không có cách đi nào khác
Ví dụ 2.3.1 Cho đồ thị G như sau:
Trang 232.3.2 Đối với đồ thị có hướng
• Thuật toán tìm một mạch Euler của một đồ thị có hướng từ một câykhung ngoài
Nếu G là một đồ thị liên thông, cân bằng với một cây khungngoài T bắt đầu từ u Khi đó một mạch Euler được tìm thấy theothuật toán như sau:
a) Cạnh đầu tiên là bất kì cạnh nào kết nối với u
b) Các cạnh kế tiếp được lựa chọn để kết nối với đỉnh hiện tại nhưsau:
∗ Không có cạnh nào được đi qua nhiều hơn một lần
∗ Không chọn cạnh của T nếu có thể chọn một cạnh khác.c) Quá trình dừng lại tại đỉnh mà không có cạnh nào kết nối tới nó
• Thuật toán
1 Gọi T là một cây khung ngoài của G(V, E) bắt nguồn từ u
T (vi, vj) ← if (vi, vj) ∈ T then true else false
Nếu T (vi, vj) thì thêm vi vào cuối danh sách của Avj
Ngược lại ta thêm vi vào đầu danh sách của Avj
Trang 24Luận văn thạc sĩ
12 Output EC
– Trong thuật toán trên:
CV: Biểu thị đỉnh hiện tại đang đi tới
Av: Danh sách các đỉnh đi vào đỉnh v
I(v): Một chỉ mục cho danh sách AV
ACV(I(CV )): Phần tử thứ I(CV ) trong danh sách ACV
EC: Danh sách các đỉnh theo thứ tự đã được thăm
– Phân tích thuật toán:
∗ Đầu tiên xây dựng danh sách Av của tất cả các đỉnh với chú
ý những cạnh của T được để cuối danh sách Gán I(V ) củatất cả các đỉnh bằng 0 Danh sách EC =∅.
∗ Bắt đầu từ u (CV = u), đến thăm đỉnh đầu tiên vi trongdanh sách Au, tăng chỉ số của đỉnh vi lên 1 và gán CV = vi.Tiếp tục đến thăm đỉnh đầu tiên trong danh sách Avi và tăngchỉ số của đỉnh được thăm lên 1
∗ Các đỉnh trong mạch được truy tìm trong câu lệnh while bắtđầu từ dòng 8 Việc xây dựng danh sách Av và sự tăng I(V )
trong dòng 10 đảm bảo quy tắc b được thỏa mãn Dòng 7đảm bảo quy tắc a được thỏa mãn Điều kiện dòng 8 đảmbảo quy tắc c được thỏa mãn
∗ Trạng thái cuối cùng của EC là cho mạch Euler được tìmthấy (mạch đi được từ cuối danh sách lên đầu danh sách)
Ví dụ 2.3.2 Cho đồ thị G dưới dây:
Hình 2.6:
Lưu Thị Thêm 22 K20-Toán ứng dụng
Trang 25Áp dụng thuật toán trên ta tiến hành các bước sau:
Bước 1: Tìm một cây khung ngoài T của G
Bước 3: Gán I(V ) của tất cả các đỉnh bằng 0 Bắt đầu từ đỉnh v1
đến thăm đỉnh đầu tiên v3 trong danh sách Av1, tăng chỉ số của đỉnh
v3 lên 1 và gán CV = v4 Tiếp tục đến thăm đỉnh đầu tiên trongdanh sách Av4 và tăng chỉ số của đỉnh v4 lên 1 Quá trình dừng lạikhi không còn cạnh nào kết nối với đỉnh hiện tại
Trang 26• Số mạch Euler của đồ thị Euler
Định lý 2.3.1 ([2]) Số mạch Euler của một đồ thị có hướng, liên
Chứng minh Theo thuật toán trên, cạnh thuộc cây khung ngoài T
được đặt cuối danh sách Hai cách đếm khác nhau chỉ bởi một hoán
Trang 27Gặp bất kì một đỉnh v nào lần thứ ba, ta có d−(v) − 3 cách chọnđỉnh
Số cách chọn đỉnh kế tiếp ở mỗi đỉnh vi là (d−(vi) − 1)! Suy ra sốmạch Euler khác nhau có thể được xây dựng theo phương pháp củamỗi định lí trên cho một cây khung ngoài là
Gvà trọng số của mỗi cạnh là khoảng cách giữa mỗi đỉnh Khi đó ta có đồthị G = (V, E) có trọng số Nếu G là đồ thị Euler thì lời giải cho bài toánngười đưa thư là đi theo một mạch Euler nào đó của đồ thị G Nhưng nếu
G không là đồ thị Euler thì việc đi qua tất cả các cạnh của đồ thị đúngmột lần là không thể Chúng ta cần đưa ra giải pháp để tìm một mạchngắn nhất sao cho mỗi cạnh đi qua ít nhất một lần Vấn đề là nên lặp cạnhnào, lặp bao nhiêu lần để tổng trọng số cạnh của mạch là nhỏ nhất?
2.4.1 Thuật toán tìm lời giải cho bài toán người đưa thư trong
đồ thị vô hướng có trọng số không là đồ thị Euler[[2]]
Cho một đồ thị vô hướng G(V, E) có trọng số, không là đồ thị Euler.Thuật toán sau đây cho ta lời giải bài toán người đưa thư:
Trang 28Luận văn thạc sĩ
1 Tìm đường đi ngắn nhất giữa tất cả các cặp đỉnh bậc lẻ trong G
2 Xây dựng G0 chứa các đỉnh bậc lẻ với trọng số nhỏ nhất
3 Tìm một ghép cặp hoàn hảo có trọng số cực tiểu của G0
4 Xây dựng G” bằng cách thêm vào G những cạnh thuộc ghép cặp của
lẻ là điểm kết thúc của một đường Tất nhiên, nếu chúng ta thêm vào đồthị G r(u, v) cạnh lặp lại của mỗi cạnh (u, v) thì đồ thị nhận được (màchúng ta gọi là G”) là đồ thị Euler
Trong thuật toán trên, G0 là đồ thị đầy đủ với tập các đỉnh là tậpđỉnh bậc lẻ trong G và có trọng số cạnh cho mỗi cạnh (u, v) là d(u, v),(khoảng cách ngắn nhất từ u đến v trong G) Chú ý rằng vì trong G, sốđỉnh có bậc lẻ luôn là số chẵn nên trong G0 có một số chẵn các đỉnh Đểtìm một ghép cặp có trọng số tối thiểu thì thì ta thay thế trọng số củamỗi cạnh d(u, v) trong G0 bằng M − d(u, v), trong đó M là maxd(u, v)
với mọi (u, v) Sau đó ta tìm ghép cặp hoàn hảo có trọng số cực đại của đồthị được thay thế Ghép cặp này chính là ghép cặp có trọng số tối thiểucủa G0 Nó cho phép ta xác định một tập hợp các cạnh lặp lại cần thiết
để giải quyết bài toán
Cuối cùng ta tìm một mạch Euler trong đồ thị G” Đó là mạch ngắnnhất trong đồ thị G sao cho mỗi cạnh đi qua ít nhất một lần
Ví dụ 2.4.1 Cho đồ thị vô hướng G:
Lưu Thị Thêm 26 K20-Toán ứng dụng