题目描述:
给出S={1,2,…,n }到它自身的一个映射(一一对应),求出最长不下降子序列的长度,即LIS问题。
基本思想:
1. dp
设m[i]表示映射到{1,2,...,i}的最长不下降序列的长度,则有
当 0<=j<=i-1, data[i]>data[j] 时, m[i] = max(m[j]) + 1;
算法复杂度O(n^2)
2. dp+二分搜索
D(i) = min { data[j] | m[j] = i }; 表示长度为 i 的非降子序列的最后一个元素
这样D(i) 必然是一非递减序列,对于序列元素 data(i), 在D中查找最大的 j , 使得 D(j) <=data(i), 则以
data(i) 结尾的最长不下降子序列长度为 j+1,否则更新D中的数据。由于D非递减,所以可用二分查找法,故而
此算法效率为 O( nlogn )。此算法关键在于二分查找法.(此算法未考虑多对一的映射)
D[
1
]
=
data[
1
];
int
c
=
1
;
for
(j
=
2
; j
<=
p;
++
j)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
int l = 1, r = c;
while(l<r)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
k = (r+l)/2;
if(D[k] < data[j])
l = k+1;
else if(D[k] > data[j])
r = k-1;
}
if(D[l]<data[j])
D[++l] = data[j];
else if( D[l] > data[j] )
D[l] = data[j];
if(l>c)
++c;
}
给出S={1,2,…,n }到它自身的一个映射(一一对应),求出最长不下降子序列的长度,即LIS问题。
基本思想:
1. dp
设m[i]表示映射到{1,2,...,i}的最长不下降序列的长度,则有
当 0<=j<=i-1, data[i]>data[j] 时, m[i] = max(m[j]) + 1;
算法复杂度O(n^2)
2. dp+二分搜索
D(i) = min { data[j] | m[j] = i }; 表示长度为 i 的非降子序列的最后一个元素
这样D(i) 必然是一非递减序列,对于序列元素 data(i), 在D中查找最大的 j , 使得 D(j) <=data(i), 则以
data(i) 结尾的最长不下降子序列长度为 j+1,否则更新D中的数据。由于D非递减,所以可用二分查找法,故而
此算法效率为 O( nlogn )。此算法关键在于二分查找法.(此算法未考虑多对一的映射)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)