Algorithm 循环的时间复杂度

Algorithm 循环的时间复杂度,algorithm,big-o,time-complexity,analysis,Algorithm,Big O,Time Complexity,Analysis,我试图找到for循环的时间复杂度。下面是循环详细信息 for(int i=N;i>1;i=i/2) { for(int k=0;k<i;k++){ sum++; } } 所以 1/2N=(1/2)^n 所以内环的和就是GP序列号=a(1-r^n)/(1-r) 替换a=N,r=1/2,我们得到 Sn=N(1-(1/2N))/(1-1/2) 因此Sn=2N-1 我不确定复杂性是否为N 请帮忙 谢谢。下面是推断与您的算法相关的增长顺序的正式方法(Sigma表示法

我试图找到for循环的时间复杂度。下面是循环详细信息

for(int i=N;i>1;i=i/2)
{
   for(int k=0;k<i;k++){
     sum++;
   }
}
所以

1/2N=(1/2)^n
所以内环的和就是GP<代码>序列号=a(1-r^n)/(1-r) 替换a=N,r=1/2,我们得到

Sn=N(1-(1/2N))/(1-1/2)
因此
Sn=2N-1

我不确定复杂性是否为
N

请帮忙

谢谢。

下面是推断与您的算法相关的增长顺序的正式方法(Sigma表示法)(使用C的MinGW2.95编译器,通过实验证实)


您想知道这个循环需要多少时间?只需计算内部循环中代码的执行次数:
N+N/2+N/4+…
在一张纸上,做两列,标题为“N”和“count”。当N=1时,
sum++
执行多少次?对于N=2、3、4等。?这将给你一个开始,如果你有问题,你至少可以展示这个尝试。这是家庭作业吗?闻起来像是家庭作业。事实上,我不会真的推荐@Matt所说的那样(尽管有些尝试总比不尝试提问好)-拥有一组值并将一个函数映射到这不是一项容易的任务-而是写下内部循环在外部循环的每次迭代中执行的次数-这将为您提供类似
a+b+c+d+e+…
(其中一些将取决于
N
)。然后你需要对求和的公式有点熟悉,这会给你答案。我没有得到第二次求和的上限。它是怎样的2^i-1。你能详细解释一下吗?你知道西格玛从i=k到n=(n-k)+1?由于第二次求和的项是独立的,因此,只需将n替换为2^{i-1},将k替换为0。我应该以2^{I-1}-0+1结束(我会纠正它)。另外,检查这个。另外,检查的最后一张幻灯片,以彻底了解对数循环。我明白你的观点。我的目的是让对话者发现这种方法确实存在。当我发现它的时候我很激动,在哪里?在MarkAllen Weiss的算法分析(和数据结构)书中。我相信这是迈向正确学习道路的正确一步。
Sn=N(1-(1/2N))/(1-1/2)