如何选择最小化到图中其他节点的最大最短距离的节点?

Posted

技术标签:

【中文标题】如何选择最小化到图中其他节点的最大最短距离的节点?【英文标题】:How do I select the node that minimizes the maximum shortest distance to the other nodes in a graph? 【发布时间】:2021-10-19 00:22:51 【问题描述】:

我有一个无向、连通、正加权图G = <V,E>。我需要在V 中找到一个节点 v_min,以使v_min 和其他节点之间的最大距离最小化。我了解到这是k-center 问题(即k=1)的一个特殊问题,已知它是NP-Hard。但是,由于我们将k 限制为等于1,因此我认为问题仍然可以有效地解决。

我现在的方法是:计算V 中节点之间的所有对距离,例如,使用 Floyd-Warshall,或重复调用 Dijkstra。然后,我们沿着节点列表查找节点与其他节点之间的最大距离最小的节点。如果满足此条件的节点不止一个,则选择其中任意一个。

    这种方法正确吗? 有没有更好的方法(即更有效)? 请注意,我对近似算法不感兴趣,只对精确算法感兴趣。

【问题讨论】:

【参考方案1】:

加速重复 Dijkstra

如果您使用重复的 Dijkstra 来计算所有成对距离(这是稀疏图的更有效选择),有一个简单的观察可以让您不必执行许多迭代 - 我预计大约一半平均而言。

因为图是无向的,一旦我们计算了到某个根顶点 v 的所有距离,我们也知道 from 每隔一个顶点 v 的距离。让 u 成为距 v 最大距离处的顶点;将此距离称为 d。那么 u 不可能是比 v 更好的选择,因为我们只关心它到任何其他顶点的最大距离,而且我们已经知道它与某个顶点(即 v)的距离为 d,所以它的最大值距离不能小于这个。因此,运行从 u 开始的 Dijkstra 搜索毫无意义。

IOW,在从某个特定的起始顶点运行 Dijkstra 之后,我们可以从需要从其运行 Dijkstra 最短路径搜索的顶点列表中跨越距离它最大距离的所有顶点。可能有多个这样的顶点。

请注意,此优化不会改变渐近时间复杂度,并且在最坏的情况下,它仅节省 1 次迭代(可能是在除第一次之外的每次迭代中,所有最大距离顶点都已处理完毕)。但在最好的情况下——当所有顶点与最初选择的顶点距离相等时——我们可以在运行初始 Dijkstra 搜索后完成。

【讨论】:

【参考方案2】:

您要查找的节点称为图形中心约旦中心,您查找它们的方法是常用方法。 Floyd-Warshall 是一种快速查找节点之间所有距离的方法,并且迭代结果以找到最小最大值将花费更少的时间。

对于大多数用途来说,这应该足够快,而且不可能做得更好。如果性能是最重要的,您可以查看this 2019 paper,它引入了一种新算法,他们声称该算法具有更好的可并行性,并且通常比 Floyd-Warshall 略快。

【讨论】:

谢谢!您的解释和确认正是我所需要的。

以上是关于如何选择最小化到图中其他节点的最大最短距离的节点?的主要内容,如果未能解决你的问题,请参考以下文章

九度oj 题目1495:关键点

[CF980F]Cactus to Tree

如何相对于图中的距离创建从单个节点传播的边

求图中任意两点之间最短路径有啥算法?

在图中,如何找到一组节点最近的节点?

Viterbi