我无法计算这段代码的时间复杂度。
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
//statement
}
}
需要帮助。
答案 0 :(得分:2)
让我们尝试计算操作数。问题是哪些操作是相关的?时间复杂度通常用big-Oh表示法(或其他渐近表示法)表示,因为它掩盖了精确计算操作的难度。因此,任何常量都可以算作1。如果有4个加法或40个加法,则无关紧要,这是重复多少次。最后,执行了statement
次。
那让我们计数吧。外循环从0到n,内循环从i + 1到n。因此,当i为0时,内部循环执行n-1次迭代,当i为1时,内部循环执行n-2次迭代,依此类推,直到i为n-1并且内部循环不再执行。因此,我们有:
(n-1)+(n-2)+ ... + 1 + 0
总共有n个词。连续数的总和具有一个众所周知的公式:(n-1)(n-2)/ 2。
扩展上面的乘积,我们得到1/2(n ^ 2-3n + 2)。 O(1/2(n ^ 2-3n + 2))等于O(n ^ 2)。
关于为什么一切都简化为O(n ^ 2),渐进表示法的理论背后还有很多,但是在实践中,它简化为“大哦,在多项式中保留了最重要的项并丢弃了系数“(很容易用big-Oh的定义来证明)。
答案 1 :(得分:0)
对于每个第ith个元素,第二个循环运行n-(i + 1)次。
在第一个for循环中,当i = 0时,第二个循环运行n-1次
同样,当i = 1秒时,循环运行n-2次
。
。
。
当i = n-2,第二个循环运行1次。
当i = n-1时,第二个循环运行0次。
O(n-1)+ O(n-2)+ ...... + O(1)+0 => O(n)
因此,总算法的时间兼容性为O(n * n)= O(n ^ 2)
答案 2 :(得分:-1)
O(n ^ 2)
当i = 0时,迭代从n开始,然后是n-1,n-2,直到达到最后一个迭代,即0;
因此总迭代次数将为n +(n-1)+(n-2)+。。。+ 0 = O(N ^ 2)