最长单调递增子序列的长度记为ci

原创 2007年10月13日 20:16:00

解决该问题的算法描述如下。把xi之前的最长单调递增子序列的长度记为ci,为了找到最长单调序列中的元素,另外设p1..pn记录,pi的值就是pi结尾的子序列中位于pi之前的元素,在原序列中的下标。如果xi作为一个子序列的第一个元素出现,令pi=0。

显然有c1=1,p1=0。对i=2..n,首先记下x1..x[i-1]中小于xi的全部元素的下标m1, m2, .., mp。之后取cm1, cm2, .., cmp中的最大值cx,令ci=cx+1,pi=x。如果x1..x[i-1]中没有比xi小的元素,令ci=1,pi=0。

上述过程结束后,检察c1..cn,其中最大值ck就是原数列的最长单调子数列的长度,确定其中元素的过程为,令i=k,count = 0:
result[count]=xi
如果pi=0结束
count++
i=pi
返回开头

分析复杂度。对全部i=1..n,需要找到小于xi的全部元素,及他们对应的ci的最大值。这可以通过对x1..xi的一次扫描完成,扫描一个元素所需的时间(t0)是一个常数。寻找该子数列所含元素的操作,因为我们用了标记数组p,所需的时间就是检查ck个标记并且把相应的xi拷贝出来的时间,这是ck的一次函数。因此总的运行时间是
S=t0*[1+2+...+(n-1)] + t1*ck <= t0*(n*n-n)/2 + t1*n
总的时间复杂度是O(n*n)。

 

最长单调递增子序列的三种解法

动规基础:最长递增子序列的三种解法。附详解和代码。第一种:转化成LCS问题求解O(n*n)。第二种:设d[i]为以第i个元素结尾的最长递增子序列的长度O(n*n)。第三种:二分查找优化O(nlogn)...
  • u012198382
  • u012198382
  • 2014年05月04日 21:20
  • 3016

题目17: 单调递增最长子序列

单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abd...
  • SJF0115
  • SJF0115
  • 2013年03月25日 22:25
  • 4531

C++ 最长递增子序列问题

最长递增子序列问题:在一列数中寻找一些数,这些数满足:任意两个数a[i]和a[j],若i动态规划求一序列的最长子序列的长度,那么将问题变为在序列中求以a[k]为终点的最长上升子序列的长度aLen[k]...
  • BIG_C_GOD
  • BIG_C_GOD
  • 2016年11月05日 16:05
  • 1479

最长的单调递增子序列

  • 2014年09月17日 17:26
  • 25KB
  • 下载

LIS最长单调递增子序列

  • 2014年05月18日 16:23
  • 930B
  • 下载

最长单调递增子序列的长度

一个数组p[],长度plen,求其中最长单调递增子序列。 定义数组up[],up[i]表示长度为i的单调递增子序列中最后一位元素最小为up[i]。定义uplen表示最长的子序列长度 up[]必然是单调...
  • qq_30080829
  • qq_30080829
  • 2017年07月10日 17:14
  • 86

UVA-10534-Wavio Sequence(最长单调递增子序列长度NlogN)

Wavio is a sequence of integers. It has some interesting properties. • Wavio is of odd length i.e. ...
  • qq_32680617
  • qq_32680617
  • 2016年12月21日 12:45
  • 144

最长单调递增子序列LIS

  • 2011年09月11日 22:18
  • 2KB
  • 下载

最长单调递增子序列O(nlogn)

#include "iostream" #include "fstream" using namespace std;/* b[k]表示长度为i的子序列c[i]中,长度为k的最长单调递增子序列的最小结...
  • u012319493
  • u012319493
  • 2015年11月17日 14:39
  • 272

算法导论15.4-6:最长单调递增子序列

参考资料: 《编程之美》2.16 http://blog.pfan.cn/rickone/13086.html http://chriszeng87.iteye.com/blog/1054321...
  • zhangguixian5
  • zhangguixian5
  • 2012年11月20日 21:43
  • 4240
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:最长单调递增子序列的长度记为ci
举报原因:
原因补充:

(最多只允许输入30个字)