最长单调递增子序列的长度记为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)。

 

电脑游戏中的人工智能制作

电脑游戏随着硬件执行效率与显示解析度等大幅提升,以往很多不可能或非常难以实现的电脑游戏如此都得以顺利完成。虽然电脑游戏的呈现是那么地多样化,然而却与我们今日所要探讨的主题,人工智能几乎都有着密不可分的...
  • zdg
  • zdg
  • 2000-12-10 18:22:00
  • 1780

NYOJ - 单调递增最长子序列(经典dp)

单调递增最长子序列 时间限制:3000 ms  |           内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就...
  • SevenMIT
  • SevenMIT
  • 2013-04-12 00:53:39
  • 2561

nyist oj 17 单调递增最长子序列 (动态规划经典题)

单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abd...
  • u014253173
  • u014253173
  • 2014-08-15 11:37:23
  • 5156

算法导论15.4-6 求一个n个数的序列的最长单调递增子序列 O(n*logn)

算法导论 15.4-6   Give an O(nlgn) time algorithm to find the longest monotonically increasing  subsequ...
  • bitspx
  • bitspx
  • 2014-10-18 21:36:05
  • 1638

NYOJ 17 单调递增最长子序列(动态规划)

时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一...
  • u011694809
  • u011694809
  • 2015-06-01 09:18:29
  • 1098

动态规划--最长单调递增子序列

问题:找出一个n个数的序列X中最长的单调递增子序列。 分析1: 这里描述一个O(n^2)的算法,令c[i]表示:在a[0->i]中,当以a[i]为单调递增子序列最后一个元素时,所得最长单调递增子序...
  • wenlei_zhouwl
  • wenlei_zhouwl
  • 2010-11-05 21:14:00
  • 11592

最长递增子序列LIS的O(nlogn)的求法

最长递增子序列(Longest Increasing Subsequence)是指n个数的序列的最长单调递增子序列。比如,A = [1,3,6,7,9,4,10,5,6]的LIS是1 3 6 7 9 ...
  • u012505432
  • u012505432
  • 2016-08-17 10:57:06
  • 856

Java-LIS最长递增子序列(动态规划实现)

问题:找出给定数组最长且单调递增的子序列。         解决思路:原数组arr的子序列顺序保持不变,而且排序后的array本身是递增的。这样得到的两个序列的子序列一定是递增的序列。要求出数组ar...
  • qq_30507287
  • qq_30507287
  • 2016-10-16 19:41:12
  • 1419

最长递增子序列的三种算法

转载自:http://qiemengdao.iteye.com/blog/1660229 最长递增子序列   问题 给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定...
  • u013178472
  • u013178472
  • 2017-02-08 14:34:13
  • 7849

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

动规基础:最长递增子序列的三种解法。附详解和代码。第一种:转化成LCS问题求解O(n*n)。第二种:设d[i]为以第i个元素结尾的最长递增子序列的长度O(n*n)。第三种:二分查找优化O(nlogn)...
  • u012198382
  • u012198382
  • 2014-05-04 21:20:10
  • 3605
收藏助手
不良信息举报
您举报文章:最长单调递增子序列的长度记为ci
举报原因:
原因补充:

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