Time 时间复杂度检查

Time 时间复杂度检查,time,complexity-theory,Time,Complexity Theory,你认为这个函数的时间复杂度是多少? 我想是O(logN),但你能证实吗?如果没有,是否可以将其设置为LogN? 我试图计算旋转数组上的移位量 int findRotationCount(int A[], int sizeOfArray) //O(logN) { int countOfShift = 0, i; for (i = 0; i < sizeOfArray; ++i) { ++countOfSh

你认为这个函数的时间复杂度是多少? 我想是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;
        }
    }
int findRotationCount(int A[],int sizeOfArray)//O(logN)
{
int countOfShift=0,i;
对于(i=0;iA[i+1])
打破
}
}
谢谢

对我来说就像
O(N)
,其中
N
是你的
sizeOfArray
值。

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

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

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