Thông tin tài liệu
Đồ thị (Graph 2) Nguyễn Phương Thái Bộ môn Khoa Học Máy Tính – Khoa CNTT Đại Học Cơng Nghệ - ĐHQGHN Email: thainp@vnu.edu.vn Đồ thị (graph) • G = (V, E) – V: Tập đỉnh – E = { (u,v) | u, v ∈ V}: Tập cạnh Ví dụ: Biểu diễn đồ đường thành phố đồ thị G = (V, E) – V: Tập hợp điểm thành phố – E: Tập hợp đường thành phố, đường nối hai điểm Đi qua đồ thị theo chiều rộng (Breadth first search) • Đi qua tất đỉnh đồ thị, đỉnh lần • Bắt đầu xuất phát từ đỉnh s, thăm đỉnh liền kề với s Tiếp tục trình thăm đỉnh theo nguyên tắc: Đỉnh thăm trước đỉnh liền kề với đỉnh thăm trước • Xem ví dụ http://www.cs.princeton.edu/~wayne/cs423/lectures.html Đi qua đồ thị theo chiều sâu (Depth first search) //Đi qua đồ thị theo chiều sâu xuất phát từ v DepthFirstSearch (v) { for (mỗi đỉnh u kề với v) if (u chưa thăm) { thăm u đánh dấu u thăm DepthFirstSearch (u) } } Xem ví dụ http://www.cs.princeton.edu/~wayne/cs423/lectures.html Sắp xếp topo Cho đồ thị có hướng khơng có chu trình G = (V, E) (Directed acylic graph / DAG) Sắp xếp đỉnh đồ thị G thành danh sách cho có cung (u,v) ∈ E, đỉnh u phải đứng trước đỉnh v GABCFED Sắp xếp topo TopoSort (u) { for (mỗi đỉnh v kề u) if ( v chưa thăm) TopoSort(v); Xen u vào đầu danh sách T; Đánh dấu u thăm; } //Sắp xếp đỉnh đồ thị định hướng //khơng có chu trình G =(V,E) thành danh sách topo TopoSortGraph(G) { for (mỗi đỉnh u V) Đánh dấu u chưa thăm; Khởi tạo danh sách topo T rỗng; for (mỗi đỉnh u V) if (u chưa thăm) TopoSort (u); } Đường hai điểm Cho đồ thị G = (V, E) Giữa hai đỉnh (x0, xk) có đường đi, tồn (x1,…,xk-1 ) thỏa mãn (xi, xi+1) ∈ E, ∀i = 0…(k-1) Đồ thị liên thông (Connected graph) Cho đồ thị G = (V, E), G gọi liên thông tồn đường hai đỉnh đồ thị Tìm tất thành phần liên thơng Cho đồ thị G = (V, E), tìm tất thành phần liên thông đồ thị Đỉnh i đồ thị gán nhãn ci cho biết thuộc miền liên thơng ci Tìm thành phần liên thơng //Đi qua đồ thị theo bề rộng xuất phát từ v FindConnectedComponent (v, ci) { (1) Khởi tạo hàng đợi Q rỗng; (2) Xen v vào hàng đợi Q; (3) Đánh dấu đỉnh v thăm, gán nhãn v ci (4) while (hàng đợi Q không rỗng) { (5) Lấy đỉnh w đầu hàng đợi Q; (6) for (mỗi đỉnh u kề w) (7) if ( u chưa thăm) { (8) Xen u vào đuôi hàng đợi Q; (9) Đánh dấu u thăm, gán nhãn u ci } (10) Loại w khỏi hàng đợi Q } // hết vòng lặp while } Tìm thành phần liên thơng // Tìm thành phần liên thông đồ thị G=(V, E) FindAllConnectedComponent (G) { (10) for (mỗi v V) (11) Đánh dấu v chưa thăm; (12) ci = 0; (13) for (mỗi v V) (14) if (v chưa thăm) { (15) FindConnectedComponent(v, ci); (16) ci = ci + } } Đường ngắn Cho đồ thị G=(V, E), cạnh (u, v) ∈ E có độ dài weight (u,v) > Tìm đường ngắn từ đỉnh s đến đỉnh e Tư tưởng thuật toán Dijkstra (thuật toán gán nhãn) dist[v] = Khoảng cách đường ngắn từ s đến v pre[v] = u: Đỉnh liền phía trước đường ngắn từ s đến v Gán nhãn (sửa nhãn): Nếu dist[u] + weight (u, v) < dist [v] dist [v] = dist[u] + weight (u, v) pre[v] = u s→…→u→v Thuật toán Dijkstra Known = {tập hợp đỉnh xác định đường ngắn từ s đến} Unknown = {tập hợp đỉnh chưa xác định đường ngắn từ s đến} Tiến hành trình lặp, bước i tìm đỉnh u ∈ unknown có khoảng cách nhỏ if u = e then kết thúc else { known = known {u} unknown = unknown – {u} Dùng u để sửa nhãn cho đỉnh thuộc tập unknown tiến hành bước thứ (i + 1) } Dijkstra Algorithm { Known = {s}; Unknown = {E} – {s} for v ∈ unknown { dist[v] = weight [s, v]; pre[v] = s; } u = s; // at the first step while (u != e ){ chọn u cho dist[u] = {dist[x] | x ∈ unknown} Known = Known {u} Unknown = Unknown – {u} for v ∈ Unknown if dist[u] + weight [u, v] < dist[v] { //sửa nhãn cho v từ u dist[v] = dist[u] + weight[u,v]; pre[v] = u; } } path = {e} while (e != s) { e = pre[e] path = {e} path } } ... Đường hai điểm Cho đồ thị G = (V, E) Giữa hai đỉnh (x0, xk) có đường đi, tồn (x1,…,xk-1 ) thỏa mãn (xi, xi+1) ∈ E, ∀i = 0…(k-1) Đồ thị liên thông (Connected graph) Cho đồ thị G = (V, E), G gọi... (V, E), G gọi liên thông tồn đường hai đỉnh đồ thị Tìm tất thành phần liên thông Cho đồ thị G = (V, E), tìm tất thành phần liên thơng đồ thị Đỉnh i đồ thị gán nhãn ci cho biết thuộc miền liên thơng.. .Đồ thị (graph) • G = (V, E) – V: Tập đỉnh – E = { (u,v) | u, v ∈ V}: Tập cạnh Ví dụ: Biểu diễn đồ đường thành phố đồ thị G = (V, E) – V: Tập hợp điểm thành
Ngày đăng: 09/07/2014, 20:20
Xem thêm: Khoa học máy tính - Đồ thị (tt) docx, Khoa học máy tính - Đồ thị (tt) docx