Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
13
Dung lượng
269,18 KB
Nội dung
Cấu trúc liệu Giải thuật Cấu trúc liệu Giải thuật 337 LAX Chương VIII: Cấu trúc Đồ thị 1233 ORD 802 SFO DFW Si nh Vi en Zo ne C om Đỗ Bích Diệp - Khoa CNTT Chương VIII: Đồ thị z Nội dung Các khái niệm Biểu diễn đồ thị Ma trận lân cận Danh sách lân cận Duyệt đồ thị Bài tốn áp dụng Tìm khung cực tiểu Tìm đường ngắn Bài tốn bao đóng truyền ứng Bài tốn xếp tơ pơ Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Đồ thị – Một đồ thị G = (V, E) z z – – V: tập đỉnh (vertices) E: tập cung (edges) nối đỉnh V Một cung e = (u,v) cặp đỉnh Ví dụ: a b V= {a,b,c,d,e} e E= {(a,b),(a,c),(a,d), (b,e),(c,d),(c,e), (d,e)} c d Si nh Vi en Zo ne C om Đỗ Bích Diệp - Khoa CNTT Các khái niệm liên quan – Đồ thị có hướng Đồ thị vơ hướng 2 Trong cung, thứ tự đỉnh quan trọng Cung (u,v) khác với cung (v,u) Trong cung, thứ tự đỉnh không quan trọng Cung (u,v) giống cung (v,u) Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Các khái niệm liên quan z Bậc đỉnh (Degree): Là số cung kề với đỉnh – – Trong đồ thị có hướng, đỉnh có z Bậc (in-degree) z Bậc ngồi (out-degree) Ví dụ: z Đỉnh có bậc z Đỉnh có bậc bậc 2 Si nh Vi en Zo ne C om Đỗ Bích Diệp - Khoa CNTT Các khái niệm liên quan z Đỉnh lân cận (Adjacent vertices) – z Trong đồ thị z 1, lân cận z 1,3 lân cận z … Cung kề (Incident edges) – Nếu có cung (u,v) cung cung kề hai đỉnh u v Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Các khái niệm liên quan z Đường – z Đường đơn – z Dãy đỉnh v1,v2, .vk mà tồn cung (vi, vi+1) đồ thị ( i = k-1) Đường với đỉnh khơng lặp lại Chu trình Đường đơn với đỉnh đầu cuối trùng – z Độ dài đường – z Path : 1, 2, 4, 3, 1, Số cung đường Đồ thị Si nh Vi en Zo ne C om Đỗ Bích Diệp - Khoa CNTT Các khái niệm liên quan z Đồ thị liên thông (Connected Graph) 2 5 Đồ thị liên thông 3 Đồ thị khơng liên thơng Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Các khái niệm liên quan z Đồ thị trọng số (Weight Graph) 60 140 100 100 110 Si nh Vi en Zo ne C om Đỗ Bích Diệp - Khoa CNTT Kiểu liệu trừu tượng Đồ thị z z Dữ liệu: Một tập không rỗng đỉnh chứa phần tử có kiểu định, tập khơng rỗng cung biểu diễn phần tử có kiểu định Các thao tác – – – – – Graph create() insertVertex( o) insertEdge(u, v, o) removeVertex(v) removeEdge(e ) – endVertices(e) – opposite(v, e) – areAdjacent(v, w) – adjacentVertices(v) – incidentEdges(v) – vertices() – edges() – numVertices() – numEdges() Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Một số tính chất đồ thị Nếu đồ thị G có m cung tổng bậc đỉnh G 2m Nếu đồ thị có hướng có m cung tổng bậc đỉnh , tổng bậc đỉnh m Nếu đồ thị G đồ thị đơn giản, G có n đỉnh m cung Nếu G đồ thị vô hướng m ≤ n(n-1)/2 Nếu G đồ thị có hướng m ≤ n(n-1) Si nh Vi en Zo ne C om Đỗ Bích Diệp - Khoa CNTT Biểu diễn đồ thị – Biểu diễn ma trận lân cận z z Đánh số đỉnh tập V từ đến n Ma trận biểu diễn đồ thị A (n x n) – – z z Aij = G tồn cung (i,j) Aịj = G khơng tồn cung Với đồ thị vơ hướng Aij = Aji = A gọi ma trận lân cận G Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Biểu diễn đồ thị ma trận lân cận z Ví dụ ⎡0 ⎢0 ⎢ ⎢1 ⎢ ⎣0 ⎡0 ⎢1 ⎢ ⎢1 ⎢ ⎢ ⎢⎣1 1⎤ ⎥ 0 1⎥ 0⎥ ⎥ 1 0⎦ 1 1⎤ ⎥ 0⎥ 1 0⎥ ⎥ 1⎥ 0 0⎥⎦ Si nh Vi en Zo ne C om Đỗ Bích Diệp - Khoa CNTT Biểu diễn đồ thị danh sách lân cận – Biểu diễn danh sách lân cận z z Mỗi đỉnh đồ thị ứng với danh sách móc nối chứa đỉnh lân cận Mỗi nút danh sách có quy cách VERTEX – – z z LINK VERTEX chứa giá trị tương ứng với số thứ tự đỉnh lân cận LINK chứa trỏ trỏ tới nút danh sách Mỗi danh sách có nút đầu danh sách Các nút đầu phần tử vector V có kích thước n Phần tử V[i] ứng với danh sách lân cận nút thứ i Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Biểu diễn đồ thị danh sách lân cận z Ví dụ z V[1] V[2] V[3] V[4] 1: (2,4) 2: (4) 3: (1, 2) 4: (2, 3) Si nh Vi en Zo ne C om Đỗ Bích Diệp - Khoa CNTT Biểu diễn đồ thị danh sách lân cận z V[1] V[2] V[3] V[4] V[5] 1: (2,3,5) 2: (1,3) 3: (1,2,4) 4: (3,5) 5: (1,4) Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Phép duyệt đồ thị z Cho đồ thị G(V,E) đỉnh v thuộc V Duyệt đồ thị thăm đỉnh liên thơng với v – Có phương pháp z z Phương pháp duyệt theo chiều sâu (Depth First Search) Phương pháp duyệt theo chiều rộng ( Breadth First Search) Si nh Vi en Zo ne C om Đỗ Bích Diệp - Khoa CNTT Duyệt theo chiều sâu Algorithm DFS(G, v) Input đồ thị G đỉnh bắt đầu duyệt v G Output đánh dấu cung G phần đồ thị liên thông với đỉnh v thành hai loại cung khám phá (discovery edges) cung quay lui (back edges) setLabel(v, VISITED) // đỉnh v thăm for all e ∈ G.incidentEdges(v) if getLabel(e) = UNEXPLORED w ← opposite(v,e) if getLabel(w) = UNEXPLORED setLabel(e, DISCOVERY) DFS(G, w) else setLabel(e, BACK) Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Duyệt đồ thị theo chiều sâu A Đỉnh chưa thăm Đỉnh thăm Cung chưa thăm Cung khám phá Cung quay lui A A B D E D E C A A B D E B C C Bắt đầu xuất phát từ A Si nh Vi en Zo ne C om Đỗ Bích Diệp - Khoa CNTT Duyệt đồ thị theo chiều sâu A B A D E B D C C A A B D E C B E Tất cung kề D duyệt Xét tiếp cung kề đỉnh C D E C Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 10 SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Duyệt đồ thị theo chiều sâu z Duyệt theo chiều sâu đồ thị có hướng – Đi theo chiều cung đồ thị D E B C A Si nh Vi en Zo ne C om Đỗ Bích Diệp - Khoa CNTT Duyệt đồ thị theo chiều rộng Algorithm BFS(G, s) Q = queue rỗng Q.enqueue(s) setLabel(s, VISITED) while not Q.isEmpty() v = Q.dequeue() for all e ∈ G.incidentEdges(v) if getLabel(e) = UNEXPLORED w ← opposite(v,e) if getLabel(w) = UNEXPLORED setLabel(e, DISCOVERY) setLabel(w, VISITED) Q.enqueue(w) else setLabel(e, BACK) Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 11 SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Duyệt đồ thị theo chiều rộng Đỉnh chưa thăm Đỉnh thăm Cung chưa thăm Cung khám phá Cung quay lui A A L0 L1 L0 L1 B L0 C E C E A B A L1 D F A B F D C E D F Si nh Vi en Zo ne C om Đỗ Bích Diệp - Khoa CNTT Duyệt đồ thị theo chiều rộng L0 L1 L0 A B C E L0 L1 B L2 F L0 A B L2 D L1 C E D F L1 A C E F A B L2 D C E D F Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 12 SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Duyệt đồ thị theo chiều rộng L0 L1 A B C L2 E L0 L1 L0 L1 D A B C L2 F E D F A B C L2 F Đỗ Bích Diệp - Khoa CNTT Si nh Vi en Zo ne C om E D Duyệt đồ thị theo chiều sâu z Duyệt đồ thị theo chiều rộng đồ thị có hướng D E B C A Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN 13 SinhVienZone.com https://fb.com/sinhvienzonevn ... numVertices() – numEdges() Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN SinhVienZone. com https://fb .com/ sinhvienzonevn Cấu trúc liệu Giải thuật Một số tính chất đồ thị Nếu đồ thị G có m cung... cung Với đồ thị vơ hướng Aij = Aji = A gọi ma trận lân cận G Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN SinhVienZone. com https://fb .com/ sinhvienzonevn Cấu trúc liệu Giải thuật Biểu... sách lân cận nút thứ i Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBK HN SinhVienZone. com https://fb .com/ sinhvienzonevn Cấu trúc liệu Giải thuật Biểu diễn đồ thị danh sách lân cận z