Bài giảng Thuật toán ứng dụng: Đồ thị - Trương Xuân Nam

32 33 0
Bài giảng Thuật toán ứng dụng: Đồ thị - Trương Xuân Nam

Đ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 Thuật toán ứng dụng: Đồ thị cung cấp cho người học những kiến thức như: Khái niệm đồ thị; Biểu diễn đồ thị trong máy tính; Duyệt đồ thị; Đường đi ngắn nhất; Bài tập. Mời các bạn cùng tham khảo!

THUẬT TOÁN ỨNG DỤNG Đồ thị Nội dung Khái niệm đồ thị Biểu diễn đồ thị máy tính Duyệt đồ thị Đường ngắn Bài tập TRƯƠNG XUÂN NAM Phần Khái niệm đồ thị TRƯƠNG XUÂN NAM Khái niệm đồ thị ▪ Đồ thị = Sự trừu tượng hóa đối tượng mối liên hệ chúng thực tế ▪ ▪ ▪ ▪ Đường thành phố Đường nối mạng thiết bị kết nối Đường điện khu vực Mối quan hệ cá nhân mạng xã hội ▪ Các đối tượng = đỉnh ▪ Các mối quan hệ, kết nối = cạnh (cung) TRƯƠNG XUÂN NAM Khái niệm đồ thị ▪ Đồ thị = đỉnh + cung nối chúng ▪ ▪ ▪ ▪ G = (V, E) G = Graph (đồ thị) V = Vertices (đỉnh) E = Edges (cung) ▪ Tập V: tập đỉnh, thường đánh số từ đến n (hoặc từ đến n-1) ▪ Tập E: tập cung nối hai đỉnh, cung cặp (u, v), u = v ▪ Đồ thị có hướng: cung (u, v) cung (v, u) khơng có mối liên hệ đặc biệt (thường nói gọi tắt đồ thị) TRƯƠNG XUÂN NAM Khái niệm đồ thị ▪ Đa đồ thị: cặp (u, v) có nhiều cung nối chúng ▪ Đơn đồ thị: cặp (u, v) có tối đa cung ▪ Đồ thị vô hướng: cung (u,v) cung (v, u) một, không phân biệt ▪ Trường hợp người ta dùng từ cạnh (u, v) để ý nghĩa (u, v) (v, u) tương đương TRƯƠNG XUÂN NAM Độ đo đỉnh, cung, cạnh ▪ Nếu có cạnh (u, v) hai đỉnh u v gọi kề (đỉnh liền kề) ▪ Cạnh e = (u, v) gọi liên thuộc hay phụ thuộc đỉnh u (và đỉnh v, đương nhiên) ▪ Bậc đỉnh v = deg(v) = số cạnh phụ thuộc vào v = số đỉnh liền kề với v ▪ Trong đồ thị vô hướng: số đỉnh bậc lẻ chẵn ▪ Cung e = (u, v): e gọi cung khỏi u (và cung vào v) ▪ Số cung v deg+(v), số cung vào v deg-(v) ▪ Tổng deg+ def- (và số cung) ▪ Cung (u, v) có trọng số, G đồ thị trọng số TRƯƠNG XUÂN NAM Đường chu trình ▪ Đường từ u đến v = u liên tiếp di chuyển qua đỉnh kề để đến v ▪ Đường không tự cắt từ u đến v = trình di chuyển từ u đến v không thăm lại đỉnh qua (thường nói đường ta nói đường khơng tự cắt) ▪ Chu trình = đường từ u trở ▪ Một đường (chu trình) gọi đơn giản khơng chứa cạnh (cung) lặp ▪ Một đường (chu trình) gọi khơng chứa đỉnh lặp TRƯƠNG XUÂN NAM Liên thông ▪ Đồ thị vô hướng G: đồ thị liên thông (connected graph) cặp đỉnh có đường đến ▪ Đồ thị G: đồ thị liên thông mạnh (strongly connected graph) cặp đỉnh có đường đến ▪ Đồ thị G: đồ thị liên thông yếu (weakly connected graph) chuyển vơ hướng đồ thị liên thơng ▪ Đồ thị vô hướng G: đồ thị đầy đủ (completed graph) cặp đỉnh đề kề TRƯƠNG XUÂN NAM Liên thông ▪ Đồ thị vô hướng G khơng liên thơng chia thành đồ thị liên thông, đồ thị gọi thành phần liên thông (components) ▪ Một cạnh e gọi cầu loại bỏ e khỏi G làm tăng số lượng thành phần liên thông G ▪ Một đỉnh v gọi điểm khớp loại bỏ khỏi G làm tăng số lượng thành phần liên thông G TRƯƠNG XUÂN NAM 10 Ứng dụng DFS BFS ▪ DFS BFS: tính tốn thành phần liên thơng đồ thị cho trước ▪ BFS DFS: Phát chu trình đồ thị vơ hướng ▪ DFS: tính tốn thành phần liên thông mạnh đồ thị có hướng cho trước ▪ DFS: tính tốn cầu điểm khớp đồ thị vô hướng liên thông ▪ DFS: xếp topo đồ thị có hướng khơng chu trình (DAG) TRƯƠNG XN NAM 18 Ứng dụng DFS BFS ▪ BFS DFS: Tìm đường dài ▪ BFS: Tìm đường ngắn (chiều dài đường định nghĩa số lượng cạnh đường đó) ▪ BFS: Kiểm tra liệu đồ thị cho trước có đồ thị hai phía khơng TRƯƠNG XUÂN NAM 19 Phần Đường ngắn TRƯƠNG XUÂN NAM 20 Thuật toán dijsktra ▪ Bài toán: Đồ thị G, có n đỉnh, có hướng Khơng có cung có trọng số âm Tìm đường ngắn từ đến ▪ Ý tưởng: ▪ Giả thiết đường ngắn đường trực tiếp từ đến đỉnh cịn lại: • => 1: • => 2: • => 3: INF • => 4: INF • => 5: INF ▪ Thuật toán cố gắng giảm nhỏ giá trị xuống cách vòng qua đỉnh khác TRƯƠNG XUÂN NAM 21 Thuật toán dijsktra Đầu vào: - Mảng A[n][n] trọng số cung - Tìm đường từ P đến Q Dữ liệu dùng q trình tính tốn: - Mảng B[n]: B[I] lưu độ dài đường từ P đến I (bản chất ta tìm B[Q]) - Mảng C[n]: đánh dấu xem đỉnh I cố định chưa, đỉnh I cố định ~ tìm đường từ P đến I TRƯƠNG XUÂN NAM 22 Thuật toán dijsktra Khởi tạo ban đầu (có thể có nhiều cách): - Tất B[i] = +∞, riêng B[P] = - Cố định P (C[P] = true) - Đỉnh cố định k = P Lặp đến cố định Q (C[Q]=true): - Thử vòng qua đỉnh k: duyệt B[i], B[i] > B[k]+A[k][i] cập nhật B[i] = B[k]+A[k][i] - Chọn đỉnh cố định mới: k = Q + Duyệt C[i], C[i]=false B[i] < B[k] cập nhật k = i + C[k] = true TRƯƠNG XUÂN NAM 23 Thuật toán Floyd–Warshall ▪ Bài toán: Đồ thị G, có n đỉnh, có hướng Khơng tồn chu trình có tổng trọng số âm Tìm đường ngắn cặp đỉnh (p, q) ▪ Ý tưởng: Nếu từ đường từ p đến q khơng tốt vịng qua đỉnh k (tức từ p đến k từ k đến q) ta thay đường đường vòng qua k TRƯƠNG XUÂN NAM 24 Thuật toán Floyd–Warshall Đầu vào: - Mảng A[n][n] trọng số cung Dữ liệu dùng trình tính tốn: - Mảng B[n][n]: ma trận đường ngắn - Mảng C[n][n]: ma trận đỉnh trung gian Khởi tạo ban đầu (có thể có nhiều cách): for (int i = 1; i

Ngày đăng: 09/08/2021, 18:41

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

Tài liệu liên quan