Tôi sẽ giả định rằng bạn không được cho các cạnh có trọng số âm, bởi vì điều này có thể không hoạt động nếu có trọng số âm.
Thuật toán
Đối với mỗi cạnh của bạn, hãy gắn nhãn đến n1n
Đặt trọng số A của số cạnh iaii
Đặt trọng số B của số cạnh ibii
Vẽ lên bảng này
|a_1 a_2 a_3 a_4 .. a_n
---+-------------------------
b_1|.........................
b_2|.........................
. |.........................
. |.........................
b_n|...................a_n * b_n
Với mỗi thành phần bảng là sản phẩm của hàng và cột.
Đối với mỗi cạnh, tính tổng hàng và cột của bảng có liên quan (và nhớ xóa phần tử trong giao điểm vì nó đã được tính tổng hai lần).
Tìm cạnh có tổng lớn nhất, xóa cạnh này nếu nó không ngắt kết nối đồ thị. Đánh dấu các cạnh là thiết yếu khác. Nếu một cạnh đã bị xóa, hãy điền vào các hàng và cột của nó bằng 0.
Đúng
Kết quả rõ ràng là một cái cây.
Kết quả rõ ràng là kéo dài vì không có đỉnh nào bị ngắt kết nối.
Kết quả là tối thiểu? Nếu có một cạnh khác mà việc xóa sẽ tạo ra một cây bao trùm nhỏ hơn ở cuối thuật toán, thì cạnh đó sẽ bị xóa và bị hủy trước. (nếu ai đó có thể giúp tôi thực hiện điều này một chút nghiêm ngặt hơn / và / hoặc ví dụ phản biện thì điều đó sẽ rất tuyệt)
Thời gian chạy
Rõ ràng là đa thức trong .|V|
biên tập
làkhôngmột ví dụ quầy.(2,11),(11,2),(4,6)
a1=2,a2=11,a3=4
b1=11,b2=2,b3=6
Sau đó
| 2 11 4
---+--------------------
11 | 22 121 44
2 | 4 22 8
6 | 12 66 24
(4,6)(2,11)(11,2)=44+8+24+66+12=154=22+4+12+121+44=203=121+22+66+4+8=221
bị xóa.(11,2)
Kết thúc với (2,11),(4,6)=6∗17=102
Cây bao trùm khác là
(11,2),(4,6)=15∗12=180
(2,11),(11,2)=13∗13=169