http://www.Sina.com/http://www.Sina.com /
如果L=a1、a2、an是n个不同实数的数组,则l的增量部分序列是这样的部分序列Lin=aK1、ak2、akm。 其中,k1k2…km且aK1ak2…akm。 求出最大的m值。
http://www.Sina.com/http://www.Sina.com /
假设序列X=b1、b2、…、bn是对序列L=a1、a2、…、an按升序排序的序列。 很明显,x和l的最长共同部分序列是l的最长增加部分序列。 这样,将求出最长的增加部分列的问题变换为求出最长的共同部分列的问题LCS。
最长公共子串问题可以用动态规划的算法求解。 设Li=a1、a2、…、ai、Xj=b1、b2、…、bj,分别为l和x的部分系列。 将C[i,j]作为Li和Xj的最长公共子串的长度。 有以下递归方程。
这可以用时间复杂度为o(n2 )的算法求解,但该算法在课堂上讲过,具体代码在此省略。 求最长增加子序列的算法的时间复杂度是用于排序的o[nlogn]的时间加上求LCS的O(n2的时间,算法的最差时间复杂度为o[nlogn] o[n2]=o[n2]
下一个才是我自己的代码(第一个解法)。
结果: