Saya akan menganggap Anda tidak diberi tepi berbobot negatif, karena ini mungkin tidak berfungsi jika ada bobot negatif.
Algoritma
Untuk setiap sisi Anda, beri label hingga1n
Biarkan bobot A dari jumlah tepiaii
Biarkan bobot B dari nomor tepibii
Gambarkan tabel ini
|a_1 a_2 a_3 a_4 .. a_n
---+-------------------------
b_1|.........................
b_2|.........................
. |.........................
. |.........................
b_n|...................a_n * b_n
Dengan masing-masing elemen tabel menjadi produk baris dan kolom.
Untuk setiap tepi, jumlah baris dan kolom tabel yang relevan (dan ingat untuk menghapus elemen di persimpangan karena telah dijumlahkan dua kali).
Temukan tepi yang memiliki jumlah terbesar, hapus tepi ini jika tidak memutuskan grafik. Tandai tepi sebagai esensial jika tidak. Jika tepi telah dihapus, isi baris dan kolomnya dengan 0.
Ketepatan
Hasilnya jelas pohon.
Hasilnya jelas mencakup karena tidak ada simpul yang terputus.
Hasilnya minimal? Jika ada tepi lain yang penghapusannya akan membuat spanning tree yang lebih kecil di akhir algoritma, maka tepi itu akan dihapus dan dibatalkan terlebih dahulu. (Jika seseorang dapat membantu saya membuat ini sedikit lebih teliti / dan / atau contoh balasan maka itu akan bagus)
Runtime
Jelas polinomial dalam.|V|
sunting
(2,11),(11,2),(4,6) adalah tidak contoh counter.
a1=2,a2=11,a3=4
b1=11,b2=2,b3=6
Kemudian
| 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
(11,2) dihapus.
Berakhir dengan(2,11),(4,6)=6∗17=102
Pohon merentang lainnya adalah
(11,2),(4,6)=15∗12=180
(2,11),(11,2)=13∗13=169