循环块中包含循环的else块的复杂性

时间:2018-09-25 20:19:28

标签: algorithm performance big-o complexity-theory

我正在尝试查找每个语句的频率以及该方法的主要作用。

但是我正在为else部分而苦苦挣扎,我知道我们采用的if和else的复杂性最差

但是在逻辑上,在这种情况下,我是否将外循环(n)的频率乘以else循环(n + 1)的频率?虽然我知道else块只会在i = 0时执行一次 但是当我们遵循规则时,我们必须乘以它 所以我被困在这里,我不知道在这种情况下该怎么办,我希望你们能帮助我 谢谢!

int i, j, sum = 0;
for (i = 0 ; i < n; i++)
if ( i != 0)
    Sum += i;
else
    for (j = 0 ; j< n; j++)
        Sum + = j;

1 个答案:

答案 0 :(得分:2)

因此,您有一个O(n)循环和一个O(n)循环。 但是在您的代码中,我们只经历一次else语句。

因此,您有一个for循环,在if内执行O(1)次(n-1)次,在一次(i == 0)内执行O(n)次(到达else语句时) )

因此复杂度为O(n)=(n-1)* O(1)+ O(n)〜O(2n),这也是O(n),因为我们在进行渐近分析时会删除常数。