【问题标题】:minimum weight shortest path for all pairs of vertices with exactly k blue edges具有恰好 k 个蓝色边的所有顶点对的最小权重最短路径
【发布时间】:2015-03-06 06:56:31
【问题描述】:

图的一个子集基本上是蓝色的

所以我知道如何在 O(n^3) 中找到所有具有 DP 的最短路径对,但我如何考虑颜色和问题所需边数的准确性?

【问题讨论】:

  • 不确定,但您需要的复杂性可能高于 n^3,因为约束“恰好 k”

标签: graph-algorithm


【解决方案1】:

这可以使用 Floydd-Warshall 的变体在 O(k^2 . n^3) 内完成。

您不必跟踪两个节点 ij 之间的最小路径权重 d(i,j),而是跟踪ij 之间的路径的最小路径权重 d(i,j,r) 恰好 r 蓝色边,对于 0 ≤ rk

检查通过节点 m 的路径时的更新步骤,其中通常 d(i,j) 将使用 d(i, m)d(m,j) 如果更小,则变为:

for u: 0 .. k
    for v: 0 .. (k-u)
        s = d(i,m,u) + d(m,j,v)
        d(i,j,u+v) = min( s, d(i,j,u+v) )

最后,你读出d(i,j,k)

【讨论】:

  • 眯着眼睛看,更新步骤看起来确实有点类似于离散卷积(最小而不是求和,加法而不是乘法)。相应地,向量 (d(i,j,0),...,d(i,j,k)) 可能会有一个奇特的变换,它允许在 O( k 记录 k) 而不是 O(_k_^2)。我会考虑更多!
  • 好吧。一点阅读表明更新步骤是'(min,+)-convolution'(或只是'min-convolution')的一个例子,当前最好的算法是O(k^2 / log k)。跨度>
猜你喜欢
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
  • 2018-09-26
  • 2023-04-11
  • 1970-01-01
  • 2019-02-14
相关资源
最近更新 更多