algorithm - 寻找正象限中点的最大权重序列

标签 algorithm dynamic-programming

给定正象限中的一系列加权点,我们必须找到 点的最大权重序列,以便每个连续的点都包含在 由前一点和原点组成的矩形。

我对这个问题的 DP 算法很感兴趣。

最佳答案

这道题其实是求最长的递增子序列。 wikipedia page 中描述了用于解决此问题的 O(N log N) 算法。 .

更简单的 O(N²) 算法

我假设你有整数分。如果不这样做,您可以使用坐标压缩将您的点放置在 N x N 网格中。

所以你有一个二维数字数组 W,其中每个数字都是分配给该坐标的权重。你现在有一个复发:

// T(w,h) = "Maximum weight of the point sequence in sub-grid (w,h)"
T(0,0) = W(0,0)
T(0,y) = W(0,y)+T(0,y-1)
T(x,0) = W(x,0)+T(x-1,0)
T(x,y) = W(x,y)+max(T(x-1,y),T(x,y-1))

您可以选择 memoize递归 T(O(N²) 空间)或一次计算一行(O(N) 空间)。两种算法都将使用 O(N²) 时间。

您可以尝试使用笔和纸来计算这种递归,看看它是如何工作的。

关于algorithm - 寻找正象限中点的最大权重序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15054359/

相关文章:

algorithm - N-Puzzle with 5x5 grid,理论问题

java - 找到多个集合之间的交集

python - 有没有一种简单的方法来获得 utf8 编码字符串的子字符串,子字符串的 repr 长度小于 python 中的 N

java - 如何获取0-1背包中选中的元素列表?

mysql - sql命令还是动态规划?

java - 计算最优组合

algorithm - 高效查找二维中某个点支配的所有点

algorithm - 测试 CPU 调度

java - 有效计算大 n 的 nCr(n,m) mod k

python - 给定索引约束的最大和子数组