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

Tiểu luận môn toán ứng dụng Chu trình Euler và bài toán người đưa thư

30 2K 13

Đ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 30
Dung lượng 2,35 MB

Nội dung

Đồ thị có trọng số trên các cạnh có thể sử dụng để giải các bài toán như: Tìm đường đi ngắn nhất giữa hai thành phố trong mạng giao thông.. Bậc của đỉnh v trong đồ thị, ký hiệu là degv,

Trang 1

CHƯƠNG 1 ĐẠI CƯƠNG VỀ ĐỒ THỊ 4

1.1 Giới thiệu 4

1.2 Định nghĩa đồ thị 4

1.3 Một số thuật ngữ cơ bản 5

1.4 Đường đi, chu trình và đồ thị liên thông 5

1.5 Biểu diễn đồ thị trên máy tính 7

CHƯƠNG 2 CHU TRÌNH EULER VÀ BÀI TOÁN NGƯỜI ĐƯA THƯ 8

2.1 Định nghĩa 8

2.2 Điều kiện cần và đủ 8

2.2.1 Định lý 1 (Định lý Euler) 8

2.3 Các thuật toán tìm chu trình Euler 10

2.4 Thiết kế cấu trúc dữ liệu và giải thuật tìm đường đi, chu trình Euler 12

2.5 Bài toán người đưa thư 14

2.5.1 Phát biểu bài toán 14

2.5.2 Giải thuật 14

2.5.3 Giải thuật mịn 15

CHƯƠNG III CÀI ĐẶT BÀI TOÁN NGƯỜI ĐƯA THƯ 18

3.1 Tìm đường đi, chu trình Euler 18

3.2 Giải bài toán người đưa thư 21

KẾT LUẬN 29

TÀI LIỆU THAM KHẢO 30

Trang 2

GIỚI THIỆU

Lý thuyết đồ thị là ngành khoa học được phát triển từ lâu nhưng lại có nhiều ứng dụng hiện đại Những ý tưởng cơ bản của nó được đưa ra từ thế

kỷ XVIII bởi nhà toán học Thụy sĩ tên là Leonhard Euler.

Lý thuyết đồ thị được dùng để giải các bài toán trong nhiều lĩnh vực khác nhau Chúng ta có thể xác định hai máy tính trong mạng có thể trao đổi thông tin được với nhau hay không nhờ mô hình đồ thị của mạng máy tính Đồ thị có trọng số trên các cạnh có thể sử dụng để giải các bài toán như: Tìm đường đi ngắn nhất giữa hai thành phố trong mạng giao thông Chúng ta cũng còn sử dụng đồ thị để giải các bài toán về lập lịch, thời khóa biểu, và phân bố tần số cho các trạm phát thanh và truyền hình…

Ngày nay Lý thuyết đồ thị đã phát triển thành một ngành Toán học ứng dụng có vị trí đặc biệt quan trọng về mặt lý thuyết cũng như ứng dụng Trong nội dung cuốn tiểu luận này nhóm chúng tôi xin trình bày về

“Chu trình Euler và bài toán người đưa thư”.

Đồng Hới, tháng 05 năm 2012

Trang 3

- Đề tài: Chu trình Euler và bài toán người đưa thư

- Nhóm: 6 người

STT Họ tên Công việc(theo mục

Nhận xét củagiáo viên

1 Nguyễn Trần Sỹ Chương 1

3 Nguyễn Thị Hà Phương 2.5

5 Hoàng Đình Tuyền Chương 3

6 Nguyễn Duy Linh Chương 3

Trang 4

CHƯƠNG 1 ĐẠI CƯƠNG VỀ ĐỒ THỊ

1.1 Giới thiệu

Lý thuyết đồ thị là một lĩnh vực nghiên cứu đã có từ lâu và có nhiều ứngdụng trong ngành công nghệ thông tin 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ườiThụy Sỹ: Leonhard Euler Chính ông là người đã sử dụng đồ thị để giải bài toánnổi tiếng về 7 cái cầu ở thành phố Konigberg

Những ứng dụng cơ bản của đồ thị như:

- Xác định tính liên thông trong một mạng máy tính: hai máy tính nào đó có thểtruyền dữ liệu cho nhau được không

- Tìm đường đi ngắn nhất trên mạng giao thông

và hiển nhiên là không có cặp [u,u] nào đó trong E

- E là một họ các cặp không có thứ tự của V gọi là các cạnh.

Định nghĩa 1.2.3 Đơn đồ thị có hướng là một bộ G=<V,E>, trong đó:

c Không phải đơn đồ thị vô hướng do có cạnh nối một đỉnh với chính nó

Trang 5

Định nghĩa 1.2.4 Đa đồ thị có hướng là một bộ G=<V,E>, trong đó

- V ≠ Ø là tập hợp hữu hạn gồm các đỉnh của đồ thị

- E là một họ các cặp có thứ tự của V gọi là các cung

Các cung nối cùng một cặp đỉnh được gọi là các cung song song

Ví dụ:

Chú ý:

- Đồ thị sau vẫn được coi là đơn đồ thị có hướng vì e1và e2, e3 và e4 không phải

là 2 cung song song (do khác hướng)

1.3 Một số thuật ngữ cơ bản

Định nghĩa 1.3.1 Cho đồ thị vô hướng G=<V,E>.

- Hai đỉnh u và v của đồ thị được gọi là kề nhau nếu (u,v) là một cạnh của đồ

thị

- Nếu e=(u,v) là cạnh của đồ thị thì ta nói cạnh này là liên thuộc với hai đỉnh u

và v Cạnh được nói là nối đỉnh u và v Đỉnh u và v được gọi là đỉnh đầu của

cạnh e

Định nghĩa 1.3.2 Cho đồ thị vô hướng G=<V,E> Bậc của đỉnh v trong đồ thị,

ký hiệu là deg(v), là số cạnh liên thuộc với nó Đỉnh có bậc 0 được gọi là đỉnh côlập, đỉnh có bậc 1 gọi là đỉnh treo

Định nghĩa 1.3.3 Cho đồ thị có hướng G=<V,E>.

- Hai đỉnh u và v của đồ thị được gọi là kề nhau nếu (u,v) là một cung của đồ thị.

- Nếu e=(u,v) là cung của đồ thị thì ta nói cung này đi ra khỏi đỉnh u vào đi vào đỉnh v Đỉnh u được gọi là đỉnh đầu của cung e và đỉnh v được gọi là đỉnh cuối

của cung e

1.4 Đường đi, chu trình và đồ thị liên thông

Định nghĩa 1.4.1 Cho đồ thị *G = <V,E> (* ký hiệu cho dùng chung cả đồ thị

vô hướng và có hướng) Đường đi độ dài n từ đỉnh u đến đỉnh v (n là số nguyêndương) là dãy:

Trang 6

Đỉnh u gọi là đỉnh đầu của đường đi, đỉnh v gọi là đỉnh cuối của đường đi.

Đường đi có đỉnh đầu và đỉnh cuối trùng nhau (u=v) gọi là chu trình

Ví dụ: Cho đồ thị vô hướng sau:

Một số đường đi từ đỉnh 2 đến đỉnh 7:

- Đường đi d1: 2 3 4 7 (đường đi độ dài 3)

- Đường đi d2: 2 3 4 1 3 6 7 (đường đi độ dài 6)

Một số chu trình trên đồ thị trên:

- Chu trình C1: 1 2 3 1 (chu trình có độ dài 3)

- Chu trình C2: 1 2 3 7 6 3 4 1 (chu trình có độ dài 7)

Định nghĩa 1.4.2 Đồ thị vô hướng G = <V,E> được gọi là liên thông nếu luôn

tìm được đường đi giữa hai đỉnh bất kỳ của nó

Ví dụ: Xét các đồ thị vô hướng sau:

Trong 2 đồ thị trên thì G1là đồ thị liên thông, còn G2 không phải là đồ thị liênthông vì giữa hai đỉnh 1 và 2 không tồn tại một đường đi nào

Định nghĩa 1.4.3 Cho đồ thị G = (V,E) Đồ thị H = <W,F> được gọi là đồ thị

con của G nếu và chỉ nếu W € V và F € E

Trong trường hợp một đồ thị vô hướng G không liên thông, nó sẽ được phânthành các đồ thị con độc lập nhau và chúng đều liên thông Mỗi đồ thị con nhưvậy được gọi là một thành phần liên thông của G

Định nghĩa 1.4.4 Cho đồ thị vô hướng G = <V,E> Đỉnh v của đồ thị được gọi là

đỉnh rẽ nhánh nếu việc loại bỏ v và các cạnh liên thuộc với nó ra khỏi đồ thị sẽlàm tăng số thành phần liên thông của đồ thị Cạnh e của đồ thị được gọi là cầunếu việc loại bỏ nó ra khỏi đồ thị sẽ làm tăng số thành phần liên thông của đồ thị

Ví dụ: Xét đồ thị sau:

Trang 7

Trong đồ thị trên, đỉnh 2 là đỉnh rẽ nhánh vì việc loại đỉnh này cùng với các cạnh(2,3), (2,1), (2,6) sẽ làm đồ thị có 2 thành phần liên thông Cạnh (2,3) là cầu Cáccạnh còn lại đều không phải là cầu Đối với đồ thị có hướng khái niệm liên thôngkhó thỏa mãn hơn do các cung bị hạn chế về chiều Từ đó, bên cạnh khái niệmliên thông như đề cập trong đồ thị vô hướng, ta sẽ đưa thêm khái niệm liên thôngnhẹ hơn: liên thông yếu

Định nghĩa 1.4.5 Cho G = <V,E> là đồ thị có hướng.

a G được gọi là liên thông mạnh nếu luôn tìm được đường đi giữa hai đỉnh bất

kỳ của nó

b G được gọi là liên thông yếu nếu đồ thị vô hướng tương ứng với nó (đồ thị vô

hướng có được bằng cách biến các cung một chiều thành các cạnh hai chiều) là

đồ thị vô hướng liên thông

1.5 Biểu diễn đồ thị trên máy tính

Định nghĩa 1.5.1.1 Cho đồ thị G = <V,E>, với tập đỉnh V = {v1, v2, , vn} Ta

gọi ma trận kề của đồ thị là ma trận A, kích thước nxn được xác định như sau:

Trang 8

CHƯƠNG 2

CHU TRÌNH EULER VÀ BÀI TOÁN NGƯỜI ĐƯA THƯ

2.1 Định nghĩa

Cho đồ thị G=(V,E), V là tập hợp các đỉnh, E là tập hợp các cạnh

Chu trình Euler là chu trình qua mọi cạnh và mọi đỉnh đồ thị, mỗi cạnh

không đi quá 1 lần

Đường đi Euler là đường đi qua mọi cạnh và mọi đỉnh đồ thị, mỗi cạnh

không đi quá 1 lần

Cho đồ thị có hướng G=(V,E)

Chu trình có hướng Euler là chu trình có hướng qua mọi cung và mọi đỉnh

đồ thị, mỗi cung không đi quá 1 lần

Đường đi có hướng Euler là đường đi có hướng qua mọi cung và mọi đỉnh

đồ thị, mỗi cung không đi quá 1 lần

Đồ thị chứa chu trình Euler gọi là Đồ thị Euler.

(ii) (): Giả sử G liên thông và mọi đỉnh có bậc chẵn khác 0 Ta chứngminh G có chu trình Euler quy nạp theo số cạnh m của G

 m = 1: Vì G liên thông và mọi đỉnh bậc chẵn nên G chỉ có 1 đỉnh và 1khuyên Khuyên đó cũng tạo thành chu trình Euler

 Giả sử G có m cạnh, số đỉnh n > 0 và mọi đồ thị liên thông có số cạnh nhỏhơn m với mọi đỉnh bậc chẵn đều có chu trình euler

+ Trường hợp n = 1 hoặc 2 thì hiển nhiên tồn tại chu trình Euler

+ Trường hợp n > 2 Vì bậc của các đỉnh chẵn  2, bao giờ cũng chọn được

3 đỉnh a, b, c với các cạnh x = (a,b), y = (a,c)

- Giả sử G chứa cạnh z = (b,c)

Xét đồ thị G’ thu được từ G bằng cách loại bỏ ba cạnh x,y,z Sẽ xảy ra 1trong ba khả năng sau:

Trang 9

G’ liên thông Vì số cạnh của G’ nhỏ hơn m và các đỉnh vẫn có bậc chẵn

nên theo giả thiết quy nạp tồn tại chu trình Euler C’ của G’ Nối chu trình con(x,y,z) với C’ ta thu được chu trình Euler C của G

G’ có 2 thành phần liên thông G 1 và G 2 Không mất tính tổng quát giả

sử G1 chứa a, G2 chứa b và c G1 có chu trình Euler C1, G2 có chu trình Euler

C2 Ta xây dựng chu trình Euler C của G như sau Xuất phát từ đỉnh a đi theo chutrình C1 quay về a, sau đó đi theo cạnh x = (a,b) đến đỉnh b, từ b đi theo chu trình

C2 quay về b, sau đó đi theo cạnh z = (b,c) và y = (c,a) quay về a

2.2.2 Định lý 2

Cho đồ thị G có k đỉnh bậc lẻ Khi đó số đường đi tối thiểu phủ G là k/2 Chứng minh.

Ta đã biết số đỉnh bậc lẻ là chẵn, k=2n Chứng minh quy nạp theo n.

(i) n=1: Nối 2 đỉnh bậc lẻ với nhau bằng cạnh z ta thu được đồ thị G’thoả định lý Euler Như vậy G’ có chu trình Euler C’ Bỏ cạnh z trên C’ ta thuđược đường đi Euler phủ G

(ii) Giả sử G có số đỉnh bậc lẻ là 2n và định lý đúng với k<2n Nối 2đỉnh bậc lẻ a,b nào đó với nhau bằng cạnh z ta thu được đồ thị G’ có 2n-2 đỉnhbậc lẻ Theo giả thiết quy nạp G’ có n-1 đường đi phủ G’ Gọi P là đường đi quacạnh z Hiển nhiên a, b không phải đỉnh đầu hoặc cuối của P, vì vậy nếu bỏ cạnh

z ta thu được 2 đường đi P1 và P2 cùng với n-2 đường đi còn lại phủ đồ thị G

I

O v d v

2.2.3 Định lý 3

Trang 10

(i) Đồ thị có hướng G có chu trình có hướng Euler khi và chỉ khi G liênthông yếu và mọi đỉnh có nửa bậc vào bằng nửa bậc ra, tức S =  và T = 

(ii) Nếu S  , thì số đường đi có hướng tối thiểu phủ G là k Các đường

đi này nối các đỉnh của T đến các đỉnh của tập S

Ví dụ: Đồ thị

Đồ thị trên có chu trình Euler: (A,B,C,D,A)

2.3 Các thuật toán tìm chu trình Euler

2.3.1 Thuật toán 1

+ Đầu vào Đồ thị G  , không có đỉnh cô lập.

+ Đầu ra Chu trình Euler C của G, hoặc kết luận G không có chu trình Euler + Phương pháp.

(1) Xuất phát: Đặt H := G, k := 1, C :=  Chọn đỉnh v  G bất kỳ

(2) Xuất phát từ v, xây dựng chu trình bất kỳ Ck trong H

Nếu tồn tại Ck , nối Ck vào C, C := C  Ck Sang bước (3)

Nếu không tồn tại Ck , thì kết luận không có chu trình Euler, kết thúc.

(3) Loại khỏi H chu trình Ck Nếu H chứa các đỉnh cô lập thì loại chúngkhỏi H Sang bước (4)

(4) Nếu H = , thì kết luận C là chu trình Euler, kết thúc Ngược lại

g d

b a

C D

Trang 11

(3) Loại C1 ra khỏi H, ta được đồ thị H như sau

Các đỉnh c và k là các đỉnh cô lập, vì thế ta loại chúng ra khỏi H và nhậnđược đồ thị H sau

(5) Chọn đỉnh chung của H và C là v := f Đặt k := k+1 = 2 Quay lại bước(2)

(2) Ta xây dựng chu trình C2 trong H:

C2 = (f,i,j,h,g,d,b,a,e,f)Nối C2 vào C ta được chu trình C sau

C = C  C2 = (f,g,k,h,i,e,b,c,d,f)  (f,i,j,h,g,d,b,a,e,f) = (f,g,k,h,i,e,b,c,d,f,i,j,h,g,d,b,a,e,f)

(3) Loại C2 ra khỏi H, ta được đồ thị H gồm toàn các đỉnh cô lập Loạinốt các đỉnh cô lập ta có H = 

(4) Vì H = , ta kết luận C là chu trình Euler, kết thúc.

2.3.2 Thuật toán 2 (Fleury)

e

j

g d

b a

e

f

k h i j

g

b a

Trang 12

+ Đầu vào Đồ thị G  , không có đỉnh cô lập.

+ Đầu ra Chu trình Euler C của G, hoặc kết luận G không có chu trình

- Trường hợp đỉnh v1 không là đỉnh treo:

Nếu mọi cạnh liên thuộc v1 là cầu, thì không có chu trình Euler, kết thúc.

Ngược lại, chọn cạnh (v1 , v2 ) bất kỳ không phải là cầu trong H Thêm vàođường đi C đỉnh v2 Sang bước (4)

(4) Xoá cạnh vừa đi qua, và xoá đỉnh cô lập:

Loại khỏi H cạnh (v1 , v2 ) Nếu H có đỉnh cô lập, thì loại chúng khỏi H Đặt v1 := v2 Sang bước (2)

Ví dụ

Cho G là đồ thị hình sau

Đồ thị liên thông và có các đỉnh bậc chẵn Ta có chu trình Euler sau

(v6, v4, v7, v5, v1, v3, v4, v2, v1, v4, v5, v2, v3, v6)

2.4 Thiết kế cấu trúc dữ liệu và giải thuật tìm đường đi, chu trình Euler

Chương trình được thiết kế bằng ngôn ngữ tựa Pascal

Trang 13

- Sử dụng một ngăn xếp CE[max] để lưu chu trình Euler tìm được.

void timdinhle() ; //Tìm các đỉnh lẻ của đồ thị ban đầu

void phanhoach() ; // Dùng để phân hoạch các đỉnh lẻ thành các cặp void Hoanvi ;//sinh ra các hoán vị phân hoạch và chọn phân hoạch tối ưu.

void Themcanh() ; // Thêm cạnh vào đồ thị ban đầu để trở thành đồ thị Euler.

Int duongdi(int s, int d) ; // tìm đường đi ngắn nhất giữa đỉnh s và t

Bước 4 : Từ đồ thị Euler ta đi tìm chu trình Euler

void Euler(dothi G) ; // tìm chu trình Euler

Thủ tục EULER (G: Matran) được thiết kế như sau.

Procedure EULER(G: Matran, CE: Nganxep);

Trang 14

2.5 Bài toán người đưa thư

2.5.1 Phát biểu bài toán

Bài toán người đưa thư Trung Hoa (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êuchuẩn quốc gia Hoa Kỳ (U.S National Bureau of Standards) đặt cho, vì nó đượcnhà toán học Trung Hoa Mei-Ku Guan nêu ra đầu tiên vào năm 1962

Bài toán giải bằng phương pháp đồ thị Dựng một đồ thị có các cạnhtương ứng với các con đường mà người đưa thư phải đi qua Một chu trình đi quatấ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 ứngvớ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ủangười đưa thư sẽ đi qua một số cạnh hai lần

2.5.2 Giải thuật

B1: Khởi tạo Tính tập đỉnh bậc lẻ U, |U|=2k Tính khoảng cách d(u,v) từng cặp phần tử (u,v) của U, min=vô cùng

Trang 15

B2: Tìm phân hoạch smin có tổng khoảng cách min.

Với mỗi phân hoạch s gồm k cặp phần tử của U thực hiện

{ Tính tổng T(s) = tổng d(u,v)

Nếu T(s)< min thì đặt min:=T(s) và smin:=s}

B3: Lập đồ thị G’=(V,E’), trong đó E’=E hợp smin Bậc các đỉnh trong G’ có bậc chẵn, suy ra đồ thị G’ có chu trình Euler Tìm chu trình Euler G’ và C’

B4: Thay mỗi cạnh (u,v) thuộc smin bằng đường đi min trong G, ta nhận được lộ trình đưa thư ngắn nhất

2.5.3 Giải thuật mịn

B1: Khởi tạo

//Nhập mảng hai chiều cấp n, với n là số đỉnh

Nhập n;

Nhập tên các đỉnh vào mảng Ten[i] \i=1,n

Nhập trị số cung A[Ten[i],Ten[j]] \i,j=1,n

// D la mang chua khoang cách ngắn nhất hai dinh

// thủ tục disjtra được xd phần sau

End;

B2: Tìm phân hoạch Smin có tổng khoảng cách min

Begin

danhdau[i]=danhdau[j]=False;//chưa đánh dấu

Cap[i,j]=False; //chưa đánh dấu

End;

For k:cặp đỉnh lẻ (i,j) thuộc B do

If(i,j chưa đánh dấu)and (cặp i,j chưa đánh dấu) then

Begin

Tính tổng khoảng cách của phân hoạch

Trang 16

//Lưu số thứ tự cặp đỉnh được chọn vào mảng C C[DSC]=k;

if(phần tử của mảng A[Ten[i],Ten[j]] <>0)then

//lưu cặp đỉnh vào mảng dau1[t],cuoi1[t]

while (i<=t-1) và (chưa gặp cạnh có đầu là x)do i:=i+1;

if cạnh có đầu là x then //tìm được đỉnh kề x

Trang 17

//c là số đỉnh trong chu trình Euler

While (j<=c) và (cặp đỉnh liền nhau j,j+1 ko thuộc Smin) do

// chia mang CE thanh hai mang con de them vao giua hai mang con // phan duong di thay the duong di ao.

K:=0;

For q:=j+1 to c do // c la so dinh trong mang ce

Begin K:=k+1; ce1[k]:=ce[q] end;

// Dua stack vao sau doan ce bi cat

For h := dodaiP1 downto 1 do

Begin P1[h]ce end;

Nối ce1 vào sau ce;

End.

Ngày đăng: 24/03/2015, 08:51

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w