У меня есть неориентированный граф с положительным весом ребер (V, E), для которого мне нужно минимальное остовное дерево, покрывающее подмножество k вершин V em> (проблема дерева Штейнера).
Я не ограничиваю размер остовного дерева k вершинами; скорее я точно знаю, какие k вершины должны быть включены в MST.
Начиная со всего MST, я мог бы сокращать ребра / узлы, пока не получу наименьший MST, содержащий все k.
Я могу использовать алгоритм Прима для получения всего MST и начать удаление ребер / узлов, пока MST подмножества k не уничтожается; в качестве альтернативы я могу использовать метод Флойда-Уоршалла, чтобы получить кратчайшие пути для всех пар и как-то объединить пути. Есть ли лучшие способы подойти к этому?
(k,E)
? - person Mat   schedule 07.10.2011k
вершины, находящиеся далеко друг от друга. Например, если у меня есть:k--o--o--o--k
, гдеo
представляет собой ненужную вершину, аk
представляет ту, которая мне нужна, если я удалю серединуo
, не будет возможности построить MST между моимиk
вершинами. - person atp   schedule 07.10.2011k
, а затем как можно меньше всего. - person atp   schedule 07.10.2011steiner_tree(G, terminal_nodes, weight='weight')
, а некоторые примеры можно найти в этой теме gis.stackexchange.com/questions/307336/ - person Timothy Dalton   schedule 04.12.2019