Đồ 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 1TRƯỜ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 2LỜ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 3LỜ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 4MỤ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 52.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 6DANH 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 7DANH 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 93 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 106 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 11dụ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 12Giả 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 141.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 15liê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 đó: X1X2 =
và U1U2 = Khi đó: X = X1X2
U = U1U2 Thì G = <X, U> là đồ thị có 2 thành phần liên thông G1, G2
Trang 16Hì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 171.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
nó
Đị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 A A 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 191.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 20Ví 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 22Chươ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 24Nế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 252.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 27Trước hết thăm đỉnh 1 và đẩy nó vào ngăn xếp
5)
6)
Trang 282.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 30Bả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)