当前位置: 首页 > 知识库问答 >
问题:

使用递归的O(n^2)的最大递增子序列

裴弘
2023-03-14

LIS:最长递增子序列问题是寻找给定序列的子序列,其中子序列的元素按从低到高的顺序排序

例如:

0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15

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)

你能解释一下吗?

共有1个答案

李华茂
2023-03-14

这个算法打印数组中的最大值第一个参数(a)是数组,第二个参数(n)是现在检查max的项的索引,第三个参数(x)是当时的最大值。在最坏的情况下,您有一个排序的数组,并且在每次检查中(如果[n]

该算法从索引n到n-1取一个max,用max从n到n-2,用max在n到n-3索引中进行检查,然后继续用n到1进行检查,得到max项。

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

 类似资料:
  • 所以我用动态编程做了一个简单的python代码来解决最大递增子序列的问题。问题如下: 给定一个数组 arr 的 N 个正整数。求出给定数组的最大和递增子序列的总和。 输入:输入的第一行包含一个整数 T,表示测试用例的数量。每个测试用例的第一行是 N(数组的大小)。每个测试用例的第二行包含数组元素。 输出:对于每个测试用例,在新行中打印所需的答案。 在我的解决方案中,我正在计算一个名为“总和”的列表

  • 我很难确定简单递归方法的大O。我不知道当一个方法被多次调用时会发生什么。我想更具体地谈谈我的困惑领域,但目前我正试图回答一些硬件问题,为了不想作弊,我要求任何回复本文的人提出一个简单的递归方法,并对所述方法的大O进行简单解释。(最好是Java语言……我正在学习的一种语言。) 谢谢你。

  • 给定n个正整数的数组。这是一个寻找给定数组的最大和子序列的和的程序,使得子序列中的整数按升序排列。我试图实现基于这个YouTube视频的代码,我不知道我做错了什么。

  • 我想找出一种方法,从整数中找出整数的最大和。 在这种情况下,输入总是整数的数组,任务是使用数字(每个数字只能使用一次)计算最大可能的和。 以下是我到目前为止提出的方法,但我不知道如何用一种方法来完成这一切。 有了这个输入:程序应该打印出。

  • 我在GeekforGeekshttps://www.geeksforgeeks.org/minimum-number-of-jumps-to-reach-end-of-a-given-array/中检查“到达终点的最小跳跃次数”问题。我对这里提到的时间复杂度感到困惑,它是O(n^n)。 如果我看到上面的代码块,minJumps(arr,I,h)递归调用是从I=l1调用的。所以在每个递归步骤中,l(

  • 我为最长的递增子序列生成了以下代码: 输入:nums=[10,9,2,5,3,7,101,18] 输出:4 说明:最长的递增子序列是[2,3,7,101],因此长度为4。 有人能帮我理解这句话吗 三个点的意义是什么?正如我们所知,映射生成键值对,映射与切片一起做什么?