分析时间复杂度的算法

时间:2011-09-30 08:53:39

标签: algorithm computer-science big-o time-complexity

我正在分析算法,我只是想知道我是否在正确的轨道上。

对于这个算法,我只计算行中有***的乘法。

这是算法:

enter image description here

  1. 所以我从最内线开始,我可以看到那里有2个操作(两个乘法)。
  2. 现在我正在查看2个最内层循环,因此我可以确定p=p*20*z完全执行(j) + (j-1)+(j-2)+(j-3)...1次。这恰好等于j(j+1)/2
  3. 总而言之,由于有两次乘法,它会发生2 * (j(j+1)/2)
  4. 最后,“i”循环恰好发生了n次,所以总的来说,它是n(2 * (n(n+1)/2))
  5. 这是我背后的思考过程。我对么?感谢。

3 个答案:

答案 0 :(得分:8)

您的思维过程是正确的。你需要用n替换j项(n是j可以假设的最大值),但这可能是一个错字。

此外,您可以从以下地方进一步简化:

n(2*(n(n+1)/2))
2*n*(n^2+n)/2
n^3+n^2

=> O(n^3)

最后一步是因为n立方项将以比n平方项更大的速度增长,我们可以说它将主导大n的运行时间。我要提到的另一点是你应该把商店看作是一个操作以及两个乘法,虽然这显然不会改变简化的大运行时间。

答案 1 :(得分:4)

如果您发现所有三个循环都具有相同的退出条件up to n,则可以简化此特定示例中的计算:

  1. i <= n
  2. j <= n
  3. k <= j
  4. 基本上第三个循环也会运行n个迭代,因为j <= n所以k <= n, 这意味着复杂性将是n * n * n = O(n ^ 3)

答案 2 :(得分:1)

这是有条不紊地获取算法增长顺序的方法:

enter image description here