首页 > 其他 > 详细

最长单调递增子序列——动态规划

时间:2015-06-06 18:12:06      阅读:142      评论:0      收藏:0      [点我收藏+]

题目描述:

给定一个序列X[0···n],找出它的最长的单调递增子序列(Longest Increasing Subsequence)

解题思路:

使用动态规划方法。
对于i= 1, 2, ……,n,考虑以xi作为最后项的最长递增子序列的长度C[i].
如果在xi项前面存在xj < xi , 那么 C[i] = max{C[j]} +1;否则,C[i] = 1.
因此,

C[i] = max{C[j]} + 1, 存在j,1<=j<i, xj<xi
C[i] = 1, 所有j,1<=j<i, xj>xi
C[1] = 1

在计算C[i]的时候,用k[i] 记录C[i]取得最大值时候j的值。
如果不存在这样的j,令k[i] = 0。
这个记录用于追踪解。
所求的最长递增子序列的长度是:

C = max{C[i] | i=1,2,……,n}

对于每个i,需要检索比i小的所有的j,需要O(n)的时间,i的取值有n种,所以算法时间复杂度是:
W(n) = O(n^2)

最长单调递增子序列——动态规划

原文:http://blog.csdn.net/tommyzht/article/details/46389991

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!