Я припускаю, що вам не дано від'ємних зважених граней, оскільки це може не спрацювати, якщо є негативні ваги.
Алгоритм
Для кожного свого краю позначте їх від дон1н
Нехай вага A реберного числа iаii
Нехай вага B реберного числа iбii
Складіть цю таблицю
|a_1 a_2 a_3 a_4 .. a_n
---+-------------------------
b_1|.........................
b_2|.........................
. |.........................
. |.........................
b_n|...................a_n * b_n
Кожен з елементів таблиці є добутком рядків і стовпців.
Для кожного краю підсумовуйте відповідний рядок та стовпець таблиці (і не забудьте видалити елемент у перетині, оскільки він був підсумований двічі).
Знайдіть край із найбільшою сумою, видаліть цей край, якщо він не від’єднає графік. Позначте край як необхідний інакше. Якщо край було видалено, заповніть його рядки та стовпці 0.
Правильність
Результат - очевидно, дерево.
Результат, очевидно, охоплює, оскільки вершини не відключаються.
Результат мінімальний? Якщо є інший край, видалення якого створить менше дерево, що охоплює, в кінці алгоритму, то цей край був би видалений і зведений нанівець спочатку. (якщо хтось міг би допомогти мені зробити це трохи жорсткішим / та / або прикладним прикладом, це було б чудово)
Час виконання
Очевидно многочлен у.| V|
редагувати
( 2 , 11 ) , ( 11 , 2 ) , ( 4 , 6 ) це НЕ лічильник приклад.
а1= 2 , а2= 11 , а3= 4
б1= 11 , б2= 2 , б3= 6
Потім
| 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 ) видаляється.
Закінчимо з( 2 , 11 ) , ( 4 , 6 ) = 6 ∗ 17 = 102
Інші осінні дерева є
( 11 , 2 ) , ( 4 , 6 ) = 15 ∗ 12 = 180
( 2 , 11 ) , ( 11 , 2 ) = 13 ∗ 13 = 169