一种
理论的
分析
对于

跑步
时间


以下
C++
功能
MMultiply。
计数



乘法
MMultiply
确实

一种
功能

ñ
因为

这个
案件,
ñ


尺寸


输入/大小


问题。
节目
您的
工作原理。
表现

回答


Ø
符号。

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)表示法也让我失望...

最佳答案

  • i从0到n,因此n的总次数。
  • 每个i
  • j从0到n,因此每个ni次数,总共n*n次数。
  • 每个j
  • k从0到n,因此每个nj次数,总共n*n*n次数。

  • 起作用的行,即:
    int d = A[ I(i,k,n) ] * B[ I(k,j,n) ];
    t += d * d;
    

    得到执行n*n*n = O(n3)次。

    还有另一行有效。这里的作业:
    C[ I(i,j,n) ] = sProduct(A, B, i, j, n );
    

    被执行n*n = O(n2)次。因此整个算法为O(n3 + n2)。随着n的增长,n2项无关紧要,因此整个算法为O(n3)。

    这给了我们上限,即在最坏的情况下会发生什么。请注意,即使在最佳情况下,这些行仍将执行n3次,因此可以说下限也是Ω(n3)。这意味着算法为Θ(n3)(即上下限相同)。

    关于c++ - 函数乘法的理论分析,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19241164/

    10-11 04:42