更快速地重新计算图表中的最大距离

时间:2014-11-22 16:46:29

标签: algorithm graph time-complexity shortest-path floyd-warshall

假设您有 n 节点的加权有向图 G =( V E ), p 是其核心。设 C ,| C | = p 是一组中心节点, N = V \ C 是一组非中心节点。如果出现以下情况,edge e ij 的值为有限的非负实数:

  1. i 来自 N 集,而 j 来自 P 集,或
  2. i 来自 P 集,而 j 来自 P 集,或
  3. i 来自 P 集,而 j 来自 N 集。
  4. 否则,如果 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 的)。有没有更快的计算方法,可能在交换节点之前使用旧的最短距离计算值?

0 个答案:

没有答案