Bài toán sắp xếp Tôpô

Một phần của tài liệu Tiểu luận môn học THIẾT KẾ VÀ PHÂN TÍCH THUẬT TOÁN CÁC THUẬT TOÁN CƠ BẢN VỀ ĐỒ THỊ (Trang 29)

Phần này chỉ ra phương pháp tìm kiếm sâu có thể được sử dụng để thực hiện một sắp xếp Tôpô của một đồ thị vô hướng có chu trình là như thế nào, hoặc có khi nó được gọi là một “dag” (directed acylic graph). Một sắp xếp Tôpô của một đồ thị vô hướng có chu trình G = (V,E) là một trật tự tuyến tính trong đó nếu G chứa một cạnh (u,v), sau đó u xuất hiện trước v trong thứ tự. (Nếu đồ thị không có chu trình thì không có trật tự tuyến tính là thích hợp) Một sắp xếp Tôpô của một đồ thị có thể được hiển thị như một thứ tự của các cạnh của nó dọc theo một đường ngang vì thế tất cả các cạnh có hướng đi từ trái sang phải. Sắp xếp Tôpô có điểm khác với những loại sắp xếp thông thường đã học ở phần II.

Các đồ thị vô hướng có chu trình được sử dụng trong nhiều ứng dụng để chỉ ra quyền ưu tiên giữa các sự kiện. Hình 22.7 cho một ví dụ về các phát sinh trong khi Giáo sư Bumstead mặc áo quần vào một sáng nọ. Ông phải mặc áo quần trước khi làm những việc khác (như mang tất trước khi mang giày..). Có thể những vấn đề khác được đặt theo một thứ tự nào đó (ví dụ như: mang tất và quần dài). Một cạnh có hướng (u,v) trong đồ thị có hướng có chu trình của Hình 22.7 (a) cho biết áo quần u phải được mặc trước áo quần v. Một sắp xếp tôpô của dag này đưa ra một thứ tự để mặc áo quần. Hình 22.7 (b) chỉ ra thứ tự sắp xếp tôpô theo các đỉnh dọc theo đường ngang trong đó tất cả các đỉnh có hướng đi từ trái sang phải.

Hình 22.7 (a) Giáo sư Bumstead sắp xếp tôpô áo quần của ông khi mặc. Mỗi cạnh vô hướng (u,v) có nghĩa là áo quần u phải mặc trước áo quần v. Sự khám phá ra và thời gian kết thúc từ thuật toán tìm kiếm theo chiều sâu được hiển thị tiếp theo cho mỗi đỉnh. (b) Giống như đồ thị hiển thị sắp xếp tôpô. Các đỉnh của nó là áo quần từ trái sang phải để giảm bớt thời gian kết thúc. Chú ý rằng tất cả các cạnh vô hướng đi từ trái sang phải.

Thuật toán sắp xếp tôpô của một đồ thị vô hướng có chu trình được minh họa một cách đơn giản như sau:

TOPOLOGICAL-SORT (G)

1. Gọi DFS (G) để tính toán thời gian kết thúc f[v] cho mỗi đỉnh v. 2. Mỗi đỉnh được kết thúc khi chèn nó trước một liên kết danh sách. 3. Trở lại danh sách liên kết của các đỉnh.

Hình 22.7 (b) hiển thị sắp xếp tôpô các cạnh xuất hiện trong thứ tự đảo ngược của thời gian kết thúc chúng là như thế nào.

Chúng ta có thể thực hiện một sắp xếp tôpô trong thời gian Ө(V+E), khi tìm kiếm theo chiều sâu mất Ө(V+E) thời gian và nó mất Ө(1) thời gian để chèn mỗi đỉnh của các đỉnh |V| trước danh sách liên kết.

Chúng ta chứng minh tính đúng đắn của thuật toán này sử dụng bổ đề khóa chỉ dẫn những thuộc tính các đồ thị vô hướng có chu trình.

Một đồ thị vô hướng G là có chu trình khi và chỉ khi một tìm kiếm theo chiều sâu của G sinh ra không có cạnh sau.

Hình 22.8 Một đồ thị vô hướng có chu trình cho sắp xếp tôpô

Chứng minh

⇒:

Giả sử rằng đó là một cạnh (u,v) có cạnh sau. Vì vậy, đỉnh v là một hình thức nguyên thủy của đỉnh u trong rừng tìm kiếm chiều sâu. Đó là một đường đi từ v đến u trong G, và cạnh sau (u,v) thành một chu trình đầy đủ.

⇐:

Giả sử rằng G chứa một chu trình c. Chúng ta chỉ ra rằng một tìm kiếm theo chiều của G sinh ra một cạnh sau. Cho v là đỉnh đầu tiên được tìm ra trong c, và cho (u,v) là cạnh có trước trong c. Tại thời điểm đó d[v], các đỉnh của c từ một đường đi của các cạnh trắng từ v đến u. Theo định lý đường đi trắng, đỉnh u trở thành một đỉnh con của v trong rừng tìm kiếm theo chiều sâu. Vì vậy, (u,v) là một cạnh sau.

Định lý 22.12

TOPOLOGICAL-SORT (G) là kết quả một sắp xếp tôpô của một đồ thị vô hướng có chu trình.

Chứng minh

Giả sử rằng DFS duyệt trên một đồ thi có hướng có chu trình G = (V,E) để xác định thời gian kết thúc cho các đỉnh của nó. Nó đáp ứng để chỉ ra một số cặp đỉnh riêng biệt u, v ∈ V, nếu ở đó một cạnh trong G từ u đến v, thì f[v] < f[u]. Cho

bất kỳ cạnh (u,v) được thăm bởi DFS(G). Khi cạnh đó được thăm, v không thể là xám, trừ khi v sẽ là đỉnh cha của u và (u,v) sẽ là một cạnh sau, trái với Bổ đề 22.11. Bởi vậy, v phải là trắng hoặc đen. Nếu v là trắng, nó trở thành đỉnh con của u, thì f[v] < f[u]. Nếu v là đen, nó đã được kết thúc, do đó f[v] đã được tập hợp. Bởi vì chúng ta vẫn thăm từ u, chúng ta đã gán một nhãn thời gian cho f[u] rồi, và vì thế lần đầu chúng thực hiện, chúng ta sẽ có f[v] < f[u] là tốt nhất. Vì vậy, để một cạnh (u,v) bất kỳ trong đồ thị vô hướng có chu trình, chúng ta có f[v] < f[u], định lý được chứng minh.

BÀI TẬP

22.4-1

Chỉ ra thứ tự của các đỉnh được tạo lập bởi TOPOLOGICAL-SORT khi nó duyệt trên đồ thị vô hướng có chu trình của hình 22.8, dưới giả định của Bài tập 22.3-2.

22.4-2

Đưa ra một thuật toán thời gian tuyến tính như đưa dữ liệu vào cho một đồ thị vô hướng có chu trình G = (V,E) và hai cạnh s và t, số đường đi quay lui từ s đến t trong G. Ví dụ, trong đồ thị vô hướng có chu trình của Hình 22.8, chính xác là có 4 đường đi từ đỉnh p đến đỉnh v: pov, poryv, posryv and psryv. (thuật toán này chỉ cần để đếm các đường đi, không cần liệt kê chúng).

22.4-3

Đưa ra một thuật toán xác định có hay không một đồ thị vô hướng G=(V,E) chứa một chu trình. Thuật toán đó sẽ thực hiện trong thời gian O(V), độc lập với |E|.

22.4-4

Chứng minh hoặc bác bỏ: Nếu một đồ thị vô hướng G chứa các chu trình, thì TOPOLOGICAL-SORT (G) đưa ra một thứ tự đỉnh giảm đến mức tối thiểu số cạnh “xấu” trái với thứ tự được đưa ra.

22.4-5 (adsbygoogle = window.adsbygoogle || []).push({});

Một phương thức khác để thực hiện sắp xếp tôpô trên một đồ thị vô hướng có chu trình G = (V,E) là cách lặp đi lặp lại nhiều lần tìm một đỉnh có bậc vào là 0, nó là dữ liệu ra, và chuyển nó và tất cả các cạnh đi ra của nó từ đồ thị. Giải thích

công cụ đó có ý nghĩa như thế nào mà nó duyệt trong thời gian O(V+E). Điều gì sẽ xảy ra đối với thuật toán đó nếu G có các chu trình?

Một phần của tài liệu Tiểu luận môn học THIẾT KẾ VÀ PHÂN TÍCH THUẬT TOÁN CÁC THUẬT TOÁN CƠ BẢN VỀ ĐỒ THỊ (Trang 29)