伪代码片段的时间复杂度

时间:2014-03-04 08:40:28

标签: performance time-complexity pseudocode

我不是故意要求简单的帮助,但我似乎无法弄清楚如何回答这个问题。

Compute the time complexity of the following program 
fragment: 
sum = 0; 
for i=1 to n do 
  for j=1 to i do 
    k = n*2 
    while k>0 do 
      sum=sum+1; 
      k = k div 2; 

我认识到while循环中的内容需要O(1),while循环需要O(logn),但是我不遵循连接到嵌套for循环的方式,因为我习惯于做用于for循环的嵌套sigma符号。

谢谢!

2 个答案:

答案 0 :(得分:1)

以下是打破此功能复杂性的一些提示:

  1. 查看内部循环,其中k=n*2。让我们假设n=8所以k=16k一直被除以2,直到它为0或更小(我假设舍入0.5得到0)。因此,直到循环结束时描述k的系列将是16,8,4,2,1,0。如果您知道第一个值是k,请尝试考虑哪个函数描述了本系列中的元素数量。

  2. 你有两个嵌套for循环,第一个循环只迭代n次,然后第二个(内部)循环迭代,直到它达到第一个循环的迭代次数(由{{1表示) }}),这意味着首先它将迭代一次,然后两次,依此类推,直到i。因此,第二个循环执行的迭代次数可以由系列描述:n。这是一个非常简单的arithmetic progression,这个系列的总和将为您提供内部for循环的迭代总数。这也是你调用内部while循环的次数(它不受当前迭代次数的影响,因为1, 2, 3, ... , n取决于k,它是常量而不是ni)。

答案 1 :(得分:1)

正式演示,逐步显示算法增长的顺序:

enter image description here

相关问题