Tải bản đầy đủ (.doc) (30 trang)

Một thuật toán trên đồ thị giải bài toán người du lịch

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (255.46 KB, 30 trang )

Mục lục
trang
3

Mở đầu

Chơng 1. Các kiến thức cơ sở

4

Đ1. Đồ thị

4

Đ2. Thuật toán tìm đờng đi ngắn nhất trên đồ thị

6

Đ3. Đờng đi chu trình Hamilton

9

Chơng 2.

Bài toán xuất phát

12

Đ1. Phát biểu bài toán

12



Đ2. Tính chất của thành phần tối u

13

Đ3. Thuật toán giải

16

Chơng 3. Về một ứng dụng của bài toán "Tìm

19

hành trình tối u trên đồ thị"

Đ1. Bài toán ngời du lịch

19

Đ2. áp dụng chu trình Hamiltơn để giải bài toán "Ngơi du
lịch"

26

Kết luận

30

Tài liệu tham khảo


31

Mở đầu


Lý thuyết đồ thị là một lĩnh vực nghiên cứu từ lâu và có nhiều ứng dụng
trong thực tiễn. Những t tởng cơ bản của lý thuyết đồ thị đợc đề xuất vào
những năm đầu của thế kỷ 18 bởi nhà toán học lỗi lạc ngời Thuỵ sỹ
Leonohard Euler.
Lý thuyết đồ thị đợc sử dụng để giải các bài toán trong nhiều lĩnh vục
khác nhau. Khi nghiên cứu lý thuyết đồ thị chúng tôi đã gặp đợc các công
trình mới của Giáo s Trần Vũ Thiệu. Với ý thức tập dợt, nghiên cứu, nhằm
hoàn thành luận văn tốt nghiệp cử nhân khoa học, chúng tôi mạnh dạn chọn đề
tài Một thuật toán trên đồ thị giải bài toán ngời du lịch.
Luận văn đợc chia làm 3 chơng.
Chơng 1 bao gồm các kiến thức cơ sở, nhằm tóm tắt những vấn đề liên
quan tới đề tài.
Chơng 2 là bài toán xuất phát, nhằm phát biểu bài toán, nêu một số tính
chất và thuật toán giải bài toán đã nêu.
Chơng 3 đề cập tới một ứng dụng của bài toán Tìm hành trình tối u trên
đồ thị. Từ những kết ở chơng 2 cho phép ta áp dụng để giải Bài toán ngời du
lịch.
Trong toàn bộ nội dung của Luận văn đợc xét trong không gian thực R 2.
Để hoàn thành Luận văn tốt nghiệp tôi đã nhận đợc sự hớng dẫn nhiệt
tình của Thầy giáo, Tiến sỹ Trần Xuân Sinh. Nhân dịp này cho phép tôi bày tỏ
lòng biết ơn sâu sắc đến Thầy giáo. Đồng thời tôi xin gửi đến các Thầy giáo,
Cô giáo thuộc tổ Điều khiển, Khoa Toán, gia đình, bạn bè đã động viên giúp
đỡ tôi nhiều trong quá trình học tập, rèn luyện và thực hiện đề tài. Vì năng
lực, thời gian có hạn, chắc luận văn không tránh khỏi những thiếu sót, tôi rất
thành thật mong đợc sự góp ý chân thành của các thầy cô giáo và các bạn.

Tác giả

3


Chơng 1
Các kiến thức cơ sở
Đ1. Đồ thị ([1], [2])
1.1.1. Định nghĩa đồ thị
Có nhiều cách để định nghĩa đồ thị
Định nghĩa 1: Đồ thị là cặp G = (A, E), trong đó A = {x, y, a, b ...} gọi là
tập các đỉnh và E = {(x, y) : x, y A} gọi là tập các cung (hay cạnh), tức là E
= AìA. (Về thực chất đồ thị là tập hợp các đối tợng đợc biểu diễn bằng đỉnh và
giữa các đối tợng có mối liên hệ với nhau).
Định nghĩa 2: Cho một đồ thị có nghĩa là cho một tập A và một ánh xạ
: A A.
Ta ký hiệu đồ thị bằng G = (A, ), mỗi phần tử ai A đợc gọi là đỉnh và
cặp (ai, aj) gọi là cung của G. Ký hiệu tập cạnh là E. Khi đó ta cũng thờng viết
G = (A, E).
1.1.2. Phân loại đồ thị
Định nghĩa 1: Đơn đồ thị vô hớng G = (V, E) bao gồm V là tập đỉnh và E
là tập. Các cạnh không có thứ tự gồm hai phần tử khác nhau của V đợc gọi là
cạnh.
Định nghĩa 2: Đa đồ thị vô hớng G = (V, E) bao gồm V là tập đỉnh và E là
họ các cạnh. Hai cạnh e1, e2 đợc gọi là các cạnh tạp nếu chúng cùng tơng ứng
với một cặp đỉnh.
Định nghĩa 3: Giả sử đồ thị vô hớng G = (V, E), trong đó V là tập các
đỉnh và E là tập các cặp không có thứ tự gồm hai đỉnh (không nhất thiết
phải khác nhau) của V gọi là các cạnh. Cạnh e gọi là khuyên nếu có dạng
e = (u, u).

Nếu đồ thị G = (V, E), các cạnh đợc xác định bởi thứ tự các đỉnh kề thì ta
nói đồ thị đã cho có hớng. Cạnh (u, v) thuộc đồ thị có hớng thì u gọi là đỉnh
đầu, còn v gọi là đỉnh ngọn, ta ký hiệu v = F(u).
Định nghĩa 4: Hai đỉnh u, v của đồ thị vô hớng G đợc gọi là kề nhau nếu
(u, v) là hai cạnh của đồ thị G. Nếu e = (u, v) là cạnh của đồ thị thì ta nói cạnh
4


này liên thuộc hai đỉnh u và v, ta cũng nói hai đỉnh u, v liên thuộc cạnh (u, v).
Đồng thời các đỉnh u và v sẽ đợc gọi là các đỉnh đầu của cạnh (u, v), lúc này
ta cũng nói hai đỉnh u và v là kề nhau.
Định nghĩa 5: Đồ thị G đợc gọi là đầy đủ nếu hai đỉnh bất kỳ đều kề
nhau.
Chú ý: Ta có thể biểu diễn đồ thị bằng hình học, chẳng hạn:
Với đồ thị có hớng, trên mặt phẳng, ta biểu diễn đỉnh bằng các điểm, biểu
diễn cung bằng một đoạn định hớng xác định.
Ví dụ:
Cho tập các đỉnh A = {a, b, c, d}.

x

a

x

b

Tập cạnh
E = {(a, b); (b, c); (d, c); (d, a); (a, a)}.
dx

Ta có thể biểu diễn đồ thị bằng phơng
pháp hình học (Hình 1).
1.1.3. Các khái niệm cơ bản khác có liên quan

x

c

Hình 1.

1. Cho đồ thị đầy đủ G = (A, E) với tập đỉnh A = a1, a2, . . ., an và tập cạnh
E = AìA. Mỗi đỉnh ai A có gắn một số thực ti (i = 1, n ) gọi là cao độ của
đỉnh ai. Khi đó ta cố định một đỉnh ab nào đó gọi là đỉnh nguồn. Cố định một
đỉnh ae nào đó gọi là đỉnh đích.
2. Đờng đi là một dãy các đỉnh sao cho mỗi đỉnh trong dãy (không kề
đỉnh cuối cùng) đợc nối với đỉnh tiếp theo bằng một cung nào đó. Một đỉnh đờng đi qua hơn một lần gọi là đỉnh lặp.
Chẳng hạn: Đờng đi
d = {x1, x2, . . . , xi, xi+1, . . . , xk},

(*)

trong đó xi+1 F(xi), i = 1, 2, .., k-1.
Có định nghĩa tơng đơng: Đờng là một dãy cung sao cho đỉnh cuối cùng
của mỗi cung trong dãy (không kể đỉnh cuối cùng) đều là đỉnh đầu của cung
tiếp theo sau.
Đờng có dạng (*), ta nói rằng đờng d đi từ đỉnh x1 đến đỉnh xk.

5



3. Chu trình là một đơng khép kín, tức là đỉnh cuối của đờng trùng với
đỉnh đầu của đờng. Do đó khi nói đến chu trình, ngời ta không xác định đầu
và cuối. Chu trình đợc gọi là chu trình đơn nếu không có đỉnh lặp.
4. Xích là một dãy các đỉnh, sao cho mỗi đỉnh trong dãy (không thể đỉnh
cuối cùng) luôn kề với đỉnh tiếp theo sau.
Trong d, ta nói rằng xích nối đỉnh x1 với xk.
Xích đơn là xích không có đỉnh lặp.
Chu trình vô hớng là một xích khép kín (tức là đỉnh cuối của xích trùng
với đỉnh đầu của xích). Khi nói đến chu trình vô hớng ta không cần xác định
đỉnh đầu và đỉnh cuối của chu trình.
Chu trình vô hớng đợc gọi là đơn nếu không có đỉnh lặp.
5. Bậc của đỉnh x trong đồ thị vô hớng là số cạnh liên thuộc với nó, ký
hiệu là r(x). Đỉnh có bậc bằng 0 gọi là đỉnh cô lập. Đỉnh có bậc bằng 1 đợc
gọi là đỉnh treo.
6. Ma trận kề. Ta đánh số các đỉnh bằng các số tự nhiên: 1, 2. . . ., n.
Ma trận vuông Mnìn = (mij) chỉ gồm các phần tử 0, 1 gọi là ma trận kề
của đồ thị G nếu mi j = 1 khi và chỉ khi (i, j) là cung của G (cách nói khác là
mij = 0 khi và chỉ khi (i, j) không phải là cung của G).
Rõ ràng G là đồ thi đối xứng (vô hớng) khi và chỉ khi ma trận kề M đối
xứng.
7. Số cung của đờng gọi là độ dài của đờng đó.
Đ 2. thuật toán tìm đờng đi ngắn nhất trên đồ thị
1.2.1. Phát biểu bài toán
Cho đồ thị G và đỉnh a, b G. Tìm đờng đi ngắn nhất trên đồ thị (nếu có)
từ a đến b.
1.2.2. Thuật giải
Để có thuật giải bài toán này ta xét các định lý sau:
Định lý 1.2.2.1. Phần tử ở hàng i và cột j của ma trận luỹ thừa M k là số
đờng khác nhau có độ dài k đi từ đỉnh i đến đỉnh j.
Chứng minh. Ta chứng minh theo quy nạp.

6


Với k = 1, định lý đúng (theo định nghĩa ma trận kề).
Giả sử định lý đúng với k = n.
Ta cần chứng minh định lý đúng với k = n+1.

t

n

Ký hiệu M = (bij), M = (aij), T = Mn.M = (cij).
Khi đó cij =

n


t =1

bit.atj.

i Hình 2.

Với t bất kỳ, 1 t n, theo giả thiết quy nạp bit là số đờng đi từ i đến
t có độ dài k.
Nếu aij = 0 thì không có cung từ t đến j, do đó không có đờng đi từ i
đến j qua t với độ dài là k+1.
Nếu aij = 1 thì có cung từ t đến j, do đó có các đờng đi từ i đến j qua
t với độ dài là k+1, số các đờng đi đó là bit.
Vậy theo tổng trên, khi tính cij, ta sẽ có toàn bộ số đờng đi từ i đến j với

độ dài k+1.
Định lý đợc chứng minh.
Định lý 1.2.2.2. Giả sử đồ thị G có n đỉnh. Nếu có đờng đi từ a đến b thì
sẽ có đờng đi từ a đến b có độ dài không lớn
hơn n-1.
Chứng minh. Giả sử có đờng đi từ a đến b.
Ta ký hiệu đờng đi đó là
d = {a = x1, x2, . . . , xk = b}
Hình 3.

với độ dài nhỏ nhất.

Rõ ràng độ dài của đờng đi là k-1. Nếu k-1 > n-1 thì trong dãy đỉnh của
đờng đó sẽ có i < j sao cho xi = xj, (vì số đỉnh của đờng đi lớn hơn số đỉnh của
đồ thị). Khi đó (bỏ qua đỉnh xj)
{a = x1, x2, . . . , xi, xi+1, . . ., xk = b},
cũng là đờng đi từ a đến b nhng có độ dài bé hơn. Điều đó mâu thuẩn với d có
độ dài bé nhất. Định lý đợc chứng minh.

7

j


Hệ quả: Giả sử đồ thị có n đỉnh. Khi đó tồn tại đờng đi từ đỉnh a đến
đỉnh b khi và chỉ khi tồn tại đờng đi từ đỉnh a đến đỉnh b với độ dài không lớn
hơn n-1.
Từ đó vấn đề đặt ra là: Cho đồ thị G và hai đỉnh a, b G. Khi nào thì tồn
tại đờng đi từ a đến b?
Theo định lý 1.2.2.1 và hệ quả của định lý 1.2.2.2 ta chỉ cần xét ma trận

tổng
T = M1 + M2 + . . . + Mn-1 = (tij).
Khi đó để tồn tại đờng đi từ đỉnh i đến đỉnh j điều kiện cần và đủ là các
phần tử tij > 0.
Bây giờ ta đi vào việc giải bài toán đã nêu: Cho đồ thị G và hai đỉnh
a, b G. Tìm đờng đi ngắn nhất (nếu có) từ a đến b.
1.2.3. Thuật toán Pk
Giả sử có đồ thị G = (A, F).
Ta xây dựng lần lợt các tập đỉnh P0, P1, . . . . của đồ thị nh sau:
Đặt
P0 = {a}.
Pk+1 = F(Pk)\ (P1 P2 . . . Pk), với k > 0.
Rõ ràng nếu Pk thì Pk+1 . Vì tập đỉnh hữu hạn nên sẽ đợc một dãy
hữu hạn các tập P0, P1, . . . , Pk sao cho
Pi 0, Pi Pj = , với i j.
k

Đặt



Pi = P.

i =1

Ta nhận xét rằng:
+ Nếu có đờng đi từ a tới b, thì b phải có mặt trong một tập Pi nào đó (và
chỉ một lần mà thôi).
+ b Pi thì i là độ dài ngắn nhất từ a đến b.
+ k n-1.

Nh vậy, trong quá trình trên cho ta:
8


- Nếu gặp b trong P

k

thì dừng. Khi đó k là độ dài ngắn nhất của đờng từ a

đến b.

- Nếu không bao giờ gặp b, thì đến một lúc nào đó Pk rỗng và quá trình
cũng dừng, không có đờng đi từ a đến b.

- Để tìm đờng đi (trong trờng hợp b Pi) ta dò ngợc lại theo quy tắc sau
(cho đến khi gặp a tức là đến P0): Nếu t Pj với j > 0 thì trong Pj-1 sẽ có đỉnh
s sao cho có cung đi từ s tới t.
Đ 3. đờng đi chu trình hamilton
1.3.1. Định nghĩa
Đờng đi qua tất cả các đỉnh của đồ thị, mỗi đỉnh đúng một lần đợc gọi là
đờng đi Hamilton.
Xích đi qua một lần tất cả các đỉnh của đồ thị, mỗi đỉnh đúng một lần đợc
gọi là xích Hamilton
Chu trình bắt đầu từ đỉnh v nào đó qua tất cả các đỉnh còn lại, mỗi đỉnh
đúng một lần rồi quay trở về v đợc gọi là chu trình Hamilton.
Đồ thị G đợc gọi là đồ thị Hamilton nếu nó chứa chu trình Hamilton và
gọi là nửa Hamilton nếu nó chứa đờng đi Hamilton.
Ví du: 1) Ngời du lịch đi qua mỗi thành phố đúng một lần rồi quay trở về
thành phố xuất phát là chu trình Hamilton.

2) Cho các hình vẽ:

G11
11

G2
111

G3
111
Hình 4.

ở hình 4 thì G3 là chu trình Hamilton; G2 là nửa Hamilton; G1 không là
nửa Hamilton.
9


1.3.2. Tính chất
Định lý 1.3.2.1. Đồ thị đầy đủ luôn có đờng Hamilton.
Chứng minh. Chúng ta quy nạp theo số đỉnh n của G.
Với n = 1, 2: Định lý hiển nhiên đúng.
Giả sử định lý đúng với n đỉnh, tức là
luôn có đờng đi Hamilton qua đồ thị đầy đủ
có n đỉnh đã cho.

a
x1
........

Ta cần chứng minh rằng định lý đúng

với đồ thị đầy đủ có (n+1) đỉnh.
Giả sử G là đồ thị đầy đủ có (n+1) đỉnh và
G suy ra từ G bằng cách bớt đỉnh a và các
cung kề a. Khi đó G có n đỉnh và G cũng
đầy đủ.
Theo giả thiết quy nạp G có đờng đi Hamilton

xi
xi+1
.....

xn

Hình 5.

T = {x1, x2, . . . ,xn}.
Nếu trong G có cung (xn, a) thì đờng (T, a) sẽ là đờng Hamilton cần tìm.
Nếu trong G có cung (a, x1) thì đờng (a, T) sẽ là đờng Hamilton cần tìm.
Trong trờng hợp ngợc lại, G có các cung (a, xn) và (x1, a). Khi đó sẽ tồn
tại i để có các cung (xi, a) và (a, xi+1). Có thể lấy
{x1, ..., xi, a, xi+1, ..., x}
là đờng Hamilton cần tìm. Nh vậy đồ thị đầy đủ luôn có đờng đi Hamilton.
Định lý 1.3.2.2 (Định lý Dirak). Đơn đồ thị vô hớng G, với n > 2 đỉnh và
mỗi đỉnh có bậc không nhỏ hơn (n/2), là đồ thị Hamilton.
Chứng minh. Ta thêm vào đồ thị G, k đỉnh mới và nối chúng lại với tất cả
đỉnh của G. Giả sử k là số nhỏ nhất các đỉnh cần thêm vào để đồ thị thu đợc G
là đồ thị Hamilton. Ta sẽ chứng minh rằng k = 0.
Thật vậy, giả sử ngợc lại k > 0 . Ký hiệu
{v, p, w, . . ., v}
là chu trình Hamilton trong G, trong đó v, w là đỉnh của G còn p là một trong

số các đỉnh mới. Khi đó w không kề với v (vì nếu ngợc lại, ta không cần sử
10


dụng p và điều đó mâu thuẫn với k nhỏ nhất). Hơn thế nữa đỉnh w chẳng hạn,
kề với w không thể đi liền sau đỉnh v (kề với v) vì rằng khi đó ta có thể thay:
v p w . . . v w . . . v
bởi
v v . . . w w . . . v
bằng cách đảo ngợc đoạn chu trình nằm giữa w và v. Từ đó suy ra số đỉnh của
G không kề với w là không nhỏ hơn số đỉnh kề với nó (tức là ít nhất cũng là
bằng

n
n
+k). Đồng thời số đỉnh của G kề với w cũng ít ra bằng +k. Do đó
2
2

không có đỉnh nào của G vừa kề, vừa không kề với w, cho nên tổng số đỉnh
của đồ thị G (G có n+k đỉnh) không ít hơn n+2k. Mâu thuẫn.
Vì vậy định lý đã đợc chứng minh.

11


Chơng 2
Bài toán xuất phát
Đ 1. p hát b iểu bài t oán ( [4], [5] )
Cho đồ thị đầy đủ G = (A, E) với tập đỉnh A = {a1, a2, ..., an} và tập cạnh

E = AìA. Mỗi đỉnh ai A có gắn một số thực ti (i = 1, 2, ..., n) gọi là cao độ
của đỉnh ai. Cho một đỉnh ab A gọi là đỉnh nguồn và một đỉnh ae A gọi là
đỉnh đích với b, e {1, 2, ..., n} và tb te. Xét bài toán sau đây gọi là bài toán
A.
Bài toán A: Tìm một đờng đi Haminton trên đồ thị từ đỉnh ab tới đỉnh
ae (qua mọi đỉnh của đồ thị, mỗi đỉnh một lần) sao cho làm cực tiểu mức khác
biệt lớn nhất giữa cao độ của hai đỉnh liên tiếp bất kỳ trên đờng đi.
Nói cách khác, trong số các hoán vị = { i1, i2, ..., in} của các số 1, 2, ...,
n với i1 = b, in = e. Hãy tìm một hoán vị sao cho cực tiểu hàm:
F() = 1max
k n 1 | tik - tik+1| min.
Có thể thấy rằng mỗi hoán vị nh thế sẽ tơng ứng với một đờng đi
Haminton trên đồ thị từ ab đến ae, còn hoán vị * = argmin{f(): P} sẽ đợc
gọi là hành trình tối u từ ab đến ae.
Bây giờ ta không cố định đỉnh đầu và đỉnh cuối, ta cũng có bài toán B tơng tự nh sau:
Bài toán B: Tìm một chu trình Haminton trên đồ thị đã cho làm cực tiểu
mức khác biệt lớn nhất giữa cao độ của hai đỉnh liên tiếp bất kỳ trong hai
điểm liên tiếp bất kỳ trong chu trình.
Một chu trình nh thế cũng sẽ đợc gọi là hành trình tối u. Rõ ràng số các
chu trình Haminton trên đồ thị đợc xét bằng n!
Giống nh bài toán A, bài toán này có thể diễn đạt theo cách khác nh sau:
Tìm một hoán vị = (i1, i2, ..., in) của các số 1, 2, ..., n sao cho
g() = 1max
k n 1 |tik - tik+1| min, với quy ớc in+1 = i1.
Lời giải của bài toán trên sẽ không thay đổi nếu thay mọi ti bởi ti= ti+t
với t là một số thực bất kỳ. Vì thế bằng cách chọn t > 0 đủ lớn, có thể cho rằng
12


ti > 0 với i = 1, 2, ..., n. Hơn nữa, không giảm tổng quát ta có thể giả thiết

(nếu cần thiết thì đánh số lại các đỉnh của đồ thị)
0 < t1 t2... tb ... te ... tn.

(2.1)

Khi có nhiều giá trị ti trùng nhau, thì các đỉnh tơng ứng với các giá trị
trùng nhau đó đợc sắp xếp theo thứ tự tuỳ ý. Giả sử trong dãy số (2.1) chỉ có q
giá trị khác nhau (q < n), chẳng hạn đó là các giá trị h1 < h2 < ... chia các đỉnh của đồ thị G thành q lớp, ký hiệu là T1, T2, ..., Tq sao cho đỉnh ai
thuộc lớp Tk khi và chỉ khi ti = hk , (i = 1, 2, ..., n; k = 1, 2, ..., q). Khi đó các
đỉnh thuộc lớp T1 sẽ đợc đánh số trớc, rồi đến các đỉnh thuộc lớp T2 . . . và
cuối cùng đến các đỉnh thuộc lớp Tq. Các đỉnh thuộc cùng một lớp đợc đánh số
một cách tuỳ ý.
Đ 2 . Tính chất của hành trình tối u ([5])
Trớc hết ta xét bài toán tìm hành trình tối u từ đỉnh đầu ab đến đỉnh cuối
ae trong G. Ta tạm giả thiết mọi số ti đều khác nhau (về sau giả thiết này bị loại
bỏ), nghĩa là ta đánh số các đỉnh của đồ thị sao cho (1 b e n),
0 < t1 < t2 < t3 < ... < tn-1 < tn.

(2.2)

Tính chất của hành trình tối u đợc nêu ra trong các mệnh đề dới đây.
Chứng minh các mệnh đề này đều sử dụng kỹ thuật cải tiến hành trình.
Định lý 2.2.1. Giả sử = (i1 = b, i2, ..., in-1, in = e) là một hành trình tối u
bất kỳ từ đỉnh b tới đỉnh e. Nếu b > 1 và 1 = ik với 1 < k < n thì ta có:
a) Đoạn hành trình từ b tới 1 phải đi theo các đỉnh có số hiệu giảm dần
b = i1 > i2 > ... > ik-1 > ik=1
b) Hành trình không thể đi qua 3 đỉnh liên tiếp i-1, i, i+1 hoặc theo
các chiều ngợc lại i+1, i, i-1, với 1 i-1 và i+1 b.
Chứng minh.

a) Giả sử trái lại, đoạn hành trình từ b đến 1 đi qua các đỉnh có số hiệu
lớn hơn b, khi đó trên đoạn này phải tìm đợc 2 đỉnh liên tiếp r và s sao cho
s < b < r. Tiếp đó, trên đoạn từ 1 đến n phải có hai đỉnh liên tiếp u và v sao
cho u < b < v. Nghĩa là hành trình có dạng

= (b, ..., r, s, ..., 1, ..., u, v, ..., n, ..., e), nếu s < b < r và u < b < v.

13


Ta sửa lại hành trình thành nh sau (hình 6):

= (b, ..., s, ..., 1, ..., u, v, ..., r, ..., n, ...,e), nếu v < r.
= (b, ..., s, ..., 1, ..., u, r, ..., v, ..., n, ...,e), nếu r < v.

hoặc
1

u

s

b

r

v

n


e

Hình 6. Hành trình .
1

u

s

b

v

r

n

e

Hình 7. Hành trình sửa .
Có thể kiểm tra lại rằng f() < f(), trái với giả thiết là tối u.
b) Chứng minh theo cách tơng tự.
Chứng minh tơng tự định lý 2.2.1 ta có định lý 2.2.2.
Định lý 2.2.2. Giả sử = (i1= b, i2, ..., in-1, in = e) là một hành trình tối u
bất kỳ từ đỉnh b đến đỉnh e. Nếu e < n và n = ir, với 1 < r < n, thì ta có
a) Đoạn hành trình từ n tới e phải đi qua các đỉnh có số hiệu giảm dần
n = ir > ir+1 > ... > in-1 > in = e.
b) Hành trình không thể đi qua 3 đỉnh liên tiếp i-1, i, i+1hoặc theo
chiều ngợc lại i+1, i, i-1, với e i-1 và i+1 n.
Định lý 2.2.3. Với n >3 hành trình (chu trình Hamilton) tối u của bài

toán B không thể đi qua 3 đỉnh liên tiếp của i-1, i, i+1, hoặc theo chiều ngợc
lại i+1, i, i-1, với 1 i-1 < i+1 n.
Chứng minh. Cho =(i1, i2, ..., in-1, in) là một hành trình tối u bất kỳ của
bài toán B. Giả sử trái lại, đi qua 3 đỉnh liên tiếp, chẳng hạn i-1, i, i+1. Ta sẽ
chỉ ra mâu thuẫn bằng cách xây dựng một hành trình mới sao cho f() <
f(), trái với là hành trình tối u.
Thật vậy, giả sử 3 đỉnh liên tiếp i-1, i, i+1 nằm trên đờng đi từ 1 đến n.
Do i+1 n, nên trên đờng đi từ n tới 1 phải có một đỉnh r, với i+1 r n và

14


một đỉnh s đi liền sau r, với 1 s i-1, đồng thời phải có hoặc i+1 < r hoặc
s Nghĩa là ta có

= (1, ..., i-1, i, i+1, ..., n, ..., r, ..., s, ...).

Hình 8. Hành trình của .
Ta xây dựng hành trình mới bằng cách đi trực tiếp từ đỉnh i-1 đến đỉnh
s r và s (hình
ii+
n
i+1 và chèn đỉnh i vào 1giữa hai đỉnh
9). i
= (1, ..., i-1, i, i+1,1..., n, ..., r, i, s, ...). 1

1

s


Ký hiệu

i- 9. Hành itrình sửa của
i+ .
Hình
1
1

r

n

U = { (i-1, i), (i, i+1), (r, s)}.
Khi đó
max
f() = max {u, (max
k ,l )U |tk - t1|} và f() = max {v, ( k ,l )U |tk - t1|},

(2.3)

trong đó
u = (max
k ,l )U |tk - t1| = max |ti- ti-1, ti+1- ti, tr- ts| = tr- ts,
v = max{ti+1- ti, tr- ti, ti - ts } < tr- ts = u.
Từ đó và từ (2.3) ta suy ra f() < f(). Điều đó mâu thuẫn giả thiết.
Hay với n > 3 hành trình (chu trình Haminton) tối u của bài toán
B
không thể đi qua 3 đỉnh liên tiếp i-1, i, i+1 hoặc theo chiều ngợc lại i+1, i, i-1
với 1 i-1 < i+1 n.


15

r


Đ 3. Thuật toán giải
(Hành trình tối u dạng tháp hay tháp từng đoạn)
Từ các kết quả nêu trên, ta nhận đợc hành trình tối u cho các bài toán A
và B với giả thiết
0< t1 t2 ... tb ... te ... tn
nh sau:
Bài toán A: Hành trình tối u gồm 3 đoạn (có thể có đoạn rỗng) tuỳ
theo vị trí tơng đối của b, e, n. Cụ thể là = (1, 2, 3), với:

1 là hành trình tối u từ b đến b-1 qua mọi đỉnh i thoả mãn 1 i b,
2 là hành trình tối u từ b+1 đến e-1 qua mọi đỉnh i thoả mãn b+1 i e-1,
3 là hành trình tối u từ e+1 đến e qua mọi đỉnh i thoả mãn e i n.
Dáng điệu của các hành trình con đó nh sau:
+ Nếu b = 1 thì 1 =
+ Nếu b > 1 thì

1 = (b, b-2, ..., 4, 2, 1, 3, 5,... , b-3, b-1), với b chẵn,
nghĩa là thoạt đầu đi theo các đỉnh chẵn giảm dần tới 1, rồi sau đó đi theo các
đỉnh lẻ tăng dần tới b-1.

1 = (b, b-2, ... , 3, 1, 2, 4, ..., b-3, b-1), với b lẽ,
nghĩa là thoạt đầu đi theo các đỉnh lẽ giảm dần tới 1, rồi sau đó đi theo các
đỉnh chẵn tăng dần tới b-1.
+ Nếu b+1 = e thì 2 = , còn nếu b+1 < e thì 2 = (b+1, b+2, ..., e-2,

e-1),
nghĩa là đi theo các đỉnh tăng dần từ b+1 đến e-1.
+ Nếu e = n thì 3 =
+ Nếu e < n thì

3 = (e+1, e+3, ..., n-3, n, n-2, ..., e+2, e) khi e, n cùng tính chẵn lẽ,
3 = (e+1, e+3, ..., n-2, n, n-1, n-3, ..., e+2, e) khi e, n khác tính chẵn lẽ,
nghĩa là lúc đầu đi theo các đỉnh chẵn (lẻ) tăng dần từ e+1 đến n, rồi sau đó đi
theo các đỉnh lẻ (chẵn) giảm dần từ n đến e.
16


Ví dụ:
1) Với n = 10, b = 4, e = 7, ta có hành trình tối u từ 4 đến 7 qua 10 đỉnh,
mỗi đỉnh đúng 1 lần có dạng nh sau
4

2

1

5

3

đoạn 1

6

8


đoạn 2

10

9

7

đoạn 3

2) Với b = 1, n = 8, e = 6 ta có hành trình tối u từ 1 đến 6 nh sau:
(1)

1

(2) (3)2(4) 3(5) 4

đoạn 1

6
8
7
(7)(8)(6)

5

đoạn 2

đoạn 3


3) Với b = 3, e = n = 9 ta có hành trình tối u từ 3 đến 9 nh sau:
3

1

2

(3) (1) (2)

4

5

6

(4) (5) (6) (7) (8)

đoạn 1

7

8

(9)

đoạn 2

9


đoạn 3

Bài toán B: Theo định lý 2.2.3 thì hành trình tối u không thể đi qua 3
đỉnh liên tiếp i-1, i, i+1, với 1 i-1 < i-1 n.
Mặt khác hành trình có 2 đỉnh liên tiếp i và j, với |i - j| 3, cũng không
thể là hành trình tối u. Vì thế có thể thấy rằng hành trình tối u phải có dạng
1 3 5 ...... 6 4 (1)2 (3) (5)..(6) (4) (2)
tháp nh sau
Giá trị tối u bằng
opt = t2 - t1, khi n = 2

opt = 1max
i n 2 |ti+2- ti|, với n 3.
Ví dụ:
1) Với n = 9 ta có hành trình tối u của bài toán B nh sau:
7 (6)
5 (8)
9 (4)
8 (2)
6 4
(1) (3) 1(5) 3(7) (9)

2

2) Với n = 10 ta có hành trình tối u của bài toán B nh sau:
1

4 2(4) (2)
8 6(8) (6)
9 10

3(1) 5(3) 7(5) (7)
(9) (10)

Nhận xét: Nh trên đã thấy, khi có nhiều giá trị ti trùng nhau, ta sẽ chia
17


các đỉnh của đồ thị thành một số lớp (q lớp nếu có q giá trị khác nhau) sao cho
các đỉnh thuộc cùng một lớp khi và chỉ khi chúng có cùng cao độ ti nh nhau.
Mỗi lớp xem nh một đỉnh mới, gọi là đỉnh gộp, với cao độ của đỉnh gộp
đều đợc nối với nhau bởi một cạnh. Dựa theo cách giải đã trình bày ở trên, ta
tìm đợc hành trình tối u trong đồ thị gộp nhận đợc.
Muốn có hành trình tối u trong đồ thị ban đầu, ta chỉ việc mở rộng hành
trình tối u gộp tìm đợc bằng cách thay mỗi đỉnh gộp bằng một đờng đi qua
mọi đỉnh (mỗi đỉnh một lần) thuộc lớp tơng đơng với đỉnh gộp đó.

18


Chơng 3
về một ứng dụng của bài toán
"Tìm hành trình tối u trên đồ thị"
Đ 1. Bài toán ngời du lịch ([3])
3.1.1. Phát biểu bài toán
Một ngời du lịch muốn tham quan n+1 thành phố T0, T1, T2, , Tn. Xuất
phát từ thành phố T0, ngời du lịch muốn đi qua tất cả các thành phố còn lại,
mỗi thành phố đúng một lần rồi quay trở về thành phố xuất phát. Cho biết cịj là
chi phí đi từ thành phố Ti (i = 1, 2, , n) đến thành phố Tj (j = 1, 2,, n).
Hãy tìm hành trình với tổng chi phí bé nhất.
Rõ ràng có thể thiết lập tơng ứng 1-1 giữa các hành trình

T0 Ti0 Ti1 Ti2 ... Tin T0,
với một hoán = (i1, i2,, in) của n số tự nhiên 1, 2, ., n.
Đặt
f() = c 0i1 + c 1i2 + c 2i3 +.. c in 0
và ký hiệu là tập tất cả các hoán vị = (i1, i2, , in) của n số tự nhiên 1, 2,
, n. Khi đó bài toán ngời du lịch có thể phát biểu dới dạng tối u rời rạc sau:
f() min
Bài toán ngời du lịch còn có thể phát biểu dới dạng qui hoạch tuyến tính
nguyên bộ phận sau:
n

n

i =0

j =0

cij xij

min

với điều kiện
n

xij = 1, i = 1, 2, ..., n
j =0
n

xij = 1, j = 1, 2, ..., n
i =0


ui - uj - nxij n-1, i j
xij 0, nguyên
19


ui R, i = 0, 1, ..., n.
3.1.2. Cách giải thông thờng
Muốn giải bài toán "Ngời du lịch" bằng cách giải thông thờng, tức là tìm
cực tiểu hàm mục tiêu tuyến tính trong số nguyên không âm, với một ràng
buộc tuyến tính dạng đẳng thức hoặc bất đẳng thức. Ta phải giải thông qua bài
toán tổng quát hơn đó là "Bài toán cái túi".
3.1.2.1. Bài toán cái túi
Phát biểu bài toán "Một nhà thám hiểm cần đem theo một cái túi có trọng
lợng không quá b. Có n loại đồ vật có thể đem theo. Đồ vật thứ j có trọng lợng
aj và giá trị sử dụng là cj (j = 1, 2, ..., n). Hỏi rằng nhà thám hiểm cần đem theo
các loại đồ vật nào, với số lợng là bao nhiêu để cho tổng số lợng giá trị sử
dụng của các đồ đem theo là lớn nhất.
Gọi xj là số lợng đồ vật loại j (j = 1, 2, ..., n) mà nhà thám hiểm sẽ đem
theo. Khi đó mô hình toán học của bài toán có dạng sau đây:
n

c j x j
j =1

max

(3.1)

với điều kiện

n

aj xj

b

(3.2)

xj 0 và nguyên, j = 1, 2, ..., n.

(3.3)

j =1

Nh vậy bài toán cái túi là bài toán tìm cực đại (cực tiểu) của hàm mục
tiêu tuyến tính trong số nguyên không âm, với ràng buộc tuyến tính dạng đẳng
thức hoặc bất đẳng thức (nội dung thực tế của bài toán đợc mô tả ở trên).
Bài toán này có vai trò quan trọng trong tối u rời rạc vì thứ nhất, mọi bài
toán qui hoạch tuyến tính nguyên với biến số giới nội đều có thể đa về bài
toán cái túi, thứ hai là giải bài toán cái túi có thể sử dụng những thuật toán tơng đối hữu hiệu.
3.1.2.2. Đa bài toán qui hoạch tuyến tính nguyên về bài toán cái túi - các
20


phơng pháp hợp nhất hoá.
Phơng pháp đa các phơng trình tuyến tính với các hệ số và biến số
nguyên về một phơng trình tơng đơng là tổ hợp tuyến tính của các phơng trình
đã cho, ta gọi việc làm đó là hợp nhất hoá. Hợp nhất hoá có thể có lợi vì
chúng ta có phơng pháp khá hiệu quả để giải bài toán cái túi. Khuyết điểm
trầm trọng của hợp nhất hoá là các hệ số trong phơng trình là quá lớn.

Các phơng pháp hợp nhất hoá đợc xây dựng trên cơ sở định lý cơ bản sau
đây [3]:
3.1.2.3. Định lý. Nếu nh t1, t2 là hai số nguyên tố cùng nhau (ký hiệu là
(t1, t2) =1) thì mọi nghiệm nguyên của phơng trình
y1 t1 + y2t2 = 1

(3.4)

đều có thể biểu diễn dới dạng
y1 = - qt2, y2 = qt1,
trong đó q là số nguyên tuỳ ý.
3.1.2.4. Định lý. Xét hệ phơng trình
n

a1jxj = b1
j =1


n

a2jxj = b2
j =1
trong đó aij 0, bi > 0 là các số nguyên (i = 1, 2; j = 1, 2, ..., n)

(3.5)

Khi đó nếu t1, t2 là hai số nguyên dơng thoả mãn
1) (t1, t2) = 1
2) t1 không chia hết cho b2, t2 không chia hết cho b1
3) t1 > b2 - amin, t2 > b1 - amin

trong đó amin = min{ aij : aij > 0, i = 1, 2, j = 1, 2, ..., n}
Lúc này tập các nghiệm nguyên không âm của hệ (3.5) là trùng với tập
nghiệm nguyên không âm của phơng trình

21


n



j =1

(t1a1 + t2a2)xj = t1b1 + t2b2.

(3.6)

a1jxj = bi, i = 1, 2, ..., n,

(3.7)

Hệ quả. Đối với hệ
n



j =1

trong đó aij là các số nguyên không âm, bi > 0 (i = 1, ..., m, j = 1, ..., n), luôn
tìm đợc số nguyên t1, t2, , tm sao cho tập nghiệm nguyên không âm của hệ

(3.4) là trùng với tập các nghiệm nguyên không âm của phơng trình
n



j =1

m

( ti aij ) x j =
i =1

m

ti bi .
i =1

(3.8)

Chú ý: Khi m đủ lớn, các hệ số của phơng trình (3.8) sẽ là rất lớn. Chẳng
hạn, nếu bi = q, i = 1, ..., m, thì vế phải của phơng trình (3.8) sẽ là số nguyên
trong khoảng từ 2m-1qm đến 2m-1(q+1)m
Ví dụ: Đa về một phơng trình tơng đơng hệ sau đây:
3 x1 + 2 x2 10
x + 4 x 11
2
1
3 x1 + 3x2 13
x ,x 0
1 2

x1 , x2 nguyen
Đa vào các biến phụ x3, x4, x5, biến đổi các bất phơng trình về hệ phơng
trình ta thu đợc:
= 10
3x1 + 2 x2 + x3
x + 4x + x
= 11

1
2
4

x5 = 13
3x1 + 3x2 +
x1 , x2 , x3 , x4 , x5 0, nguyen
Tiến trình hợp nhất hoá hai phơng trình đầu của hệ, ta có t1 = 12, t2 = 11,
từ đó thu đợc phơng trình
47x1 + 68x2 + 12x3 + 11x4 = 241.
22


Hợp nhất hoá phơng trình thu đợc với phơng trình thứ ba t1' = 15,

t 2' =

242, từ đó thu đợc phơng trình tơng đơng với hệ đang xét
1431x1 + 1746x2 + 180x3 + 165x4 + 242x5 = 6761.
Điểm hạn chế của định lý 3.1.2.4 là đòi hỏi không âm với tất cả các hệ
số. Định lý dới đây khắc phục nhợc điểm đó nhng lại đòi hỏi các biến số phải
giới nội.

3.1.2.5. Định lý. Xét hệ phơng trình









n

aij x j = bi , i = 1,2
j =1

0 xj d j

(3.9)

x j nguyen, j = 1, 2,..., n

trong đó aij, bi, dj (i = 1, ..., m; j = 1, ..., n) là các số nguyên. Khi đó nếu t 1, t2
là các số nguyên dơng, nguyên tố cùng nhau thoả mãn các điều kiện.
1) (t2, -t1) S;
2) (-t2, t1) S;
trong đó S = { (y1, y2) :y1- yi yi+ , yi nguyên, i =1, 2},


yi =
yi + =


aij bi , J i

jJ i



= { j : aij > 0, j =1,..., n; i =1, 2} ,

aij bi , J i + = { j : aij > 0, j =1,..., n; i =1, 2} .

J J i +

Khi đó tập các lời giải của (3.9) sẽ trùng với lời giải của hệ









n

(t1a1 j + t 2 a2 j ) x j = t1b1 + t 2b2
j =1

0 xj d j


(3.10)

xi nguyen, j = 1,..., n.

Chú ý: Điều kiện của định lý 3.1.2.5 sẽ đợc thoả mãn nếu ta chọn t1, t2 là
23


hai số nguyên dơng, nguyên tố cùng nhau thoả mãn một trong các điều kiện
sau:
1) t1 y 2+ +1, t2 y1+ +1;
2) t1 - y 2 +1; t2 - y1 +1;
3) t1 1; t2 1+max( y1+ , - y1 )
4) t1 1+ max( y 2+ , y 2 ), t2 1.
3.1.3. Phơng pháp giải bài toán cái túi
Xét bài toán cái túi dạng bất đẳng thức.
n

c j x j

max

j =1

(3.1)

với điều kiện
n

aj xj


b

j =1

xj 0 và nguyên, j = 1, 2, ..., n.

(3.2)
(3.3)

Các số cj, aj, b có thể giả thiết là nguyên dơng.
Để giải "bài toán cái túi" đã nêu, ngời ta đã nêu ra phơng pháp phơng
trình truy toán của qui hoạch động [3].
Để phục vụ trực tiếp cho nội dung của chơng này, chúng tôi xin đợc nêu
ra phơng pháp chuyển bài toán chiếc túi về bài toán tìm đờng đi ngắn nhất
đã biết trong chơng 2.
Xây dựng đồ thị có hớng G = (V, E), với tập đỉnh V = {0, 1, , b} và tập
cung
E = { (i, k): k - i = aj },
trong đó i, k {1, 2, , n}.
Giả sử S là một đờng đi từ đỉnh 0 đến đỉnh b trên đồ thị, ký hiệu
L(S)=

d (i, k ) ,

( i ,k )S

là độ dài của đờng đi S.
24



3.1.3.1. Định lý. Mỗi đờng đi từ 0 đến b trong đồ thị G tơng ứng với một
phơng án chấp nhận đợc của bài toán cái túi (3.1)(3.2)(3.3) và ngợc lại.
Ngoài ra nếu đờng đi S* tơng ứng với phơng án chấp nhận đợc

x* =

(x1*, x2*, ..., xn*) thì
n

L(S*) =

c
j =1

j

x *j .

3.1.4. Phơng pháp giải "Bài toán ngời du lịch" trên cơ sở "Bài toán
cái túi"
Bài toán ngời du lịch có thể phát biểu dới dạng bài toán qui hoạch tuyến
tính nguyên bộ phận:
n

n

i =1

j =1


cij xij min

(3.11)

n



j =1

xij = 1

(3.12)

xij = 1

(3.13)

n


i =1

ui - vj - nxij n-1, i j

(3.14)

xij 0, nguyên,


(3.15)

trong đó ui, vj R, i = 1, 2, , n, j = 1, 2, ., n.
Từ định lý 3.1.2.3, định lý 3.1.2.4, định lý 3.1.2.5 và hệ quả ta có thể đa
hệ (3.12), và (3.13) về phơng trình tơng đơng là tổ hợp tuyến tính của các phơng trình đã cho. Sử dụng các thuật toán giải bài toán cái túi, ta sẽ có phơng
pháp giải "Bài toán ngời du lịch". Trong phạm vi bài toán viết này chúng tôi
không nêu cụ thể quá trình giải "Bài toán ngời du lịch" trên cơ sở "Bài toán cái
túi" vì khá cồng kềnh và phức tạp.
Đặc biệt khi n lớn thì hệ số phơng trình tơng đơng sẽ rất lớn, vì vậy giải
bài toán ngời du lịch nhờ thuật toán giải bài toán chiếc túi nh đã nêu là
không phù hợp.

25


Đ2. áp dụng chu trình Hamilton để giải bài toán "Ngời
du lịch".
3.2.1. Chuyển bài toán Ngời du lịch về bài toán tìm chu trình
Hamilton
Từ bài toán "Ngời du lịch" đã đợc phát biểu trong Đ1. Để có thể sử dụng
thuật toán tìm chu trình Hamilton đã nêu ở chơng 2, ta chuyển về bài toán xác
định nh sau:
(n+1) thành phố mà ngời du lịch muốn đi qua tơng ứng với (n+1) đỉnh của
đồ thị.
Đờng đi từ thành phố này sang thành phố kia tơng ứng là cung của đồ thị
(đoạn thẳng nối hai điểm).
Do ngời du lịch xuất phát từ thành phố T0 và đi qua tất cả các thành phố
còn lại, mỗi thành phố đúng một lần nên ngời đó sẽ có n! hành trình khác
nhau. Mỗi hành trình là một hành trình Hamiltơn với đỉnh đích và nguồn trùng
nhau.

Ký hiệu cij là chi phí từ thành phố i sang thành phố j. Ký hiệu a0j là chi phí
nhỏ nhất từ To đến Tj tơng ứng và ta gọi là cao độ đỉnh thứ j của đồ thị.
Rõ ràng cij+1 = |ai+1 - a0i | là chi phí từ thành phố i sang thành phố i+1.
Ta thấy rằng trong số n! hành trình sẽ tồn tại ít nhất một hành trình sao cho
tổng chi phí cho hành trình đó là nhỏ nhất, ký hiệu là hành trình . Hành trình

sẽ tơng ứng với đờng đi trong đồ thị thoả mãn điều kiện:
Làm cực tiểu mức chi phí lớn nhất của hai thành phố liên tiếp nhau trong
hành trình. Hành trình tơng ứng là một chu trình Hamiltơn tối u của bài toán
A.
Từ những phân tích trên ta có thể áp dụng bài toán A để giải bài toán Ngời
du lịch
Không mất tính tổng quát giả sử mọi số a0i (i = 1, 2, ..., n+1) đều khác
nhau. Khi đó ta đánh số các thành phố nh sau: T1 Ti Tn sao cho:
26


×