Cây bao trùm nhỏ Bách khoa toàn thư mở Wikipedia Tìm bao trùm nhỏ (tiếng Anh: minimum spanning tree) toán tối ưu có nhiều ứng dụng thực tế Nó toán tìm hệ thống liên thông với chi phí nhỏ nhất, ngược lại, vói lợi nhuân lớn Hai thuật toán tìm bao trùm nhỏ lớn thường nhắc đến thuật toán Prim thuật toán Krusskal Xem thêm Thuật toán tìm bao trùm Mục lục Bài toán Giải thuật Prim 2.1 Vài nét R C Prim 2.2 Mô tả 2.3 Giả mã 2.4 Một chương trình đầy đủ ngôn ngữ Pascal 2.5 Các thao tác Heap Giải thuật Kruskal 3.1 Mô tả 3.2 Giả mã 3.2.1 Phân tích 3.2.2 Tổ chức liệu 3.2.3 Mã Cây bao trùm nhỏ đồ thị mặt phẳng Bài toán Cho G=(X,E) đồ thị liên thông Ngoài ra, hàm trọng số W(e) nhận giá trị thực, xác định tập cạnh E G Cả hai thuật toán Prim Kruskal dựa tư tưởng giải thuật tham lam: Ở bước thuật toán ta chọn bổ sung vào cạnh có trọng số nhỏ Giải thuật Prim Giải thuật Prim dựa cấu trúc giải thuật tìm bao trùm theo chiều rộng chiều sâu, thay đổi tiêu chuẩn chọn đỉnh bổ sung vào bước Vài nét R C Prim Robert Clay Prim (sinh 1921 Sweetwater, Texas) nhà toán học khoa học máy tính Mỹ Năm 1941 ông lấy cử nhân khoa kỹ thuật điện đại học Princeton Sau năm 1949, ông nhận Ph.D toán học Giải thuật mang tên Prim tìm từ năm 1930 nhà toán học Vojtěch Jarník Prim hoàn thiện vào năm 1957 Mô tả Gọi T bao trùm xây dựng Chọn đỉnh s G cho vào T Khi T có đỉnh chưa có cạnh Nếu T gồm tất đỉnh G T bao trùm cần tìm Kết thúc Nếu G có đỉnh không thuộc T, G liên thông nên có cạnh nối đỉnh T với đỉnh T, chọn cạnh có trọng số nhỏ số cho vào T Quay lại Giả mã Giải thuật trình bày Prim dễ dàng thực ta quan sát đồ thị biểu diễn mặt phẳng với số đỉnh Tuy nhiên để cài đặt thành chương trình chạy máy tính cần phân tích thêm số điểm Liệu sử dụng hàng đợi (queue) giống giải thuật tìm bao trùm theo chiều sâu không? Có Nhưng điều khác biệt ta sử dụng hàng đợi có ưu tiên, tiêu chuẩn ưu tiên cạnh nối đỉnh bổ sung vào T nhỏ Một cấu trúc thuận lợi cho hàng đợi có ưu tiên cấu trúc đống (heap) sử dụng giải thuật xếp vun đống giải thuật xây dựng mã Huffman Giả sử G=(X,E) đồ thị liên thông, Ajd(u), danh sách đỉnh kề đỉnh u L(e) hàm trọng số xác đinh với moi cạnh Trong đoạn mã sau ta dùng hàm COLOR(u) để tô màu đỉnh G màu WHITE, GRAY, BLACK để trạng thái chưa xét, xét xét xong đỉnh, hàm PARENTS(u) đỉnh cha đỉnh u cây, hàm DISTAN(u,T) trọng số nhỏ cạnh nối từ đỉnh u T đến đỉnh T Ta sử dụng cấu trúc HEAP làm hàng đợi ưu tiên chứa đỉnh chờ xét Ở bước khởi tạo, đỉnh r đưa vao Heap Số phần tử đống n=1 Cho đến hàng đợi Heap khác rỗng ta thực bước sau: lấy đỉnh u nằm gốc Heap để đưa vào Đối với đỉnh u bổ sung vào ta duyệt qua tất đỉnh v thuộc danh sách kề với Nếu đỉnh v chưa thuôch T không nằm đống ta chèn v vào đống, đỉnh v nằm đống đợi ta tính lại khoảng cách từ v với tập đỉnh nằm T, vun lại đống Sau tất đỉnh ) duyệt qua cách thì đỉnh u duyệt xong đưa vào Procedure Prim (G, r, W(e)) { Var list COLOR(u), PARENTS(u), DISTAN(u),Heap H For each u of E { COLOR(u)= WHITE PARENTS(u)=Null DISTAN(u)= M } H(1)=r n=1 DISTAN(r)=0 While n> u=H(1) n=n-1 Color(u)=BLACK For each v of Ajd(u) { if (Color(v)=WHITE) or ((Color(v)=GRAY) and (DISTAN(v)=0) and (CanhKe[k]0) and DISTAN(H(k))