我试图找出每个语句的频率和这个方法的大o。
但我和另一部分挣扎,我知道我们采取了最复杂的IF和其他。
但在逻辑上,在这种情况下,我有没有把外环的频率(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;

最佳答案

所以,你有一个O(n)循环和一个O(n)其他的循环。
但在您的代码中,我们只检查一次else语句。
所以有一个for循环,在if-you中做O(1)个功(n-1)次,一次(i==0)做O(n)个功(当到达else语句时)
因此,复杂性是O(n)=(n-1)*o(1)+o(n)~o(2n),这也是O(n),因为我们在进行渐近分析时放弃常数。

关于algorithm - 循环块中包含循环的else块的复杂性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52506091/

10-14 01:01