Ta đánh giá thời gian của lệnh lặp (3) Số tối đa các lần lặp là O(JE|) Trong

Một phần của tài liệu Các thuật toán và đồ thị (Trang 33 - 35)

mỗi lần lặp ta cần thực hiện các phép tìm (4). (5) và phép hợp (6). Theo định lý 13.2 (mục 13.3), thời gian thực hiện lệnh lặp (3) là O(Ellog*|VỊ). Do đó thời gian chạy của thuật toán Kruskal là O(|E|log|VỊ + |Ellog*[|VỊ) = O(|Ellogl VỊ).

Tính đúng đắn của thuật toán Kruskal.

Ta cần chứng minh răng, cây T được xây dựng bởi thuật toán Kruskal là cây bao trùm ngắn nhất. Giả sử T = ƒe¡, e;„....e;¡}, n = |VỊ, trong đó ey là cạnh được chọn để thêm vào T ở bước thứ k (k = I,...,n - 1). Giả sử T? là một cây bao trùm ngắn nhất của đỗ thị. Nếu 1? chứa tất cả các cạnh trong T, thì T = T°?. Giả sử e¡ là cạnh đầu tiên trong T mà T? không chứa e;. Nếu ta bổ xung cạnh e;¡ vào I” thì một chu trình sẽ được tạo ra (e€¡, ©'¡,..., é,). Trong các cạnh é¡,..., eˆ„ thuộc T” phải có một cạnh không thuộc T, giả sử cạnh đó là e°¡. Theo giả thiết về e¡, thì các cạnh ei,...,ẹ¡ thuộc T”, nếu e”; không tạo thành chu trình e¡,....e;.¡. Do đó, theo cách chọn cạnh e;¡ ở bước 1 của thuật toán, c(e¡) <= c(€”;) (ở đây ta ký hiệu c(.) là độ dài của cạnh). Bây giờ trong cây T7 ta thay cạnh e°; bởi cạnh e; để nhận được cây T:¡. Và vì c(e;) <= c(©”;). nên T¡ cũng là cây bao trùm ngắn nhất. Nếu cây T còn có cạnh không thuộc cây T¡, thì bằng cách trên ta lại biến đổi T¡ thành T;. Cùng lắm là sau m phép biến đổi (m <= n - I), ta sẽ nhận được cây T chứa tất cả các cạnh của cây T, do đó T„= T. Trong quá trình biến đổi cây, tất cả các cây Tì, T›....Tiạ đều là cây bao trùm ngắn nhất, do đó T = T„ là cây bao trùm ngắn nhất.

BÀI TẠP.

1. Cho đồ thị định hướng trong hình I8. . Áp dụng thuật toán đi qua đồ thị theo bê rộng và theo độ sâu cho đô thị này khi xuât phát từ đỉnh a, đưa ra thứ tự các đỉnh được thăm cho mỗi cách duyệt. Vẽ ra cây tạo thành cho môi cách duyệt.

`

Hình 18.11. Đồ thị cho các bài tập 1. và 5.

Một phần của tài liệu Các thuật toán và đồ thị (Trang 33 - 35)