我正试图解决这个问题,但却陷入困境 需要一些帮助,谢谢。
给定无向连通图G,边缘处有非负值 设A是V(G)的一个子群,其中V(G)是G中的顶点组。
- 找到属于A的一对顶点(a,b),使得G中它们之间的最短路径的权重最小,在O((E + V)* log(v)中))
我想到在每个节点中使用Dijkstra的算法,它会给我O(V *((E + V)logv))),这太多了。
所以考虑以某种方式连接A中的顶点,没有找到任何有用的方法
还试图改变Dijkstra算法的工作方式,但是在时间复杂度方面没有改进就很难证明。
答案 0 :(得分:0)
请注意,如果最佳对是(a, b)
,那么从最佳路径中的每个节点u
开始,a
和b
是{{1}中最接近的两个节点}}
我相信我们应该以下列方式扩展Dijkstra算法:
A
中的所有节点开始,而不是单个A
。source_node
和shortest_distance
,还要记住previous_node
以便记住closest_source_node
中哪个节点给出的最短距离A
,second_shortest_distance
和second_closest_source_node
(欢迎使用较短的名称建议)。确保previous_for_second_closest_source_node
永远不是second_closest_source_node
。另外,请仔细考虑如何更新这些变量,节点的最佳路径可以成为其邻居的第二条最佳路径的一部分。closest_source_node
和closest_source
的第一个节点。second_closest_source
最小的节点。