读书人

for(i=一;ilt;=n;i++) for(j=2*i;jlt;=n;j

发布时间: 2013-01-20 10:22:40 作者: rapoo

for(i=1;i<=n;i++) for(j=2*i;j<=n;j++)的时间复杂度是?
for(i=1;i<=n;i++) for(j=2*i;j<=n;j++)的时间复杂度 是什么?
是O(n*n)还是O(n*log(n))? 求详细解释,最好能用数学证明下。for(i=一;i<=n;i++) for(j=2*i;j<=n;j++)的时间复杂度是
[解决办法]
O(n^2)
公式是n+(n-2)+(n-4)+...,一共[n/2]个。当n为偶数的时候它就是2+4+6+...+n=n*(n+2)/4。
[解决办法]
对于内层循环,次数是n - 2 * i + 1, 对于外层循环,i范围其实是1 - n / 2 (在后面的内层循环直接跳出),累加和为 ((n - 2 * 1 + 1) + (n - 2 * n / 2 + 1)) * (n / 2) / 2 (等差数列求和公式) 得出时间复杂度 O ( n * n )

读书人网 >软件架构设计

热点推荐