【发布时间】:2016-10-20 09:08:55
【问题描述】:
我的老师给了我下面的代码来找出他的平均复杂度:
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 for n>n0。我知道平均复杂度的定义非常相似,但我发现计算起来相当困难。我想知道这种情况下的复杂性是什么,是否有标准化的方法来计算这些类型的问题
(例如:具有迭代器之间依赖关系的嵌套循环)。
【问题讨论】:
-
这段代码总是做同样多的工作,所以平均情况、最好情况和最坏情况应该是一样的。
-
@templatetypedef 这也是我的猜测。但是对于我的老师,我需要一个更高的答案。
-
我不确定我是否理解您所说的“更高”是什么意思,但只是说运行时间仅取决于长度,没有其他内容就足够了。
标签: algorithm loops time-complexity