找到嵌套循环的计算复杂性

时间:2013-09-20 01:21:24

标签: java algorithm for-loop complexity-theory big-o

我很难获得这个for-loop的复杂性

for (i = 4; i < n; i++)
{
    for (j = i - 3, sum = a[i - 4]; j <= i; j++)
    {
        sum += a[j];
    }
    System.out.println("sum thru" + i + ": " + sum);
}

我在想这个嵌套循环的复杂性是n ^ 2,因为它是一个嵌套循环 但有人告诉我这是不正确的,嵌套循环并不总是二次复杂!

我真的不知道如何以一种好的方式获得复杂性。我看过很多关于Big-O和复杂性的文章,但它们没有用,因为他们希望我知道所有内容,而且他们的例子和我的任何例子都不一样。

我不是要求答案,我要求的方法。是否有任何公式或方法适用于本主题中的所有内容?我想知道如何获得作业的数量,但不幸的是我不知道如何做到这一点。

有人可以一步一步向我解释吗?

2 个答案:

答案 0 :(得分:10)

你可以看到外循环迭代(n-4)次,因为它从4开始并且条件小于仅。内循环最多迭代4次。因为它以i-3开头并以i结束。所以复杂度是4 *(n-4)。因此,复杂性是O(n)。

答案 1 :(得分:0)

我认为没有任何公式可以解决有关算法时间复杂性的所有问题。对我来说,找出big-O的最佳方法是从外部流程到内部流程逐步进行。我相信它也是像你我这样的初学者的标准方式。对于你的问题,首先,外环是O(n),这是直截了当的。然后在每个循环内部,我们有一个内部进程,这是另一个循环。该循环从i-3变为i,即O(1)。然后在该过程中,它是一个正常的赋值语句,再次是O(1)。 我们把所有人放在一起,大O将是O(n)* O(1)* O(1)= O(n)