我试图证明以下算法在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。我不确定如何接近最后一行,任何输入都会非常感激。
答案 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次。