Language agnostic 两个嵌套循环的复杂性,内部循环的步进依赖于外部循环变量 函数(n){ 对于(int i=1;i

Language agnostic 两个嵌套循环的复杂性,内部循环的步进依赖于外部循环变量 函数(n){ 对于(int i=1;i,language-agnostic,big-o,time-complexity,pseudocode,Language Agnostic,Big O,Time Complexity,Pseudocode,对于i的每个值,内环执行(n-1)/i+1次,因为对于每个i,内环根据满足AP的以下等式执行,即,.1+(x-1)*i=n,这意味着x=(n-1)/i+1 很明显,它将形成一个AP。所以现在你所要做的就是对1It的表达式求和,它不能是O(n^2),因为内循环是由外循环变量递增的,例如,j等于2,4,7,11,etc@SebastianPiu:它不能大于O(n^2);仅仅因为牵涉到i并不能自动使其小于O(n^2).yaa这是我的错误,但我认为它必须是n^2 logn…我是对的吗?每次我增加,如果我

对于i的每个值,内环执行
(n-1)/i+1
次,因为
对于每个i,内环根据满足AP的以下等式执行,即,.1+(x-1)*i=n,这意味着x=(n-1)/i+1


很明显,它将形成一个AP。所以现在你所要做的就是对1It的表达式求和,它不能是O(n^2),因为内循环是由外循环变量递增的,例如,j等于2,4,7,11,etc@SebastianPiu:它不能大于O(n^2);仅仅因为牵涉到
i
并不能自动使其小于O(n^2).yaa这是我的错误,但我认为它必须是n^2 logn…我是对的吗?每次我增加,如果我没有遗漏任何东西,你有一半的内循环迭代?每次增加,我不会减少一半的迭代,虽然它会减少它们。但是对于内循环,它在每次迭代中以n/i的速率下降,我们会这样做从i=1到n求和,计算结果为nlogn,外循环为n次,因此乘积为n^2 log n…这就是我所理解的,如果我错了,请纠正我!!!1不,不!你犯了一个小错误。根据i的值,你已经求和了n次了…所以你不需要再乘以复杂度nlognn乘以n…,因为你已经对i的每个值的表达式求和了
function(n) {
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j+=i)
            printf("*");
}
((n-1)/1 +1) + ((n-1)/2+1)+ ((n-1)/3+1) //upto n because max value of i can be n
that becomes n + Summation((n-1)/i) where i can go upto n.