函数乘法的理论分析
theoretical analysis of multiplications in function
Do一个理论分析为这运行时间之这以后C++功能嗯。计数这数之乘法唰做如一个功能之n因为在这箱n是这大小之这输入/大小之这问题。显示你运作。表达这答在大O表示法。
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,所以每个i
n
次,总共n*n
次。 - 对于每个
j
,k
从0到n,所以每个j
n
次,总共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(。
这给了我们上限,即在最坏的情况下会发生什么。请注意,即使在最好的情况下,这些行仍然会被执行n 3 次,因此您可以说下限也是 Ω(n3(。这意味着算法是 Θ(n3((即下限和上限相同(。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 函数乘法的理论分析
- c++函数中理论上可以作为形参传递多少个实参
- 继承和析构函数-理论问题- c++
- 理论上而不是实践上的投掷函数应该被声明为noexcept
- 在C语言中,一组函数的名称可能因操作数类型的不同而不同,称为理论静态多态函数