1

次の 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) の表記法も私をうんざりさせています...

4

1 に答える 1