Time complexity 这件事的时间复杂性是什么?为什么?

Time complexity 这件事的时间复杂性是什么?为什么?,time-complexity,big-o,Time Complexity,Big O,以下方法的时间复杂度是多少?为什么 因为第一个for循环,我知道它必须大于O(n) 但是在while循环之后,时间复杂度会发生什么变化呢 是O(n)(n-1)=O(n^2+n)吗 intfna(intn){ 整数和=0; 对于(int i=0;i1){ 产品∗= J j=j/2; } 总和+=乘积; } 回报金额; } 这在我看来像是O(n log n)。主循环迭代n次,每次迭代需要logn额外的迭代才能完成,因为j从i开始,然后减半直到j这看起来像是一个家庭作业问题。你试过什么?这里的复杂度是

以下方法的时间复杂度是多少?为什么

因为第一个for循环,我知道它必须大于O(n)

但是在while循环之后,时间复杂度会发生什么变化呢

是O(n)(n-1)=O(n^2+n)吗

intfna(intn){
整数和=0;
对于(int i=0;i1){
产品∗= J
j=j/2;
}
总和+=乘积;
}
回报金额;
}

这在我看来像是
O(n log n)
。主循环迭代
n
次,每次迭代需要
logn
额外的迭代才能完成,因为
j
i
开始,然后减半直到
j这看起来像是一个家庭作业问题。你试过什么?这里的复杂度是多项式的,大于
O(n)
。顺便说一句,
O(n^2+n)
没有多大意义,因为逐渐地,
n^2
占主导地位,所以在这种情况下,你想写的是
O(n^2)
@William是的,这是一个我正在准备的考试题。所以是O(n^2+n),我是对的好吧,你的思路是对的,但是请看我对上面评论的编辑。@William啊,是的,你是对的,最后的答案是O(n^2),因为你要正确选择最大的一个?这应该让你走上正确的轨道:
int fnA(int n) {
    int sum=0;
    for (int i=0; i<n; i++) {
        int j=i;
        int product =1;
        while (j>1) {
            product ∗= j ;
            j = j / 2;
        }
        sum += product;
    }
    return sum;
}
O(0 log n) + O(1 log(n-1)) + ... + O(n/2 log (n/2)) + ... + O((n-2) log 2) + O((n-1) log 1) =
O(log n) + O(n log n) + O(n) =
O(n log n)