C 代码的时间复杂度如何Θ;(nLogn)? intn; int i,j,k=0; 对于(i=n/2;i

C 代码的时间复杂度如何Θ;(nLogn)? intn; int i,j,k=0; 对于(i=n/2;i,c,algorithm,loops,time-complexity,big-o,C,Algorithm,Loops,Time Complexity,Big O,来说,这真的没有那么难 外部循环运行n/2次,即O(n)复杂度 内环又只依赖于n。它不依赖于第一个循环的i。因此,对于内环的复杂性,我们可以完全忽略外环。多么幸运!j每次乘以2,因此我们有对数基数2。也就是说O(log(n)) 循环是嵌套的,因此我们进行乘法,从而以: int n; int i, j, k = 0; for (i = n/2; i <= n; i++) { for (j = 2; j <= n; j = j * 2) {

来说,这真的没有那么难

外部循环运行
n/2次,即
O(n)
复杂度

内环又只依赖于
n
。它不依赖于第一个循环的
i
。因此,对于内环的复杂性,我们可以完全忽略外环。多么幸运!
j
每次乘以
2
,因此我们有
对数基数2
。也就是说
O(log(n))

循环是嵌套的,因此我们进行乘法,从而以:

 int n;
 int i, j, k = 0;
    for (i  = n/2; i <= n; i++) {
        for (j = 2; j <= n; j = j * 2) {
            k = k + n/2;
        }
    }

所以你有所有的信息。为什么你不能计算呢?你的提示是它不是O(n!),但是说真的,如果你不能通过检查找出它,那么在那里放一些printf调用来跟踪它被调用的频率,看看在你改变循环大小时你自己是否找不到模式?”…你能解释一下它是怎样的(nLogn)-你能解释一下它怎么可能不是Θ(nLogn)?外循环是N/2(或只是N)。内循环按2的幂或对数基数2(N)计数。NLog(N)是的?(回答是因为他承受了足够的悲伤…)提示:内循环运行了多少次?(你很幸运-它对每个
i
都是有代价的)
O(n log(n))