If statement 时间复杂度:嵌套';如果然后是else';
我在Scheme中编写了一个递归程序,但我很难得到它的时间复杂度。我相信它是O(log(n)),但我绝对不是这个时间复杂性方面的专家。你能帮我解决这件事的复杂性吗 以下是我的伪代码:If statement 时间复杂度:嵌套';如果然后是else';,if-statement,time,big-o,complexity-theory,If Statement,Time,Big O,Complexity Theory,我在Scheme中编写了一个递归程序,但我很难得到它的时间复杂度。我相信它是O(log(n)),但我绝对不是这个时间复杂性方面的专家。你能帮我解决这件事的复杂性吗 以下是我的伪代码: function A { for (int i = 0; i < length.list(); i++) { if (list is null) output absolute value of result if (s2 < s1) recall f
function A {
for (int i = 0; i < length.list(); i++)
{
if (list is null)
output absolute value of result
if (s2 < s1)
recall function A, adding item to s2 value.
else
recall function A, adding item to s1 value.
}
}
谢谢 如果then else语句的顺序是恒定的,O(1)。 有多少嵌套的if语句并不重要,因为您将编写有限数量的代码,这始终是常量顺序 我需要查看更多涉及递归调用的代码,以了解算法的时间复杂度,但if语句仅在创建基本情况时有用。它本身不会以任何有意义的方式增加程序的复杂性
以以下程序为例:
int foo(List<Integer> bar) {
if (bar.size() == 0)
return -1;
if (bar.size() > 0) {
bar.remove();
return foo(bar);
}
return bar.remove();
}
intfoo(列表栏){
如果(bar.size()==0)
返回-1;
如果(bar.size()>0){
杆。移除();
返回foo(bar);
}
返回杆。移除();
}
这个递归程序的运行时复杂性是O(n),因为在分析它之后,我们可以看到正在对列表中的每个项进行递归调用,bar
因此,最坏的情况是O(n),因为foo的调用次数最多为n次,即列表的大小。最佳情况是O(1)。if语句本身与复杂性无关。它们只提供基本/递归的情况。好的,所以在我的程序中,它也应该是O(n),因为它调用列表中的每个项目一次?但它将被调用的次数与列表中的项数相同,当列表为空时,加上1。还是O(n)吗?我编辑了我的帖子/代码@Ryuu1987我很抱歉,但是我已经很久没有做任何Lisp或Lisp派生了。但这可能会有所帮助:即使函数被调用n+1次,通常也可以舍入到最近的多项式(即O(n))。使用Big-O表示法,您可以只考虑最高多项式并排除任何常数。例如,如果运行时是4n^2+3n+5,那么Big-O就是O(n^2),因为n^2是最大的多项式。一个函数是对数的,如果n的值被反复减少一个自身的因子……例如。如果函数连续地将n除以2(类似于合并排序),则运行时是n的logbase2(通过更复杂的/数学分析),可以表示为O(logn)。
int foo(List<Integer> bar) {
if (bar.size() == 0)
return -1;
if (bar.size() > 0) {
bar.remove();
return foo(bar);
}
return bar.remove();
}