1. Trang chủ
  2. » Công Nghệ Thông Tin

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

214 17 0

Đ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

Nội dung

Chương 7. Đồ thị. Trong chương này, người học có thể hiểu được một số kiến thức cơ bản về: Một số khái niệm cơ bản của đồ 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ị. Mời các bạn cùng tham khảo để biết thêm các nội dung chi tiết.

co ng c om TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG Nguyễn Khánh Phương u du o ng th an Cấu trúc liệu giải thuật cu Computer Science department School of Information and Communication technology E-mail: phuongnk@soict.hust.edu.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt Course outline cu u du o ng th an co ng c om Chương Các kiến thức Chương Thuật toán đệ quy Chương Các cấu trúc liệu Chương Cây Chương Sắp xếp Chương Tìm kiếm Chương Cấu trúc liệu đồ thị CuuDuongThanCong.com https://fb.com/tailieudientucntt an co ng c om TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG Nguyễn Khánh Phương u du o ng th Chương Cấu trúc liệu đồ thị cu Computer Science department School of Information and Communication technology E-mail: phuongnk@soict.hust.edu.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt Các ứng dụng thực tế đồ thị cu u du o ng th an co ng c om • Có tiềm ứng dụng nhiều lĩnh vực: – Mạng máy tính – Mạng giao thông – Mạng điện – Mạng cung cấp nước – Lập lịch – Tối ưu hóa luồng, thiết kế mạch – Phân tích gen DNA – Trị chơi máy tính – Thiết kế hướng đối tượng – … NGUYỄN KHÁNH PHƯƠNG Bộ môn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt N i dung cu u du o ng th an co ng c om Một số khái niệm đồ thị Biểu diễn đồ thị Các thuật toán duyệt đồ thị Một số ứng dụng tìm kiếm đồ thị CuuDuongThanCong.com https://fb.com/tailieudientucntt N i dung cu u du o ng th an co ng c om Một số khái niệm đồ thị Biểu diễn đồ thị Các thuật toán duyệt đồ thị Một số ứng dụng tìm kiếm đồ thị CuuDuongThanCong.com https://fb.com/tailieudientucntt Một số khái niệm đồ thị cu u du o ng th an co ng c om 1.1 Đồ thị vơ hướng có hướng 1.2 Một số khái niệm đồ thị 1.3 Một số dạng đồ thị đặc biệt NGUYỄN KHÁNH PHƯƠNG Bộ môn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt Đồ thị vô hướng (Undirected Graphs) c om Định nghĩa Đơn (đa) đồ thị vô hướng G = (V,E) cặp gồm: • Tập đỉnh V tập hữu hạn phần tử, phần tử gọi đỉnh • Tập cạnh E tập (họ) khơng có thứ tự dạng ng th an co ng (u, v), với u, v  V, u≠v du o v cu u u (u, v) (w, v) w Đa đồ thị vô hướng Đơn đồ thị vô hướng NGUYỄN KHÁNH PHƯƠNG Bộ môn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt Đơn đồ thị vơ hướng (Simple Graph) • Ví dụ: Đơn đồ thị G1 = (V1, E1), c om V1={a, b, c, d, e, f, g, h}, co ng E1={(a,b), (b,c), (c,d), (a,d), (d,e), (a,e), (d,b), (f,g)} f an a th b du o ng e c h g cu u d Đồ thị G1 NGUYỄN KHÁNH PHƯƠNG Bộ môn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt Đa đồ thị vô hướng (Multi Graphs) • Ví dụ: Đa đồ thị G2 = (V2, E2), c om V2={a, b, c, d, e, f, g, h}, an co ng E2={(a,b), (b,c), (b,c), (c,d), (a,d), (d,e), (a,e), (a,e), (a, e), (d,b), (f,g)} u cu Cạnh lặp e du o ng th a b f h c g d Đồ thị G2 NGUYỄN KHÁNH PHƯƠNG Bộ mơn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt Tìm đỉnh rẽ nhánh du o ng th an co ng c om Yêu cầu: Tìm đỉnh rẽ nhánh (cut vertex / articulation point) đơn đồ thị vô hướng G = (V, E) (không thiết phải liên thông) Trả lời: • Brute force: thời gian tính O(V(V + E)) • DFS sửa đổi: thời gian tính O(E + V) cu u Đỉnh v gọi đỉnh rẽ nhánh đồ thị G xóa đỉnh v khỏi đồ thị cạnh nối chúng tăng số thành phần liên thông đồ thị G CuuDuongThanCong.com https://fb.com/tailieudientucntt Tìm đỉnh rẽ nhánh: thuật tốn brute force • Brute force: với đỉnh v đồ thị cu u du o ng th  Thời gian tính O(V(V + E)) an co ng c om – Xóa đỉnh v khỏi đồ thị : O(E) – Kiểm tra tính liên thông đồ thị BFS/DFS : O(V+E) (nếu đồ thị không liên thông  đỉnh v đỉnh rẽ nhánh) – Thêm lại đỉnh v vào đồ thị : O(E) CuuDuongThanCong.com https://fb.com/tailieudientucntt Tìm đỉnh rẽ nhánh: thuật tốn brute force cu u du o ng th an co ng c om • adj[][]: ma trận kề kích thước VxV (adj[i][j]=1 đồ thị có cạnh (i, j); trái lại = 0) • count: trả số đỉnh rẽ nhánh đồ thị • cutVertex[i] = true đỉnh i đỉnh rẽ nhánh (i CuuDuongThanCong.com https://fb.com/tailieudientucntt cu u du o ng th an co ng c om Tìm đỉnh rẽ nhánh: thuật tốn brute force 203 CuuDuongThanCong.com https://fb.com/tailieudientucntt Tìm đỉnh rẽ nhánh: thuật tốn DFS sửa đổi c om Cạnh ngược (4, 2) nối đỉnh với tổ tiên đỉnh  xóa đỉnh (cha DFS) khỏi đồ thị, tồn đường thông qua cạnh ngược (4, 2) an co ng DFS(0) cu u du o ng th Nếu tồn cạnh ngược (v, w) DFS: dù xóa đỉnh u cha v DFS, ta từ v đến w thơng qua cạnh ngược (v, w)  xóa u khơng làm tăng số thành phần liên thông đồ thị  u w đỉnh rẽ nhánh  Đỉnh u đỉnh rẽ nhánh ?? CuuDuongThanCong.com https://fb.com/tailieudientucntt ng co y x cu u du o ng th an Giả sử DFS, đỉnh u có đỉnh v cho T(v) có gốc v: (a) Có đỉnh x kề với đỉnh y (y thăm trước đỉnh u), tức (x, y) cạnh ngược  u bị xóa khỏi đồ thị, tồn đường từ đỉnh T(v) đến y  điều với tất u đỉnh u khơng phải đỉnh rẽ nhánh (b) khơng có đỉnh (gọi chung x) kề với đỉnh y đỉnh thăm trước đỉnh u DFS (tức khơng tồn cạnh ngược (x, y))  đó, xóa đỉnh u khỏi đồ thị, khơng tồn đường đỉnh T(v) đỉnh thăm trước đỉnh u  T(v) bị ngắt kết nối khỏi đồ thị đỉnh u bị xóa khỏi đồ thị  đỉnh u đỉnh rẽ nhánh c om Đỉnh u đỉnh rẽ nhánh ?? CuuDuongThanCong.com (a) (b) https://fb.com/tailieudientucntt Đỉnh u đỉnh rẽ nhánh ?? co ng c om Đỉnh u đỉnh rẽ nhánh hai trường hợp sau xảy ra: • u gốc DFS u có nhiều • u khơng gốc DFS u có v cho khơng có đỉnh T(v) kề với tổ tiên u DFS (tức không tồn cạnh ngược nối đỉnh thuộc T(v) với đỉnh tổ tiên u) th cu u du o ng y an Xác định trường hợp nào??? x CuuDuongThanCong.com https://fb.com/tailieudientucntt Đỉnh u đỉnh rẽ nhánh ?? • c om Với đỉnh u: lưu • d[u] thời điểm bắt đầu thăm đỉnh u low[u] = d[w]: với w nút có thời điểm thăm nhỏ nhất, w tổ tiên u, x đỉnh thuộc T(u) (x u), có cạnh (x, w) (tức cạnh ngược) đồ thị • parent[u]!=v cu u du o ng th an co ng low[u] = {d[u], {d[y]: tồn cạnh ngược (x, y) với x cháu u, y tổ tiên u}} Cách tính low[u]: giả sử gọi DFS(u) • Khởi tạo: low[u] = d[u] • For each v Adj[u]: – Cạnh (u, v): low[u] = (low[u], low[v])  v chưa thăm: visited[v]=false – Cạnh ngược (u, v): low[u] = min(low[u], d[v]) • v thăm: visited[v]=true CuuDuongThanCong.com https://fb.com/tailieudientucntt Đỉnh u đỉnh rẽ nhánh ?? co ng c om Đỉnh u đỉnh rẽ nhánh hai trường hợp sau xảy ra: • u gốc DFS u có nhiều • u khơng gốc DFS u có v cho khơng có đỉnh T(v) kề với tổ tiên u DFS (tức không tồn cạnh ngược nối đỉnh thuộc T(v) với đỉnh tổ tiên u) th if (parent[u] != NULL && low[v] >=d[u]) cutVertex[u] =true; cu u du o ng y an Xác định trường hợp nào??? x CuuDuongThanCong.com https://fb.com/tailieudientucntt Tìm đỉnh rẽ nhánh main() for each u  V parent[u] = NULL; visited[u] = false; cutVertex[u] = false; time = 0; for each u  V if (visited[u] == false) DFS(u); for each u  V //In danh sách đỉnh rẽ nhánh if (cutVertex[u]) coutd[u]) print(canh cau (u, v)); } 10 else if (parent[u] != v) low[u] = min(low[u], d[v]); CuuDuongThanCong.com https://fb.com/tailieudientucntt 214 ... outline cu u du o ng th an co ng c om Chương Các kiến thức Chương Thuật toán đệ quy Chương Các cấu trúc liệu Chương Cây Chương Sắp xếp Chương Tìm kiếm Chương Cấu trúc liệu đồ thị CuuDuongThanCong.com... NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG Nguyễn Khánh Phương u du o ng th Chương Cấu trúc liệu đồ thị cu Computer Science department School of Information and Communication technology E-mail: phuongnk@soict.hust.edu.vn... bán bậc vào bán bậc v =0 deg+(a)= a- đỉnh nguồn cu deg-(a) f u a d deg-(d) = deg+(d)= CuuDuongThanCong.com e deg-(e) = deg+(e)= e – đỉnh đích (target) deg-(f) = deg+(f)= NGUYỄN KHÁNH PHƯƠNG Bộ

Ngày đăng: 29/05/2021, 09:32