我被要求弄清楚一种图形,其最短路径总数(使用Dijkstra算法)是指数节点的指数。 我想出了一个类似的图表:
A-> B-> C(每个边缘的重量为1) A-> C(具有权重2的边缘)
C-> A' - > B'(所有边缘的权重= 1) C-> B'(重量= 2)
B' - > A'' - > B''(所有边缘的权重= 1) B' - > B''(重量= 2)
等等......
这样,Dijkstra算法为此图找到的最短路径总数将为Ω(2 ^(n / 2))。 我现在试图找出,如果它可以像Ω(2 ^(n / k))那样推广,其中k =每个节点的最短路径数。我还是不知道,我怎样才能正确地证明解决方案的正确性。任何建议或提示非常感谢! 如果您指出我的解决方案中存在任何现有缺陷,我也将不胜感激。
提前致谢!
答案 0 :(得分:1)
您的解决方案是一个很好的起点。对于您添加的每个节点,解决方案的数量可以加倍。但是,我没有立即看到每个节点将有多少相同数量的最短路径。这可能导致平均值降低,这会使您的提案无效。
要解决这个问题,您可以对图表稍作调整:将其设置为循环并添加更多链接。
让它成为周期性的: 您应该将起始节点与最后一个节点连接起来。这将使图中的每个节点都相等,因此它们都具有相同数量的最短路径。
添加更多链接: 在您的示例中,您为节点A提供指向节点B的链接和指向节点C的链接。您还应该为节点B提供指向节点C的链接(已经正常)和指向节点A的链接。这等于彼此。
为了证明正确性,您现在可以计算1个节点到所有其他节点的不同路径的数量,这是图中所有节点的有效结果(这就是它们应该相等的原因)。为了证明指数,您可以看看如果向图表中添加更多节点会发生什么,以及这会如何影响解决方案的数量。