algorithm - 算法的平均复杂度

标签 algorithm loops time-complexity

我的老师给了我下面的代码来找出他的平均复杂度:

 int function(int a[], int n)
{
    int k=0;
    for(i=0;i<n;i++)
        for(j=i+1;j<n;j++)
            k=k+((a[i]*a[i]+a[j]*a[j])%5==0)
    return k;
}
void main()
{
    int vector={0,1,2,3,4,5,6,7,8,9}
    int a=function(vector, 10);
    printf( "%d\n", a);
}

通过展开循环,我发现代码执行了 n*(n+1)/2次,我得出结论,最坏的情况是 O(n^2)因为存在 n*(n+1)/2 < c*n^2对于 n>n0 .我知道平均复杂度的定义很相似,但是我发现很难计算它。我想知道这种情况下的复杂度是多少,是否有计算这类问题的标准化方法

(例如:迭代器之间具有依赖关系的嵌套循环)。

最佳答案

在计算复杂度理论中,算法的平均情况复杂度是算法使用的某些计算资源(通常是时间)的数量,对所有可能的输入进行平均 see here for definition .

在您的情况下,您已经知道您的程序将执行 n*(n+1)/2(对于给定的 n)次。那么你可以想:如果 n = 1, 2, 3, ... 会怎样?您只需要使用您的公式将所有这些值相加并取平均值。很容易得到O(n^2)的解。

关于algorithm - 算法的平均复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37900025/

相关文章:

javascript - 如何遍历 html 元素并使用 javascript/jQuery 获取组合时间?

python - 在 Python 中迭代两个字典并获取一个列表

algorithm - 如何找到给定大小 n 和聚类数 k 的聚类方式数的递推公式?

algorithm - 有趣的递归函数

algorithm - 我如何评估节点的连通性?

c++ - 这个检测循环链表的函数的时间复杂度是多少?

algorithm - 求解运行时间T(n)=2T(n/2)+nlogn

c++ - 如何以编程方式将照片转换为类似宝丽来的照片?

java - if else 循环满足多个条件

algorithm - 计算大 O 符号 : O(n^4) for 2 nested loops and O(log n) with no recursion