If statement 时间复杂度:嵌套';如果然后是else';

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

我在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 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();
}