Thuật toán Bor vka

Một phần của tài liệu Mạng không dây địa hình xấu Thuật toán định tuyến và ứng dụng (Trang 42)

Đây là thuật toán ra đời sớm nhất để tìm ra MST, được phát minh bởi nhà toán học Séc là Otoka Boruvka vào năm 1926. Thuật toán bắt đầu với tất cả các nút đơn mà không có bất kỳ một kết nối nào giữa chúng. Ở phần đầu của thuật toán, mỗi nút chọn ra cạnh tốt nhất của nó với các hàng xóm. Các nút mà được tham gia được gọi là các siêu nút. Trong các vòng lặp sau mỗi siêu nút chọn ra cạnh có trọng số nhỏ nhất tới các siêu nút khác và với các cạnh mới đó, các siêu nút hợp lại với nhau. Ở vòng lặp cuối cùng chỉ có một siêu nút còn lại mà là MST của đồ thị ban đầu.

Đầu vào: E : Tập cạnh của đồ thị V : Tập các nút trong đồ thị w : Các trọng số của các cạnh N : Số nút trong đồ thị Đầu ra:

EMST : Các cạnh của cây lan tỏa nhỏ nhất

SNodes : Danh sách các siêu nút

F : Liên kết có trọng số nhỏ nhất được tìm thấy giữa hai nút sau một vài lần lặp

Khởi tạo:

SNodes := {node1,node3, …, nodeN} F := {} EMST := {} Phần chính: While <số phần tử trong EMST < N - 1> F : = FindBestLinkBetweenSupernodes(SNodes, G(V, E)) Snodes := Union(SNodes, F) EMST := EMST F F := {} End Các thủ tục:

Union (SNodes,F) : đây là chương trình con mà hòa nhập các siêu nút lại vào trong danh sách SNodes liên kết với danh sách các liên kết F và trả về các siêu nút được câp nhật trong danh sách SNodes.

FindBestLinkBetweenSupernodes (SNodes, G(V, E)) : tìm kiếm cạnh có trọng số nhỏ nhất đối với mỗi siêu nút được đưa ra từ danh sách SNodes tới các nút khác từ thông tin của đồ thị G(V, E). Nó trả về cạnh tìm thấy nếu có.

Độ phức tạp:

Thuật toán tìm ra MST với thời gian cỡ O(mlogn), với n là số nút trong mạng. Với số lần lặp nhiều nhất O(logn), ở mỗi vòng lặp số cạnh còn lại sẽ giảm đi 2 lần và O(m) là độ phức tạp về thời gian của mỗi vòng lặp.

Một phần của tài liệu Mạng không dây địa hình xấu Thuật toán định tuyến và ứng dụng (Trang 42)