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

Một số vấn đề ứng dụng của lý thuyết đồ thị

61 580 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 61
Dung lượng 772,89 KB

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 cùng một mạng giao thông.. Dựa trên lý thuyết đồ thị, một số bài

Trang 1

TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2 KHOA CÔNG NGHỆ THÔNG TIN

-*** -

DƯƠNG THỊ LIỄU

MỘT SỐ VẤN ĐỀ ỨNG DỤNG CỦA LÝ THUYẾT ĐỒ THỊ

KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC

Chuyên ngành: Tin học

HÀ NỘI - 2013

Trang 2

LỜI CẢM ƠN

Trong suốt quá trình học tập và làm khóa luận, em nhận được sự giúp

đỡ, tạo điều kiện của các thầy, cô giáo khoa Công nghệ Thông tin Bên cạnh

đó là sự giúp đỡ rất nhiều của người thân, bạn bè để em có được kết quả ngày hôm nay

Trước hết em xin tỏ lòng kính trọng cảm ơn thầy giáo TS.Trịnh Đình Vinh, thầy đã tận tình chỉ bảo, hướng dẫn cho em hoàn thành được bản khóa luận này

Xin cảm ơn các thầy, cô giáo trong khoa Công nghệ Thông tin – trường Đại học sư phạm Hà Nội 2, các bạn trong lớp K35 – Tin học đã tận tình giúp

đỡ, giới thiệu tài liệu, sách tham khảo để khóa luận được hoàn thành đúng thời hạn

Cuối cùng là lòng biết ơn đến sự quan tâm, chăm sóc và tạo điều kiện của gia đình để con tập trung vào việc học tập và hoàn thành bản khóa luận này

Do thời gian thực hiện không nhiều nên khóa luận không tránh khỏi những thiếu sót Rất mong nhận được sự đóng góp của thầy cô giáo và các bạn để khóa luận được hoàn thiện hơn

Em xin chân thành cảm ơn!

Hà Nội, tháng 05 năm 2013

Sinh viên

DƯƠNG THỊ LIỄU

Trang 3

LỜI CAM ĐOAN

Tên em là: DƯƠNG THỊ LIỄU

Sinh viên lớp: K35 – Tin học, khoa Công nghệ thông tin, trường Đại học

sư phạm Hà Nội 2

Em xin cam đoan:

1 Đề tài: “Một số vấn đề ứng dụng của lý thuyết đồ thị” là sự nghiên cứu của riêng em, dưới sự hướng dẫn của thầy giáo TS Trịnh Đình Vinh

2 Khóa luận hoàn toàn không sao chép của tác giả nào khác

Nếu sai em xin hoàn toàn chịu trách nhiệm

Hà Nội, tháng 05 năm 2013 Người cam đoan

DƯƠNG THỊ LIỄU

Trang 4

MỤC LỤC

LỜI CẢM ƠN

LỜI CAM ĐOAN

DANH MỤC HÌNH VẼ

DANH MỤC BẢNG

MỞ ĐẦU 1

Chương 1: LÝ THUYẾT ĐỒ THỊ 5

1.1 Đồ thị 5

1.1.1 Định nghĩa đồ thị 5

1.1.2 Đồ thị đơn 6

1.1.3 Đa đồ thị 6

1.1.4 Giả đồ thị 6

1.2 Các loại đồ thị 7

1.2.1 Đồ thị vô hướng 7

1.2.2 Đồ thị có hướng 7

1.2.3 Đồ thị hỗn hợp 7

1.3 Một số khái niệm 7

1.3.1 Cạnh liên thuộc, đỉnh kề, bậc 7

1.3.2 Đường đi và chu trình 8

1.3.3 Đồ thị liên thông 8

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

1.4.1 Biểu diễn bằng ma trận kề 10

1.4.2 Danh sách cạnh (cung) 12

1.4.3 Danh sách kề 13

1.5 Các ứng dụng của lý thuyết đồ thị 14

Chương 2: CHU TRÌNH, ĐƯỜNG ĐI 15

2.1 Chu trình Euler và chu trình Hamilton 15

2.1.1 Chu trình Euler 15

Trang 5

2.1.2 Chu trình Hamilton 18

2.2 Tìm kiếm đường đi trên đồ thị 19

2.2.1 Thuật toán tìm kiếm theo chiều sâu (Depth First Seach) 19

2.2.2 Thuật toán tìm kiếm theo chiều rộng (Breadth First Search) 21

2.2.3 Độ phức tạp tính toán của DFS và BFS 23

2.3 Đường đi ngắn nhất trong đồ thị có trọng số 24

2.3.1 Bài toán đường đi ngắn nhất 24

2.3.2 Các thuật toán 24

2.3.3 Các ứng dụng 29

Chương 3: MỘT SỐ VẤN ĐỀ VỀ CÂY 36

3.1 Các khái niệm và tính chất cơ bản 36

3.1.1 Các khái niệm cơ bản 36

3.1.2 Cây m – phân 37

3.2 Các ứng dụng 37

3.2.1 Mã tiền tố 37

3.2.3 Cây biểu diễn biểu thức 40

3.2.4 Cây quyết định 41

3.2.5 Cây sắp xếp và tìm kiếm 41

Chương 4: XÂY DỰNG CHƯƠNG TRÌNH ỨNG DỤNG 47

4.1 Phát biểu bài toán 47

4.2 Giải quyết bài toán 47

4.2.1 Giải thuật tổng quát 47

4.2.2 Kết hợp “Stack” và “Queue” 48

4.2.3 Cài đặt lớp Cell 49

4.2.4 Hiệu ứng Backtracking trong DFS 50

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 52

TÀI LIỆU THAM KHẢO 54

Trang 6

DANH MỤC HÌNH VẼ

Hình 1.1: Đồ thị 5

Hình 1.2: Ví dụ về một đồ thị 6

Hình 1.3: a Đa đồ thị b Giả đồ thị 6

Hình 1.4: Đồ thị liên thông 9

Hình 1.5: Các loại đồ thị liên thông 9

Hình 1.6: Đồ thịbiểu diễn ma trận kề 10

Hình 1.7: Đồ thị danh sách cạnh (cung) 12

Hình 1.7a: Danh sách kề của đồ thị G1 13

Hình 1.7b: Danh sách kề của đồ thị G2 13

Hình 2.1: Mô hình đồ thị của bài toán 7 cái cầu 15

Hình 2.2: Chu trình Euler vô hướng 16

Hình 2.3: Chu trình Euler vô hướng sau khi đi từ 1 đến 4 17

Hình 2.4: Chu trình Hamilton 18

Hình 2.5: Cây DFS 20

Hình 2.6: Cây BFS 22

Hình 2.7: Sự chuyển đổi trạng thái 30

Hình 2.8: Sơ đồ lưới của giải thuật Viterbi 31

Hình 2.9: Sơ đồ PERT 34

Hình 3.1: Cây 36

Hình 3.2: Mã tiền tố 38

Hình 3.3: Cây biểu diễn nhị phân 39

Hình 3.4: Cây biểu diễn biểu thức 40

Hình 3.5: Cây quyết định 41

Hình 3.6: Cây nhị phân tìm kiếm 42

Hình 3.7: Cây nhị phân đầy đủ 43

Hình 3.8: Câp sắp xếp hòa nhập 44

Hình 3.9: Cây sắp xếp nhanh 46

Hình 4.1: Giao diện chương trình 50

Trang 7

DANH MỤC BẢNG

Bảng 1: Thuật toán DFS 20

Bảng 2: Thuật toán BFS 23

Bảng 3: Các công viêc 34

Bảng 4: Mã Huffman 39

Trang 8

Đồ thị được sử dụng để giải quyết các bài toán trong nhiều lĩnh vực khác nhau Chẳng hạn, đồ thị có thể sử dụng để xác định các mạch vòng trong vấn đề giải tích mạch điện Đồ thị có thể phân biệt các hợp chất hóa học hữu

cơ khác nhau với cùng công thức phân tử nhưng khác nhau về cấu trúc phân

tử hay xác định xem hai máy tính trong mạng có thể trao đổi thông tin được với nhau hay không Đồ 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 cùng một mạng giao thông Đồ thị còn được sử dụng để 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 truyền hình Do đó việc nghiên cứu lý thuyết đồ thị này mang lại nhiều ý nghĩa thực tiễn nhất định

Xuất phát từ tính thực tiễn đó em xin chọn đề tài: “Một số vấn đề ứng dụng của lý thuyết đồ thị”

2 Mục đích chọn đề tài

Mục đích nghiên cứu của đề tài này là tìm hiểu, khảo sát thực nghiệm

và ứng dụng của lý thuyết đồ thị trong các ngành kỹ thuật Dựa trên lý thuyết

đồ thị, một số bài toán như kiểm tra tính liên thông, tìm đường đi ngắn nhất, khắc phục những gói tin bị truyền sai nhờ các giải thuật của đồ thị và xây dựng chương trình minh họa

Trang 9

3 Nhiệm vụ, yêu cầu

Đề tài của khóa luận: “Một số vấn đề ứng dụng của lý thuyết đồ thị” được đặt ra với nhiệm vụ, yêu cầu:

 Nghiên cứu các khái niệm cơ bản nhất của đồ thị, phương pháp biểu diễn đồ thị trên máy tính

 Tìm hiểu các thuật toán tìm đường đi trên đồ thị

 Nghiên cứu các ứng dụng của lý thuyết đồ thị

 Tìm hiểu các khái niệm, tính chất cơ bản của cây và các ứng dụng của nó

 Cài đặt chương trình minh họa ứng dụng của lý thuyết đồ thị

4 Phương pháp nghiên cứu

 Nghiên cứu qua việc đọc sách, báo và các tài liệu liên quan nhằm xây dựng cơ sở lý thuyết của đề tài và các biện pháp cần thiết để giải quyết các vấn đề của đề tài

 Tham khảo các ý kiến của các chuyên gia để có thể thiết kế chương trình phù hợp với thực tiễn

 Thông qua quan sát thực tế, yêu cầu cơ sở của lý luận được nghiên cứu và các kết quả đạt được qua những phương pháp trên

5 Ý nghĩa khoa học và thực tiễn của đề tài

Đề tài giới thiệu hướng nghiên cứu và ứng dụng của lý thuyết đồ thị vào thực tế cuộc sống, một lĩnh vực vẫn còn khá mới ở Việt Nam

Đề tài cũng hướng đến việc đơn giản hóa việc tìm đường đi trên đồ thị Thuật toán tìm đường đi là một thuật toán quan trọng và có ý nghĩa to lớn trong thực tế như tìm lộ trình di chuyển cho bất kỳ đối tượng di động nào như người, xe máy, ô tô Nó mang lại nhiều tiện ích và hiệu quả cho người sử dụng, đặc biệt là hiệu quả về kinh tế, tiết kiệm thời gian, công sức trong việc lựa chọn đường đi cho hợp lý

Trang 10

6 Cấu trúc của khóa luận

Ngoài các phần mở đầu và kết luận khóa luận còn bao gồm các chương: Chương 1: Lý thuyết đồ thị

Nhằm trình bày những khái niệm cơ bản nhất về lý thuyết đồ thị, là cơ

sở tìm hiểu sâu sắc hơn các vấn đề tiếp theo Ngoài các định nghĩa, tính chất

cơ bản của đồ thị, chương này còn trình bày đến một vấn đề quan trọng, đó là cách biểu diễn đồ thị trên máy tính

Chương 2: Chu trình, đường đi

Chương này trình bày những khái niệm về chu trình, đường Euler và chu trình, đường đi Hamilton Tìm hiểu các thuật toán tìm kiếm đường đi trên

đồ thị và các ứng dụng trong truyền tin, trong việc lập lịch công

Chương 3: Một số vấn đề về cây

Trong chương này đề cập tới những điểm chính nhất, cơ bản nhất về cây và tập trung khai thác những ứng dụng của nó.Một số ứng dụng của cây nhị phân như mã tiền tố, mã Huffman, cây biểu diễn biểu thức, cây quyết định, cây sắp xếp và tìm kiếm

Chương 4: Xây dựng chương trình ứng dụng

Đây là chương cuối cùng, chương này sẽ giới thiệu về bài toán tìm đường đi thoát khỏi mê cung Sử dụng thuật toán Breadth First Seach (BFS – Tìm kiếm theo chiều rộng) và Depth First Seach (DFS – Tìm kiếm theo chiều sâu) để tìm đường đi giữa hai điểm trong một mê cung

7 Kết quả đạt được

Khóa luận đã nghiên cứu được các khái niệm cơ bản nhất của đồ thị, các thuật toán tìm đường đi trên đồ thị, ứng dụng của lý thuyết đồ thị và cáckhái niệm, tính chất cơ bản của cây

Khóa luận đã xây dựng được chương trình tìm đường đi thoát khỏi mê cung bằng thuật toán tìm kiếm theo chiều sâu và tìm kiếm theo chiều rộng Tuy nhiên chương trình mới chỉ mang tính chất mô phỏng chưa có được ứng

Trang 11

dụng thực tế Hướng phát triển chương trình trong tương lai thành bài toán tìm đường đi cho người đưa thư, lập trình đường đi cho xe bus

Trang 12

Giả sử X là tập hữu hạn, không rỗng và U X X Bộ G <X, U

được gọi là đồ thị hữu hạn Mỗi phần tử x X gọi là một đỉnh và mỗi phần tử

u (x,y) U gọi là một cạnh của đồ thị G X, U

Xét một cạnh u U khi đó tồn tại hai đỉnh x, y X sao cho u (x,y), thì

nói rằng x nối với y hoặc x và y thuộc u

 Nếu cạnh u (x, y) mà x và y là hai đỉnh phân biệt thì x, y là hai đỉnh

kề nhau

 Nếu cạnh u (x, x) thì u là cạnh có hai đỉnh trùng nhau, gọi đó là một

khuyên

 Nếu cạnhu (x, y) mà x, y là cặp đỉnh có phân biệt thứ tự hay có

hướng từ x đến y thì u là một cung, khi đó x gốc còn y là ngọn hoặc x là đỉnh

ra, y là đỉnh vào

 Khi giữa cặp đỉnh (x, y) có nhiều hơn một cạnh thì những cạnh cùng

cặp đỉnh là những cạnh song song hay là cạnh bội

Trang 13

 Trong thực tế, có thể gặp nhiều vấn đề mà có thể dùng mô hình đồ thị để biểu diễn, như sơ đồ một mạng máy tính, sơ đồ mạng lưới giao thông và sơ đồ thi công một công trình

Ví dụ: Xét một mạng máy tính, có thể biểu diễn mạng này bằng một

mô hình đồ thị, trong đó mỗi máy là một đỉnh, giữa các máy được nối với nhau bằng các dây truyền, chúng tương ứng là các cạnh của đồ thị Một mô hình mạng máy tính như hình 1.2 trong đó có các máy tính A, B, C, D tương ứng là các đỉnh, giữa hai máy được nối trực tiếp với nhau thì tương ứng với một cặp đỉnh kề nhau

Hình 1.2: Ví dụ về một đồ thị

1.1.2 Đồ thị đơn

Đồ thị G  X, U> được gọi là đồ thị đơn nếu giữa hai đỉnh bất kỳ

được nối với nhau bởi không quá một cạnh (cung), tức là đồ thị không có cạnh bội, không có khuyên

1.1.3 Đa đồ thị

Đồ thị G X, U> được gọi là đa đồ thị nếu nó có ít nhất một cặp đỉnh

được nối với nhau bởi hai cạnh (hai cung) trở lên

Trang 14

1.2 Các loại đồ thị

1.2.1 Đồ thị vô hướng

Đồ thị G <X, U gọi là đồ thị vô hướng nếu tất cả các cạnh e U mà

cặp đỉnh thuộc nó e (x, y) X không phân biệt thứ tự Đồ thị vô hướng là đồ

thị không có bất kỳ một cung nào

Ví dụ: như hình 1.3.a là biểu diễn của một đồ thị vô hướng

1.2.2 Đồ thị có hướng

Đồ thịG = <X, U> gọi là đồ thị có hướng nếu tất cả các cạnh e U

mà cặp đỉnh thuộc nó e (x, y) X có phân biệt thứ tự Đồ thị có hướng là đồ

thị mà mọi e (x, y) X đều là cung

1.2.3 Đồ thị hỗn hợp

Đồ thị G= <X, U> vừa có cạnh vô hướng, vừa có cạnh có hướng thì nó

được gọi là đồ thị hỗn hợp, loại đồ thị này rất ít khi được dùng tới

Chú ý rằng vấn đề phân chia đồ thị và các thuật ngữ về đồ thị chỉ mang tính tương đối, hiện nay vẫn còn chưa mang tính thống nhất chuẩn trên nhiều tài liệu

1.3 Một số khái niệm

Như trên định nghĩa đồ thị G = (V, E) là một cấu trúc rời rạc, tức là các tập V và E hoặc là tập hữu hạn, hoặc là tập đếm được, có nghĩa là có thể đánh

số thứ tự 1, 2, 3… cho các phần tử của tập V và E Hơn nữa, đứng trên

phương diện người lập trình cho máy tính thì chỉ quan tâm đến các đồ thị hữu

hạn (V và E là tập hữu hạn) mà thôi

1.3.1 Cạnh liên thuộc, đỉnh kề, bậc

Đối với đồ thị vô hướng G = (V, E) Xét một cạnh e E, nếu e = (u, v)

thì ta nói hai đỉnh u và v là kề nhau (adjacent), cạnh e này liên thuộc (incident) với đỉnh u và v

Với một đỉnh v trong đồ thị, định nghĩa bậc (degree) của v, ký hiệu

deg(v) là số cạnh liên thuộc với v Có thể thấy rằng trên đơn đồ thị thì số cạnh

Trang 15

liên thuộc với v cũng là số đỉnh kề với v

Đối với đồ thị có hướng G = (V, E) Xét một cung e E, nếu e = (u, v)

thì sẽ có u nối tới v và v nối từ u, cung e là đi ra khỏi đỉnh u và đi vào đỉnh

v Đỉnh u khi đó được gọi là đỉnh đầu, đỉnh v được gọi là đỉnh cuối của cung

e

Với mỗi đỉnh v trong đồ thị có hướng, định nghĩa: Bán bậc ra (out – degree) của v ký hiệu deg + (v) là số cung đi ra khỏi nó; bán bậc vào (in –

degree), ký hiệu deg - (v) là số cung đi vào đỉnh đó

1.3.2 Đường đi và chu trình

Đường đi: Một đường đi với độ dài k từ đỉnh u đến đỉnh v là dãy (u =

x 0 , x 1 ,…, v k = v) thỏa mãn (x i , x i+1 ) E (là một cạnh của đồ thị) vớii: (1≤ i ≤ k) Đỉnh u gọi là đỉnh xuất phát, v gọi là đỉnh kết thúc của đường đi Đường đi

không có cạnh nào đi qua hơn một lần gọi là đường đi đơn

Chu trình: Đường đi có đỉnh xuất phát trùng với đỉnh kết thúc gọi là chu trình Tương tự có khái niệm chu trình đơn

1.3.3 Đồ thị liên thông

Cho đồ thị G = <X, U> Hai đỉnh phân biệt x, y X được gọi là liên

thông nếu tồn tại một đường đi nối các đỉnh x, y với nhau Đồ thị G được gọi

là liên thông nếu với hai đỉnh phân biệt bất kỳ trong đồ thị đều là liên thông

Xét 2 đồ thị liên thông

G1 = <X1, U1> và G2 = <X2, U2>

Trong đó: X1X2 = 

và U1U2 =  Khi đó: X = X1X2

U = U1U2 Thì G = <X, U> là đồ thị có 2 thành phần liên thông G1, G2

Trang 16

Hình 1.4: Đồ thị liên thông

Ví dụ như đồ thị trong hình 1.4 có ba thành phần liên thông sau:

G1 = <X1, U1> với X1= {A,B,C} và U1 = {AB, AC, CB}

G2 = <X2, U2> với X2= {D, E} và U2 = {DE}

G3 = <X3, U3> với X3= {F} và U3 = 

Cho đồ thị có hướng G = <X, U>

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

với nó là liên thông

 G là liên thông một chiều nếu với hai đỉnh x, y khác nhau bất kỳ của

G luôn có đường đi x – y hoặc đường đi y – x

 G là liên thông mạnh (liên thông hai chiều) nếu hai đỉnh x, y khác nhau bất kỳ của G đều có đường đi x – y và đường đi y – x

H1 H2 H3

Hình 1.5: Các loại đồ thị liên thông

Ở hình 1.5 đồ thị H1 là liên thông mạnh, giả sử cặp đỉnh (A, C) có chiều

đi từC tới A, đồng thời cũng có chiều đi từ A tới C và bất kỳ các cặp đỉnh khác cũng tương tự như vậy Đồ thị H2 là liên thông một chiều đi từ D tới A

Đồ thị H3 là liênthông yếu vì tồn tại cặp đỉnh (B, C) không có chiều đi B –C

và cũng khôngcó chiều đi C – B, nhưng đồ thị vô hướng tương ứng là liên thông

Trang 17

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

Lĩnh vực đồ thị có nhiều ứng dụng trong thực tế, có thể mô hình nhiều ứng dụng bằng đồ thị và sử dụng máy tính để giải quyết các bài toán về ứng dụng đó Nên việc biểu diễn và lưu trữ đồ thị trên máy tính là một vấn đề khá trọng tâm,phương thức biểu diễn từng loại đồ thị trên máy tính ảnh hưởng đến các giảithuật, phương pháp giải quyết các ứng dụng trên máy tính

1.4.1 Biểu diễn bằng ma trận kề

Phương pháp này dựa trên mối quan hệ giữa các cặp đỉnh, mỗi đồ

thịđược đặt tương ứng với một ma trận vuông cấp n (n là số đỉnh của đồthị) Gọi ma trận kề là A = (a ij ) i, j = 1… n

 Trường hợp G = <X, U> là đồ thị vô hướng với X = {x 1 , x 2 , …, x n }

khi đó mỗi phần tử a ij của ma trận A xác định như sau: a ij = a ji = d, nếu cặp

đỉnh (x i , x j ) có d cạnh nối với nhau Khi cặp đỉnh không có cạnh nào nối với

nhau thì a ij = 0 Khi đó ma trận kề của đồ thị vô hướng là ma trận đối xứng

 Trường hợp G = <X, U> là đồ thị có hướng với X ={x 1 , x 2 , …, x n } thì

mỗi phần tử a ij của A được xác định như sau: đối với mỗi cặp đỉnh (x i , x j ) từ x i

đến x j nếu có d cung thì a ij = d Chú ý a ij = 0 nếu không có cung nào hướng từ

x i đến x j đến Ma trận kề trong trường hợp này là không đối xứng

Trong 2 trường hợp trên, chú ý nếu đỉnh x có một khuyên thì phần tử tương ứng của ma trận kề là a ij = 1

Trang 18

Đối với đồ thị có trọng số mỗi cạnh e = (x i , x j ) được gán một trọng số l(e), còn viết là l(x i , x j ) thì ma trận kề của nó được thay bằng ma trận có trọng

số,

Khi đó mỗi phần tử của ma trận bằng trọng số của cạnh tương ứng: a ij

= l(x i , x j )

Ưu điểm của phương pháp này là dễ dàng xác định được các cặp đỉnh

có kề nhau hay không hoặc rất thuận tiện khi tìm số bậc của mỗi đỉnh Việc truy cập phần tử của ma trận kề qua chỉ số không phụ thuộc vào số đỉnh của

đồ thị

Nhược điểm lớn nhất của phương pháp này là không phụ thuộc vào số

cạnh của đồ thị, luôn phải sử dụng n 2 đơn vị bộ nhớ để lưu trữ ma trận kề của

Định lý: Nếu G = <X, U> là đa đồ thị với A = (a ij ) là ma trận kề tương

ứng, thì số đường đi khác nhau từ đỉnh x i đến đỉnh x j có độ dài s bằng phần tử

P ij của ma trận tích A A   AA s  (Pij)

Ví dụ: Trong một số hệ thống thông tin khi được mô hình bằng đồ thị

có thể thực hiện tốt một số công tác kiểm kỹ thuật Ví dụ khi biểu diễn một mạng máy tính bằng đồ thị, giả sử có hai máy nào đó mà thông tin truyền giữa chúng là quan trọng, cần tiến hành kiểm tra xem đã có đường truyền dự phòng giữa chúng không Xét ở góc độ đồ thị thì cần kiểm tra xem số đường đi giữa cặp đỉnh tương ứng với hai máy đó, nếu có số đường đi lớn hơn một là đã có đường truyền dự phòng

Trang 19

1.4.2 Danh sách cạnh (cung)

Cho đồ thị G = <X, U> với số cạnh m, số đỉnh n Nếu m < 6n thì G

thường được biểu diễn dưới dạng danh sách cạnh (cung)

Theo cách này danh sách tất cả các cạnh (cung) của đồ thị vô hướng (có

hướng) Mỗi cạnh (cung) e = (x, y) của đồ thị tương ứng với hai biến Dau[e],

Ưu điểm của danh sách cạnh là tiết kiệm được không gian lưu trữ bởi

nó chỉ cần sử dụng 2m ô nhớ để lưu danh sách cạnh.Trong một số trường hợp,

nếu xét tất cả các cạnh của đồ thị thì cài đặt trên danh sách cạnh làm cho việc duyệt các cạnh dễ dàng hơn

Nhược điểm của phương pháp này là khi xác định những đỉnh nào của

đồ thị là kề với một đỉnh cho trước, sẽ phải làm cỡ m phép so sánh, điều đó

khá tốn thời gian trong trường hợp đồ thị dày (nhiều cạnh)

Trang 20

Ví dụ: Ở hình 1.7 đồ thị G 1 và G 2 được biểu diễn bằng danh sách kề như sau:

Danh sách kề có ưu và nhược điểm:

 Ưu điểm của danh sách kề là đối với việc duyệt tất cả các đỉnh kề với

một đỉnh v cho trước là hết sức dễ dàng Việc duyệt tất cả các cạnh cũng đơn

giản vì một cạnh thực ra là nối một đỉnh với một đỉnh khác kề với nó

Trang 21

 Nhược điểm của cách biểu diễn này là thời gian cần thiết để xác định

có một cạnh đi từ đỉnh x i tới đỉnh x j có hay không mất O(n) Cách này thích

hợp cho các thuật toán mà cấu trúc đồ thị hay thay đổi như thêm bớt các cạnh

1.5 Các ứng dụng của lý thuyết đồ thị

Lý thuyết đồ thị được sử dụng để giải quyết các bài toán trong nhiều lĩnh vực khác nhau:

 Tìm đường đi ngắn nhất giữa hai thành phố

 Xác định xem 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

 Xác định nối mạng máy tính sao cho tổng chi phí là nhỏ nhất

 Khắc phục những gói tin bị truyền sai

 Lập trình chơi cờ Ca rô

 Bài toán lập lịch thi công các công đoạn trong một công trình thì công lớn

 Phân bố tần số cho các trạm phát thanh và truyền hình

 Xác định các mạch vòng trong vấn đề giải tích mạch điện

 Phân biệt các hợp chất hóa học hữu cơ khác nhau với cùng công thức phân tử nhưng khác nhau về cấu trúc phân tử

 Giải các bài toán lập thời khóa biểu,

Lý thuyết đồ thị có rất nhiều ứng dụng trong các ngành kỹ thuật Ở các chương tiếp theo sẽ đi tìm hiểu cụ thể một vài ứng dụng đặc trưng của lý thuyết đồ thị

Trang 22

Chương 2: CHU TRÌNH, ĐƯỜNG ĐI

2.1 Chu trình Euler và chu trình Hamilton

2.1.1 Chu trình Euler

a) Bài toán 7 cái cầu

Thành phố Konigsberg thuộc Phổ (nay là Kaliningrad thuộc Cộng hòa Nga), được chia làm 4 vùng bằng các nhánh sông Pregel Các vùng này gồm 2 vùng bên bờ sông (B, C), đảo Kneiphof (A) và một miền nằm giữa hai nhánh sông Pregel (D) Vào thế kỉ XVIII, người ta đã xây 7 chiếc cầu nối những vùng này với nhau Người dân ở đây tự hỏi: Liệu có cách nào xuất phát tại một địa điểm trong thành phố, đi qua 7 chiếc cầu, mỗi chiếc đúng một lần rồi quay trở về nơi xuất phát không?

Nhà toán học Thụy Sĩ Leonhard Euler đã giải bài toán này và có thể coi đây là ứng dụng đầu tiên của Lý thuyết đồ thị, ông đã mô hình hóa sơ đồ 7 cái cầu bằng một đa đồ thị, 4 vùng được biểu diễn bằng 4 đỉnh, các cầu là các cạnh Bài toán tìm đường qua 7 cầu, mỗi cầu đúng một lần có thể tổng quát hóa bằng bài toán: Có tồn tại chu trình đơn trong đa đồ thị chứa tất cả các cạnh?

Hình 2.1: Mô hình đồ thị của bài toán 7 cái cầu

Trang 23

 Một đồ thị có đường đi Euler được gọi là đồ thị nửa Euler

đều có bán bậc ra bằng bán bậc vào

d) Chu trình Euler vô hướng (mọi đỉnh đều có bậc chẵn)

Xuất phát từ một đỉnh, chọn một cạnh liên thuộc với nó để đi tiếp theo hai nguyên tắc sau:

 Xóa bỏ cạnh đã đi qua

 Chỉ đi qua cầu khi không còn cạnh nào khác để chọn

Và cứ chọn cạnh đi một cách thoải mái như vậy cho tới khi không đi tiếp được nữa, đường đi tìm được là chu trình Euler

Trang 24

Nếu xuất phát từ đỉnh 1, có hai cách đi tiếp: hoặc sang 2 hoặc sang 3, giả sử ta sẽ sang 2 và xóa cạnh (1, 2) vừa đi qua Từ 2 chỉ có duy nhất là sang

4, nên cho dù (2, 4) là cầu ta cũng phải đi sau đó xóa luôn cạnh (2, 4) Đến đây, các cạnh còn lại của đồ thị có thể vẽ như hình 2.3 bằng nét liền, các cạnh

đã bị xóa được vẽ bằng nét đứt

Hình 2.3: Chu trình Euler vô hướng sau khi đi từ 1 đến 4

Bây giờ đang đứng ở đỉnh 4 thì có 3 cách đi tiếp: sang 3, sang 5 hoặc sang 6 Vì (4, 3) là cầu nên sẽ không đi theo cạnh (4, 3) mà sẽ đi (4, 5) hoặc (4, 6) Nếu đi theo (4, 5) và cứ tiếp tục đi như vậy, sẽ được chu trình Euler là

<1, 2, 4, 5, 7, 8, 6, 4, 3, 1> Còn đi theo (4, 6) sẽ tìm được chu trình Euler là:

 Thứ nhất, nếu nói cạnh (u, v) thì hiểu là cạnh nối đỉnh u và đỉnh v trên

đồ thị vô hướng, hiểu là cung nối từ đỉnh u tới đỉnhv trên đồ thị có hướng

 Thứ hai, gọi cạnh (u, v) là “một đi không trở lại” nếu như từ u đi tới v theo cạnh đó, sau đó xóa cạnh đó đi thì không có cách nào từ v quay lại u

Vậy thì thuật toán Fleury tìm chu trình Euler có thể mô tả như sau: Xuất phát từ một đỉnh, đi một cách tùy ý theo các cạnh tuântheo hai nguyên tắc: Xóa bỏ cạnh vừa đi qua và chỉ chọn cạnh “một đi không trở lại” nếu như không còn cạnh nào khác để chọn

Trang 25

2.1.2 Chu trình Hamilton

a) Định nghĩa

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

 Chu trình Hamilton là chu trình đi qua mỗi đỉnh của đồ thị đúng một lần

 Đồ thị có chu trình Hamilton được gọi là đồ thị Hamilton

 Đồ thị có đường đi Hamilton được gọi là nửa Hamilton

Có thể phát biểu một cách hình thức: Chu trình Hamilton là chu trình xuất phát từ một đỉ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 đỉ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 hai lần

Ví dụ: Xét 3 đơn đồ thị G1, G2, G3 như trong hình 2.4

Định lý Dirac (1952): Đồ thị vô hướng G có n đỉnh (n 3) Khi đó nếu

mọi đỉnh v của G đều có deg(v) n/2 thì G có chu trình Hamilton Đây là một

điều kiện đủ để một đồ thị có chu trình Hamilton

Trang 26

Đồ thị có hướng G liên thông mạnh và có n đỉnh Nếu deg + (v) n/2 và deg - (v) n/2 với mọi đỉnh v thì G có chu trình Hamilton.

2.2 Tìm kiếm đường đi trên đồ thị

2.2.1 Thuật toán tìm kiếm theo chiều sâu (Depth First Seach)

 Tư tưởng của thuật toán có thể trình bày như sau: Bắt đầu từ s, mọi đỉnh y kề với s tất nhiên sẽ đến được từ s Với mỗi đỉnh u đó, những đỉnh v kề với u cũng đến được từ s, … Ý tưởng đó gợi ý viết một thủ tục đệ quy DFS(u)

mô tả việc duyệt từ đỉnh u bằng cách thông báo thăm đỉnh u và tiếp tục quá trình duyệt DFS(v) với v là một đỉnh chưa thăm kề với u

 Để quá trình duyệt không lặp lại bất kì đỉnh nào, dùng kỹ thuật đánh dấu, khi thăm một đỉnh sẽ đánh dấu đỉnh đó lại để các bước duyệt đệ quy kế tiếp không thăm lại đỉnh đó nữa

 Quá trình này có thể mô tả bởi thủ tục đệ quy sau:

Procedure DFS(v);

(* Tìm kiếm theo chiều sâu bắt đầu từ đỉnh v;

Các biến Chuaxet, Ke là biến toàn cục *)

begin

Thăm_đỉnh(v);

Chuaxet[v]:= false;

for u Ke(v) do

if Chuaxet[u] then DFS(u);

end; (* Đỉnh v là đã duyệt xong *)

+ Khi đó, tìm kiếm theo chiều sâu trên đồ thị được thực hiện nhờ thuật toán sau:

Begin

(* Khởi tạo *)

for v V do Chuaxet[u]:= true;

for v V do

Trang 27

Trước hết thăm đỉnh 1 và đẩy nó vào ngăn xếp

5)

6)

Trang 28

2.2.2 Thuật toán tìm kiếm theo chiều rộng (Breadth First Search)

Ý tưởng của phương pháp cài đặt này là “lập lịch” duyệt các đỉnh.Việc thăm một đỉnh sẽ lên lịch duyệt các đỉnh kề nó sao cho thứ tự duyệt là ưu tiên

chiều rộng (đỉnh nào gần s hơn sẽ được duyệt trước) Ví dụ: Bắt đầu thăm đỉnh s Việc thăm đỉnh s sẽ phát sinh thứ tự duyệt những đỉnh (x 1 , x 2 , …, x q )

kề với s (những đỉnh gần s nhất) Khi thăm đỉnh x 1 sẽ lại phát sinh yêu cầu

duyệt những đỉnh (u 1 , u 2 …, u q ) kề với x 1 Nhưng rõ ràng các đỉnh u này “xa” s hơn những đỉnh x nên chúng chỉ được duyệt khi tất cả những đỉnh x đã duyệt xong Tức là thứ tự duyệt đỉnh sau khi đã thăm x 1 sẽ là: (x 2 , x 3 ,…, x p , u 1 , u 2 ,

…, u q )

Giả sử có một danh sách chứa những đỉnh đang “chờ” thăm Tại mỗi bước, thăm một đỉnh đầu danh sách và cho những đỉnh chưa “xếp hàng” kề với nó xếp hàng thêm vào cuối danh sách Chính vì nguyên tắc đó nên danh sách chứa những đỉnh đang chờ sẽ được tổ chức dưới dạng hàng đợi

 Thủ tục có thể được mô tả như sau:

Procedure BFS(v);

(* Tìm kiếm theo chiều rộng bắt đầu từ đỉnh v;

Các biến Chuaxet, Ke là biến toàn cục *)

Trang 29

 Có thể có nhiều đường đi từ s tới f nhưng thuật toán BFS luôn trả về

một đường đi ngắn nhất (theo nghĩa đi qua ít cạnh nhất)

Trang 30

Bảng 2: Thuật toán BFS

Để ý thứ tự các phần tử lấy ra khỏi hàng đợi, đầu tiên là 1; sau đó đến

2, 3; rồi mới tới 4, 5; cuối cùng là 6 Rõ ràng là đỉnh gần shơn sẽ được duyệt

trước Và như vậy có nhận xét: Các thuật toán trên đồ thị hợp lưu vết tìm

đường đi thì đường đi từ s tới f sẽ là đường đi ngắn nhất (theo nghĩa qua ít

cạnh nhất)

2.2.3 Độ phức tạp tính toán của DFS và BFS

Quá trình tìm kiếm trên đồ thị bắt đầu từ một đỉnh có thể thăm tất cả các đỉnh còn lại, khi đó cách biểu diễn đồ thị có ảnh hưởng lớn tới chi phí về thời gian thực hiện giải thuật:

 Nếu biểu diễn đồ thị bằng danh sách kề, cả hai thuật toán BFS và

DFS đều có độ phức tạp tính toán là O(n + m) = O(max(n, m)), với n là số đỉnh, m là số cạnh của đồ thị.Đây là cách cài đặt tốt nhất

 Nếu biểu diễn đồ thị bằng ma trận kề thì độ phức tạp tính toán trong

trường hợp này là O(n + n 2 ) = O(n 2 )

 Nếu biểu diễn đồ thị bằng danh sách cạnh, thao tác duyệt những

đỉnh kề với đỉnh u sẽ dẫn tới việc phải duyệt qua toàn bộ danh sách cạnh, đây là cài đặt tồi nhất, nó có độ phức tạp tính toán là O(n.m)

từ hàng đợi)

Hàng đợi (sau khi lấy u ra)

Ngày đăng: 08/11/2015, 20:02

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w