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)
的算法。(请纠正我)
但是我从谷歌获得了这个算法
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)
吗?
答案 0 :(得分:1)
此算法在数组中打印最大值第一个参数(A)是数组,第二个参数(n)是现在检查最大值和第三个参数(x)在该时间内最大的项目的索引。 在最坏的情况下,你有一个排序数组,并且在每次检查中(如果A [n]&lt; x然后)你必须用max更新第三个Argument,这意味着你最多必须检查所有数组。
算法从索引n到n-1取最大值并检查最大值从n到n-2并检查最大值为n到n-3索引并继续检查n到1以获得最大值项目
表示它是O(n +(n-1)+(n-2)+ ... + 2 + 1)= O(n ^ 2)
对图片质量感到抱歉:)