Cách hoạt động?
Bài học 3 trên 9 trong khóa học Thuật toán Kruskal: thuật toán trên đồ thị của Coddy.
Cấu trúc union-find duy trì một mảng parent. Mỗi đỉnh ban đầu là gốc của chính nó. Mọi thao tác đều dựa trên hai thao tác sau:
- find(x): lần theo các liên kết
parentcho đến khi bạn đến một gốc, tức là đỉnh có đỉnh cha là chính nó. Hai đỉnh được kết nối khi chúng có cùng gốc. - union(a, b): trỏ một gốc đến gốc còn lại, gộp hai tập hợp.
Thuật toán Kruskal:
- Xử lý các cạnh theo thứ tự trọng số từ nhỏ nhất đến lớn nhất.
- Với mỗi cạnh, tìm gốc của hai đầu mút bằng
find. Nếu chúng khác nhau, cạnh đó nối hai phần riêng biệt: gộp chúng bằngunionrồi cộng trọng số của cạnh vào tổng. - Nếu hai gốc giống nhau, cạnh đó sẽ tạo thành một chu trình, vì vậy hãy bỏ qua.
Sau khi xử lý mọi cạnh, các cạnh đã chọn tạo thành MST (với đồ thị liên thông, có đúng n - 1 cạnh).
Tự làm thử
Bài học này không có thử thách code.
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Thuật toán Kruskal: thuật toán trên đồ thị
2Thuật toán
Cách hoạt động?Mã giảTriển khai (phần 1)Triển khai (phần 2)Tự luyện tập: Trình biên dịch C online