动态编程以查找最小路线

时间:2018-11-13 10:40:46

标签: algorithm dynamic-programming

在设计此DP问题的解决方案时遇到问题

假设您要从城市A到城市B。在途中有n个中途停留地,您可以有多种选择来选择在每个中途停留的酒店。涉及的成本是在中途停留的某家酒店的旅行成本(我们将其称为tij,其中i是当前中途停留,j是下一个中途停留),以及在中途停留j处的一家酒店的住宿成本(简称为sj)。设计一种动态规划算法,以选择最佳路线和城市B中的一家酒店,从而将整个行程的费用降至最低。分析其正确性和运行时间。

1 个答案:

答案 0 :(得分:2)

这是一个可能正确的算法: 将停靠点定义为a1,a2,a3,a4,a5,a6 ..... an,每个停靠点的最小成本为c1,c2,c3,c4,c5 ... cn

第一站。计算从城市A到a1的路线成本并将其存储在c1中。

第二站。计算从A到a2的路线成本,并计算从a1到a2的路线成本加c1。选择较小的成本并将其存储到c2

第三站。计算从A到a3的路线成本,从a1到a3的成本加上c1,以及从a2到a3的成本加上c2。选择最小的成本并将其存储到c3

... ...

然后,我们终于可以找到cn + 1,这是从A到B的路线的最小成本,并与上述步骤相同

动态表达式为ci = min(c1 + t(1,i),c2 + t(2,i),c3 + t(3,i),....,c(i-1)+ t(i-1,i))

我们尝试了到达每个站点的所有可能路线,并找到了最低费用,因此为什么答案是我们选择的路线却被最小化

这种算法的运行时间为O(n ^ 2),考虑建立一个大小为n * n的二维数组