做
一种
理论的
分析
对于
的
跑步
时间
的
的
以下
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,因此每个n
的i
次数,总共n*n
次数。 j
的k
从0到n,因此每个n
的j
次数,总共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/