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

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

16 889 1

Đ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 16
Dung lượng 123,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đị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à đư

Trang 1

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 2

- Đề 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ủa giáo viên

1 Nguyễn Duy Linh

2 Nguyễn Thị Hà Phương

3 Nguyễn Trần Sỹ

4 Võ Phi Thanh

5 Hoàng Công Tiến

6 Hoàng Đình Tuyền

Trang 3

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

(Sỹ)

Trang 4

CHƯƠNG 2

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

(Thanh+ Phương)

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.

Ví dụ Đồ thị

Có chu trình Euler khởi đầu từ đỉnh 1, đi qua tất cả các cạnh và dỉnh của đồ thị, mỗi cạnh không quá 1 lần và về lại đỉnh 1: (1, 3, 6, 5, 2, 4, 3,

2, 1)

1

4

Trang 5

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

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

Đồ thị G có chu trình Euler khi và chỉ khi G liên thông và mọi đỉnh có bậc chẵn khác 0

Chứng minh

(i) (): Giả sử G có chu trình Euler và v là đỉnh bất kỳ của G Khi đó chu trình Euler đến v theo cạnh e thì ra khỏi v bằng cạnh e’  e Do đó bậc của v phải là số chẵn G hiển nhiên là liên thông

(ii) (): Giả sử G liên thông và mọi đỉnh có bậc chẵn khác 0 Ta chứng minh 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à

1 khuyê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

1 trong ba khả năng sau:

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 chu trì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

Trang 6

G’ có 3 thành phần liên thông G 1 , G 2 và G 3 Không mất tính tổng

quát giả sử G1 chứa a, G2 chứa b và G3 chứa c G1 có chu trình Euler C1,

G2 có chu trình Euler C2 , G3 có chu trình Euler C3 Ta xây dựng chu trình Euler C của G như sau Xuất phát từ đỉnh a đi theo chu trì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) đến đỉnh c, từ c đi theo chu trình C3 quay về c, sau đó đi theo cạnh y=(c,a) quay về a

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

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

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’ Thay cạnh z C’ bằng cạnh x và y ta thu được chu trình Euler C của G

G’ có 2 thành phần liên thông G1 và G2 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 Thay cạnh zC2 bằng các cạnh x và y ta có chu trình C2’ Nối C2’ với C1 ta thu được

chu trình Euler C của G (đpcm)

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 đỉnh bậc lẻ Theo giả thiết quy nạp G’ có n-1 đường đi phủ G’ Gọi P là đường đi qua cạ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 (đpcm)

Trang 7

Bây giờ xét đồ thị có hướng G = (V, A) Ký hiệu

R = {u  V : dI(v) = dO(v)}

S = {u  V : dI(v) > dO(v)}

T = {u  V : dI(v) < dO(v)}

Từ bổ đề bắt tay ta có

V

v

O v

d ( ) = 

V v

I v

d ( )    

S v

O

I v d v

T v

I

O v d v

d ( ) ( )

Ta ký hiệu

S v

O

I v d v

d ( ) ( ) =   

T v

I

O v d v

d ( ) ( )

2.2.3 Định lý 3

(i) Đồ thị có hướng G có chu trình có hướng Euler khi và chỉ khi G liên thô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)

Ví dụ: Đồ thị

Không có chu trình Euler Ta có

R={u  V | dI(v) = dO(v) =  }

C D

C D

Trang 8

S= {u  V | dI(v) > dO(v) } = {C, D}

T= { u  V | dI(v) < dO(v) } = {A, B}

S v

O

I v d v

d ( ) ( ) =   

T v

I

O v d v

d ( ) ( ) = 2 Vậy số đường đi có hướng tối thiểu phủ đồ thị là k=2, ví dụ 2 đường

đi sau

(A,C,D,A,B,C) và (B,D)

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úng khỏ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 sang bước (5)

(5) Nếu H và C không có đỉnh chung, thì kết luận không có chu

trình Euler, kết thúc.

Nếu H và C có đỉnh chung Chọn v là đỉnh chung của H và C Đặt

k := k+1 Quay lại bước (2)

+ Ví dụ

Cho G là đồ thị Thanh mã tấu Mohammed.

e

f

k h i j

g

b a

Trang 9

Ta áp dụng thuật toán 1 để tìm chu trình Euler

(1) Đặt H := G, k := 1, C := , v := f

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

C 1 = (f,g,k,h,i,e,b,c,d,f)

Đặt C = C  C1 = (f,g,k,h,i,e,b,c,d,f)

(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:

e

j

g d

b a

e

f

k h i j

g

b a

Trang 10

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ại nố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)

+ Đầ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) Chọn đỉnh xuất phát bất kỳ v0 Đặt v1 := v0 , C := (v0) H := G (2) Nếu H = , thì kết luận C là chu trình Euler, kết thúc Ngược

lại sang bước (3)

(3) Chọn cạnh đi tiếp:

- Trường hợp đỉnh v1 là đỉnh treo: Tồn tại duy nhất đỉnh v2 kề v1 Chọn cạnh (v1 , v2 ) Sang bước (4)

- 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)

Trang 11

1

2

6

5

+ 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)

+ Ví dụ

Domino là một hình chữ nhật chia thành 2 hình vuông mỗi hình mang một trong các số 0,1,2,3,4,5,6 Hai hình vuông trên một domino có thể mang cùng một số Ví dụ

Có tất cả 28 quân Dômino khác nhau Chứng minh rằng ta có thể sắp xếp các domino thành hình tròn sao cho hai hình vuông kề nhau trên 2 domino khác nhau sẽ mang cùng số

Giải:

Ta lập đồ thị 7 đỉnh

v0, v1, v2, v3, v4, v5, v6

Mỗi đỉnh vi ứng với số i, i=0, ,6 Mỗi đỉnh có thể nối với các đỉnh còn lại và chính nó để tạo thành domino

Ta có đồ thị sau

v3

7

v5

v4

v2

v1

Trang 12

Liên thông với tất cả các đỉnh có bậc chẵn bằng 6 Do vậy tồn tại chu trình Euler Mỗi chu trình Euler sẽ cho tương ứng một cách xếp

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

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

- Biểu diễn đồ thị G bằng cấu trúc dữ liệu bởi một ma trận trọng số

Anxn Trong đó n là số đỉnh

- Sử dụng một ngăn xếp Stack[max] để lưu các đỉnh đã đi qua

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

Giải thuật :

Bước 1: Kiểm tra đồ thị có phải là đồ thị liên thông hay không, nếu là

đồ thị liên thông thì chuyển sang bước 2

Hàm lienthong(): Boolean trả về kết quả đúng (True) nều dồ thị liên

thông, sai (False) nếu đồ thị không liên thông

Bước 1 : Kiểm tra đồ thị là đồ thị Euler hay không phải là đồ thị Euler (dựa vào bậc của mỗi đỉnh)

Hàm kiemtraEuler() : Boolean để kiểm tra đồ thị Euler.

- Tìm bậc của tất cả các đỉnh của đồ thị G, nếu đều là bậc chẵn thì G là

đồ thị Euler, ngược lại thì không phải

Bước 2 : Nếu là đồ thị Euler ta đi tìm chu trình Euler

Thủ tục EULER(dothi G) dùng để tìm chu trình Euler, sau khi tìm thì chu trình Euler được lưu trong ngăn xếp CE

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

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

Begin

v, x, top: Int //bien top: dinh stack

top=1;

stack[top]=u; // tim chu trinh bat dau tu dinh u

Do

Trang 13

Begin

V := stack[top]; // v la dinh dau stack

x:=1;

While (x<=n && A[v][x]==0) // tim dinh x ke v

x:=x+1;

if (x>n) // neu khong dinh x nao ke dinh v

Begin

//lay dinh v ra khoi stack va dua dinh v vao ngan xep CE

dCE :=dCE+1; //

CE[dCE] :=v;

top :=top-1;

End

Else // co dinh x ke dinh v

Begin

// dua dinh x vao stack dong thoi xoa canh (v,x) ra khoi do thi.

top:=top+1;

stack[top]:=x;

A[v,x]:=A[x,v]:=0;

End

End while(top<>0); // Ham Euler thuc hien trong khi stack chua rong.

End.

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

Trang 14

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

(Linh+Tuyền)

Trang 15

KẾT LUẬN

Trên cơ sở nghiên cứu kiến thức từ giáo trình “Toán ứng dụng” của Thầy giáo PGS.TSKH Trần Quốc Chiến và một số tài liệu liên quan, nhóm chúng tôi thực hiện đề tài “Chu trình Euler và bài toán người đưa thư ” đã đạt được những kết quả sau:

- Tìm hiểu thuật toán tìm chu trình Euler và thuật 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 của bài toán người đưa thư

- Đề xuất cấu trúc dữ liệu biểu diễn hai bài toán.

- Cài đặt hoàn chỉnh thuật toán bài toán người đưa thư trên ngôn ngữ Pascal

Chúng tôi xin chân thành cảm ơn Thầy giáo PGS.TSKH Trần Quốc Chiến đã tận tình giúp đỡ chúng tôi hoàn thành tiểu luận này

Do trình độ và thời gian hạn chế nên không tránh khỏi khiếm khuyết, rất mong nhận được sự góp ý của Thầy, Cô và các bạn để tiểu luận được hoàn thiện hơn

Trang 16

TÀI LIỆU THAM KHẢO

Giáo trình Toán ứng dụng, Đại học Đà Nẵng 2010.

Giáo trình Lý thuyết đồ thị, Đại học Đà Nẵng 2005.

Thành Toán rời rạc Nhà xuất bản Giáo dục, 1999

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

HÌNH ẢNH LIÊN QUAN

Đồ thị chứa chu trình Euler gọi là  Đồ thị Euler. - Tiểu luận môn toán ứng dụng trong công nghệ Chu trình Euler và bài toán người đưa thư.DOC
th ị chứa chu trình Euler gọi là Đồ thị Euler (Trang 4)
Đồ thị trên có chu trình Euler: (A,B,C,D,A) - Tiểu luận môn toán ứng dụng trong công nghệ Chu trình Euler và bài toán người đưa thư.DOC
th ị trên có chu trình Euler: (A,B,C,D,A) (Trang 7)
Đồ thị liên thông và có các đỉnh bậc chẵn. Ta có chu trình Euler sau - Tiểu luận môn toán ứng dụng trong công nghệ Chu trình Euler và bài toán người đưa thư.DOC
th ị liên thông và có các đỉnh bậc chẵn. Ta có chu trình Euler sau (Trang 11)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w