最长递增子序列(python)

一,    最长递增子序列问题的描述

设L=是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=,其中k1

二,    第一种算法:转化为LCS问题求解

设序列X=是对序列L=按递增排好序的序列。那么显然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)。

  下面才是我自己的code(第一种解法)

 

最长递增子序列(python)_第1张图片

 

 result:

 

你可能感兴趣的:(算法,python)