我想找到节点(比如索引i
)以同时满足以下两个标准:
最小化从节点A
到节点i
的距离总和,比如d(A,i)
,以及从节点i
到节点B
, d(i,B)
,即min d(A,i)+d(i,B)
最小化这些距离之间的差异,即min |d(A,i)-d(i,B)|
。
这可能是一个众所周知的问题,但我找不到任何能够开发出合适算法的参考资料。
答案 0 :(得分:2)
计算A到所有其他节点的距离,然后计算从B到逆图中所有其他节点的距离(如果你的图不是定向的,那么它就在原始图中)。
您可以运行Bellman ford O(VE)或Dijkstra(ElogV)。
然后迭代每个节点,你有d(A,i)和d(B,i)计算,所以选择一个满足你的标准,听起来你应该更喜欢min d(A,i)+d(i,B)
而不是min|d(A,i) - d(i,B)|
。在任何情况下,您都将获得所有值,因此您只需选择所需的值即可。这将是O(V)。
总的来说,假设你使用Dijkstra,你的解决方案将是O(ElogV)。