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

使用||运算符的递归算法的时间复杂度和空间复杂度是多少?

麹飞航
2023-03-14

我有一个算法可以检查是否可以解决游戏行。游戏行是一个正整数数组,其中最后一个元素为 0。游戏标记从索引 0 开始,沿着数组移动它所在的整数指示的步数。

例如,[1,1,0]返回true,而[1,2,0]返回false。标记也可以向左或向右移动以解决游戏。也就是说,[3,3,2,2,0]是可解的。

Algorithm recursiveSolvable(gameArray, index)
     if index = gameArray.length - 1     // the last element has been reached
          return true
     if index < 0 || index >= gameArray.length || arrayList.contains(index)
          return false
     arrayList.add(index)     // store visited indices to avoid infinite loop
     else
          // move towards the goal (last element) if possible
          // otherwise, trace back steps to find another way
          return recursiveSolvable(gameArray, index + gameArray[index])
                 || recursiveSolvable(gameArray, index - gameArray[index])

我尝试了一些游戏行示例,并计算了最坏情况下的时间复杂度:

[2, 0] has 2 recursive calls where the first one returns false, and the second one as well
[1, 1, 2, 0] has 5:
     go right || go left - false
        |
     go right || go left - false 
        |
     go right || go left - false (because index 0 has been visited)
        |
      false (then go left)

其他情况下给我的数字,我找不到与输入大小的关系,但是当我运行输入大小为n=100的程序时,输出会立即显示出来,所以我假设时间复杂度不是O(2^n)(像二进制递归)。我更倾向于O(n)…

至于空间的复杂性,我不知道如何找到它。

共有1个答案

盖弘毅
2023-03-14

运行时确实更像O(n)。这是因为每个索引位置只调查一次(由于使用arrayList进行测试)。

确切的界限还取决于用于< code>arrayList的数据结构。它真的是一个< code>List还是一个< code>HashSet?

出于同样的原因,空间复杂度为 O(n)。每个索引位置只能有一个递归方法的化身。

 类似资料:
  • 所以我在理解为什么递归DFS和迭代DFS的时间复杂度相同时遇到了一些问题,也许有人能给我一个简单的解释? 提前谢了。

  • 我在理解算法的时间复杂性方面有问题。 让我们举第一个例子,用这个算法在二叉搜索树中进行搜索: 那么,如何计算这个时间复杂度呢? null

  • 主要内容:时间复杂度,空间复杂度《 算法是什么》一节提到,解决一个问题的算法可能有多种,这种情况下,我们就必须对这些算法进行取舍,从中挑选出一个“最好”的。 算法本身是不分“好坏”的,所谓“最好”的算法,指的是最适合当前场景的算法。挑选算法时,主要考虑以下两方面因素: 执行效率:根据算法所编写的程序,执行时间越短,执行效率就越高; 占用的内存空间:不同算法编写出的程序,运行时占用的内存空间也不相同。如果实际场景中仅能使用少量的内

  • 算法的时间与空间复杂度 看到群里们小伙伴在讨论算法复杂度问题,之前在极客时间看了王争的《数据结构与算法之美》,看的我也晕呼呼的,跟上学时在学校老师的讲的有点不一样了,网上搜了下各种各样的,结合参考作一篇简单易懂的总结。 什么是算法 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。 如何评价一个算法的好坏 一般我们会从以下维度来评估算法的优劣 正确性

  • 注:∈/ 意思是不在,我不能在代码中输入。 这个问题可能与一些帖子重复。 理解Dijkstra算法的时间复杂度计算 Dijkstra算法的复杂性 Dijkstras算法的复杂性 我读过它们,甚至读过Quora上的一些帖子,但仍然无法理解。我在伪代码中添加了一些注释,并试图解决它。我真搞不懂为什么它是O(E log V)

  • 本文向大家介绍k-means算法的时间空间复杂度?相关面试题,主要包含被问及k-means算法的时间空间复杂度?时的应答技巧和注意事项,需要的朋友参考一下 时间复杂度为O(tmnK) t表示迭代次数,m表示数据个数,表示数据特征维度,K表示类簇数 空间复杂度为O((m+K)*n) m表示数据个数,K表示类簇个数,n表示维度,理解就是需要存储数据点和类中心点