您好我试图弄清楚如何计算加权无向图中两个节点之间的平均距离。此外,这个图是一棵树,所以它有V - 1边。
我想过使用Floyd Warshall计算所有最短路径,然后计算平均值。但那将成为O(E ^ 3)时间复杂度。它真的不够。
我也一直在考虑使用动态编程来解决它但我真的不知道如何...... 请问有人可以给我一些指示吗?我不想直接回答,只需要一些提示,以便我可以继续思考:)
答案 0 :(得分:0)
构建并维护一个包含所有最短路径的表格(毫不奇怪)。每个条目包括最低已知成本和路径。
通过填写所有边(仅长度为1的路径)来启动表格;其他条目为inf
。
通过表格迭代,考虑两种情况:在左侧添加节点,在右侧添加节点。在每一端,仅考虑端节点的单个边可到达的节点。该路径是否比现有条目短?
例如,假设我们在节点I和J之间有一条边;称之为IJ
,我们也有边缘JK。 IJ + JK的成本是否低于边缘IK的当前条目?如果是这样,请更换它并记录路径IJK;如果没有,请转到下一个边/节点/路径。
您可以遍历所有现有路径,直到没有更新。或许更好,索引使用每条最短路径的路径;这允许您在改进特定子路径时更新所有路径。
继续此过程,直到您完全通过图表而没有更新。如果你维护那个子路径索引,我想想你可以在图表中只通过一两次。我相信这会使过程 O(E * N ^ 2)(在边和节点上)。