一种用于最短路径游览问题的动态规划算法

时间:2019-12-22 07:07:24

标签: dynamic-programming shortest-path

最短路径游览问题(SPTP)包括从给定起点找到最短路径 节点s到有向图中具有非负弧长的给定目标节点t 最佳路径P应该连续从给定的至少一个节点通过的约束 节点子集T1,T2,... 。 。 TN(即,对于所有k,在通过子集T1 ... Tk-1中的至少一个节点之后,通过子集Tk中的某个节点。 我想我有一个基于动态编程的方法,希望获得正确性的反馈。

  • 我们有(N + 1)个阶段:0,1,2..N
  • 状态x [k]是簇T [k]中的一个节点,x [0] = s
  • u [k]控制动作/选择是选择群集T [k + 1]中的一个节点。 u [N] = t
  • 我们将s(a,b)定义为从a-> b起的最短路径
  • 成本函数为g(x [k],u [k])= s(x [k],u [k]),即从T [k]中的x [k]到节点u的最短路径的长度[k]我们选择T [k + 1]
J[N,x[N]] = s(x[N],t) for x[N] in T[N] (i.e. shortest path from x[N] to t)
J[k,x[k]] = min:u in T[k+1] of (s(x[k],u) + J[k+1,u]) Here 0 <= k <= N-1 and x[k] in T[k]
Final output is J[0,s].

基本思想是,如果s,..,x [0],... x [1] ... x [2] ... x [N] .. t是该问题的最佳解决方案将x [i]放在T [i]中,则x [k] ... x [k + 1] ... x [N] .. t是从x [找到最短路径]的子问题的最佳解决方案k]到t,约束条件是路径应从子集T [k + 1] .. T [N]中连续通过至少一个节点。

为了解决A部分中的DP,我们将:

  • 第N阶段:需要解决从t到T [N]中所有节点的单个最短路径问题
  • 阶段N-1:从T [N-1]中的节点到虚拟节点X的单个最短路径问题,其中X具有从T [N]中的每个节点y起弧的弧长,弧长为J [N,y]
  • ..
  • 阶段k:从T [k]中的节点到虚拟节点X的最短路径问题,其中X具有从T [k + 1]中的每个节点y起的弧,弧长为J [k + 1,y]
  • ..
  • 阶段0:从s到虚拟节点X的单个最短路径问题,其中X在T [1]中的每个节点y处都有弧,弧长为J [1,y]

0 个答案:

没有答案