最长递增子序列

✍ dations ◷ 2025-05-20 03:47:55 #组合数学,动态规划

在计算机科学中,最长递增子序列(longest increasing subsequence)问题是指,在一个给定的数值序列中,找到一个子序列,使得这个子序列元素的数值依次递增,并且这个子序列的长度尽可能地大。最长递增子序列中的元素在原序列中不一定是连续的。许多与数学、算法、随机矩阵理论(英语:random matrix theory)、表示论相关的研究都会涉及最长递增子序列。解决最长递增子序列问题的算法最低要求O( log )的时间复杂度,这里表示输入序列的规模。

对于以下的原始序列

最长递增子序列为

值得注意的是原始序列的最长递增子序列并不一定唯一,对于该原始序列,实际上还有以下两个最长递增子序列

最长递增子序列问题与最长公共子序列问题密切相关,后者具有动态规划解决方案(时间复杂度为O):序列S的最长递增子序列是S和T的最长公共子序列,其中T是对S进行排序的结果。但对于特殊情况,输入是整数 1, 2, ..., , 的排列,解决方案可以进一步改进,从而使时间复杂度降为O( log ) 。

排列图(permutaion graph)中的最大团是由'定义该图的排列中最长的递减子序列'定义的, 求最长的递减子序列在计算复杂度上(通过对所有数取它的负数)等同于求最长的递增子序列。 因此,最长递增子序列算法可用于有效地解决排列图中的分团问题。

下面概述的算法使用数组和二分查找算法有效地解决了最长递增子序列问题。 它依次处理序列元素,保存当前找到的最长的递增子序列, 比如: ,X ]。在处理X之后,算法会将值存储在两个数组中:

另外,该算法还存储了一个变量L,该变量L表示到目前为止找到的最长的递增子序列的长度。 下面的算法使用基于零的编号,为了清楚起见,M用M 填充,而M 未使用,因此M 对应于长度j的子序列。 实际的实现可以跳过M 并相应地调整索引。

请注意,在算法的任何时候,序列

是递增的。 因为,如果长度的子序列以X ]结尾,则长度的子序列以较小的值结尾:即以X 结尾的子序列 ]。 因此,我们可以使用二分查找在时间内完成搜索。

伪代码如下:

P = array of length NM = array of length N + 1L = 0for i in range 0 to N-1:    // Binary search for the largest positive j ≤ L    // such that X] <= X    lo = 1    hi = L    while lo ≤ hi:        mid = ceil((lo+hi)/2)        if X] < X:            lo = mid+1        else:            hi = mid-1    // After searching, lo is 1 greater than the    // length of the longest prefix of X    newL = lo    // The predecessor of X is the last index of     // the subsequence of length newL-1    P = M    M = i        if newL > L:        // If we found a subsequence longer than any we've        // found yet, update L        L = newL// Reconstruct the longest increasing subsequenceS = array of length Lk = Mfor i in range L-1 to 0:    S = X    k = Preturn S

由于该算法对每个序列元素都执行二分查找,因此时间复杂度为O( log )。 弗雷德曼 Fredman (1975)讨论了该算法的一种变体,他将其归功于高德纳。 在他研究的变体中,该算法在进行二分查找之前,测试每个值X 是否可以在常数时间内扩展当前最长的递增序列。 通过这种修改,算法在最坏的情况下只会进行 log2 − log2log2 + O()个比较,对于比较算法(最高为O() 项中的恒定因子)而言,这是最佳选择。

相关

  • 聚合酶链反应聚合酶链式反应(英文:Polymerase chain reaction,缩写:PCR,又称多聚酶链式反应),是一项利用DNA双链复制的原理,在生物体外复制特定DNA片段的核酸合成技术。通过这一技术,可在短时间内
  • 长期照顾长期照护(英语:Long-term care,简称LTC),是一种协助因慢性疾病或身心障碍而长期无法自理的病患,满足各式各样医疗与非医疗需求的服务。长期照护通常会提供看护与非技术性照护,例如
  • 3-甲基丁酸异戊酸(结构式:(CH3)2CHCH2COOH),是一种含有5个碳原子的短链饱和脂肪酸。透明液体,可溶于水。无色,具有强烈难闻气味的透明液体。溶于水,与乙醇、乙醚混溶。由异戊醛经催化氧化
  • 体温过低失温症(Hypothermia,源自希腊文“ὑποθερμία”),又称低温症、低体温症。描述当人体核心温度低于35.0 °C(95.0 °F)时的现象。失温症的症状取决于温度,轻度失温可能造成发
  • 预防腐败局1999年规定:印章直径4.5厘米,中央刊国徽,由国务院制发。最高人民检察院:反贪污贿赂总局国家预防腐败局,是已撤销的中华人民共和国的国家级预防腐败专门机构,主要负责全国防腐败工
  • 王薇薇王薇薇(英语:Vera Wang;1949年6月27日-)是美国一名时尚设计师,主要活跃在纽约市。王薇薇出生于美国纽约市的一个华裔家庭,并在纽约市长大;她出生时所使用的英文名为Vera Ellen Wang
  • 克柳奇克柳奇(克罗地亚语:Ključ),波斯尼亚和黑塞哥维那波黑联邦乌纳-萨纳州城镇。总面积358平方公里,总人口18714(2013年)。罗马时代之前,该地就有人类定居。1322年,该地首次有文献提及。
  • 伊恩·格雷伊恩·格雷(英语:Iain Glen,1961年6月24日-)是一位苏格兰男演员兼电影、电视和舞台演员,曾出演过《恶灵古堡系列电影(英语:Resident Evil (film series))》、《王者天下 (电影)》以及
  • 吉姆·索普吉姆·索普(英语:Jacobus Franciscus "Jim" Thorpe,1888年5月28日-1953年3月28日)美国籍,被认为是现代运动史上最多才多艺的运动员。他曾经于1912年获得五项全能与十项全能的1912
  • 李察·霍尔李察·霍尔(1896年9月6日-1973年)是英国推理作家理查·亨利·桑普森的笔名。李察18歳时加入军队,投入第一次世界大战,战后曾担任会计师,于1934年出版处女作《谋杀我姑妈》出道,1950