时间复杂度检查

时间:2013-02-11 05:54:03

标签: time complexity-theory

你会说这个功能的时间复杂度是多少? 我认为它的O(logN),但你能验证吗?如果不是可以使它成为LogN? 我试图计算旋转阵列上的移位量

    int findRotationCount(int A[], int sizeOfArray) //O(logN)
    {
        int countOfShift = 0, i;
        for (i = 0; i < sizeOfArray; ++i)
        {
            ++countOfShift;
            if (i+1 == sizeOfArray)
                break;;
            if (A[i] > A[i+1])
                break;
        }
    }

谢谢!

2 个答案:

答案 0 :(得分:0)

对我来说看起来像O(N),其中N是您的sizeOfArray值。

答案 1 :(得分:0)

我认为它是O(n),其中n=sizeOfArray。这是证据:

如果满足以下条件中的至少一个,则循环可以结束:

  1. i=n =&gt;有n次迭代,因此,您的函数的复杂性为O(n)
  2. A[i] > A[i+1] =&gt;数组中存在一个大于下一个的成员。在这里,你将不得不考虑你的功能的最坏情况。对于这个,它是一个按递增顺序排序的数组。这意味着您将从第一个成员遍历数组到最后一个成员,并且永远不会发现满足第二个条件。因此,在最坏的情况下,复杂性为O(n)
  3. 由于你的函数在满足条件1和2中的至少一个时结束,并且我们已经证明在两种情况下复杂度都是O (n),那么你可以说函数的复杂性也是{ {1}}。 请注意,这是最糟糕的案例分析。