1. Trang chủ
  2. » Luận Văn - Báo Cáo

đường đi hamilton và ứng dụng

21 2,2K 11

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 447,5 KB

Nội dung

Các bài toán về đường đi, trong đó đồ thị Hamilton là nội dung quan trọng của Lý thuyết đồ thị.. Sử dụng lý thuyết đồ thị để giải bài toán người du lịch không chỉ là toán học thuần túy m

Trang 1

MỤC LỤC LỜi mở đầu

3 Ứng dụng của bài toán người du lịch 12

Trang 2

LỜI MỞ ĐẦU

Lý thuyết đồ thị là một ngành Toán học có vị trí đặc biệt quan trọng về mặt lý thuyết cũng như ứng dụng Có nhiều bài toán liên quan tới một tập các đối tượng và những mối liên hệ giữa chúng, đòi hỏi toán học phải đặt ra một mô hình biểu diễn một cách chặt chẽ và tổng quát bằng ngôn ngữ ký hiệu, đó là đồ thị Những ý tưởng cơ bản của nó được đưa ra từ thế kỷ thứ XVIII bởi nhà toán học Thụy Sỹ Leonhard Euler, ông đã dùng mô hình đồ thị để giải bài toán về những cây cầu Konigsberg nổi tiếng Các bài toán

về đường đi, trong đó đồ thị Hamilton là nội dung quan trọng của Lý thuyết đồ thị

Bài toán “Người du lịch” cũng là một vấn đề thú vị cho các nhà kinh doanh cũng như ứng dụng vào đời sống Sử dụng lý thuyết đồ thị để giải bài toán người du lịch không chỉ là toán học thuần túy mà còn mở ra cho chúng ta nhiều phạm trù ứng dụng phong phú Mối liên hệ giữa bài toán “Người du lịch” với đồ thị Hamilton và những ứng dụng của nó

là một vấn đề mở, thu hút bất kỳ ai quan tâm đến nội dung này Vì vậy, nhóm chúng tôi chọn đề tài: “Đường đi Hamilton và ứng dụng” để nghiên cứu

Mặc dù các thành viên trong nhóm đã có nhiều cố gắng nhưng trong quá trình thực hiện bài tiểu luận sẽ có nhiều thiếu sót, nhóm chúng tôi rất mong nhận được sự góp ý của thầy và các bạn

Chúng tôi xin chân thành cảm ơn sự giúp đỡ nhiệt tình của PGS TSKH Trần Quốc Chiến trong môn học vừa qua

Nhóm chúng tôi gồm 4 thành viên:

1 Trần Duy Hà (trưởng nhóm) Ứng dụng, tổng hợp và hoàn thiện

2 Lê Thị Thanh Lam Đại cương về đồ thị Hamilton và thuật toán

3 Nguyễn Thị Cẩm Hường Thiết kế cấu trúc dữ liệu và thuật toán

4 Nguyễn Thị Hoài Thanh Cài đặt chương trình thuật toán

Trang 3

NỘI DUNG ĐỀ TÀI

1 Đồ thị Hamilton

1.1 Khái niệm đường đi, chu trình Hamilton

Cho đồ thị G = (V, E) có n đỉnh

a Chu trình (x 1 , x 2 , , x n , x 1 ) được gọi là chu trình Hamilton nếu x i ≠ x j với 1 ≤ i < j ≤ n

b Đường đi (x 1 , x 2 , , x n ) được gọi là đường đi Hamilton nếu x i ≠ x j với 1 ≤ i < j ≤ n

Chúng ta có thể phát biểu lại như sau:

+ Chu trình Hamilton là chu trình xuất phát từ 1 đỉnh, đi thăm tất cả những đỉnh còn lại mỗi đỉnh đúng một lần, cuối cùng quay trở lại với đỉnh xuất phát

+ Đường đi Hamilton là đường đi qua tất cả các đỉnh của đồ thị, mỗi đỉnh đúng một lần

Khác với khái niệm chu trình Euler và đường đi Euler, một chu trình Hamilton không phải là đường đi Hamilton bởi có đỉnh xuất phát được thăm tới 2 lần

Ví dụ: Xét 3 đơn đồ thị G1, G2, G3 sau:

Đồ thị G1 có chu trình Hamilton (a, b, c, d, e, a) G2 không có chu trình Hamilton vì deg(a) = 1 nhưng có đường đi Hamilton (a, b, c, d) G3 không có cả chu trình Hamilton lẫn đường đi Hamilton

iii) Nếu xóa đi k đỉnh bất kỳ cùng các cạnh liên thuộc chúng thì đồ thị còn lại sẽ có tối

đa k thành phần liên thông

Trang 4

* Hệ quả:

Giả sử đồ thị n đỉnh G có đường đi Hamilton P Khi đó:

(i) Đồ thị G liên thông

(ii) Có ít nhất n – 2 đỉnh bậc ≥ 2 và mỗi đỉnh có đúng hai cạnh liên thuộc thuộc đường

đi P

(iii) Nếu xóa đi k đỉnh bất kỳ cùng các cạnh liên thuộc chúng thì đồ thị còn lại sẽ có tối đa k + 1 thành phần liên thông.

1.2.2 Điều kiện đủ

* Định lí 1: Đồ thị đủ Kn với n lẻ n ≥3 có n – ½ chu trình Hamilton từng đôi một

không giao nhau

* Định lý 2 ( Dirac) : Cho G là đơn đồ thị n đỉnh (n ≥ 3) Nếu bậc deg(v) ≥ n/2 với

mọi đỉnh v của G thì G có chu trình Hamilton.

* Định lý 3: Cho G là đồ thị đơn n đỉnh (n ≥ 3) Nếu bậc d(v) ≥ (n-1)/2 với mọi đỉnh v

của G thì G có đường đi Hamilton

* Định lý 4 : Cho G là đồ thị đơn n đỉnh (n≥3) Giả sử u và v là 2 đỉnh không kề nhau

của G sao cho deg(u) + deg(v) ≥ n

Khi đó G có chu trình Hamilton khi và chỉ khi đồ thị G + (u,v) có chu trình Hamilton

* Định lý 5 : Cho G là đồ thị đơn giản n đỉnh Giả sử G’ và G’’ là 2 đồ thị thu được từ

G bằng cách qui nạp nối tất cả các cặp đỉnh không kề nhau có tổng các bậc ít nhất

bằng n Khi đó ta có G’ = G’’.

Từ định nghĩa trên ta có thể định nghĩa khái niệm bao đóng của đồ thị

* Bao đóng : C(G) của đồ thị G n đỉnh là đồ thị thu được từ G bằng cách, theo quy

nạp, nối tất cả các cặp đỉnh không kề nhau mà tổng số bậc ít nhất bằng n cho đến khi

không còn cặp đỉnh nào như vậy nữa

* Định lý 6: Đồ thị G có chu trình Hamilton khi và chỉ khi bao đóng của G có chu

trình Hamilton

* Định lý 7: Nếu bao đóng C(G) = Kn (n ≥3) thì đồ thị G có chu trình Hamilton

* Định lý 8 ( Định lý Ore): Cho G là đơn đồ thị n đỉnh (n 3)

Nếu deg(u) + deg(v) n với mọi cặp đỉnh không kề nhau thì đồ thị G có chu trình

Hamilton

Trang 5

* Định lý 9 : Cho G là đơn đồ thị n đỉnh (n 3) và m cạnh Nếu m C(n-1,2) + 2 thì

đồ thị G có chu trình Hamilton

* Định lý 10: Cho đồ thị G là đồ thị lưỡng phân với 2 tập đỉnh V1 và V2 sao cho

card(v1) = card(v2) = n ≥ 2

Nếu deg(v) > n/2 với mọi đỉnh v của G thì G có chu trình Hamilton.

* Định lý 11: Đồ thị Km,n có chu trình Hamilton khi và chỉ khi m = n.

* Định lý 12: Đồ thị Km,n có đường đi Hamilton khi và chỉ khi m n− =1.

1.2.1 Đồ thị có hướng:

* Định lý 13: (Điều kiện đủ tồn tại chu trình có hướng Hamilton)

a (Meyniel) Nếu đồ thị G liên thông mạnh và

deg(u) + deg(v) ≥ 2n - 1, ∀ u, v ∈G không kề nhauthì G có chu trình có hướng Hamilton

b (Ghoula – Houri) Nếu đồ thị G liên thông mạnh và

deg(v) n v Gthì G có chu trình có hướng Hamilton

Trang 6

thì G có đường đi có hướng Hamilton.

c Nếu

deg0(u) + deg 1 (v) n – 1 u, v G không tồn tại cung từ u đến v

thì G có đường đi có hướng Hamilton

* Định lý 15: (Konig) Mọi đồ thị có hướng đủ đều có đường đi có hướng Hamilton.

* Định lý 16: Đồ thị có hướng đủ G = (V, E) gọi là bắc cầu nếu (u, v) và (v, w) ∈ E

suy ra (u, w) ∈ E.

Từ định nghĩa ta thấy ngay, một đồ thị có hướng đủ là bắc cầu khi và chỉ khi nó không

có chu trình có hướng độ dài 3

* Định lý 17: Đồ thị có hướng đủ bắc cầu khi và chỉ khi nó không có chu trình có

hướng

* Định lý 18: Đường đi Hamilton trong đồ thị có hướng đủ là duy nhất khi và chỉ khi

đồ thị bắc cầu

* Định lý 19: (Moon – Moser) Cho G = (V, E) là đồ thị có hướng đủ liên thông mạnh

bậc n (n 3) Khi đó với mọi đỉnh v và số nguyên p (3 p n) luôn tồn tại chu trình

có hướng sơ cấp độ dài p qua đỉnh v.

* Định lý 20: (Camion) Đồ thị có hướng đủ có chu trình có hường Hamilton khi và

chỉ khi nó liên thông mạnh

Trang 7

2 Thuật toán nhánh cận giải bài toán người du lịch

2.1 Thuật toán nhánh cận:

Thuật toán nhánh cận là một trong các phương pháp chủ yếu giải bài toán tối ưu tổ

hợp Tư tưởng cơ bản của nó là trong quá trình tìm kiếm ta phân hoạch các phương án của bài toán ra thành hai hay nhiều tập con như là các nút của cây tìm kiếm và cố gắng đánh giá cận cho các nút, loại bỏ những nhánh mà ta biết chắc chắn là không chứa

phương án tối ưu

2.2 Bài toán Người du lịch:

Một người xuất phát từ một thành phố nào đó muốn tới thăm n−1 thành phố khác, mỗi thành phố đúng một lần, rồi quay về thành phố ban đầu Hỏi nên đi theo trình tự nào

để độ dài tổng cộng các đoạn đường đi qua là ngắn nhất (khoảng cách giữa hai thành phố

có thể hiểu là cự li thông thường hoặc thời gian cần đi hoặc chi phí của hành trình, và xem như cho trước)

Gọi C = { cij : i,j = 1,2, ,n} là ma trận chi phí

Mỗi hành trình: v = v(1)→v(2)→ →v(n-1)→v(n)→v(1) có thể viết dưới dạng:

v = (v(1),v(2)), (v(2),v(3)), , (v(n-1),v(n)), (v(n),v(1))Trong đó, mỗi thành phần (v(i-1),v(i)) gọi là một cạnh của hành trình

Xét đồ thị đầy đủ G = (V,E), với V = {1, 2, , n}, có trọng số với trọng số cij= c(i,j) có thể khác cji = c(j,i) Như vậy, ta có thể xem G như là một đồ thị có hướng đầy đủ

“mạnh” theo nghĩa với mọi i, j=1, 2, , n, i≠j, luôn có (i,j), (j,i)∈E Bài toán trở thành tìm chu trình Hamilton có độ dài ngắn nhất trong G.

2.3 Cách giải

Xét bài toán người du lịch:

Gọi C = { cij : i,j = 1,2, ,n} là ma trận chi phí

Mỗi hành trình: v = v(1)→v(2)→ →v(n-1)→v(n)→v(1) có thể viết dưới dạng:

v = (v(1),v(2)), (v(2),v(3)), , (v(n-1),v(n)), (v(n),v(1))Trong đó, mỗi thành phần (v(i-1),v(i)) gọi là một cạnh của hành trình

Trong bài toán người du lịch khi tiến hành tìm kiếm lời giải ta sẽ phân tập hành trình thành hai tập con: Một tập chứa cạnh (i,j) và tập không chứa cạnh này Ta gọi việc

đó là phân nhánh, mỗi tập con nói trên gọi là nhánh Việc phân nhánh được minh họa bởi

Trang 8

cây tìm kiếm:

Việc phân nhánh sẽ được dựa trên qui tắc hợp lý nào đó cho phép rút ngắn quá trình tìm kiếm phương án tối ưu Sau khi phân nhánh sẽ tính cận dưới của hàm mục tiêu trong mỗi tập con nói trên Việc tìm kiếm sẽ tìm trên tập con có cận dưới nhỏ hơn Thủ tục sẽ tiếp tục cho đến khi thu được hành trình đầy đủ, tức là phương án của bài toán người du lịch Sau đó chỉ cần xét những tập con có cận dưới nhỏ hơn giá trị hàm mục tiêu

tìm được Kỹ thuật tính cận dưới dựa trên thủ tục rút gọn dưới đây.

2.3.1 Thủ tục rút gọn

Tổng chi phí của một hành trình sẽ chứa đúng một phần tử trên mỗi dòng và mỗi cột của ma trận chi phí C = (cij) Do đó nếu trừ bớt mỗi phần tử của một dòng (hay một cột) đi cùng một giá trị thì chi phí của tất cả hành trình sẽ giảm đi một lượng, vì thế hành trình tối ưu sẽ không thay đổi Vì vậy, nếu tiến hành trừ bớt các phần tử của mỗi dòng và mỗi cột đi một hằng số sao cho thu được ma trận không âm và mỗi cột cũng như mỗi dòng chứa ít nhất một số 0, thì tổng các hằng số trừ đi đó sẽ cho ta cận dưới của mọi hành trình Thủ tục trừ bớt này gọi là thủ tục rút gọn, các hằng số trừ ở mỗi dòng (cột) gọi là hằng số rút gọn dòng (cột), ma trận thu được gọi là ma trận rút gọn

Thủ tục rút gọn:

+ Đầu vào: Ma trận chi phí C = (cij)

+ Đầu ra: Ma trận rút gọn và tổng hằng số rút gọn Sum

+ Thuật toán:

(i) Khởi tạo :

Sum := 0 ;

Trang 9

- Giảm cấp ma trận chi phí C bằng cách loại dòng r và cột s.

- Ngăn cấm tạo hành trình con :

Trang 10

(i) Khởi tạo : α := - ∞;

(ii) Với mỗi cặp (i,j) thoả cij = 0 (i=1, ,k; j=1, ,k) thực hiện

Trang 11

 Hàm này thử chọn cho x[i] tất cả các giá trị nó có thể nhận

<Ghi nhận việc thử x[i] = V nếu cần>;

Try(i + 1); {Gọi đệ quy, chọn tiếp x[i+1]}

<Bỏ ghi nhận việc thử cho x[i] = V (nếu cần)>;

}end;

Trang 12

3 Ứng dụng của bài toán Người du lịch

Bài toán Người du lịch chỉ là mô hình tiêu biểu của ứng dụng chu trình Hamilton Từ mô hình này, ta sẽ thấy rất nhiều ứng dụng trong thực tế Tuy nhiên trong đề tài này, chúng tôi chỉ nêu một vài ứng dụng tiêu biểu đó là bài toán kinh tế và quản lý dữ liệu

 Bài toán kinh tế:

Giả sử một công ty A muốn mở rộng các đại lý tiêu thụ sản phẩm Vị trí các cửa hàng như hình vẽ Để vận chuyển hàng hóa từ kho (vị trí 1) đến các cửa hàng (các vị trí còn lại), người quản lý phải tính toán sao cho quá trình vận chuyển qua mỗi cửa hàng chỉ đi đúng một lần với chi phí thấp nhất hoặc quãng đường đi ngắn nhất Để giải quyết vấn đề này,

rõ ràng phải sử dụng giải thuật của bài toán Người du lịch đã nêu trên

Qua hai ví dụ trên, ta có thể thấy những ứng dụng của Đồ thị Hamilton và bài toán Người

du lịch là rất phong phú và phổ biến trong cuộc sống hàng ngày Chẳng hạn ví dụ của bài toán trên có thể mở rộng cho bất kỳ lĩnh vực khác như:

- Xe cứu thương ở vị trí 1, bệnh nhân ở vị trí 3 Vậy phải tìm đường đi từ 1 đến 3 rồi trở về 1 như thế nào để đảm bảo thời gian đi là ít nhất

Trang 13

- Nhà máy nước của một thành phố đặt ở vị trí 1, các hộ gia đình ở các vị trí còn lại Vậy phải lắp đặt hệ thống ống nước tới các hộ gia đình sao cho chi phí bỏ

ra là thấp nhất

4 Cài đặt chương trình và minh họa kết quả

4.1 Cấu trúc dữ liệu và giải thuật

4.1.1 Đầu vào, đầu ra

Input: file văn bản TRAVEL.INP

• Dòng 1: Chứa số thành phố n (1 ≤ n ≤ 100) và số tuyến đường m trong mạng lưới giao thông

• m dòng tiếp theo, mỗi dòng ghi số hiệu hai thành phố có đường đi trực tiếp và chi phí đi trên quãng đường đó (chi phí này là số nguyên dương ≤ 10000)

Output: file văn bản TRAVEL.OUT, ghi hành trình tìm được

4.1.2 Cấu trúc dữ liệu

Sử dụng ma trận C[size][size] để biểu diễn ma trận chi phí

Sử dụng ma trận X[size+1] để thử các khả năng, ma trận bestWay[size+1] để ghi nhận nghiệm

Sử dụng ma trận T[size+1] để lưu chi phí từ X1 đến Xi

Sử dụng ma trận Free[size] để đánh dấu, Freei=TRUE nếu chưa đi qua thành phần i

Biến N, M tương ứng số đỉnh (thành phố) sẽ đi qua, và số cạnh (đường đi) giữa các đỉnh

Trang 14

Biến minSpending lưu giữ chi phí hành trình tối ưu.

4.1.3 Giải thuật

Bước 1: Kiểm tra file dữ liệu đầu “TRAVEL.INP” vào nếu phù hợp chuyển sang

bước 2, ngược lại đưa ra màn hình thông báo lỗi

Bước 2: Khởi tạo giá trị đầu (hàm khoiTao()),

Free[i] = TRUE, với i = 1 > n

Gán Free[1] = FALSE, các thành phố chưa đi qua, ngoại trừ thành phố 1

X[1] = 1, xuất phát từ thành phố 1

T[1] = 0, chi phí tại thành phố xuất phát là 0

minSpending = maxC, chi phí hành trình là lớn nhất (+∞)

Bước 3: Thử các cách chọn Xi (hàm backTrack(int i), sử dụng giải thuật quay lui

để tìm thành phố có minSpending nhỏ nhất) Hàm được thiết kế như sau:

X[i] = j;

//Chi phí = Chi phí bước trước + Chi phí đường đi trực tiếp

T[i] = T[i-1] + C[X[i-1]][j];

//Hiển nhiên, nếu có điều này thì C[X[i-1]][j] < +∞ rồi

if (T[i] < minSpending) {//Nếu chưa đến được X[N]

if (i < N) {//Đánh dấu thành phố vừa thử, FREE[j] = 0

Trang 15

}//Từ X[N] quay lại 1 vẫn tốn chi phí ít hơn trước

else if (T[N] + C[X[N]][1] < minSpending){//Cập nhật BestConfig

for (int var=1; var<=N; var++)

bestWay[var] = X[var];

minSpending = T[N] + C[X[N]][1];

Bước 4: Xuất kết quả, sử dụng hàm xuatKQ()

Kết quả chương trình được lưu trong file “TRAVEL.OUT”

Trang 17

F << "HAMILTON CYCLE IS: ";

for (int i=1; i<=N; i++)

for (int var=1; var<=N; var++)

bestWay[var] = X[var];

minSpending = T[N] + C[X[N]][1];

}} }

}

Trang 18

4.3 Minh họa kết quả

4.3.1 Dữ liệu đầu vào

Đồ thị G, minh họa các thành phố và chi phí tương ứng giữa các thành phố tương ứng

Dữ liệu đầu vào được lưu trong file “TRAVEL.INP”

Dữ liệu đầu vào với file dữ liệu “TRAVEL.INP”

2

3 4

1

41

2

Trang 19

Dữ liệu đầu vào với file dữ liệu “TRAVEL1.INP”

4.1.4 Kết quả đầu ra

Kết quả chương trình được lưu ở file “TRAVEL.OUT”

Kết quả đầu ra của dữ liệu “TRAVEL.INP” lưu trên file “TRAVEL.OUT”

Kết quả đầu ra của dữ liệu “TRAVEL1.INP” lưu trên file “TRAVEL.OUT

Trang 20

KẾT LUẬN

Qua nghiên cứu về chu trình Hamilton và những ứng dụng của nó thông qua bài toán Người du lịch, nhóm chúng tôi chỉ đề cập được một phần nhỏ trong các ứng dụng của nó Các vị dụ trong đề tài, chúng tôi chỉ nêu ở dạng mô hình đơn giản, số đỉnh đưa ra còn rất nhỏ Qua tìm hiểu, người ta bắt đầu thử và công bố các kết quả giải bài toán này trên máy tính với số đỉnh lớn hơn rất nhiều Từ năm 1954 (49 đỉnh), cho đến năm 2004 bài toán giải được với số đỉnh lên tới 24.978, và dự báo sẽ còn tiếp tục tăng cao nữa

Đây là một bài toán khó trong tin học, với độ phức tạp thuật toán cao, đòi hỏi cần nhiều thời gian nghiên cứu, do đó trong khuôn khổ của đề tài này, nhóm chúng tôi chỉ tổ chức xây dựng giải thuật và những ứng dụng của mô hình này trên thực tế Việc chạy chương trình ở cuối đề tài chỉ mang tính minh họa cho bài toán Người du lịch được viết bằng ngôn ngữ lập trình C++

Mặc dù đã có nhiều cố gắng nhưng kết quả của đề tài còn mang tính tương đối, tuy vậy đề tài cũng đáp ứng được yêu cầu đề ra ban đầu Dựa trên cơ sở nhóm đã tìm hiểu và thực hiện chương trình này có thể được mở rộng cho việc kiểm tra với các bộ dữ liệu lớn hơn Nhóm nghiên cứu nghĩ rằng những kiến thức thu được sẽ là hành trang và sẽ giúp ích rất nhiều cho mỗi thành viên trong quá trình phát triển về sau

Ngày đăng: 12/05/2014, 11:52

HÌNH ẢNH LIÊN QUAN

1. Đồ thị Hamilton - đường đi hamilton và ứng dụng
1. Đồ thị Hamilton (Trang 3)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w