您的位置:首页 > 其它

求数组的最长递增子序列的长度

2012-09-13 03:32 281 查看
数组的最长递增子序列的长度

给定数组arr[0:n-1],求最长递增子序列的长度。例如,给定数组1,-1,2,-3,4,-5,6,-7,最长递增子序列为1,2,4,6。

我们可以对最长递增子序列的特点进行分析。分析结果如下:

arr[0:k-1]的最长递增子序列,可能不止一个,但是这些最长递增子序列的长度都相等,设为len[k-1]。
arr[0:k]的最长递增子序列的长度 大于等于 arr[0:k-1]的最长递增子序列的长度. 也即len[k]>=len[k-1].
如果arr[0:k]的最长递增子序列的长度 等于 arr[0:k-1]的最长递增子序列的长度,要么1)arr[0:k]的最长递增子序列和arr[0:k-1]的最长递增子序列相同;要么2)arr[0:k-1]的长度为len[k-1]-1的递增子序列加上arr[k],构成arr[0:k]的最长递增子序列。
如果len[k]>len[k-1],那么一定是len[k]=len[k-1]+1.
如果arr[0:k]的最长递增子序列的长度 比 arr[0:k]的最长递增子序列的长度 大一,那么,arr[0:k]的最长递增子序列一定是arr[0:k-1]的最长递增子序列加上arr[k]构成。(注意,arr[0:k]的最长递增子序列可能不止一个)

举个例子,设arr[0:7]={1,-1,2,-3,4,-5,6,-7}. 那么,arr[0:3]的最长递增子序列有:{1,2}和{-1,2},arr[0:4]的最长递增子序列一定是:{1,2,4}和{-1,2,4}.(注意,arr[4]=4).
根据上面的观查,可以得出下面的结论:
已知,arr[0:k-1]的最长子序列的长度是len[k-1],如果arr[k]加入到arr[0:k-1]的最长子序列后,新的序列仍然递增,那么新的序列就是arr[0:k]的最长子序列,如果,新的序列不再是递增序列,那么arr[0:k]的最长递增子序列arr[0:k]的最长递增子序列是一样的。
根据上面的结论,不能写出解决该问题的程序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: