【问题标题】:How do I find the minimum cost and the path in an NxN Matrix?如何在 NxN 矩阵中找到最小成本和路径?
【发布时间】:2016-07-20 16:38:46
【问题描述】:

我必须从位置 (0,0) 开始,我可以向上移动或向右移动(无对角线遍历)。我需要最小成本矩阵才能到达节点 (n-1,n-1)。我还需要以最低成本记录的路径。另外,我需要计算到目标节点的路径总数(n-1,n-1)。

例如。

Matrix:
7 9 2
1 5 8
2 3 7

Output:
Min cost path: 2 -> 1 -> 5 -> 8 -> 2
Sum(Min Cost Path excluding the ending node): 16
Total number of paths: 6

【问题讨论】:

  • 这听起来像是您刚刚从家庭作业中输入了一个问题 - 提供您编写的代码或至少显示一些表明您已经自己努力解决这个问题的内容,并询问特定的无需为您完成作业即可回答的问题。

标签: algorithm path dynamic-programming minimum


【解决方案1】:

首先,您的问题有一些错误。 “我必须从位置 (0,0) 开始,我可以向上或向右移动。”。我认为它应该向下或正确。

那是从(i,j) 你可以移动到(i,j+1)(i+1,j)

递归公式为

minCost(m, n) = min (minCost(m-1, n-1), minCost(m-1, n), minCost(m, n-1)) + cost[m][n]

这个时间复杂度将是exponential,因为同一个子问题被计算了很多次,并且对于每个单元格都会继续。

要掩盖时间复杂度,您可以使用动态规划来做到这一点。

以自下而上的方式创建一个temp表来存储子问题的结果,这样我们就不需要再次计算了。简单来说,临时表的i,j索引将存储从0,0i,j.的最小成本路径 时间复杂度降低到O(nm)。我不能把整个代码给你,因为这似乎是一个家庭作业问题。

关于第二个问题,即找到总路径。将只有一个最低成本路径。或者,如果您想找到所有路径。

【讨论】:

  • 不,这正是我在这里发布问题的原因。它不是向下和正确的,而是向上和正确的。 (0,0) 被可视化为矩阵的左下角,因此它实际上会映射到位置 (n-1,0)。我设计了解决方案,无论如何,谢谢。
猜你喜欢
  • 1970-01-01
  • 2016-12-05
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 2018-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多