问题描述
我想确保我处理时间和空间复杂性的方法是好的。我是一名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 (将#修改为@)