加权无向树中两个节点之间的平均距离

时间:2017-11-01 16:15:10

标签: algorithm graph tree undirected-graph

您好我试图弄清楚如何计算加权无向图中两个节点之间的平均距离。此外,这个图是一棵树,所以它有V - 1边。

我想过使用Floyd Warshall计算所有最短路径,然后计算平均值。但那将成为O(E ^ 3)时间复杂度。它真的不够。

我也一直在考虑使用动态编程来解决它但我真的不知道如何...... 请问有人可以给我一些指示吗?我不想直接回答,只需要一些提示,以便我可以继续思考:)

1 个答案:

答案 0 :(得分:0)

构建并维护一个包含所有最短路径的表格(毫不奇怪)。每个条目包括最低已知成本和路径。

通过填写所有边(仅长度为1的路径)来启动表格;其他条目为inf

通过表格迭代,考虑两种情况:在左侧添加节点,在右侧添加节点。在每一端,仅考虑端节点的单个边可到达的节点。该路径是否比现有条目短?

例如,假设我们在节点I和J之间有一条边;称之为IJ,我们也有边缘JK。 IJ + JK的成本是否低于边缘IK的当前条目?如果是这样,请更换它并记录路径IJK;如果没有,请转到下一个边/节点/路径。

您可以遍历所有现有路径,直到没有更新。或许更好,索引使用每条最短路径的路径;这允许您在改进特定子路径时更新所有路径。

继续此过程,直到您完全通过图表而没有更新。如果你维护那个子路径索引,我想想你可以在图表中只通过一两次。我相信这会使过程 O(E * N ^ 2)(在边和节点上)。