Đồ thị có hai / ba cây khoảng cách tối thiểu khác nhau?


15

Tôi đang cố gắng tìm một phương pháp hiệu quả để phát hiện xem một đồ thị G đã cho có hai cây bao trùm tối thiểu khác nhau hay không. Tôi cũng đang cố gắng tìm một phương pháp để kiểm tra xem nó có 3 cây bao trùm tối thiểu khác nhau hay không. Giải pháp ngây thơ mà tôi từng nghĩ là chạy thuật toán của Kruskal một lần và tìm tổng trọng lượng của cây bao trùm tối thiểu. Sau đó, loại bỏ một cạnh khỏi biểu đồ và chạy lại thuật toán của Kruskal và kiểm tra xem trọng lượng của cây mới có phải là trọng lượng của cây bao trùm tối thiểu ban đầu hay không, và như vậy đối với mỗi cạnh trong biểu đồ. Thời gian chạy là O (| V | | E | log | V |) không tốt chút nào, và tôi nghĩ có một cách tốt hơn để làm điều đó.

Bất kỳ đề nghị sẽ hữu ích, cảm ơn trước


Thật tuyệt khi được đánh thức thuật toán như vậy, nhưng nó sẽ không giải quyết được vấn đề hiện tại này
itamar

2
Biểu đồ sẽ có một cây bao trùm tối thiểu duy nhất nếu và chỉ khi (1) cho bất kỳ phân vùng V ( G ) nào thành hai tập con, cạnh trọng số tối thiểu với một điểm cuối trong mỗi tập hợp con là duy nhất và (2) trọng số tối đa cạnh trong bất kỳ chu kỳ của G là duy nhất. GV(G)G
Juho

Làm những câu hỏi mộthai đã trả lời câu hỏi của bạn?
Juho

Xem vấn đề 23-1 trong CLRS để biết cách tìm MST tốt thứ hai trong . Ôi(n2)
Kaveh

Câu trả lời:


7

Kapoor & Ramesh ( đúng phiên bản SIAM J. comput. , Miễn phí (?) Trang web cá nhân phiên bản ) đưa ra một thuật toán cho liệt kê tất cả các tối thiểu kéo dài cây ở các biểu đồ trọng và không trọng số.

Sự hiểu biết của tôi về ý tưởng cơ bản là bạn bắt đầu với một MST, sau đó hoán đổi các cạnh nằm dọc theo chu kỳ trong biểu đồ (miễn là các trọng số ổn, bạn sẽ thay thế một cạnh bằng một cạnh khác mà bạn biết sẽ kết nối lại cây) .

Đối với trường hợp có trọng họ đưa ra một thời gian chạy để liệt kê tất cả kéo dài tối thiểu cây của nơi N là số cây spanning như vậy. Nó liệt kê chúng theo thứ tự tăng trọng lượng, và sự hiểu biết hiện tại của tôi cho thấy rằng việc chấm dứt thuật toán sau khi nó đã tạo ra một số cây nhất định (vì nó chỉ bắt đầu với MST và tạo ra chúng một cách tuần tự).Ôi(N|V|)N


Trong tình huống này ở đây, chúng tôi muốn hủy bỏ thuật toán sớm một khi chúng tôi biết rằng có nhiều hơn giải pháp. Liệu thuật toán cho phép điều đó? k
Raphael

1
@Raphael, tôi chưa có thời gian để thực sự nắm bắt được nó (đánh dấu bài tập yay), nhưng từ sự hiểu biết sơ bộ của tôi, điều đó có thể xảy ra - nó bắt đầu với một số MST, sau đó tạo ra từng cái một từ nó.
Luke Mathieson

1
@SaeedAmiri: "Số lượng cây bao trùm như vậy " có nghĩa là "số lượng cây bao trùm tối thiểu ", không phải là "số lượng cây bao trùm". Nếu tất cả cây bao trùm là cây bao trùm tối thiểu, thì đồ thị đầu vào đã hoàn thành và tất cả các cạnh có trọng lượng bằng nhau. nn-2
JeffE

1
Bài viết xem xét cả đồ thị có trọng số và không có trọng số, vì vậy bạn đều đúng;). Tôi cũng nghĩ rằng thuật toán cho phép khả năng dừng lại sau khi bạn tạo số lượng cây bạn muốn, vì vậy đối với OP, điều này sẽ đưa nó xuống . Một lần nữa, tôi cần một chút thời gian rảnh để có một cái nhìn tốt hơn. Ôi(|V|)
Luke Mathieson

1
Sau khi đọc nhanh, thuật toán có trọng số sẽ tạo ra các cây theo thứ tự tăng trọng lượng (bắt đầu từ MST rõ ràng). Vì vậy, nó sẽ cho mục đích của OP.
Luke Mathieson

2

Người ta có thể chỉ ra rằng thuật toán của Kruskal có thể tìm thấy mọi cây bao trùm tối thiểu; thấy ở đây .

Do đó, bạn có thể thực thi Kruskal và bất cứ khi nào bạn có nhiều cạnh để chọn, nhánh. Khi bạn đã phân nhánh lần, bạn biết rằng có ít nhất k cây bao trùm tối thiểu khác nhau. kkThật không may, nhiều nhánh có thể dẫn đến cùng một cây bằng cách thêm các cạnh có cùng trọng lượng theo các thứ tự khác nhau, vì vậy điều này không giúp ích gì nhiều nếu không có công việc / cái nhìn sâu sắc hơn.


5
Không. Nếu bạn phải chọn giữa các cạnh trong một bước, có thể các cạnh k đó nằm trong tất cả các cây bao trùm. Lấy ví dụ chỉ là một ngôi sao K 1 , 5 với tất cả các cạnh có trọng số 1. Bước đầu tiên, cần chọn trong số 5 cạnh, v.v ... Nhưng rõ ràng chỉ có một cây bao trùm. Có lẽ việc đếm số cạnh có cùng trọng lượng với một cạnh được bao gồm trong cây bao trùm được giúp đỡ? Câu hỏi thú vị ...kkK1,5
vonbrand

@vonbrand Điểm tốt. Tất nhiên chúng ta có thể tiếp tục hoàn thành tất cả các nhánh của phép tính, nhưng sau đó thời gian chạy được xác định bởi số lượng cây bao trùm, có thể theo cấp số nhân.
Raphael

1

Để xem có nhiều hơn một MST hay không, hãy xem xét thuật toán của Kruskal. Cách duy nhất nó có thể xây dựng các MST khác nhau là loại bỏ các cạnh bằng cách chọn một MST khác khi có một số có cùng trọng lượng. Nhưng những cạnh có cùng trọng lượng đó có thể đã bị loại trừ vì chúng tạo thành một chu kỳ với các cạnh nhẹ hơn ...

Vì vậy, bạn nên chạy thuật toán của Kruskal và khi có một số cạnh có cùng trọng số để xem xét, hãy thêm tất cả chúng có thể được thêm vào mà không cần tạo chu kỳ. Nếu có một cạnh của trọng lượng này còn lại và nó không đóng một chu kỳ với bất kỳ cạnh nào có trọng lượng thấp hơn (đã được thêm vào trước đó), thì có nhiều hơn một MST. Kiểm tra nếu có chính xác 2 hoặc 3 hoặc nhiều hơn, v.v ... có vẻ khó hơn nhiều ...


0

Điều chỉnh thuật toán của Kruskal: Trong khi sắp xếp các cạnh, các cạnh của cụm có trọng lượng bằng nhau. Bây giờ, tại thời điểm bạn xử lý các cạnh theo thứ tự, mỗi lần bạn đến một cụm mới, trước tiên hãy kiểm tra tất cả các cạnh riêng biệt và xóa khỏi cụm đó sẽ đóng một chu kỳ, đưa ra những gì được xây dựng trước cụm. Sau đó chạy tất cả các cạnh còn lại trong cụm hiện đang cố gắng thêm chúng vào MST. Nếu bất kỳ trong số chúng đóng một chu kỳ, thì điều đó nhất thiết là do các cạnh khác của cùng một cụm được chèn trước đó, có nghĩa là bạn có nhiều hơn một MST.

Giải pháp đó bảo tồn sự phức tạp của thuật toán Kruskal, chỉ có điều nó làm tăng thời gian cho mỗi cạnh được xử lý.


Bạn dường như đang tuyên bố rằng bạn có thể xử lý toàn bộ một cụm trong thời gian không đổi nhưng tôi không thấy bất kỳ hằng số rõ ràng nào bị ràng buộc vào kích thước của một cụm. Bạn có thể cho biết thêm chi tiết về cách giai đoạn đó được thực hiện?
David Richerby
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.