次の C++ 関数 MMultiply の実行時間について理論的な分析を行います。MMultiply が実行する乗算の回数を n の関数としてカウントします。この場合、n は入力のサイズ/問題のサイズであるためです。あなたの働きを見せてください。答えを大○表記で表せ。
int I(int i, int j, int n)
{
return n * i + j;
}
int sProduct(const int A[],const int B[],int i, int j, int n)
{
int t = 0;
for( int k=0; k<n; k++ )
{
int d = A[ I(i,k,n) ] * B[ I(k,j,n) ];
t += d * d;
}
return t;
}
void MMultiply(const int A[], const int B[], int C[], int n)
{
for( int i=0; i<n; i++ )
for( int j=0; j<n; j++ )
C[ I(i,j,n) ] = sProduct(A, B, i, j, n );
}
答えは O(n^3) であることがわかりましたが、これがどのように計算されたのかわかりません。
MMultiply の外側のループは n を与え、内側のループは n であるため、乗算を含む関数を見ると 3......M(n)=n*n(....) となります。他の関数の見方について。T(n) と C(n) の表記法も私をうんざりさせています...