Tìm cây bao trùm ngắn nhất

Một phần của tài liệu Giáo trình Kỹ thuật lập trình (Trang 122)

Bài toán tìm cây bao trùm nhỏ nhất là một trong những bài toán tối ưu trên đồ thị có

ứng dụng trong nhiều lĩnh vực khác nhau của thực tế. Bài toán được phát biểu như sau: Cho G=<V, E> là đồ thị vô hướng liên thông với tập đỉnh V = {1, 2, . . ., n } và tập cạnh E gồm m cạnh. Mỗi cạnh e của đồ thịđược gán với một số không âm c(e)được gọi là

độ dài của nó. Giả sửH = <V, T> là một cây bao trùm của đồ thịG. Ta gọi độ dài c(H) của cây bao trùm H là tổng độ dài các cạnh của nó: ∑

∈ = T e e c H

c( ) ( ). Bài toán được đặt ra là, trong số các cây khung của đồ thị hãy tìm cây khung có độ dài nhỏ nhất của đồ thị.

Để giải bài toán cây bao trùm nhỏ nhất, chúng ta có thể liệt kê toàn bộ cây bao trùm và chọn trong sốđó một cây nhỏ nhất. Phương án như vậy thực sự không khả thi vì số cây bao trùm của đồ thị là rất lớn cỡ nn-2, điều này không thể thực hiện được với đồ thị với số đỉnh cỡ chục.

Để tìm một cây bao trùm chúng ta có thể thực hiện theo các bước như sau:

ƒ Bước 1. Thiết lập tập cạnh của cây bao trùm là φ . Chọn cạnh e = (i, j) có độ

dài nhỏ nhất bổ sung vào T.

ƒ Bước 2. Trong số các cạnh thuộc E \ T, tìm cạnh e = (i1, j1) có độ dài nhỏ nhất sao cho khi bổ sung cạnh đó vào T không tạo nên chu trình. Để thực hiện

điều này, chúng ta phải chọn cạnh có độ dài nhỏ nhất sao cho hoặc i1∈ T và j1∉ T, hoặc j1∈ T và i1∉ T.

ƒ Bước 3. Kiểm tra xem Tđã đủ n-1 cạnh hay chưa? Nếu Tđủn-1 cạnh thì nó chính là cây bao trùm ngắn nhất cần tìm. Nếu chưa đủ n-1 cạnh thì thực hiện lại bước 2.

Ví dụ. Tìm cây bao trùm nhỏ nhất của đồ thị trong hình 5.16. 2 20 4

33 8

1 18 16 9 6 17 14 3 4 5

Hình 5.16. Đồ thị vô hướng liên thông G=(V, E)

ƒ Bước 1. Đặt T=φ. Chọn cạnh (3, 5) có độ dài nhỏ nhất bổ sung vào T.

ƒ Buớc 2. Sau ba lần lặp đầu tiên, ta lần lượt bổ sung vào các cạnh (4,5), (4, 6). Rõ ràng, nếu bổ sung vào cạnh (5, 6) sẽ tạo nên chu trình vì đỉnh 5, 6 đã có mặt trong T. Tình huống tương tự cũng xảy ra đối với cạnh (3, 4) là cạnh tiếp theo của dãy. Tiếp đó, ta bổ sung hai cạnh (1, 3), (2, 3) vào T.

ƒ Buớc 3. Tập cạnh trong Tđã đủn-1 cạnh: T={ (3, 5 ), (4,6), (4,5), (1,3), (2,3)} chính là cây bao trùm ngắn nhất.

Một phần của tài liệu Giáo trình Kỹ thuật lập trình (Trang 122)

Tải bản đầy đủ (PDF)

(156 trang)