最长上升子序列的最优算法
1
问题背景
最长上升子序列问题
(Longest Increasing Subsequence)
在
算法教学中的经典问题,在学习动态规划
(Dynamic
Programming)
相关内容时经常出现。
在动态规划这一章节中
出现的频率只比最长公共子序列
(Longest Common
Sequence)
小。最长上升子序列问题的动态规划解法的时间
复杂度为
n2
,
而我们可以得到的最长上升子序列的最优化算
法的复杂度为
nlogn
。最长上升子序列在我们的课程中是作
为动态规划的联系来做的,这样就误导了大家,使得大家认
为最长上升子序列问题的最优算法就是动态规划算法。这样
就违背另外算法研究的精神,
所以我写这篇文章,
以正视听。
问题描述
设
A=1,x2,
···
,xn >
是
n
个不等的整数构成的序列,
A
的一个
单调递增子序列
xi1,xi2,
···
,xik >
使得
i1 2
···
k
,且
xi1 i2
···
i
k.
子序列
i1,xi2,
···
,xik >
的长度是含有的整数个数
k.
例如
A
=1,5,3,8,10,6,4,9 >,
他的长为
4
的递增子序列是:
1,5,8,10 >,1,5,8,9 >,
···
.
设计一个算法求
A
的一个最长的单调
递增子序列,分析算法的时间复杂度
.
3
算法思想