如何证明嵌套forloop的操作数的下限

时间:2018-01-25 01:43:17

标签: algorithm time-complexity

下面我尝试显示算法执行的添加次数的下限。如果我的分析是否正确,请告诉我。

这是用于计算所有i,j i

1

我认为这个算法至少需要n ^ 3次操作。 这是我的论点:

  1. n从外部forloop迭代
  2. 如果i = n \ 2那么内部forloop将迭代至少n / 2次
  3. 如果i = n / 2且j = n那么至少需要n / 2次加法来总结从i到j的元素
  4. 因此算法预先形成n * n / 2 * n / 2 =(n ^ 3)/ 4次运算。

2 个答案:

答案 0 :(得分:0)

它很接近,但你的证据并不能证明你想要的东西。你说:

  
      
  1. n从外部forloop迭代
  2.   

好的,至少Ω(n)

  
      
  1. 如果i = n \ 2那么内部forloop将迭代至少n / 2次
  2.   

当然,但是i = n / 2只进行一次迭代,所以这证明总共只有n / 2次迭代...再次至少Ω(n)

  
      
  1. 如果i = n / 2且j = n那么至少需要n / 2次加法来总结从i到j的元素
  2.   

是的,但这些条件只会发生一次,所以这只能证明Ω(n)。

你要去的证据是这样的:

  1. 外部循环至少有 n / 2-1 次迭代,其中 i< N / 2
  2. 在每次迭代中, ni> = n / 2 ,内循环运行多次迭代,因此至少有(n / 2)(n / 2 - 1)内循环的迭代。
  3. 至少有一半的内循环迭代 - 特别是至少(n / 4)(n / 2 - 1) - 1 - 至少 n / 4 元素,因此需要 n / 4 - 1 添加。
  4. 所以至少有((n / 4)(n / 2-1) - 1)(n / 4 - 1)加法,并且在Ω(n) ^ 3)

答案 1 :(得分:0)

你不必满足于下限。有一个确切的解决方案。

继续编写一个小程序,打印n的前几个值的确切添加数。

然后谷歌为那一系列的价值观。你会发现它是一个众所周知的系列,有一个封闭的表格。