【发布时间】:2015-01-31 10:47:25
【问题描述】:
路径只能从 (0,0) 开始在网格中向左和向下移动。最终它需要到达 (N-1, N-1)。
如果网格是 NxN,则有 2N 个选择 N 个这样的路径,随着 N 的增加呈指数增长,并且由于内存限制,我无法将所有这些路径存储在列表中。我们还可以将每条路径编码为长度为 2^(N-1) 的位串,其中 1 是向右移动,0 是向下移动。每个编码路径中有相同数量的 0 和 1。
我得到了一个维度为 NxN 的 2D 方形网格。网格中的每个单元格都有一个非负值。我需要对每条唯一路径的所有这些值求和。我怎样才能有效地做到这一点?
【问题讨论】:
-
通过对沿路径的单元格中的值求和?
-
假设您有一个 30x30 的网格,您将如何有效地枚举每个唯一路径上的值的总和?
-
使用问题空间的广度优先搜索构造所有唯一路径。沿路径对节点的值求和。
-
由于这是一个动态规划问题,请考虑矩阵只是一个数组或 1xN 网格的更简单的情况。在这种情况下,您要查找的总和,即从 0 到数组中的第 i 个元素,只是位置 i 的累积总和。将这种方法扩展到矩阵情况很容易。所以你只需要另一个矩阵来表示累积和,计算它们应该需要线性时间。
-
@MattCoubrough,关于如何为此构建 BFS 树的任何提示?鉴于我有这棵树,我将能够对其进行预序遍历。
标签: java algorithm graph dynamic-programming