Phân tích chặt chẽ hơn thuật toán của Borůvka đã sửa đổi


11

Thuật toán của Borůvka là một trong những thuật toán tiêu chuẩn để tính cây bao trùm tối thiểu cho đồ thị , với .G=(V,E)|V|=n,|E|=m

Mã giả là:

MST T = empty tree
Begin with each vertex as a component
While number of components > 1
    For each component c
       let e = minimum edge out of component c
       if e is not in T
           add e to T  //merging the two components connected by e

Chúng tôi gọi mỗi lần lặp của vòng lặp bên ngoài là một vòng. Trong mỗi vòng, vòng lặp bên trong sẽ cắt giảm số lượng thành phần ít nhất là một nửa. Do đó, có nhiều nhất là các vòng . Trong mỗi vòng, vòng lặp bên trong nhìn vào mỗi cạnh nhiều nhất hai lần (một lần từ mỗi thành phần). Do đó, thời gian chạy tối đa là .O(logn)O(mlogn)

Bây giờ, giả sử sau mỗi vòng, chúng ta loại bỏ tất cả các cạnh chỉ kết nối các đỉnh trong cùng một thành phần và cũng loại bỏ các cạnh trùng lặp giữa các thành phần, để vòng lặp bên trong chỉ nhìn vào một số cạnh m '<m là các cạnh có trọng số tối thiểu kết nối hai thành phần bị ngắt kết nối trước đó.

Làm thế nào để tối ưu hóa này ảnh hưởng đến thời gian chạy?

Nếu chúng ta bằng cách nào đó biết rằng trong mỗi vòng, nó sẽ cắt giảm một nửa số cạnh, thì thời gian chạy sẽ được cải thiện đáng kể: .T(m)=T(m/2)+O(m)=O(m)

Tuy nhiên, trong khi tối ưu hóa sẽ giảm đáng kể số lượng cạnh được kiểm tra, (chỉ có 1 cạnh cho vòng cuối cùng và nhiều nhất là # các thành phần chọn 2 nói chung), không rõ bằng cách nào / nếu chúng ta có thể sử dụng thực tế này để thắt chặt phân tích của thời gian chạy.


Trong trường hợp xấu nhất (một chuỗi), bạn sẽ loại bỏ chính xác một cạnh trên mỗi vòng, do đó bạn không thể sử dụng thực tế đó để cải thiện giới hạn cho biểu đồ chung. Bạn có thể xem xét ví dụ chỉ hoàn thành đồ thị mặc dù.
Xodarap

@Xodarap nếu là một đường dẫn đơn giản (đó có phải là ý của chuỗi không?), Thì trong vòng đầu tiên bạn chọn ít nhất một nửa các cạnh. Các cạnh này được loại bỏ từ các vòng tiếp theo. G
Joe

Lưu ý rằng bạn có thể sử dụng một trong các cấu trúc tìm kiếm được tối ưu hóa cao để cải thiện thuật toán này.
Raphael

Câu trả lời:


5

Có thể tạo các trường hợp thử nghiệm cho các đồ thị chung trong đó bước Borůvka của bạn sẽ không giảm một nửa số cạnh trong mỗi bước, mặc dù nó giảm một nửa số đỉnh. Một lưu ý thú vị là tối ưu hóa mà bạn đề xuất hoạt động cho các đồ thị phẳng. Điều này là do các đồ thị phẳng i, e . Và nói chung, nó dẫn đến một sự tăng tốc cho lớp các đồ thị nhỏ khép kín.|E|3|V|6|E|=O(|V|)

Tài liệu tham khảo:

  • Luận văn thạc sĩ, Claude Anderson (trên trang 100 trường hợp đầu vào tồi tệ nhất cho thuật toán của Borůvka được mô tả). [liên kết]

  • "Hai thuật toán thời gian tuyến tính cho MST trên các lớp đồ thị đóng nhỏ". Archivum mathicalum 40 (3): 315 Ném320, 2004. [link]

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.