函数乘法的理论分析

Posted

技术标签:

【中文标题】函数乘法的理论分析【英文标题】:theoretical analysis of multiplications in function 【发布时间】:2013-10-08 07:02:28 【问题描述】:

做 一种 理论上的 分析 为了 这 跑步 时间 的 这 下列的 C++ 功能 M乘法。 数数 这 数字 的 乘法 M乘法 做 作为 一种 功能 的 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) 符号也让我感到厌烦......

【问题讨论】:

【参考方案1】: i 从 0 到 n,所以总共有 n 次。 对于每个ij 从 0 到 n,因此每个 in*n 总共有 n 次。 对于每个jk 从 0 到 n,因此每个 jn*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) (即下限和上限相同)。

【讨论】:

以上是关于函数乘法的理论分析的主要内容,如果未能解决你的问题,请参考以下文章

最小二乘法小结

最小二乘法小结

机器学习线性回归——最小二乘法(理论+图解+公式推导)

机器学习理论基础学习2——线性回归

机器学习之回归模型-一元线性回归理论与最小二乘法实现

基于最小二乘法和最大似然估计法的系统参数辨识MATLAB仿真