最长递增子序列

✍ dations ◷ 2025-12-04 21:03:05 #组合数学,动态规划

在计算机科学中,最长递增子序列(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() 项中的恒定因子)而言,这是最佳选择。

相关

  • 文房四宝文房四宝,是汉字文化圈传统的文书工具,即毛笔、墨、纸、砚。源于中国,再传播至日本、朝鲜半岛、越南、琉球等地。文房四宝之名,起源于南北朝时期(420年—589年),“文房”之名意指“
  • 麦道MD-80麦道MD-80系列及麦道MD-90,原先称作DC-9-80,是根据道格拉斯DC-9改良而成的一款双引擎商业飞机,载客量介于130与172之间。麦道MD-80于1980年10月10日由瑞士航空率先投入运营,型号
  • ɠ浊软颚内爆音是一种辅音。其发音方式为软颚与舌背接触、且口腔、声门同时关闭的状态下,让喉头位置下降,从而使声道中产生气流。同时松开软颚与舌背发出的一种辅音。国际音标中
  • 蜥脚形亚目蜥脚形亚目(学名:Sauropodomorpha,或译作蜥脚亚目)意为“蜥蜴般的脚”与“形态”,是蜥臀目的一个演化支,包含蜥脚下目、与其祖先近亲(原蜥脚下目,可能是并系群)。蜥脚下目是一群长颈
  • 婺源县.mw-parser-output ruby.zy{text-align:justify;text-justify:none}.mw-parser-output ruby.zy>rp{user-select:none}.mw-parser-output ruby.zy>rt{font-feature-settings:
  • 特鲁斯特鲁斯(Tellus)或译为:泰菈(Terra),古罗马宗教和神话中职司土地的女性神祇之一。在古罗马得到古罗马人崇拜供奉并进行与之相关的活动。其事迹与艺术形象反映于相关古典作家之著述
  • 09II型核潜艇09II型潜艇(北约代号:夏级,英语:)是中国人民解放军海军的第一代弹道导弹核潜艇,该型艇由攻击潜艇09I型核潜艇扩大船壳改进而来,在艇体上插入弹道导弹舱段。1970年设计方案完成,开始
  • 南菜园坐标:25°01′37″N 121°31′13″E / 25.027058°N 121.520398°E / 25.027058; 121.520398 南菜园,是台湾总督儿玉源太郎的别墅,位于当时的台北市儿玉町四丁目,建于1899年(明治
  • 白尚德白尚德,又名白向德,福建同安人,明朝政治人物、进士出身。永乐十二年,福建甲午乡试中举。永乐十六年(1418年),登戊戌科会试中进士,授平安县知县。
  • 何享健何享健(1942年10月5日-),广东顺德人,中华人民共和国企业家,美的集团创始人,中国共产党党员。1992年成立的美的集团的创始人、控股人。2012年8月26日,卸任美的集团董事长。2013年福