Algorithm 算法的平均复杂度

Algorithm 算法的平均复杂度,algorithm,loops,time-complexity,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=functi

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

 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);
}
int函数(inta[],intn)
{
int k=0;

对于(i=0;i在平均案例分析中,我们获取所有可能的输入,并计算所有输入的计算时间。将所有计算值相加,然后除以输入总数

您的算法中只有一种可能性。对于所有输入,您的算法在O(n*(n+1)/2)时间内运行


平均时间复杂度为O(n*(n+1)/2)=O(n^2)。

在计算复杂度理论中,算法的平均案例复杂度是算法使用的一些计算资源(通常是时间)的量,在所有可能的输入上平均


在您的例子中,您已经计算出您的程序将执行n*(n+1)/2(对于给定的n)次。然后您可以思考:如果n=1,2,3,…?您只需要使用公式将所有这些值相加并取平均值。很容易得到O(n^2)解决方案。

此代码总是做相同的工作量,因此平均情况、最佳情况和最坏情况应该是相同的。@templatetypedef这也是我的猜测。但对于我的老师,我需要一个更高的答案。我不确定我是否理解你所说的“更高”是什么意思但是仅仅说运行时只取决于长度,其他什么都不能满足。