对于Java中的一些时空复杂性问题,需要一些帮助/确认

问题描述

我想确保我处理时间和空间复杂性的方法是好的。我是一名IT专业学生,并且正在兼职工作,除了参加我所工作的公司正在学习的课程以外,我还进行了这项练习,我想知道我是否正在正确处理复杂性问题,或者我是否正在从事错误的音轨!

我试图弄清两种情况的时间和空间复杂性。我已经采取了一些步骤并做了很好的尝试,因此下面您将找到我对Java代码中三种不同方法/函数的看法和答案。向下滚动以查看练习。

情况1:

  public int func1(int n) {

   int total = 0;
     for (int i = 0; i < n; i++) {
      for (int j = 50; j > 0; j--) {
       for (int k = 0; k < j/2; k++) {
        total++;
       }
      }
     }
     return sum;
    }

时间复杂度
对于时间复杂度,我认为外部循环为O(n),中间循环为O(1),最内部循环也为O(1),因为它与第一个循环无关,所以我是否可以纠正这一点?是Big O(1 * 1 * n)=> Big O(n) ??

空间复杂度
这个循环的空间复杂度可能必须是Big O(1),因为在循环中没有实例化任何新变量。.仅循环本身,并且int total =0。但这与n也无关。所以我猜想Space是 Big O(1)

情况2:

  public int func2(int n) {
      if (n > 0) {
      int[] array = new int[n+n];
      return func2(n-1) + func2(n-2);
     } else {
      return 0;
     }
    }

时间复杂度
对于我来说,这个时间的复杂度对我来说有点难,因为开头是数组。我认为由于循环中的递归,n个输入的复杂度很重要,所以它是O(n)的大时间复杂度。但是由于返回双递归函数func2(n-1)+ func2(n-2),我不确定是否可能是n ^ 2。我在使用Big O(n)的方向正确吗?

空间复杂度
最后,我认为这种情况下的空间复杂度是2n,那么它是n?由于每次调用该函数时,它都会创建一个长度为2n的新数组,因此如果n = 4则该数组为8长,然后下一次迭代为6,依此类推。

所以我的最终答案是空间复杂度为Big O(n)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)