我有一个图表,我的所有节点都有一个彼此计算的距离。
现在,我想从startNode开始,然后找到具有最低计算值的路径,只要该路径具有X个唯一节点即可。 将其视为地图:我们从巴黎开始,想要前往3个城市。我想找到距离巴黎3站的路径,计算值最低。
我正在考虑实施一个改进的Dijkstra算法,它通常会给我一个到最终目的地的最短距离,然后我的终端目的地是所有X_level_out目的地,这应该给我一个类似O的节点的运行时间(节点^水平)。
这有什么意义吗? 还有其他建议吗?
答案 0 :(得分:1)
给定加权无向图G(V,E),并且V的集合S子集找到跨越S中节点的最小成本树。该问题在文献中称为Steiner树问题。 问题是NP完全,这意味着没有已知的多项式算法可以找到问题的精确解。然而,有一些算法可以在指数时间内解决Steiner问题(O(2 ^ N)或O(2 ^ M))。
朴素或最短路径算法。
Find the Shortest path tree from one participant node to the rest of the graph.
Prune the parts of the tree that do not lead to a participant.
复杂度O(N ^ 2),CR = O(M)。
贪婪或最近参与者优先算法。 (高松,松山1980) 从参与者开始。
Find the participant that is closest to the current tree.
Join the closest participant to the closest part of the tree.
Repeat until you have connected all nodes.
复杂度O(M N ^ 2),CR = O(1),实际上CR <= 2。
Kou,Markowsky和Berman算法(KMB 1981)。
1. Find the complete distance graph G'
(G' has V' = S , and for each pair of nodes (u,v) in VxV there is an edge with weight equal to the weight of the min-cost path between these nodes p_(u,v) in G)
2. Find a minimum spanning tree T' in G'
3. Translate tree T' to the graph G: substitute every edge of T', which is an edge of G' with the corresponding path of G. Let us call T the result of the translation.
4. Remove any possible cycles from T.
复杂度O(M N ^ 2),CR = O(1),实际上CR <= 2。