【发布时间】:2018-06-03 19:47:06
【问题描述】:
s=0
for(i=1; i<n; i = i*2){
if (i<20)
for (j=0; j<n; j++)
{
s=s+i*j;
}
s=s+1
}
我正在尝试确定上述算法的大复杂度。外部循环从 1 开始并运行到 n,i 中的计数器在每次迭代中翻倍,因此这是一个 log(n ) 行为。内部循环从 0 到 n 以 O(n) 行为独立运行。?
我不明白 if 语句如何影响复杂性。您可能不想为我提供答案,但请指导正确的方向,因为我根本不明白。
【问题讨论】:
-
两种算法是相同的;您是否为其中之一粘贴了错误的代码?在任何情况下,
if语句都不会影响复杂性,因为它只删除了外部循环的恒定迭代次数。 -
@chepner 好的,谢谢,在这种情况下,答案将是 O(n * log(n))?
-
这是 O(∞),因为外部循环中的
i永远不会是 0。 -
@Sani Singh Huttunen 是的。但我想这是一个错字,因为操作员说
i从 1 开始......
标签: algorithm data-structures time-complexity big-o