Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 78 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
78
Dung lượng
1,05 MB
Nội dung
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Chương ĐỒ THỊ (Graph) CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Nội dung Các khái niệm Biểu diễn đồ thị máy tính Các thuật toán tìm kiếm đồ thị Tính liên thông đồ thị Tìm đường ngắn đồ thị Cây khung cực tiểu CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Các khái niệm Một đồ thị G = (V, E) bao gồm tập hữu hạn V nút hay đỉnh (vertices) tập hữu hạn E cặp đỉnh gọi cạnh (edge) Nếu (v1, v2) cặp đỉnh thuộc E có cạnh nối v1 v2 Nếu cạnh (v1, v2) khác với cạnh (v2, v1) đồ thị có hướng Khi đó, (v1, v2) cạnh có hướng từ v1 đến v2 Nếu thứ tự đỉnh đồ thị không quan tâm đồ thị vô hướng Các khái niệm CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Ví dụ: Đường đơn đường mà đỉnh đó, trừ đỉnh đầu đỉnh cuối khác CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Các khái niệm Chu trình đường đơn mà đỉnh đầu đỉnh cuối trùng Đồ thị G = (V, E) gọi liên thông cặp đỉnh phân biệt Vi Vj V có đường từ Vi đến Vj Đồ thị có trọng số đồ thị mà cạnh có gắn giá trị Biểu diễn đồ thị Có hai cách thường dùng để biểu diễn đồ thị G = (V, E): CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Biểu diễn danh sách kề (adjacency list) Biểu diễn ma trận kề (adjacency matrix) Danh sách kề thường sử dụng hơn, cung cấp cách súc tích để biểu diễn đồ thị thưa – số cạnh |E| nhỏ nhiều so với bình phương số đỉnh |V|2 – dễ nhìn Tuy nhiên, ma trận kề lại thường sử dụng để biểu diễn đồ thị dày – |E| gần với |V|2 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT a) Biểu diễn danh sách kề Một đồ thị G = (V, E) mảng Adj có |V| danh sách, danh sách đỉnh V Với đỉnh u ∈ V, danh sách kề Adj[u] chứa tất đỉnh v cho có cạnh (u, v) ∈ E Nghĩa là, Adj[u] chứa tất đỉnh kề với u G Các đỉnh danh sách kề có thứ tự tuỳ ý Biểu diễn danh sách kề CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Tổng độ dài tất danh sách kề đồ thị vô hướng 2|E| Biểu diễn danh sách kề CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Nếu G đồ thị có hướng, tổng độ dài tất danh sách kề |E| CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Biểu diễn danh sách kề Các danh sách kề điều chỉnh để biểu diễn đồ thị có trọng số (weighted graph) Đồ thị có trọng số đồ thị mà cạnh gán trọng số, nghĩa kết hợp với hàm trọng số w: E → R Ví dụ, G = (V, E) đồ thị có trọng số với hàm trọng số w, trọng số w(u, v) cạnh (u, v) ∈ E chứa với đỉnh v danh sách kề u 10 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT a) Giải thuật Kruskal Giải thuật Kruskal dựa sở giải thuật khung cực tiểu tổng quát GENERIC-MST Lúc đầu, đồ thị G = (V, E) xem rừng có |V| cây, đỉnh Tập A rỗng Tại bước giải thuật tìm cạnh an toàn (u, v) (có trọng số nhỏ không tạo thành chu trình), cạnh có hai đỉnh thuộc hai khác hợp hai lại thành Thêm (u, v) vào A Nếu rừng dừng, A tập chứa cạnh khung cực tiểu Ngược lại, tiếp tục tìm cạnh an toàn hợp hai lại thành 64 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Giải thuật Kruskal 65 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Giải thuật Kruskal 66 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Giải thuật Kruskal 67 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Giải thuật Kruskal 68 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Giải thuật Kruskal 69 Giải thuật Kruskal CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Các hàm dùng giải thuật: MAKE-SET(u): Khởi tạo tập hợp ban đầu chứa u FIND-SET(u): Trả tập chứa u Biểu thức FIND-SET(u) ≠ FINDSET(v) true u v thuộc hai tập hợp (hai cây) khác UNION(u, v): Hợp hai tập chứa u chứa v 70 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Giải thuật Kruskal Dòng 1-3 khởi tạo tập A rỗng tạo rừng chứa |V| cây, đỉnh Dòng cạnh E theo thứ tự trọng số không giảm: Có thể sử dụng hàng đơi ưu tiên thứ tự trọng số tăng dần bình thường Vòng lặp for dòng 5-8 kiểm tra xem cạnh (u, v) với đỉnh u v có không Nếu thêm cạnh vào tạo thành chu trình Ngược lại, hai đỉnh thuộc hai khác thêm cạnh (u, v) vào A dòng hợp hai lại dòng 71 Giải thuật Kruskal CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cách viết khác: 72 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT b) Giải thuật Prim Giống giải thuật Kruskal, giải thuật Prim dựa sở giải thuật tổng quát Các cạnh tập A giải thuật Prim hình thành đơn Cây khung hình thành đỉnh tùy ý đồ thị lớn dần toàn đỉnh phủ Tại bước cạnh nhẹ thêm vào A, nối A với đỉnh cô lập GA= (V, A) Kết thúc giải thuật, hàng đợi ưu tiên Q rỗng, A khung cực tiểu G 73 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Giải thuật Prim 74 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Giải thuật Prim 75 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Giải thuật Prim 76 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Giải thuật Prim Trong giải thuật thực thi, tập A gồm cạnh: A = {(v, π [v]): v ∈ V – {r} – Q} Khi giải thuật kết thúc, hàng đợi ưu tiên Q rỗng, tập A khung cực tiểu G: A = {(v, π [v]): v ∈ V – {r} Các dòng từ 1-5 thiết lập khóa đỉnh ∞ (ngoại trừ gốc r có khóa đỉnh xử lý đẩu tiên), cha đỉnh NIL, khởi tạo hàng đợi ưu tiên Q chứa tất đỉnh 77 Giải thuật Prim CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Dòng nhận dạng đỉnh u ∈ Q có liên quan đến cạnh nhẹ xuyên qua lát cắt (V-Q, Q) Trong lần lặp u = r (do dòng 4) Di chuyển u khỏi Q thêm vào tập đỉnh V-Q cây, thêm (u, π [u]) vào A Vòng lặp for dòng 8-11 cập nhật khóa key π đỉnh v kề với u Q 78 [...]... O(n2) 31 Bài tập CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Thực hiện duyệt đồ thị theo chiều sâu, chiều rộng trên đồ thị G dưới đây: 32 4 Tính liên thông của đồ thị CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Đồ thị liên thông là một đồ thị mà hai đỉnh bất kỳ liên thông với nhau Ví dụ: 2 3 A D H B C E 6 4 5 Là đồ thị liên thông Không là đồ thị liên thông 33 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 4 Tính liên thông của đồ thị Thành phần... Đồ thị vô hướng: 18 So sánh các phương pháp biểu diễn CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Đồ thị có hướng: 19 3 Các thuật toán tìm kiếm trên đồ thị CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Tìm kiếm theo chiều sâu (DFS - DepthFirst Search ) Tìm kiếm theo chiều rộng (BFS Breadth-First Search ) 20 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT a) Giải thuật DFS DFS (depth-first search - tìm kiếm theo chiều sâu) là giải thuật. .. diễn đồ thị có trọng số 14 c) Đồ thị có trọng số CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Ví dụ, nếu G = (V, E) là đồ thị có trọng số với hàm trọng số w, thì trọng số w(u, v) của cạnh (u, v) ∈ E được chứa trong hàng u và cột v của ma trận kề Nếu không có cạnh tồn tại, giá trị NIL (hay 0, ∞ ) được chứa 15 Đồ thị có trọng số CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Ma trận trọng số của G: 16 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT... làm lại bước 2 cho đến khi tất cả các đỉnh được duyệt BFS 27 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Giải thuật BFS 28 Giải thuật BFS Ví dụ: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Thực hiện tìm kiếm theo chiều rộng trên đồ thị G dưới đây: v1 v2 v3 v4 v5 v6 v7 v8 Bảng duyệt Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 v1 v2 v5 v6 v3 v7 v4 v8 29 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Giải thuật BFS BFS(v) /* Sử dụng queue Q kích thước n, CQINSERT,... kề CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Trong đồ thị G = (V, E) giả sử các đỉnh được đánh số từ 1, 2, …|V|, ma trận kề của G là một ma trận vuông A = (aij) có kích thước |V| × |V|, sao cho 1 nếu (i, j) ∈ E aij = 0 nếu (i, j) ∉ E 11 Biểu diễn bằng ma trận kề CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Biểu diễn đồ thị vô hướng bằng ma trận kề: 12 Biểu diễn bằng ma trận kề CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Biểu diễn đồ. .. 22 Giải thuật DFS CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Ví dụ: Thực hiện tìm kiếm theo chiều sâu trên đồ thị G sau: v1 v2 v3 v4 v5 v6 v7 v8 Bảng duyệt Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 v1 v2 v6 v3 v4 v8 v7 v5 23 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Giải thuật DFS DFS(v) 1 VISITED(v)=1; //VISITED dùng để đánh dấu các đỉnh đã được thăm 2 for (mỗi đỉnh w lân cận của v) if (VISITED(w)==0) DFS(w) 3 return 24 CẤU TRÚC DỮ LIỆU VÀ... cạnh nối các đỉnh của chúng tạo thành một đồ thị thành phần Đồ thị thành phần này được gọi là thành phần liên thông của đồ thị đã cho ⇒ Một đồ thị không liên thông được chia thành các đồ thị thành phần liên thông 34 Thành phần liên thông CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Ví dụ: A D B C H E Có hai thành phần liên thông 35 Đỉnh cắt, cạnh cầu CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Đỉnh cắt: v được gọi là đỉnh cắt nếu... đỉnh kề của v là O(n), vì có tối đa n đỉnh được thăm Thời gian O(n2) 25 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT b) Giải thuật BFS BFS (breadth-first search – tìm kiếm theo chiều rộng) là một trong những giải thuật đơn giản nhất để tìm kiếm (duyệt) trên đồ thị và là cơ sở cho nhiều thuật toán đồ thị khác Cho đồ thị G = (V, E) và đỉnh xuất phát là v Khác với DFS, sau khi thăm v, các đỉnh chưa được thăm kề... là giải thuật tìm “sâu hơn” trong đồ thị bất cứ lúc nào có thể Trong tìm kiếm theo chiều sâu, các cạnh được thăm dò theo đỉnh v vừa được tìm thấy gần nhất Khi tất các cạnh của v đã được thăm dò, thuật toán sẽ “quay lui” để thăm dò các cạnh dẫn đến những đỉnh mà từ đó v được tìm thấy 21 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Giải thuật DFS Xuất từ một đỉnh v bất kỳ của đồ thị G, chúng ta thực hiện như sau:... đồ thị vô hướng hay có hướng cần Θ (V + E) đơn vị bộ nhớ Biểu diễn bằng ma trận kề cần Θ (V2) đơn vị bộ nhớ, không phụ thuộc vào số cạnh Do tính đơn giản của ma trận kề nên nó thường được sử dụng khi đồ thị tương đối nhỏ Ngoài ra, nếu đồ thị không có trọng số, mỗi phần tử trong ma trận được biểu diễn bằng một bit thay vì một từ nhớ 17 So sánh các phương pháp biểu diễn CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT