关于floyd压一维空间
  • 板块灌水区
  • 楼主aldol_reaction
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/5/26 19:23
  • 上次更新2023/11/4 22:42:01
查看原帖
关于floyd压一维空间
393190
aldol_reaction楼主2021/5/26 19:23
for (k = 1; k <= n; k++) {
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= n; j++) {
      f[k][i][j] = min(f[k - 1][i][j], f[k - 1][i][k] + f[k - 1][k][j]);
    }
  }
}

蒟蒻看不懂oiwiki的证明:

我们注意到如果放在一个给定第一维 k 二维数组中,f[i][k] 与 f[k][j] 在某一行和某一列。而 f[i][j] 则是该行和该列的交叉点上的元素。

现在我们需要证明将 f[k][i][j] 直接在原地更改也不会更改它的结果:我们注意到 f[k][i][j] 的涵义是第一维为 k-1 这一行和这一列的所有元素的最小值,包含了 f[k-1][i][j],那么我在原地进行更改也不会改变最小值的值,因为如果将该三维矩阵压缩为二维,则所求结果 f[i][j] 一开始即为原 f[k-1][i][j] 的值,最后依然会成为该行和该列的最小值。

故可以压缩。

有什么更加易懂的解释吗dk

2021/5/26 19:23
加载中...