如何改善在同一图表上搜索的几条最短路径?

时间:2015-07-08 19:28:46

标签: algorithm data-structures nodes graph-theory

我有下一个情况,我需要找到最佳的优化来解决问题。

我图 G

举一个例子,让图表看起来像这样 enter image description here

问题是需要在几个顶点之间找到最短路径中的权重(只是让它称之为SP)并将它们全部添加。

我的意思是如果a - b之间的最短路径为a -> c -> d,则SP将为x0 + x1 + x2

所以我的一系列问题看起来像这样:

  • a - g
  • a - h
  • e - f
  • .... etc

所以天真的解决方案是每次在每一组之间找到SP

SP(a,g) + SP(a,h) + SP(e,f) + ... = result

所以这是优化任务开始的时候,我已经实现了两项改进,但我需要最好的优化(如果可能的话),让我看看我已经做了什么:

  1. 保存找到的每条最短路径的每个结果,如果再次询问我有问题
  2. 例子。如果SP a - g之间wSP我保存,如果我再次询问a - gg - a之间SP的值是多少已经知道结果

    1. 保存找到的每个后续a - g并保存
    2. 例如

      如果我要求在a -> c -> d -> j -> g之间找到SP。让我们假设这两个顶点之间的最短路径为SP,因此x0 + x1 + x2 + x3 将是

      a - g

      所以我可以保存a,但我也可以保存找到的所有后续路径的SP。

      例如ja -> c -> d -> j之间的最短路径为c and jc -> d -> j之间的路径为SP

      这里是所有SP(a,c) = x0 SP(a,d) = x0 + x1 SP(a,j) = x0 + + x1 + x2 SP(c,d) = x1 SP(c,j) = x1 + x2 SP(c,g) = x1 + x2 + x3 SP(d,j) = x2 SP(d,g) = x2 + x3 SP(j,g) = x3 个创建者

      For counter = 0 To ExcelSheetLength Step 1
      
          row.Cells(1) = exWb.Sheets("Tabelle1").Cells(counter, 0)
          row.Cells(2) = exWb.Sheets("Tabelle1").Cells(counter, 1)
          row.Cells(3) = exWb.Sheets("Tabelle1").Cells(counter, 2)
      
          Set row = tbl.Rows.Add(BeforeRow:=tbl.Rows(2))
          'set the table column values here with the row.cells 1-3
      
      Next counter
      

      我保存每一个结果。

      所以现在这最后一次改进已经节省了很多时间,但似乎不够,因为节点的数量和发现的SP的集合相当大。

      所以我可以使用任何建议或任何特定的算法来改善这些问题(我希望已经足够明确,如果没有解释任何细节请写评论)?

2 个答案:

答案 0 :(得分:1)

您可以使用Dijustra搜索一个节点和所有其他节点之间的最短路径,并使用哈希表缓存所有最短路径的长度。

然后,对于给定的一组节点,您可以从哈希表中快速提取路径长度。

答案 1 :(得分:1)

如果要计算多对,请考虑Floyd-Warshall;它将为您提供从任何点到任何其他点的最短路径距离(以O(n ^ 3)运行时为代价)。