Minimum Spanning Tree

Một phần của tài liệu Khảo sát thực nghiệm các thuật toán tìm đường đi ngắn nhất và ứng dụng (Trang 55 - 56)

Thuật toán Thorup [19] xây dựng cây phân tầng từ một đồ thị vô hƣớng G

bằng cách dựa trên các giá trị cạnh. Tuy nhiên, việc phân vùng đối với đồ thị ban đầu mất thêm thời gian sắp xếp các cạnh. Chính vì vậy, Thorup xây dựng phân vùng dựa trên cây khung nhỏ nhất nó MST(G). Thorup xây dựng cây khung nhỏ nhất trong thời gian tuyến tính dựa trên thuật toán của hai nhà khoa học Fredman và Willard [10]. Tuy vậy, thuật toán này dựa trên hàng đợi ƣu tiên đƣợc gọi là đống atomic [10], cấu trúc dữ liệu này tuyến tính khi n> và không thể thực hiện đƣợc với các máy tính hiện tại. Vì vậy chúng ta sẽ sử dụng thuật toán tìm cây khung nhỏ nhất Kruskal[5].

Thuật toán Kruskal[5] sẽ xây dựng tập cạnh của cây khung nhỏ nhất

theo từng bƣớc. Trƣớc hết sắp xếp các cạnh của đồ thị G theo thứ tự không giảm của độ dài( hoặc trọng số). Bắt đầu từ tập

ở mỗi bƣớc ta sẽ lần lƣợt duyệt trong danh sách cạnh đã sắp xếp, từ cạnh có độ dài nhỏ đến cạnh có độ dài lớn hơn, để tìm ra cạnh mà việc bổ xung nó vào tập không tạo

56

thành chu trình trong tập này. Thuật toán sẽ kết thúc khi ta thu đƣợc tập gồm −1 cạnh.

Kruskal’s minimum spanning tree

1. A = null

2. for each vertex v of the graph 3. MAKE-SET(v)

4. Sort the edges of the graph into ascending order by weight w 5. for each edge(u, v) of the graph, taken in ascending order by weight 6. if FIND-SET(u) ≠ FIND-SET(v)

7. A = A∪{(u, v)} 8. UNION(u, v) 9 return A

Sắp xếp các cạnh trong thứ tự không giảm mất thời gian ( log ). Tổng thời gian chạy xác định các cạnh nối hai cây khác nhau trong rừng là (

( , )). Giá trị

là giá trị hàm ngƣợc của hàm Ackermann (hàm tăng trƣởng chậm -

≤ 4).

Một phần của tài liệu Khảo sát thực nghiệm các thuật toán tìm đường đi ngắn nhất và ứng dụng (Trang 55 - 56)

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

(98 trang)