Bài giảng Thuật toán ứng dụng: Graphs
Số trang: 141
Loại file: pdf
Dung lượng: 1.29 MB
Lượt xem: 36
Lượt tải: 0
Xem trước 10 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Bài giảng Thuật toán ứng dụng: Graphs. Chương này cung cấp cho học viên những nội dung về: đồ thị và các thuật ngữ liên quan; tìm kiếm theo chiều sâu; tìm kiếm theo chiều rộng; chu trình Euler; thuật toán Dijkstra sử dụng hàng đợi ưu tiên; thuật toán Kruskal sử dụng disjoint-set structure;... Mời các bạn cùng tham khảo chi tiết nội dung bài giảng!
Nội dung trích xuất từ tài liệu:
Bài giảng Thuật toán ứng dụng: Graphs THUẬT TOÁN ỨNG DỤNG PHAM QUANG DUNG Graphs Phạm Quang Dũng Bộ môn KHMT dungpq@soict.hust.edu.vn 1 Nội dung Đồ thị và các thuật ngữ liên quan Tìm kiếm theo chiều sâu Tìm kiếm theo chiều rộng Chu trình Euler Thuật toán Dijkstra sử dụng hàng đợi ưu tiên Thuật toán Kruskal sử dụng disjoint-set structure Exercises 2 Đồ thị Đối tượng toán học bao gồm các đỉnh (node) và các liên kết giữa các đỉnh (cạnh, cung) Đồ thị G = (V,E), trong đó V là tập đỉnh, E là tập cạnh (cung) (u,v) E, chúng ta nói u kề với v 6 2 6 2 1 5 1 5 3 4 3 4 Undirected graph Directed graph V = {1, 2, 3, 4, 5, 6} V = {1, 2, 3, 4, 5, 6} E = {(1, 3), (1,6), (2, 4), (2, 5), E = {(1, 3), (1,6), (2, 4), (2, 5), 3 (2, 6), (3, 4), (3, 6), (4, 5)} (6, 2), (3, 4), (6, 3), (4, 5)} Đồ thị Bậc của một đỉnh là số đỉnh kề với nó deg(v) = #{u | (u, v) E} Bán bậc vào (bán bậc ra) của một đỉnh là số cung đi vào (đi ra) khỏi đỉnh đó trên đồ thị có hướng: deg-(v) = #{u | (u, v) E}, deg+(v) = #{u | (v, u) E} 6 2 6 2 1 5 1 5 3 4 3 4 Undirected graph Directed graph 4 deg(1) = 2, deg(6) = 3 deg-(1) = 0, deg+(1) = 2 Đồ thị Cho đồ thị G=(V, E) và 2 đỉnh s, t V, một đường đi từ s đến t trên G là chuỗi s = x0, x1, …, xk = t trong đó (xi, xi+1)E, i = 0, 1, …, k-1 6 2 6 2 1 5 1 5 3 4 3 4 Path from 1 to 5: Path from 1 to 5: 1, 3, 4, 5 1, 3, 4, 5 1, 6, 2, 5 1, 6, 4, 5 5 Đồ thị đặc biệt 1 3 1 1 4 2 3 2 6 3 2 5 4 5 4 Đồ thị đầy đủ Đồ thị hai phía Đồ thị phẳng 6 Đồ thị Ma trận kề Ma trận trọng số 4 6 2 6 2 3 6 1 5 1 5 9 5 2 7 8 3 4 3 4 1 2 3 4 5 6 1 2 3 4 5 6 1 0 0 1 0 0 1 1 0 0 7 0 0 3 2 0 0 0 1 1 1 2 0 0 0 9 6 4 3 1 0 0 1 0 1 3 7 0 0 8 0 5 4 0 1 1 0 1 0 4 0 9 8 0 2 0 5 0 1 0 1 0 0 5 0 6 0 4 0 0 6 1 1 1 0 0 0 6 3 4 5 0 0 0 7 Biểu diễn đồ thị Danh sách kề Với mỗi v V, A(v) là tập các bộ (v, u, w) trong đó w là trọng số cung (v, u) 4 6 2 A(1) = {(1, 6, 3), (1, 3, 7)} 3 6 A(2) = {(2, 4, 9), (2, 5, 6)} 1 5 9 5 2 A(3) = {(3, 4, 8)} 7 8 3 4 A(4) = {(4, 5, 2)} A(5) = {} A(6) = {(6, 3, 5), (6, 2, 4)} 8 Duyệt đồ thị Thăm các đỉnh của đồ thị theo một thứ tự nào đó Mỗi đỉnh thăm đúng 1 lần Có 2 phương pháp chính Duyệt theo chiều sâu: Depth-First Search (DFS) Duyệt theo chiều rộng: Breadth-First Search (BFS) 9 Depth-First Search (DFS) DFS(u): DFS bắt đầu thăm từ đỉnh u Nếu tồn tại một đỉnh v trong danh sách kề của u mà chưa được thăm → tiền hành thăm v và gọi DFS(v) Nếu tất cả các đỉnh kề với u đã được thăm → DFS quay lui trở lại đỉnh x từ đó thuật toán thăm u và tiến hành thăm các đỉnh khác kề với x (gọi DFS(x)) mà chưa được thăm. Lúc này, đỉnh u được gọi là đã duyệt xong 10 Depth-First Search (DFS) Các thông tin liên quan đến mỗi đỉnh v p(v): là đỉnh mà từ đó, DFS thăm đỉnh v d(v): thời điểm đỉnh v được thăm nhưng chưa duyệt xong f(v): thời điểm đỉnh v đã duyệt xong color(v) WHITE: chưa thăm GRAY: đã được thăm nhưng chưa duyệt xong BLACK: đã duyệt xong 11 Depth First Search - DFS DFS(u) { DFS() { ...
Nội dung trích xuất từ tài liệu:
Bài giảng Thuật toán ứng dụng: Graphs THUẬT TOÁN ỨNG DỤNG PHAM QUANG DUNG Graphs Phạm Quang Dũng Bộ môn KHMT dungpq@soict.hust.edu.vn 1 Nội dung Đồ thị và các thuật ngữ liên quan Tìm kiếm theo chiều sâu Tìm kiếm theo chiều rộng Chu trình Euler Thuật toán Dijkstra sử dụng hàng đợi ưu tiên Thuật toán Kruskal sử dụng disjoint-set structure Exercises 2 Đồ thị Đối tượng toán học bao gồm các đỉnh (node) và các liên kết giữa các đỉnh (cạnh, cung) Đồ thị G = (V,E), trong đó V là tập đỉnh, E là tập cạnh (cung) (u,v) E, chúng ta nói u kề với v 6 2 6 2 1 5 1 5 3 4 3 4 Undirected graph Directed graph V = {1, 2, 3, 4, 5, 6} V = {1, 2, 3, 4, 5, 6} E = {(1, 3), (1,6), (2, 4), (2, 5), E = {(1, 3), (1,6), (2, 4), (2, 5), 3 (2, 6), (3, 4), (3, 6), (4, 5)} (6, 2), (3, 4), (6, 3), (4, 5)} Đồ thị Bậc của một đỉnh là số đỉnh kề với nó deg(v) = #{u | (u, v) E} Bán bậc vào (bán bậc ra) của một đỉnh là số cung đi vào (đi ra) khỏi đỉnh đó trên đồ thị có hướng: deg-(v) = #{u | (u, v) E}, deg+(v) = #{u | (v, u) E} 6 2 6 2 1 5 1 5 3 4 3 4 Undirected graph Directed graph 4 deg(1) = 2, deg(6) = 3 deg-(1) = 0, deg+(1) = 2 Đồ thị Cho đồ thị G=(V, E) và 2 đỉnh s, t V, một đường đi từ s đến t trên G là chuỗi s = x0, x1, …, xk = t trong đó (xi, xi+1)E, i = 0, 1, …, k-1 6 2 6 2 1 5 1 5 3 4 3 4 Path from 1 to 5: Path from 1 to 5: 1, 3, 4, 5 1, 3, 4, 5 1, 6, 2, 5 1, 6, 4, 5 5 Đồ thị đặc biệt 1 3 1 1 4 2 3 2 6 3 2 5 4 5 4 Đồ thị đầy đủ Đồ thị hai phía Đồ thị phẳng 6 Đồ thị Ma trận kề Ma trận trọng số 4 6 2 6 2 3 6 1 5 1 5 9 5 2 7 8 3 4 3 4 1 2 3 4 5 6 1 2 3 4 5 6 1 0 0 1 0 0 1 1 0 0 7 0 0 3 2 0 0 0 1 1 1 2 0 0 0 9 6 4 3 1 0 0 1 0 1 3 7 0 0 8 0 5 4 0 1 1 0 1 0 4 0 9 8 0 2 0 5 0 1 0 1 0 0 5 0 6 0 4 0 0 6 1 1 1 0 0 0 6 3 4 5 0 0 0 7 Biểu diễn đồ thị Danh sách kề Với mỗi v V, A(v) là tập các bộ (v, u, w) trong đó w là trọng số cung (v, u) 4 6 2 A(1) = {(1, 6, 3), (1, 3, 7)} 3 6 A(2) = {(2, 4, 9), (2, 5, 6)} 1 5 9 5 2 A(3) = {(3, 4, 8)} 7 8 3 4 A(4) = {(4, 5, 2)} A(5) = {} A(6) = {(6, 3, 5), (6, 2, 4)} 8 Duyệt đồ thị Thăm các đỉnh của đồ thị theo một thứ tự nào đó Mỗi đỉnh thăm đúng 1 lần Có 2 phương pháp chính Duyệt theo chiều sâu: Depth-First Search (DFS) Duyệt theo chiều rộng: Breadth-First Search (BFS) 9 Depth-First Search (DFS) DFS(u): DFS bắt đầu thăm từ đỉnh u Nếu tồn tại một đỉnh v trong danh sách kề của u mà chưa được thăm → tiền hành thăm v và gọi DFS(v) Nếu tất cả các đỉnh kề với u đã được thăm → DFS quay lui trở lại đỉnh x từ đó thuật toán thăm u và tiến hành thăm các đỉnh khác kề với x (gọi DFS(x)) mà chưa được thăm. Lúc này, đỉnh u được gọi là đã duyệt xong 10 Depth-First Search (DFS) Các thông tin liên quan đến mỗi đỉnh v p(v): là đỉnh mà từ đó, DFS thăm đỉnh v d(v): thời điểm đỉnh v được thăm nhưng chưa duyệt xong f(v): thời điểm đỉnh v đã duyệt xong color(v) WHITE: chưa thăm GRAY: đã được thăm nhưng chưa duyệt xong BLACK: đã duyệt xong 11 Depth First Search - DFS DFS(u) { DFS() { ...
Tìm kiếm theo từ khóa liên quan:
Bài giảng Thuật toán ứng dụng Thuật toán ứng dụng Chu trình Euler Thuật toán Dijkstra Thuật toán Kruskal Disjoint-set structureGợi ý tài liệu liên quan:
-
Bài giảng Cơ sở truyền số liệu: Chương 3 - ĐH Bách Khoa Hà Nội
11 trang 155 0 0 -
Giáo trình Lý thuyết đồ thị: Phần 1 - PGS. Nguyễn Cam, PTS. Chu Đức Khánh
98 trang 62 0 0 -
Bài giảng Thuật toán ứng dụng: Tarjan DFS algorithm for finding bridges and articulation points
21 trang 60 0 0 -
Bài giảng Thuật toán ứng dụng: Chia để trị
31 trang 46 0 0 -
Thực hành Toán rời rạc - Chương 7: Đồ thị và các tính chất của đồ thị
10 trang 42 0 0 -
263 trang 38 0 0
-
Bài giảng Lý thuyết đồ thị: Chương 7 - TS. Lê Nhật Duy
19 trang 34 0 0 -
Bài giảng cơ sở lập trình nâng cao - Chương 8
37 trang 27 0 0 -
47 trang 25 0 0
-
Bài giảng môn Lý thuyết đồ thị - Chương 5: Bài toán đường đi ngắn nhất
69 trang 24 0 0