Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 56 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
56
Dung lượng
289 KB
Nội dung
CÁC THUẬT TOÁN TRÊN ĐỒ THỊ MỤC TIÊU Một số khái niệm cơ bản Biểu diễn đồ thị Duyệt đồ thị Thành phần liên thông và thành phần liên thông mạnh Đồ thị định hướng không có chu trình Sắp xếp topo Các thuật toán đồ thị Đường đi ngắn nhất Cây bao trùm ngắn nhất MỘT SỐ KHÁI NIỆM CƠ BẢN Đồ thị được sử dụng để mô hình hóa các bài toán bao gồm một tập các đối tượng có quan hệ với nhau theo 1 cách nào đó Ví dụ Một mạng truyền thông Bản đồ đường đi giữa các thành phố Việc giải quyết các bài toán trở thành việc giải quyết một bài toán trên đồ thị Chẳng hạn Tìm đường đi ngắn nhất Tìm cây bao trùm ngắn nhất Tìm các thành phần liên thông… MỘT SỐ KHÁI NIỆM CƠ BẢN Một đồ thị định hướng G = <V, E> V là tập các đỉnh, E là tập các cung nối các đỉnh Mỗi cung là một cặp đỉnh có thứ tự (u,v), ký hiệu u->v Nếu có cung (u,v) ta nói đỉnh v kề với đỉnh u u v a b c d Một cung của đồ thị Đồ thị định hướng MỘT SỐ KHÁI NIỆM CƠ BẢN Một đồ thị vô hướng G = <V, E> V là tập các đỉnh, E là tập các cạnh nối các đỉnh Mỗi cạnh là một cặp đỉnh không có thứ tự (u,v) Nếu có cạnh (u,v) ta nói đỉnh u và v kề nhau u v a b c d e Một cạnh của đồ thị Đồ thị vô hướng MỘT SỐ KHÁI NIỆM CƠ BẢN Đồ thị có trọng số Đồ thị mà mỗi cung/cạnh của đồ thị được gắn với một số c(u,v) Số c(u,v) được gọi là trọng số (giá/độ dài) của cung/cạnh (u,v) Đường đi đơn Là một dãy hữu hạn các đỉnh (v 0 , v 1 , …, v k ) khác nhau, ngoại trừ có thể v 0 = v k , và v i+1 là đỉnh kề của v i (i=1,2…k-1) Với đồ thị có trọng số độ dài đường đi được tính là tổng trọng số trên các cạnh trên đường đi Với đồ thị không có trọng số độ dài đường đi là k MỘT SỐ KHÁI NIỆM CƠ BẢN Đồ thị đơn Là đồ thị vô hướng có nhiều nhất một cạnh nối hai đỉnh Là đồ thị vô hướng mà hai đỉnh có thể được nối bởi nhiều hơn một cạnh Đa đồ thị MỘT SỐ KHÁI NIỆM CƠ BẢN Chu trình Là đường đi khép kín, tức là đường đi (v 0 , v 1 , …, v k ) có v 0 = v k Ví dụ Trong đồ thị định hướng dưới đây thì (v 4 , v 1 , v 2 , v 3 ) là một đường đi từ v 4 đến v 3 , và (v 4 , v 1 , v 2 , v 4 ) là một chu trình v 1 v 2 v 4 v 3 MỘT SỐ KHÁI NIỆM CƠ BẢN Đồ thị con Đồ thị G’=<V’, E’> là đồ thị con của G=<V, E> nếu V’ V và E’ E Ví dụ v 1 v 2 v 4 v 3 v 1 v 2 v 4 Đồ thị con Đồ thị BIỂU DIỄN ĐỒ THỊ Để giải quyết các vấn đề của đồ thị, cần lưu trữ đồ thị trong bộ nhớ máy tính, vì thế cần phải biểu diễn CTDL của đồ thị. Có hai cách biểu diễn Biểu diễn bằng ma trận kề (lưu trữ đồ thị bằng mảng hai chiều) Biểu diễn bằng danh sách kề (lưu trữ đồ thị bằng danh sách móc nối) [...]... δ(v0,vk) = ∑ c(vi,vi+1) i=0 Xét hai thuật toán Tìm đường đi ngắn nhất từ một đỉnh nguồn đến các đỉnh còn lại của đồ thị Tìm đường đi ngắn nhất giữa mọi cặp điểm của đồ thị ĐƯỜNG ĐI NGẮN NHẤT TỪ MỘT ĐỈNH NGUỒN – THUẬT TOÁN Dijkstra Thuật toán Dijkstra giải quyết bài toán các lộ trình ngắn nhất nguồn đơn trên đồ thị định hướng có trọng số Thuật toán dựa trên kỹ thuật tham lam Ta giả thiết G=... đồ thị vô hướng 1 5 3 4 Đồ thị vô hướng 1 1 1 0 1 2 0 0 0 1 1 1 0 0 1 0 1 1 1 0 1 0 1 0 1 0 Mảng biểu diễn đồ thị BIỂU DIỄN ĐỒ THỊ BẰNG MA TRẬN KỀ Ví dụ 2: cho đồ thị định hướng 0 1 5 3 4 Đồ thị định hướng 0 1 0 0 2 1 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 Mảng biểu diễn đồ thị Nhận xét: Ưu điểm: Với 2 đỉnh bất kỳ ta biết ngay rằng có cung/cạnh nối hay không trọng số của cung/cạnh đó (nếu là đồ. .. Trong đồ thị định hướng không liên thông mạnh ta gọi một đồ thị con liên thông mạnh cực đại của nó là một thành phần liên thông mạnh Sử dụng thuật toán tìm kiếm theo chiều sâu, ta có thể xây dựng được thuật toán xác định thành phần liên thông mạnh, gồm các bước: TÌM THÀNH PHẦN LIÊN THÔNG MẠNH Duyệt đồ thị theo chiều sâu và đánh số các đỉnh của nó theo thứ tự sau (post_visited) Xây dựng đồ thị G’...BIỂU DIỄN ĐỒ THỊ BẰNG MA TRẬN KỀ Với đồ thị không có trọng số G=, với V={v 1, v2, …, vn}, được lưu trữ trong mảng hai chiều A[1 n][1 n] trong đó: A[i,j] = 1 Nếu (vi, vj) có cạnh nối 0 Nếu (vi, vj) không có cạnh nối Ví dụ: cho đồ thị vô hướng 1 5 3 4 Đồ thị vô hướng 1 1 1 0 1 2 0 0 0 1 1 1 0 0 1 0 1 1 1 0 1 0 1 0 1 0 Mảng biểu diễn đồ thị BIỂU DIỄN ĐỒ THỊ BẰNG MA TRẬN KỀ Với đồ thị không... THÀNH PHẦN LIÊN THÔNG MẠNH Ví dụ: cho đồ thị G C 6 5 A B B F H 7 C A A 4 E D Đồ thị định hướng G D 2 DFS F 1 E 3 THÀNH PHẦN LIÊN THÔNG MẠNH Ví dụ A F H Đồ thị G’ B C E D H A B C Các thành phần liên thông mạnh của G D F E TÌM ĐƯỜNG ĐI NGẮN NHẤT Duyệt đồ thị theo chiều rộng để tìm đường đi ngắn nhất Giả thiết G= là đồ thị định hướng có trọng số Trọng số trên cung (u,v) là c(u,v) >=0 k-1... điểm: muốn biết có cung/cạnh (vi, vj) hay không (và trọng số của nó) ta phải duyệt danh sách các đỉnh kề của vi BIỂU DIỄN ĐỒ THỊ BẰNG DANH SÁCH KỀ Ví dụ : Mảng A cho đồ thị định hướng 1 9 12 10 3 6 2 1 4 10 2 4 5 5 25 3 1 9 4 3 6 5 4 27 25 5 5 4 2 12 27 Đồ thị định hướng Mảng các danh sách kề BIỂU DIỄN ĐỒ THỊ BẰNG DANH SÁCH KỀ Cấu trúc dữ liệu #define N 100 struct node { unsigned int index; //số... cung/cạnh đó (nếu là đồ thị trọng số) Nhược điểm: Lãng phí bộ nhớ (do chỉ có một số cung/cạnh) BIỂU DIỄN ĐỒ THỊ BẰNG MA TRẬN KỀ Với đồ thị có trọng số G=, với V={v1, v2, …, vn}, với c(vi, vj) là trọng số trên cung/cạnh (vi, vj), khi đó: c (vi, vj) Nếu (vi, vj) có cung/cạnh nối A[i,j] = 0 Nếu (vi, vj) không có cung/cạnh nối Ví dụ 1: cho đồ thị định hướng 1 9 12 10 3 6 2 5 5 4 27 Đồ thị định hướng... đồ thị G’ từ đồ thị G bằng cách đổi hướng tất cả các cung Áp dụng DFS(u) duyệt G’ bắt đầu từ đỉnh u có pre_visited[u] lớn nhất Khi đi từ u mà chưa thăm hết các đỉnh của G’ thì lại duyệt G’ bắt đầu từ đỉnh w có pre_visited[w] lớn nhất trong các đỉnh còn lại Lặp lại quá trình cho đến khi tất cả các đỉnh của G’ được thăm Mỗi cây nhận được ở bước 3 là một thành phần liên thông mạnh của đồ thị G TÌM... 9 0 0 0 0 0 0 6 0 0 0 0 0 27 0 Mảng biểu diễn đồ thị BIỂU DIỄN ĐỒ THỊ BẰNG DANH SÁCH KỀ Cách biểu diễn Danh sách các đỉnh kề là một danh sách móc nối Mỗi thành phần trong danh sách gồm số hiệu đỉnh, trọng số của cung/cạnh nối Với mỗi đỉnh, lập một danh sách các đỉnh kề với nó Sử dụng mảng A[1 n], trong đó A[i] là con trỏ trỏ tới đầu danh sách các đỉnh kề của đỉnh thứ I Nhận xét: Ưu điểm:... pre_visite[u]=0 then DFS(u); } THÀNH PHẦN LIÊN THÔNG Đồ thị vô hướng G= được gọi là liên thông nếu tồn tại đường đi nối mọi cặp đỉnh của nó Nếu G không liên thông thì một đồ thị con liên thông cực đại của G được gọi là một thành phần liên thông Áp dụng thuật toán tìm kiếm theo chiều sâu, sẽ tìm được tất cả các thành phần liên thông Thủ tục Comp_Search(G), tìm các thành phần liên thông Biến c đếm . BẢN Đồ thị con Đồ thị G’=<V’, E’> là đồ thị con của G=<V, E> nếu V’ V và E’ E Ví dụ v 1 v 2 v 4 v 3 v 1 v 2 v 4 Đồ thị con Đồ thị BIỂU DIỄN ĐỒ THỊ Để giải quyết các vấn. CÁC THUẬT TOÁN TRÊN ĐỒ THỊ MỤC TIÊU Một số khái niệm cơ bản Biểu diễn đồ thị Duyệt đồ thị Thành phần liên thông và thành phần liên thông mạnh Đồ thị định hướng không. với nhau theo 1 cách nào đó Ví dụ Một mạng truyền thông Bản đồ đường đi giữa các thành phố Việc giải quyết các bài toán trở thành việc giải quyết một bài toán trên đồ thị Chẳng hạn Tìm