如何找到这个算法的时间复杂度?

时间:2013-08-06 11:34:41

标签: c++ recursion time-complexity master-theorem

int multiply(int a[],int low,int high,int modulus)
{
    if(low==high)
        return (a[low]);
    else
    {
       int mid = (low+high)/2;
       int x = multiply(a, low, mid, modulus) % modulus;
       int y = multiply(a, mid+1, high, modulus) % modulus;
       return ((x*y) % modulus);
    }
}

它的时间复杂度是O(log n)还是O(n)?

请帮帮我。

1 个答案:

答案 0 :(得分:1)

您正在对O(N)进行multiply来电,其中N == high - low位于顶层电话。

E.g。为方便起见,请N=2^K。在您遇到K的情况之前,您正在递归low==high级别。在每个级别,您都有2^(K-1)个电话。它们总计N - 1次呼叫(1 + 2 + 4 + ... + 64 = 127)。

对于一般N,缩放行为是相同的,您可以根据函数的递归关系T(N) = 2 T (N / 2)使用Master Theorem的案例1来证明。