首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用递归法最大增加O(n^2)的SubSequence

问用递归法最大增加O(n^2)的SubSequence
EN

Stack Overflow用户
提问于 2014-11-06 02:39:30
回答 1查看 933关注 0票数 0

LIS :最长的增长子序列问题是找到一个给定序列的子序列,其中子序列的元素是排序的,从低到高。

例:

0、8、4、12、2、10、6、14、1、9、5、13、3、11、7、15 最长的增长子序列是0,2,6,9,13,15。

我可以使用不同的方法来开发LIS,比如动态编程和记忆技术,但是,对于特定的情况,我喜欢使用具有O(N^2)时间复杂性的递归来实现LIS。

到目前为止,我认为使用递归不能实现时间复杂度为O(N^2)的算法。(请纠正我)

不过,我从谷歌那里得到了这个算法

代码语言:javascript
复制
Algorithm  LIS(A,n,x)
1: if n = 0 then
2:   return 0
3: m   LIS(A; n -1; x)
4: if A[n] < x then
5:   m =max(m; 1 + LIS(A; n-1;A[n]))
6: print(m)

这个算法是O(N^2)吗?

你能解释一下吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-06 02:49:40

该算法在数组中输出最大值,第一个参数(A)是数组,第二个参数(n)是现在检查最大的项的索引,第三个参数(x)在那个时候是最大的。在最坏的情况下,您有一个排序数组,并且在每次检查中(如果是

该算法从索引n到n-1取最大值,从n到n-2用max检验,在n~ n-3索引中用max检验,然后继续用n到1检验得到最大项。

这意味着它是O(n+(n-1)+(n-2)+...+2+1) = O(n^2)

​

​

对Pic的质量感到抱歉:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26770846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档