Các thuật toán của Kruskal và Prim có cho cùng một cây bao trùm tối thiểu không?


9

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?


3
Có, và họ dường như sản xuất cùng một MST. Nhưng đó không phải là dứt khoát.
Death_by_Ch0colate

2
Ok, đó là sự thật, chỉ cần kiểm tra.
Ác

Câu trả lời vẫn tích cực ngay cả khi chúng tôi loại bỏ điều kiện "không có đường dẫn tiêu cực"
John L.

Câu trả lời:


13

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ả.


7

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.


Họ chắc chắn có thể, nhưng làm họ?
Raphael

4
@Raphael: Tôi đã trả lời rằng.
Yves Daoust

1
@ Không, bạn đã không. Bạn nói có lẽ, " có thể " không phải là một sự đảm bảo. Ví dụ: nếu bạn có các thuật toán sắp xếp và chúng ổn định, chúng sẽ tạo ra cùng một đầu ra, bất kể thuật toán được sử dụng. Nếu chúng không ổn định, chúng có thể tạo ra kết quả tương tự. Vì vậy, câu hỏi là liệu những thuật toán đó có một cảm giác ổn định viết chủ đề và trưng bày nó.
luk32

@ luk32: bạn đã đọc "thậm chí hai triển khai riêng biệt của cùng một thuật toán có thể" chưa? Nhân tiện, thuật toán sắp xếp ổn định tạo ra cùng một đầu ra vì nó được xác định duy nhất, vì vậy chúng không có lựa chọn nào khác. Nếu không cần sự ổn định, giải pháp không phải là duy nhất và việc triển khai khác nhau có thể hành xử khác nhau.
Yves Daoust

Đủ công bằng, nhưng tuyên bố đó là không rõ ràng. Điều gì làm cho việc thực hiện có thể không ổn định? Có một số loại sắp xếp liên quan và sự ổn định phụ thuộc vào điều này?
luk32

2

Để thêm vào câu trả lời của Yves Daoust , biểu đồ sau

Tam giác

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!


1
Lưu ý rằng bài viết gốc nói rằng các cạnh có trọng lượng duy nhất; điều này tất nhiên đảm bảo một MST duy nhất.
wchargein

Điểm cuối cùng đó cũng được áp dụng khi sử dụng ví dụ sethoặc dicttrong 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.
Jasmijn

@YvesDaoust Rất xin lỗi về điều đó!
Cort Ammon

@CortAmmon: không phải lo lắng, điều đó xảy ra.
Yves Daoust
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.