Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 7 - Trịnh Anh Phúc

140 63 0
Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 7 - Trịnh Anh Phúc

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng Cấu trúc dữ liệu và thuật toán - Chương 7: Đồ thị và các thuật toán đồ thị bao gồm các nội dung: Đồ thị, biểu diễn đồ thị, các thuật toán duyệt đồ thị, một số ứng dụng của tìm kiếm trên đồ thị, bài toán cây khung nhỏ nhất,... Mời các bạn cùng tham khảo.

CHƯƠNG Đồ thị thuật toán đồ thị HAN HP CuuDuongThanCong.com HCM DAN NỘI DUNG Đồ thị Đồ thị vơ hướng, Đồ thị có hướng,Tính liên thơng đồ thị Biểu diễn đồ thị Biểu diễn đồ thị ma trận, Danh sách kề, Danh sách cạnh Các thuật toán duyệt đồ thị Thuật toán tìm kiếm theo chiều sâu, Thuật tốn tìm kiếm theo chiều rộng Một số ứng dụng tìm kiếm đồ thị Bài toán đường đi, Bài toán liên thơng, Đồ thị khơng chứa chu trình tốn xếp tơpơ, Bài tốn tơ màu đỉnh đồ thị Bài toán khung nhỏ Thuật toán Kruscal, Cấu trúc liệu biểu diễn phân hoạch, Bài toán đường ngắn Thuật toán Dijkstra, Cài đặt thuật toán với cấu trúc liệu CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ môn KHMT ĐHBKHN Đồ thị Đồ thị cặp (V, E),   V tập đỉnh E họ cặp đỉnh gọi cạnh Ví dụ:    Các đỉnh sân bay Các cạnh thể đường bay nối hai sân bay Các số cạnh chi phí (thời gian, khoảng cách) HAP DBP DAN HCM HAN BKK NHT CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ môn KHMT ĐHBKHN VIN Các kiểu cạnh Cạnh có hướng (Directed edge)  Cặp có thứ tự gồm hai đỉnh (u,v)  Đỉnh u đỉnh đầu  Đỉnh v đỉnh cuối  Ví dụ, chuyến bay Cạnh vơ hướng (Undirected edge)  Cặp khơng có thứ tự gồm đỉnh (u,v)  Ví dụ, tuyến bay Đồ thị có hướng (digraph)  Các cạnh có hướng  Ví dụ, mạng truyền tin Đồ thị vơ hướng (Undirected graph/graph)  Các cạnh khơng có hướng  Ví dụ, mạng tuyến bay HAN flight VN 426 HCM HAN 1135 km HCM CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ môn KHMT ĐHBKHN Ứng dụng Mạch lôgic (Electronic circuits)    Phòng máy Mạch in Mạch tích hợp Phòng hành Mạng giao thơng (Transportation networks)  Phòng máy Mạng xa lộ Mạng tuyến bay Phòng Giáo vụ Mạng máy tính (Computer networks)    Trường ĐHQG Ban Giám đốc Mạng cục Internet Web Phòng Tuyên huấn Cơ sở liệu (Databases)  Tổ Tin Sơ đồ quan hệ thực thể (Entity-relationship diagram) Bờm Cuội Chị Hằng CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ môn KHMT ĐHBKHN Thuật ngữ Đầu mút cạnh  U V đầu mút cạnh a Cạnh kề với đỉnh  a, d, b kề với đỉnh V Đỉnh kề  U V kề Bậc đỉnh  a U V d e W X có bậc j Z i g f h i cạnh lặp Khuyên  h X c Cạnh lặp  b Y j khuyên Đơn đồ thị: Không chứa cạnh lặp khuyên CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ môn KHMT ĐHBKHN Thuật ngữ (tiếp tục) Đường  Dãy đỉnh (hoặc dãy cạnh), hai đỉnh liên tiếp có cạnh nối: P: s = v0, v1, , vk-1, vk = t, (vi-1, vi) cạnh đồ thị, i=1, 2, , k  Độ dài đường số cạnh đường (k)  s - đỉnh đầu t - đỉnh cuối đường P Đường đơn  Các đỉnh đường phân biệt CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ môn KHMT ĐHBKHN Thuật ngữ (tiếp tục) V a U c b d P2 P1 X e W h Z g f Y Ví dụ  P1= V,X,Z (dãy cạnh: b, h) đường đơn  P2= U,W,X,Y,W,V) (P2=c,e,g,f,d) đường không đơn CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ môn KHMT ĐHBKHN Thuật ngữ (tiếp) Chu trình  Đường gồm cạnh phân biệt có đỉnh đầu trùng đỉnh cuối a Chu trình đơn  Ngoại trừ đầu trùng cuối, khơng hai đỉnh giống U Ví dụ   C1= V,X,Y,W,U CT đơn C2=U,W,X,Y,W,V chu trinh không đơn c V b d C2 X e C1 g W f h Z Y CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ mơn KHMT ĐHBKHN Tính chất Tính chất Ký hiệu Sv deg(v) = 2m CM: cạnh đếm lần Tính chất Trong đơn đồ thị vơ hướng (đồ thị khơng có cạnh lặp khun) m  n (n - 1)/2 CM: đỉnh có bậc không (n - 1) n m deg(v) số đỉnh số cạnh bậc đỉnh v Ví dụ    n=4 m=6 deg(v) = Tương tự có cận cho đồ thị có hướng CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ môn KHMT ĐHBKHN 10 Các dạng tốn ĐĐNN Có dạng tốn đường ngắn    Bài tốn 1) Tìm đường ngắn đỉnh cho trước Bài tốn 2) Tìm đường ngắn từ đỉnh nguồn s đến tất đỉnh lại Bài tốn 3) Tìm đường ngắn hai đỉnh Các tốn dẫn theo thứ tự từ đơn giản đến phức tạp Nếu ta có thuật tốn để giải ba tốn thuật tốn sử dụng để giải hai tốn lại CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ mơn KHMT ĐHBKHN 126 Chu trình âm Đường ngắn hai đỉnh khơng tồn   Chẳng hạn, khơng có đường từ s đến t, rõ ràng khơng có đường ngắn từ s đến t Ngồi ra, đồ thị chứa cạnh có trọng số âm xảy tình huống: độ dài đường hai đỉnh làm bé tuỳ ý CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ môn KHMT ĐHBKHN 127 Chu trình âm c a d -15 b e Xét đường từ a đến e: a, k(b, c, d, b), e nghĩa ta k lần vòng theo chu trình C: b, c, d, b trước đến e Độ dài đường bằng: c(a,b) + k (C) + c(b,e) = -10k → - , k → + CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ môn KHMT ĐHBKHN 128 Thuật toán Dijkstra Thuật toán Dijkstra đề xuất để giải tốn: Tìm đường ngắn từ đỉnh nguồn s đến tất đỉnh lại đồ thị với trọng số khơng âm cạnh Trong q trình thực thuật tốn, với đỉnh v ta lưu trữ nhãn đỉnh gồm thông tin sau:    k[v]: biến bun có giá trị ta tìm đường ngắn từ s đến v, ban đầu biến khởi tạo giá trị false d[v]: khoảng cách ngắn biết từ s đến v Ban đầu biến khởi tạo giá trị + đỉnh, ngoại trừ d[s] đặt p[v]: đỉnh trước đỉnh v đường có độ dài d[v] Ban đầu, biến khởi tạo rỗng (chưa biết) CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ mơn KHMT ĐHBKHN 129 Thuật tốn Dijkstra Thuật tốn lặp lại thao tác sau tất đỉnh khảo sát xong (nghĩa k[v] = true với v):    Trong tập đỉnh với k[v] = false, chọn đỉnh v có d[v] nhỏ Đặt k[v] = true Với đỉnh w kề với v có k[v]= false, ta kiểm tra d[w] > d[v] + c(v, w) Nếu đặt lại d[w] = d[v] + c(v, w) đặt p[w] = v CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ mơn KHMT ĐHBKHN 130 Ví dụ Tìm đường ngắn từ đỉnh B đến đỉnh lại đồ thị sau CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ mơn KHMT ĐHBKHN 131 Bảng tính tốn theo thuật tốn Dijkstra A Bước lặp B C D E F d p k d p k d p k d p k d p k d p k Khởi tạo  - F - F  - F  - F  - F  - F B F - T B F  - F  - F  - F B T A F  - F  - F  - F A T C F C F  - F C T C F 11 D F C T 11 D F T E CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ môn KHMT ĐHBKHN 132 Kết thực Tập cạnh {(p[v], v): v  V-{B}} tạo thành gọi đường ngắn từ đỉnh B đến tất đỉnh lại Cây cho hình vẽ sau đây: A B C D E F CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ môn KHMT ĐHBKHN 133 Cài đặt thuật toán với cấu trúc liệu Để cài đặt thuật toán Dijkstra sử dụng nhãn đỉnh: Nhãn đỉnh v gồm thành phần cho biết thông tin:  k[v] - tìm đường ngắn từ đỉnh nguồn đến v hay chưa,  d[v] - khoảng cách (độ dài đường đi) từ s đến v biết  p[v] - đỉnh trước đỉnh v đường tốt biết Các thành phần cất giữ tương ứng biến k[v], d[v] p[v] CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ môn KHMT ĐHBKHN 134 Cài đặt trực tiếp Dijkstra_Table(G, s) for u  V { d[u]  infinity; p[u]  NIL; k[u]  FALSE; } d[s]  0; // s đỉnh nguồn T = V; while T ≠  { u  đỉnh có d[u] nhỏ T; 10 k[u]=TRUE; 11 T = T–{u}; 12 for (v  Adj(u)) && !k[v] 13 if d[v] > d[u] + c[u, v] { 14 d[v] = d[u] + c[u, v]; 15 p[v] = u; 16 } 17 } Dễ dàng nhận thấy Dijkstra_Table(G, s) đòi hỏi thời gian O(|V|2+|E|) CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ môn KHMT ĐHBKHN 135 Cài đặt thuật toán Dijkstra sử dụng hàng đợi có ưu tiên Do bước ta cần tìm đỉnh với nhãn khoảng cách nhỏ nhất, nên để thực thao tác cách hiệu ta sử dụng hàng đợi có ưu tiên (Priority Queue – PQ) Dưới ta mơ tả thuật tốn Dijkstra với hàng đợi có ưu tiên: CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ môn KHMT ĐHBKHN 136 Cài đặt thuật toán Dijkstra sử dụng PQ: Khởi tạo Dijkstra_Heap(G, s) for u  V { d[u]  infinity; p[u]  NIL; k[u]  FALSE; } d[s]  0; // s đỉnh nguồn Q  Build_Min_Heap(d[V]); // Khởi tạo hàng đợi có ưu tiên Q từ d[V] = (d[v], vV) CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ môn KHMT ĐHBKHN 137 Cài đặt thuật toán Dijkstra sử dụng PQ: Lặp while Not Empty(Q) { u  Extract-Min(Q); // loại bỏ gốc Q đưa vào u 10 k[u]=TRUE; 11 for (v  Adj(u)) && !k[v] 12 if d[v] > d[u] + c[u, v] { 13 d[v] = d[u] + c[u, v]; 14 p[v] = u; 15 Decrease_Key(Q,v,d[v]); 16 } 17 } CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ môn KHMT ĐHBKHN 138 Phân tích thời gian tính thuật tốn Vòng lặp for dòng đòi hỏi thời gian O(|V|) Việc khởi tạo đống đòi hỏi thời gian O(|V|) Vòng lặp while dòng lặp |V| lần thao tác ExtractMin thực |V| lần đòi hỏi thời gian O(|V| log|V|) Thao tác Decrease_Key dòng 15 phải thực khơng q O(|E|) lần Do thời gian thực thao tác thuật tốn O(|E| log|V|) Vậy tổng cộng thời gian tính thuật toán O((|E| + |V|) log|V|) CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ môn KHMT ĐHBKHN 139 Questions? CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ môn KHMT ĐHBKHN 140 ... xếp tơpơ, Bài tốn tơ màu đỉnh đồ thị Bài tốn khung nhỏ Thuật toán Kruscal, Cấu trúc liệu biểu diễn phân hoạch, Bài toán đường ngắn Thuật toán Dijkstra, Cài đặt thuật toán với cấu trúc liệu CuuDuongThanCong.com... trận, Danh sách kề, Danh sách cạnh Các thuật toán duyệt đồ thị Thuật tốn tìm kiếm theo chiều sâu, Thuật tốn tìm kiếm theo chiều rộng Một số ứng dụng tìm kiếm đồ thị Bài tốn đường đi, Bài tốn... CuuDuongThanCong.com Nguyễn Đức Nghĩa - Bộ môn KHMT ĐHBKHN 18 Danh sách kề (Adjacency List) Danh sách kề: Với đỉnh v cất giữ danh sách đỉnh kề    Là mảng Adj gồm |V| danh sách Mỗi đỉnh có danh sách Với u  V,

Ngày đăng: 11/01/2020, 17:40

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan