Giả sử các cạnh không bị ảnh hưởng, có trọng lượng duy nhất và không có đường dẫn âm, liệu các thuật toán này có tạo ra cùng một Cây kéo dài tối thiểu không?
Giả sử các cạnh không bị ảnh hưởng, có trọng lượng duy nhất và không có đường dẫn âm, liệu các thuật toán này có tạo ra cùng một Cây kéo dài tối thiểu không?
Câu trả lời:
Tìm thấy điều này nói rằng nếu tất cả các điều kiện tôi đã đề cập ở trên được đáp ứng, một biểu đồ nhất thiết phải có MST duy nhất. Do đó, theo câu hỏi của tôi, thuật toán của Kruskal và Prim nhất thiết phải tạo ra cùng một kết quả.
Nếu MST là duy nhất, tất cả các thuật toán sẽ bắt buộc sản xuất nó.
Nếu MST không phải là duy nhất, các đầu ra có thể khác nhau do các lệnh xử lý nút khác nhau (thậm chí hai triển khai riêng biệt của cùng một thuật toán có thể), nhưng tổng trọng số sẽ giống nhau. Trong trường hợp này, các MST là sự nhầm lẫn.
Để thêm vào câu trả lời của Yves Daoust , biểu đồ sau
Trong biểu đồ này, chúng ta có 3 nút và 3 cạnh, mỗi cạnh có cùng trọng số. Rõ ràng bất kỳ 2 cạnh sẽ tạo thành MST cho biểu đồ này. Tuy nhiên, hai cạnh được chọn sẽ phụ thuộc vào không chỉ thuật toán, mà cả việc thực hiện thuật toán. Chẳng hạn, nếu tôi lưu trữ các nút trong danh sách, tôi có thể truy cập chúng theo thứ tự khác với việc tôi lưu các nút trong một tập hợp, ngay cả khi tôi sử dụng cùng một thuật toán MST từ thời điểm đó.
Trong thực tế, nếu việc triển khai của tôi phụ thuộc vào số học con trỏ (mà một số container trong một số ngôn ngữ làm), tôi thậm chí có thể chọn một MST khác nhau mỗi khi tôi chạy thuật toán!
set
hoặc dict
trong Python 3.3+: băm được xử lý với giá trị khác nhau cho mỗi lần chạy để làm cho các cuộc tấn công từ chối dịch vụ trở nên khó khăn hơn.