【发布时间】:2018-06-03 17:40:25
【问题描述】:
s=0;
for(i=1;i<n;i=i*2)
{
for(j=0;j<n;j++)
{
s=s+i*j;
}
s=s+1;
}
我正在尝试确定上述算法的大复杂度。外部循环从 1 开始并运行到 n,i 中的计数器在每次迭代中翻倍,因此这是一个 log(n ) 行为。内部循环从 0 运行到 n,具有 O(n) 行为。我很困惑是否是 O(n * log(n)),顺序是否重要? j 也是从 0 开始,而不是从 1 开始,所以这不可能是 O(n * log(n))?
【问题讨论】:
-
用
s += 1替换你对s的分配;s最后的值是你的 O() 应该代表的值。这可能会帮助您确定订单是否重要。 (请注意,对于某些代码,无论在本例中是否如此。)
标签: algorithm data-structures time-complexity big-o