Bài toán người đưa thư Trung Hoa
Bài toán người đưa thư Trung Hoa (tiếng Anh: Chinese postman problem) phát biểu rằng:
- Một người đưa thư xuất phát từ bưu điện phải đến một số con đường để phát thư rồi quay trở về điểm xuất phát, hỏi người đó phải đi như thế nào để số đường đi là ít nhất.
Trong phần đồ thị, bài toán người đưa thư Trung Hoa tương đương với bài toán tìm chu trình ngắn nhất đi qua tất cả các cạnh của một đồ thị cho trước.
Tên gọi "bài toán người đưa thư Trung Hoa" được Alan Goldman của cục tiêu chuẩn quốc gia Hoa Kỳ (U.S. National Bureau of Standards) đặt cho, vì nó được nhà toán học Trung Hoa Mei-Ku Guan nêu ra đầu tiên vào năm 1962[1].
Mục lục |
Cách giải [sửa]
Bài toán giải bằng phương pháp đồ thị. Dựng một đồ thị có các cạnh tương ứng với các con đường mà người đưa thư phải đi qua. Một chu trình đi qua tất cả các cạnh gọi là một hành trình. Đỉnh xuất phát của chu trình này tương ứng với vị trí của bưu điện.
Nếu đồ thị là đồ thị Euler (các đỉnh đều có bậc chẵn) thì sẽ tồn tại hành trình là chu trình đơn.
Ta xét trường hợp đồ thị có một số đỉnh bậc lẻ. Như thế hành trình của người đưa thư sẽ đi qua một số cạnh hai lần. Trường hợp này được giải quyết bằng cách sử dụng định lý Gooodman-Hedetniemi (1973) [2].
Định lý Gooodman-Hedetniemi (1973):
- Nếu G là một đồ thị liên thông có q cạnh thì hành trình ngắn nhất trong G có chiều dài:
-
,
-
- trong đó m(G) là số cạnh mà hành trình đi qua 2 lần.
G có một số chẵn các đỉnh bậc lẻ, gọi số lượng này là 2k.
Gọi
là tập hợp các đỉnh bậc lẻ (2k đỉnh) của G. Ta phân 2k đỉnh này thành k cặp, mỗi tập hợp k cặp này được gọi là một phân hoạch
của
.
Với mỗi cặp đỉnh u, v trong một phân hoạch
của
, ta xét khoảng cách giữa 2 đỉnh đó (chính bằng độ dài đường đi ngắn nhất nhận u,v làm 2 đầu mút), ký hiệu là d(u,v). Tính khoảng cách của k cặp đỉnh, rồi cộng lại ta được tổng
.
Số m(G) chính là số nhỏ nhất trong các tổng
.
Ví dụ:
- Cho đồ thị G gồm 6 đỉnh: a, b, c, d, e, f, với bậc tương ứng là 3,3,2,3,3,2 như trong hình vẽ.
- Ta sử dụng định lý Gooodman-Hedetniemi để tìm hành trình ngắn nhất trong G.
- Số cạnh của G:
.
- Tập các đỉnh có bậc lẻ
={a,b,e,d}. Có 3 cách phân hoạch tập
thành 2 cặp:
={(a,b)(e,d)}, với d(
)= d(a,b) + d(e,d)= 1+1 = 2;
={(a,d)(b,e)}, với d(
)= d(a,d)+ d(b,e)= 2+2 = 4;
={(a,e)(b,d)}, với d(
)= d(a,e)+ d(b,d)= 1+1= 2.
- Như vậy,
{2,4,2}=2, suy ra hành trình ngắn nhất trong G có độ dài:
.
- Có 2 hành trình như thế:
- Ta vẽ thêm 2 cạnh phụ (a,b) và (e,d) vào đồ thị G. Chu trình Euler trong đồ thị mới sẽ đồng thời là hành trình ngắn nhất trong đồ thị G:
-
- f→a→b→c→d→e→a→b→d→e→f.
- Ta vẽ thêm 2 cạnh phụ (a,e) và (b,d) vào đồ thị G. Chu trình Euler trong đồ thị mới sẽ đồng thời là hành trình ngắn nhất trong đồ thị G:
-
- f→a→b→c→d→b→d→e→a→e→f.
Các phiên bản khác của bài toán [sửa]
- Bài toán có thể được đặt ra với một đồ thị có hướng (thay vì vô hướng), các dữ kiện và yêu cầu khác không đổi. Khi đó bài toán được gọi là Bài toán New York Street Sweeper (tiếng Anh: New York Street Sweeper problem).
,
.
={(a,b)(e,d)}, với d(
={(a,d)(b,e)}, với d(
={(a,e)(b,d)}, với d(
{2,4,2}=2, suy ra hành trình ngắn nhất trong G có độ dài:
.