Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 Lý thuyết đồ thị, cung cấp cho người học những kiến thức như: giới thiệu đồ thị; biểu diễn đồ thị; thuật toán duyệt đồ thị; bài toán tìm đường ngắn nhất. Mời các bạn cùng tham khảo!
GIỚI THIỆU • Đồ thị cấu trúc liệu trừu tượng dựa khái niệm toán học đồ thị • Đồ thị xem tổng quát hóa cấu trúc Tuy nhiên, đồ thị có mối quan hệ phức tạp quan hệ cha-con cấu trúc • Đồ thị sử dụng nhiều ứng dụng gia phả, mạng quản lý chuyến bay v.v… KHOA CÔNG NGHỆ THÔNG TIN GIỚI THIỆU • Một đồ thị G tập hợp khơng có thứ tự (V, E), V : đỉnh đồ thị E : cạnh (cung) biểu diễn mối quan hệ đỉnh A D B E KHOA CÔNG NGHỆ THÔNG TIN C V(G) = {A, B, C, D, E} E(G) = {(A, B), (A, D), (B, C}, (B, D), (C, E), (D, E)} GIỚI THIỆU • Một đồ thị G có hướng vơ hướng • Nếu đồ thị có hướng cạnh nối hai đỉnh có mũi tên đại diện cho hướng nối Đồ thị có hướng Đồ thị vơ hướng A D B E KHOA CÔNG NGHỆ THÔNG TIN C A D B C E BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH SỬ DỤNG MA TRẬN KỀ • Hai đỉnh kề có cạnh nối chúng • Ta dùng ma trận với dòng, cột biểu diễn cho đỉnh đồ thị • Biểu diễn cạnh ma trận kề Nếu đỉnh i kề đỉnh j Ngược lại 𝑎𝑖𝑗 = KHOA CÔNG NGHỆ THÔNG TIN BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH SỬ DỤNG MA TRẬN KỀ A B D C E A B D A B C D E A 1 B 1 C D 1 E 0 C E A B C D E A 1 0 B 0 0 C 0 0 D 0 0 1 E 0 0 KHOA CÔNG NGHỆ THÔNG TIN BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH SỬ DỤNG MA TRẬN KỀ Đồ thị có trọng số đồ thị mà có gán liệu cạnh A C D Biểu diễn đồ thị có trọng số KHOA CÔNG NGHỆ THÔNG TIN B E A B C D E A B 0 C 0 D 0 0 E 0 0 BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH SỬ DỤNG MA TRẬN KỀ • Đối với đồ thị đơn (khơng có vịng), ma trận kề có đường chéo mang giá trị A B C • Ma trận kề đồ thị vơ hướng đối xứng • Bộ nhớ ma trận kề O(n2), n số đỉnh đồ thị KHOA CÔNG NGHỆ THÔNG TIN D E A B C D E A B 0 C 0 D 0 0 E 0 0 BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH SỬ DỤNG DANH SÁCH KỀ • Danh sách kề gồm đỉnh đồ thị V(G) • Mỗi đỉnh vi danh sách liên kết lưu trữ đỉnh vj , vj+1, … nối tới vi • Thường dùng để lưu đồ thị nhỏ vừa • Biểu diễn đồ thị thưa (có cạnh nối) nhớ máy tính KHOA CÔNG NGHỆ THƠNG TIN 10 THUẬT TỐN TÌM ĐƯỜNG ĐI NGẮN NHẤT THUẬT TỐN DIJKSTRA • Tìm đường ngắn đỉnh đồ thị • Chỉ thực trọng số dương • Áp dụng cho đồ thị vơ hướng có hướng KHOA CƠNG NGHỆ THƠNG TIN 37 THUẬT TỐN TÌM ĐƯỜNG ĐI NGẮN NHẤT THUẬT TỐN DIJKSTRA b c Tìm đường ngắn từ đỉnh a đến đỉnh d a d f KHOA CÔNG NGHỆ THÔNG TIN e 38 THUẬT TỐN TÌM ĐƯỜNG ĐI NGẮN NHẤT THUẬT TOÁN DIJKSTRA ∞ ∞ b c Khởi động d(a) = d(b) = ∞ a d f ∞ KHOA CÔNG NGHỆ THÔNG TIN e ∞ ∞ d(f) = ∞ d(c) = ∞ d(e) = ∞ d(d) = ∞ 39 THUẬT TỐN TÌM ĐƯỜNG ĐI NGẮN NHẤT THUẬT TỐN DIJKSTRA 4(𝑎) ∞ b c Bắt đầu đỉnh a d(a) = a d ∞ f (a) e ∞ d(b) = min(d(b), d a + w a, b ) = min(∞, + 4) = d(f) = d f , d a + w a, f ∞, + = = d(c) = ∞ d(e) = ∞ d(d) = ∞ KHOA CÔNG NGHỆ THÔNG TIN 40 THUẬT TỐN TÌM ĐƯỜNG ĐI NGẮN NHẤT THUẬT TỐN DIJKSTRA 4(𝑎) ∞ b c Vì d(f) < d(b) , bắt đầu đỉnh f d(a) = (đã qua) d(b) = a d ∞ f (a) e ∞ d(f) = d(c) = ∞ d(e) = d e , d f + w f, e min(∞, + 3) = = d(d) = ∞ KHOA CÔNG NGHỆ THÔNG TIN 41 THUẬT TỐN TÌM ĐƯỜNG ĐI NGẮN NHẤT THUẬT TỐN DIJKSTRA 4(𝑎) b Vì d(b) < d(e), bắt đầu đỉnh b ∞ c d(a) = (đã qua) d(b) = a d ∞ f (a) e (f) d(f) = (đã qua) d(c)= d c , 𝑑 𝑏 + 𝑤 𝑏, 𝑐 ∞, + = = d(e) = min(5, d(b)+w(b, e)) = min(5, + 3) = d(d) = ∞ KHOA CƠNG NGHỆ THƠNG TIN 42 THUẬT TỐN TÌM ĐƯỜNG ĐI NGẮN NHẤT THUẬT TOÁN DIJKSTRA 4(𝑎) b (b) Vì d(e) < d(c) , bắt đầu đỉnh e c d(a) = (đã qua) d(b) = (đã qua) a d ∞ f (a) KHOA CÔNG NGHỆ THÔNG TIN e (f) d(f) = (đã qua) d(c) = d(e) = d(d) = ∞, 𝑑 𝑒 + 𝑤 𝑒, 𝑑 ∞, + = = 43 THUẬT TỐN TÌM ĐƯỜNG ĐI NGẮN NHẤT THUẬT TOÁN DIJKSTRA 4(𝑎) b (b) Vì d(d) < d(c), bắt đầu đỉnh d c d(a) = (đã qua) d(b) = (đã qua) a d 6, (𝑒) f (a) e (f) d(f) = (đã qua) d(c) = min(7, d(d) + w(d, c))= min(7, + 2) = d(e) = (đã qua) d(d) = KHOA CƠNG NGHỆ THƠNG TIN 44 THUẬT TỐN TÌM ĐƯỜNG ĐI NGẮN NHẤT THUẬT TOÁN DIJKSTRA 4(𝑎) b (b) d(a) = (đã qua) c d(b) = (đã qua) d(f) = (đã qua) a d 6, (𝑒) f (a) KHOA CÔNG NGHỆ THÔNG TIN e (f) d(c) = d(e) = (đã qua) d(d) = (đã qua) Dừng 45 THUẬT TỐN TÌM ĐƯỜNG ĐI NGẮN NHẤT THUẬT TỐN DIJKSTRA 4(𝑎) b (b) Ta có đường ngắn c ab=4 a d 6, (𝑒) f (a) KHOA CÔNG NGHỆ THÔNG TIN e (f) abc=7 af =2 afed=6 afe=5 46 THUẬT TỐN TÌM ĐƯỜNG ĐI NGẮN NHẤT THUẬT TOÁN DIJKSTRA THUẬT TOÁN DIJKSTRA procedure DIJKSTRA (G, w, s, d) d(s) := 0, T := V for v thuộc V d(v) := ∞ while T ≠ ∅ Tìm u thuộc T cho d(u) nhỏ T := T \ {u} for v thuộc tập đỉnh kề v d(v) := min(d(v), d(u) + w(u, v)) return d(v) KHOA CÔNG NGHỆ THÔNG TIN 47 BÀI TẬP Dùng DFS BFS duyệt đỉnh đồ thị sau Trình bày bước G A B E F C D H KHOA CÔNG NGHỆ THÔNG TIN 48 BÀI TẬP Dùng Prim, Kruskal Dijkstra cho đồ thị sau Trình bày bước cụ thể G 2 A E C D 3 B F H KHOA CÔNG NGHỆ THÔNG TIN 49 BÀI TẬP Cho ma trận sau A B C D E F a) Vẽ đồ thị A 0 b) Dùng DFS, BFS B 0 C 0 D 0 E F 0 c) Dùng Prim, Kruskal d) Dùng Dijkstra từ đỉnh a đến f KHOA CÔNG NGHỆ THÔNG TIN 50 ...GIỚI THIỆU • Đồ thị cấu trúc liệu trừu tượng dựa khái niệm toán học đồ thị • Đồ thị xem tổng quát hóa cấu trúc Tuy nhiên, đồ thị có mối quan hệ phức tạp quan hệ cha-con cấu trúc • Đồ thị sử dụng... (Breadth-First Search) đồ thị vô hướng A B D KHOA CÔNG NGHỆ THÔNG TIN C B1: Xuất phát từ đỉnh A B2: Đi qua đỉnh B, D B3: Xuất phát từ đỉnh B B4: Đi qua đỉnh C B5: Xuất phát từ đỉnh D 15 THUẬT... thêm vào T := {(C,D), (A,B)} 34 THUẬT TỐN TÌM ĐƯỜNG ĐI NGẮN NHẤT THUẬT TOÁN KRUSKAL A C B1 : Chọn cạnh có trọng số nhỏ B D CD = thêm vào T := {(C, D)} B2 : Chọn cạnh có trọng số nhỏ AB = thêm vào