Trong toán học và tin học, lý thuyết đồ thị (tiếng Anh: graph theory) nghiên cứu các tính chất của đồ thị. Một cách không chính thức, đồ thị là một tập các đối tượng được gọi là các đỉnh (hoặc nút) nối với nhau bởi các cạnh (hoặc cung). Cạnh có thể có hướng hoặc vô hướng. Đồ thị thường được vẽ dưới dạng một tập các điểm (các đỉnh nối với nhau bằng các đoạn thẳng (các cạnh). Đồ thị biểu diễn được rất nhiều cấu trúc, nhiều bài toán thực tế có thể được biểu diễn bằng đồ thị. Ví dụ, cấu trúc liên kết của một website có thể được biểu diễn bằng một đồ thị có hướng như sau: các đỉnh là các trang web hiện có tại website, tồn tại một cạnh có hướng nối từ trang A tới trang B khi và chỉ khi A có chứa 1 liên kết tới B. Do vậy, sự phát triển của các thuật toán xử lý đồ thị là một trong các mối quan tâm chính của khoa học máy tính. Cấu trúc đồ thị có thể được mở rộng bằng cách gán trọng số cho mỗi cạnh. Có thể sử dụng đồ thị có trọng số để biểu diễn nhiều khái niệm khác nhau. Ví dụ, nếu đồ thị biểu diễn một mạng đường giao thông, các trọng số có thể là độ dài của mỗi con đường. Một cách khác để mở rộng đồ thị cơ bản là quy định hướng cho các cạnh của đồ thị (như đối với các trang web, A liên kết tới B, nhưng B không nhất thiết cũng liên kết tới A). Loại đồ thị này được gọi là đồ thị có hướng. Một đồ thị có hướng với các cạnh có trọng số được gọi là một lưới. Các lưới có nhiều ứng dụng trong khía cạnh thực tiễn của lý thuyết đồ thị, chẳng hạn, phân tích lưới có thể dùng để mô hình hoá và phân tích mạng lưới giao thông hoặc nhằm phát hiện hình dáng của Internet (Xem thêm các ứng dụng đưới đây. Mặc dù vậy, cũng nên lưu ý rằng trong phân tích lưới, thì định nghĩa của khái niệm lưới có thể khác nhau và thường được chỉ ra bằng một đồ thị đơn giản.)
Phần LÝ THUYẾT ĐỒ THỊ Graph Theory Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ môn KHMT, Nội dung Chương Các khái niệm – Đồ thị vơ hướng có hướng – Các thuật ngữ – Một số dạng đồ thị vô hướng đặc biệt Chương Biểu diễn đồ thị – Ma trận kề, ma trận trọng số, Ma trận liên thuộc đỉnh cạnh – Danh sách cạnh, Danh sách kề Chương Duyệt đồ thị – Tìm kiếm theo chiều sâu; Tìm kiếm theo chiều rộng – Tìm đường kiểm tra tính liên thơng Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ môn KHMT, Nội dung Chương Cây khung đồ thị – Cây tính chất – Cây khung đồ thị – Bài toán khung nhỏ Chương Bài toán đường ngắn – Phát biểu toán – Đường ngắn xuất phát từ đỉnh (Thuật toán Dijkstra, Ford-Bellman) – Đường ngắn đồ thị khơng có chu trình – Đường ngắn cặp đỉnh (Thuật toán Floyd) Chương Bài toán luồng cực đại mạng – – – – Mạng, luồng toán luồng cực đại Định lý Ford-Fulkerson Thuật toán Ford-Fulkerson Một số ứng dụng Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ môn KHMT, Chương CÁC KHÁI NIỆM CƠ BẢN Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ môn KHMT, Chương CÁC KHÁI NIỆM CƠ BẢN 1.1 Đồ thị thực tế 1.2 Các loại đồ thị 1.3 Bậc đỉnh 1.4 Đồ thị 1.5 Đồ thị đẳng cấu 1.6 Đường chu trình 1.7 Tính liên thơng 1.8 Một số loại đồ thị đặc biệt 1.9 Tô màu đồ thị Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ mơn KHMT, Đồ thị gì? Khơng phải • Trong tốn học đời thường hiểu là: Bản vẽ hay Sơ đồ biểu diễn liệuKhông nhờ sửphải dụng hệ thống toạ độ ta muốn đề c • Trong tốn rời rạc: Đây cấu trúc rời rạc có tính trực quan cao, tiện ích để biểu diễn quan hệ Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ môn KHMT, Các ứng dụng thực tế đồ thị • Có tiềm ứng dụng nhiều lĩnh vực (Đồ thị dùng để biểu diễn quan hệ Nghiên cứu quan hệ đối tượng mục tiêu nhiều lĩnh vực khác nhau) • Ứng dụng mạng máy tính, mạng giao thơng, mạng cung cấp nước, mạng điện,…) lập lịch, tối ưu hoá luồng, thiết kế mạch, quy hoạch phát triển • Các ứng dụng khác: Phân tích gen, trị chơi máy tính, chương trình dịch, thiết kế hướng đối tượng, … Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ môn KHMT, Mối liên hệ môn học 461 373 413 321 142 415 410 322 143 370 326 341 417 378 Đỉnh = mơn học Cạnh có hướng = đk tiên Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ môn KHMT, 421 401 Biểu diễn mê cung S S B E E Đỉnh = phòng Cạnh = cửa thơng phịng hành lang Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ môn KHMT, Biểu diễn mạch điện (Electrical Circuits) Nguồn Đỉnh = nguồn, công tắc, điện trở, … Cạnh = đoạn dây nối Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ môn KHMT, Cơng tắc Điện trở 10 Phân tích DFS • Vòng lặp dòng 1-2 5-7 đòi hỏi thời gian (|V|), chưa tính thời gian thực lệnh DFS(v) • DFS(v) thực đỉnh trắng vV sau thăm tơ màu xám Các dòng 3-6 DFS(v) thực |Adj[v]| lần Vậy thời gian tổng cộng DFS(v) vV|Adj[v]| = (|E|) • Do thời gian DFS (|V|+|E|) • Thuật tốn đồ thị có đánh giá thời gian gọi thuật toán thời gian tuyến tính Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ môn KHMT, 261 CÁC ỨNG DỤNG CỦA DFS • Tính liên thơng đồ thị • Tìm đường từ s đến t • Phát chu trình • Kiểm tra tính liên thơng mạnh • Định hướng đồ thị Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ mơn KHMT, 262 Bài tốn tính liên thơng • Bài tốn: Cho đồ thị vơ hướng G = (V,E) Hỏi đồ thị gồm thành phần liên thông, thành phần liên thông gồm đỉnh nào? • Giải: Sử dụng DFS (BFS) : – Mỗi lần gọi đến DFS (BFS) chương trình sinh thành phần liên thơng Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ mơn KHMT, 263 DFS giải tốn liên thơng (* (*Main MainProgram*) Program*) 1.1 for foruuVVdo 2.2 id[u] id[u] 00 3.3 cnt cnt 00 (*(*cnt cnt––số sốlượng lượngtplt tplt*)*) 4.4 for foruuVVdo 5.5 ififid[u] id[u]==00 6.6 then thencnt cnt cnt cnt+1 +1 7.7 DFS-Visit(u) DFS-Visit(u) Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ môn KHMT, DFS-Visit(u) DFS-Visit(u) 1.1 id[u] id[u] cnt cnt 2.2 for foreach eachvvAdj[u] Adj[u]do 3.3 ififid[v] id[v]==00 4.4 then thenDFS-Visit(v) DFS-Visit(v) 264 Tìm đường • Bài tốn tìm đường – Input: Đồ thị G = (V,E) xác định danh sách kề hai đỉnh s, t – Đầu ra: Đường từ đỉnh s đến đỉnh t, khẳng định không tồn đường từ s đến t • Thuật tốn: Thực DFS(s) (hoặc BFS(s)) – Nếu [t] = NIL khơng có đường đi, trái lại ta có đường t : [t] : [[ t]] : : s Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ môn KHMT, 265 DFS giải toán đường (* (*Main MainProgram*) Program*) 1.1 for foruuVVdo 2.2 color[u] color[u] white white 3.3 [u] [u] NIL NIL 4.4 DFS-Visit(s) DFS-Visit(s) Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ môn KHMT, DFS-Visit(u) DFS-Visit(u) 1.1 color[u] color[u] GRAY GRAY (* (*Thăm Thămđỉnh đỉnhuu*) *) 2.2 for foreach eachvvAdj[u] Adj[u]do 3.3 ififcolor[v] color[v]==WHITE WHITE 4.4 then then[v] [v] uu 5.5 DFS-Visit(v) DFS-Visit(v) 266 DFS Chu trình • Bài tốn: Cho đồ thị G=(V,E) Hỏi G có chứa chu trình hay khơng? • Định lý: Đồ thị G khơng chứa chu trình trình thực DFS ta khơng phát cạnh ngược • Chứng minh: – Nếu G khơng chứa chu trình rõ ràng khơng có cạnh ngược (bởi tồn cạnh ngược dẫn đến phát chu trình) – Nếu khơng có cạnh ngược G khơng chứa chu trình (acyclic) Thực • Khơng có cạnh ngược tức có cạnh • Nếu có cạnh G rừng • Vậy G khơng chứa chu trinh • Như DFS áp dụng để giải tốn đặt Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ mơn KHMT, 267 DFS chu trình • Cần phải điều chỉnh để phát chu trình? (* (*Main MainProgram*) Program*) 1.1 for foruuVVdo 2.2 color[u] color[u] white white 3.3 [u] [u] NIL NIL 4.4 time time 00 5.5 for foruuVVdo 6.6 ififcolor[u] color[u]==white white 7.7 then thenDFS-Visit(u) DFS-Visit(u) Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ môn KHMT, DFS(u) DFS(u) 1.1 color[u] color[u] GRAY GRAY (* (*Thăm Thămđỉnh đỉnhuu*) *) 2.2 time time time time++11 3.3 d[u] d[u] time time 4.4 for foreach eachvvAdj[u] Adj[u]do 5.5 ififcolor[v] color[v]==WHITE WHITE 6.6 then then[v] [v] uu 7.7 DFS-Visit(v) DFS-Visit(v) 8.8 color[u] color[u] BLACK BLACK(* (*Đỉnh Đỉnhuuđã duyệt duyệtxong xong*) *) 9.9 f[u] f[u] time time time time++11 268 DFS chu trình • Câu hỏi: Thời gian tính bao nhiêu? • Trả lời: Chính thời gian thực DFS: O(|V|+|E|) • Câu hỏi: Nếu G đồ thị vô hướng đánh giá thời gian tính sát khơng? • Trả lời: Thuật tốn có thời gian tính O(|V|), vì: – Trong rừng (đồ thị khơng chứa chu trình) |E| |V| - – Vì đồ thị có |V| cạnh chắn chứa chu trình, thuật tốn kết thúc Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ mơn KHMT, 269 Kiểm tra tính liên thơng mạnh • Bài tốn: Hỏi đồ thị có hướng G có liên thơng mạnh? • Mệnh đề: Đồ thị có hướng G=(V,E) liên thông mạnh ln tìm đường từ đỉnh v đến tất đỉnh cịn lại ln tìm đường từ tất đỉnh thuộc V \ {v} đến v • Chứng minh: Hiển nhiên Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ môn KHMT, 270 Thuật tốn kiểm tra tính liên thơng mạnh • Thut toỏn Chọn v V đỉnh t ý – Thùc hiƯn DFS(v) trªn G NÕu tån đỉnh u không đợc thăm G không liên thông mạnh thuật toán kết thúc Trái lại thực hiƯn tiÕp – Thùc hiƯn DFS(v) trªn GT = (V, ET), với ET thu đợc từ E việc đảo ngợc hớng cung Nếu tồn đỉnh u không đợc thăm G không liên thông mạnh, trái lại G liên thông mạnh 271 Phn Lí THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ môn KHMT, Thuật tốn kiểm tra tính liên thơng mạnh a a d f c b e Đồ thị G Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ môn KHMT, d f c b e Đồ thị GT 272 Định hướng th ã Bài toán: Cho đồ thị vô hớng liên thông G= (V, E) HÃy tìm cách định hớng cạnh để thu đợc đồ thị có hớng liên thông mạnh trả lời G không định hớng đợc ã Thuật toán định hớng : Trong trình thực DFS(G) định hớng cạnh DFS theo chiều từ tổ tiên đến cháu, cạnh ngợc theo hớng từ cháu đến tổ tiên Ký hiệu đồ thị thu đợc G() ã Bổ đề G định hớng đợc G() liên thông mạnh 273 Phn Lí THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ mơn KHMT, Ví dụ: Định hướng đồ thị a a d f c b Đồ thị G Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ môn KHMT, e d f c b e Đồ thị G() 274 Questions? Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ môn KHMT, 275 ... 1.1 Đồ thị thực tế 1.2 Các loại đồ thị 1.3 Bậc đỉnh 1.4 Đồ thị 1.5 Đồ thị đẳng cấu 1.6 Đường chu trình 1.7 Tính liên thơng 1.8 Một số loại đồ thị đặc biệt 1.9 Tô màu đồ thị Phần LÝ THUYẾT ĐỒ THỊ... thơng 1.8 Một số loại đồ thị đặc biệt 1.9 Tô màu đồ thị Phần LÝ THUYẾT ĐỒ THỊ Nguyễn Đức Nghĩa- Bộ môn KHMT, 40 Đồ thị (Subgraphs) • Định nghĩa Đồ thị H=(W,F) gọi đồ thị đồ thị G=(V,E) WV FE... 1.1 Đồ thị thực tế 1.2 Các loại đồ thị 1.3 Bậc đỉnh 1.4 Đồ thị 1.5 Đồ thị đẳng cấu 1.6 Đường chu trình 1.7 Tính liên thơng 1.8 Một số loại đồ thị đặc biệt 1.9 Tô màu đồ thị Phần LÝ THUYẾT ĐỒ THỊ