假设您有 n 节点的加权有向图 G =( V , E ), p 是其核心。设 C ,| C | = p 是一组中心节点, N = V \ C 是一组非中心节点。如果出现以下情况,edge e ij 的值为有限的非负实数:
否则,如果 i 来自集合 N 且 j 来自集合 N ,则值为 e ij 等于正无穷大。
我们有兴趣在图表 G 中找到所有最短距离的最大值。我发现解决这个问题的最快算法是使用Floyd-Warshall算法的简单修改,该算法在 O ( n 2 中运行> p 的)。这是简单的伪代码:
FOR ALL k FROM the set C DO
FOR ALL i FROM the set V DO
FOR ALL j FROM the set V DO
e[i, j] = MIN(e[i, j], e[i, k] + e[k, j])
-----------------------------------------------
result = 0
FOR ALL i FROM the set V DO
FOR ALL j FROM the set V DO
result = MAX(result, e[i, j])
-----------------------------------------------
RETURN result
可能没有比这更快的算法。 (或者,我错了吗?:))
但是,我对以下内容更感兴趣,我认为这里有更快的东西。假设我们只是从集合 C 和 N 交换两个节点,即。某些 v c 来自 C 和某些 v n 来自 N ,集合 C 变为 C + v n - v c 并设置 N 变为 N + v c - v n < /子>。现在,我们很有兴趣在 G 中找到所有最短距离的新最大距离。
我知道的更快的算法就是使用描述的Floyd-Warshall方法从头开始计算新的最大距离,该方法再次在 O 中运行( n 2 p 的)。有没有更快的计算方法,可能在交换节点之前使用旧的最短距离计算值?