Я заранее извиняюсь, если об этом ответили ранее.Сложность времени для конкретной функции big-O
Я понимаю, что временная сложность следующего кода O (п!):
void permutations(int n){
if(n!=0){
for(int i=0; i<n; i++){
permutations(n-1);
}//for
}//if
}//permutations
Также я понимаю, что временная сложность следующего кода O (2^п) :
void permutations(int n){
if(n!=0){
permutations(n-1);
permutations(n-1);
}//if
}//permutations
Однако у меня возникли проблемы определения того, что сложность следующего кода, я подозреваю, что это O ((п^2) * (п)!), бу Я не уверен, что это правильно. Я был бы признателен, если бы кто-нибудь мог объяснить, прав ли я и почему.
void permutations(int n){
if(n!=0){
for(int i=0; i<n; i++){
permutations(n-1);
permutations(n-1);
}//for
}//if
}//permutations
Что вы сделали, чтобы попытаться решить проблему? – user31264
Посмотрите на дерево рекурсии: в версии «O (n!)» Там вы разветвляетесь один раз на итерацию цикла, теперь вместо этого вы вставляете дважды ... – BeyelerStudios
Число вызовов 'перестановок (0)' for f (n) = 2n * f (n - 1) = 2^n * n !. Если по n^2 вы имели в виду 2^n, то да, вы правы. – Ryan