寻找最高价值的路线

时间:2019-09-26 12:29:43

标签: python algorithm data-structures

给出下面的数据,找到从左下到右上的最高价值路线。

[{ 0, 0, 0, 6 }, 
  { 2, 0, 0, 2 }, 
  { 0, 1, 1, 1 }, 
  { 3, 0, 0, 0 }]

go can only move right (east) or up (north)
Highest value route here is 3 -> 0 -> 1 -> 1 -> 1 -> 2 ->6 = 14

我应该如何解决这个问题。我下面的伪代码方法正确吗?

max = 0
array = defined_array 
i = len(array)
k = 0  
def path(i,j):
total = 0
    for j in range(4):
        k = j;
        total = total + int(array[i][j])    
        if total > max:
            max = total
    return path(--i,k)

key= 3
def path(i,j):
    for i in range(i):
        for j in range(array[i]):
            total = total + array[i][j]

2 个答案:

答案 0 :(得分:1)

我根本不了解你的方法。
这是简单动态编程问题。
将此视为2D数组 Arr [4] [4]

[{ 0, 0, 0, 6 }, 
  { 2, 0, 0, 2 }, 
  { 0, 1, 1, 1 }, 
  { 3, 0, 0, 0 }]

制作另一个4 * 4的dp数组

首先需要初始化基本情况。
所以第一列和最后一行是我们的基本情况。
dp[0][3]=Arr[0][3];

在此之后的第一列
dp[i][0]=dp[i+1][0]+Arr[i][0];

对于最后一行
dp[3][i]=dp[3][i-1]+Arr[3][i];

其他值
dp[i][j]=max(dp[i][j-1],dp[i+1][j])+Arr[i][j];
我们将选择最大值。

我们的dp数组如下所示,答案将为14

[{ 5, 5, 5, 14 }, 
  { 5, 5, 5, 8 }, 
  { 3, 4, 5, 6 }, 
  { 3, 3, 3, 3 }]

答案 1 :(得分:0)

这基本上是通过图形查找最佳路径(在这种情况下为最高价值的路径)的问题。

有一些用于查找最短路径的方法,例如Dijkstra's algorithmBellman–Ford algorithm

对于有向图和无环图(“ DAG”),我发现两个讨论herehere指出,不能仅将这些算法从最小值“颠倒”为找到最长的算法路径,但如果将每个权重(值)都反转为负数的图形进行转换,它确实可以工作。

另请参见Wikipedia article on the Longest path problem