计算循环的运行时间

时间:2015-10-13 22:45:32

标签: algorithm for-loop time runtime time-complexity

我试图证明以下算法在O(n ^ 2)时间内运行。

我给了代码: 这主要是psedocode

function generalFunction(value)
  for(i=1 to value.length-1)// value is an array, and this runs `n-1 Times`
     for(j=1 to value.length-i // This runs `n-1(n-1)` times?
       if value[j-1] > value[j] //This runs n^2 times?
         swap A[j+1] and value[j] //How would would this run?

对于第一行,我计算出它运行n-1次。因为循环变了n次,但是因为我们从arbritray数组的长度中减去1,所以它将是n-1次(我相信)。

对于第二行可以说相同,除了我们必须将它乘以原始for循环。

但是,我不确定最后两行,第三行是否会运行n ^ 2次?由于两个嵌套循环,我只写了n ^ 2。我不确定如何接近最后一行,任何输入都会非常感激。

1 个答案:

答案 0 :(得分:1)

是的,根据您的评论,这将在n ^ 2中运行。请注意,内部if语句(swap)的执行与双循环运行n ^ 2次的事实无关。此外,减一部分(n-1)仍然使其成为n ^ 2,因为您基本上寻找上限〜近似值〜而n ^ 2是最紧密的这样的界限。基本上(n-1)(n-1)= n ^ 2 - 2n +1由n ^ 2项支配。

对于与此类似的定义和可行示例,请参阅Wikipedi - example section

P.S。 Bug O是关于-worst-case场景的。因此,在最坏的情况下,if语句将始终为true,因此交换将达到每个循环周期。意思是如果你设置一个断点,它会被击中(n-1)*(n-1)次。扩展意味着n ^ 2 - 2n + 1次。