Мой учитель дал мне код ниже, чтобы узнать его средней сложности:Средняя сложность алгоритма
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);
}
По unrowling петли я обнаружил, что код выполняется n*(n+1)/2
раз, и я делаю вывод, что худший случай O(n^2)
потому что существует n*(n+1)/2 < c*n^2
для n>n0
. Я знаю, что определение средней сложности довольно похоже, но мне было довольно сложно вычислить его. Я хочу знать, в чем сложность в этом случае, и если существуют стандартизированные методы для вычисления этих типов проблемы
(например: вложенные петли с зависимостями между итераторами).
Этот код всегда выполняет ту же работу, поэтому средний случай, лучший случай и худший случай должны быть одинаковыми. – templatetypedef
@templatetypedef Это была моя догадка. Но для моего учителя мне нужен более высокий ответ. – Marga
Я не уверен, что понимаю, что вы подразумеваете под «более высоким», но просто говоря, что время выполнения зависит только от длины, и ничего больше не должно быть достаточно. – templatetypedef