在图数据结构中,我们如何使用中间节点来计算任何其他两个节点的距离?

Posted

技术标签:

【中文标题】在图数据结构中,我们如何使用中间节点来计算任何其他两个节点的距离?【英文标题】:In graph data structure how can we use intermediate node to calculate distance of any other two nodes? 【发布时间】:2021-06-08 17:59:16 【问题描述】:

在 floyd warshell 算法中,我们将任何节点 y 作为中间节点,并通过中间节点 y 更新一个节点到另一个节点(对于所有节点)的距离。 dp[x][y] = min( dp[x][y] , dp[x][z] + dp[z][y]) 但这里的问题是 dp[x][z] 可能会稍后更新,这意味着 dp[x][z] 可能不是到达 x 到 z 的最小距离,我们如何使用 dp[x][z] 来计算dp[x][y]?

【问题讨论】:

【参考方案1】:

Floyd--Warshall 的实现掩盖了其工作原理的数学结构。

如果您在轮次中更新dp,证明仍然可以通过,例如,对于所有xy,执行dp'[x][y] = min(dp[x][y], min_z(dp[x][z] + dp[z][y])),然后复制dp = dp'。这足以确保dp[x][y] 至多是从xy 通过我们迄今为止迭代的各种z 的最短路径的长度。

相反,我们不会通过就地更新来低估dp[x][y],因为每次我们进行更新时,都有一条路径可以达到新的值(具体来说,由dp[x][z]的值表示的路径后跟dp[z][y]的值所代表的路径。

【讨论】:

以上是关于在图数据结构中,我们如何使用中间节点来计算任何其他两个节点的距离?的主要内容,如果未能解决你的问题,请参考以下文章

[计算机网路]-第三章数据链路层

R情节,当鼠标悬停在图上时正常光标

Redis 集群

如何在回归树中计算特征重要性?

在图 G 中找到最大权重边?

我如何找到从任何节点到集合A的最短路径