我需要一些帮助才能找到这个功能的复杂性顺序:
int cerca_ciclos (int vet[],int nivel)
{
int i,j,cont=0;
if (vet[nivel-2] == vet[nivel-1]) {
return 1;
}
for (i=2;i <= nivel/2; i++)
{
for (j=0;j<i;j++)
{
if (vet[nivel-j-1] == vet[nivel-1-i]){
cont++;
}
}
if (cont == i){
return 1;
}
}
return 0;
}
变量Nivel永远不会超出我设定的pré定义的限制35。
答案 0 :(得分:0)
该算法以时间复杂度O(nivel²)
外部for
- 循环从0
到nivel/2
,内部从0
到i
,在0
之间和nivel/2
。所以要计算的步数是
total = 1 + 2 + 3 + 4 + 5 + ... + nivel/2
Gauß'说这有点像1/2⋅(nivel/2)⋅(nivel/2+1)
,所以它在nivel
中是二次的。
但由于nivel
是35(或任何其他常数),因此复杂度为O(1)
,因为您可以找到一个大于“最坏情况”数的常数值算法必须计算的步骤。
答案 1 :(得分:0)
您可以使用Sigma表示法执行以下操作: