【发布时间】:2011-02-03 16:37:18
【问题描述】:
问题如下: 给定一个由 n 个整数组成的序列 L 不一定不同,编写一个算法来计算最大长度的递增子序列:
我开发的递归方程是这样的:
我从0开始索引:
If j = n opt(j) = 0 (base case)
otherwise opt(j) = max j <i <= n such that Lj <Li = {opt(i) +1}
你认为这样做是对的吗?用于这个典型问题的标准解决方案是首先计算序列中所有元素以 Li 结尾的最大递增子序列,然后计算这些值的最大值,即:
if i = 1 opt (i) = 1
otherwise opt (i) = max 1 <= j <= i-1 and Lj <Li = {opt (i)} +1
然后是这些元素的最大值。
所以我想知道你是否认为我的解决方案是正确的。
【问题讨论】:
-
为什么你想要一个在 O(N^2) 中运行的动态编程解决方案,而已经存在一个可以在 O(N logN) 中完成的二进制搜索解决方案?见stackoverflow.com/questions/6129682/…
标签: algorithm dynamic-programming