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)?
请帮帮我。
答案 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来证明。