Longest Increasing Subsequence - 最长递增子序列
问题
序列的递增子序列是原序列的子集,元素相对原序列的顺序不变,且依次递增。例如序列的递增子序列有
求序列的最长递增子序列的长度。
解法
设序列的长度为,范围为。设是以为最后一个元素的最长递增子序列的长度,则有状态转移方程:
前个字符的最长递增子序列显然是空的,因此;
对于序列中第个数字,至少一个字符可以作为一个递增子序列,因此至少有。若(其中)则与的最长递增子序列可以组成一个更长的递增子序列,因此,遍历所有可能的,找出下一个最长的递增子序列;
该算法的时间复杂度为。
源码
LongestIncreasingSubsequence.h
LongestIncreasingSubsequence.cpp