J'étudie la complexité temporelle à l'école et notre objectif principal semble être les algorithmes temps polynomialO(n^c)
et les algorithmes temps quasi-linéaireO(nlog(n))
avec l'algorithme occasionnel exponentielO(c^n)
comme exemple perspective d'exécution. Cependant, traiter avec des complexités de temps plus grandes n'a jamais été couvert.
J'aimerais voir un exemple de problème avec une solution algorithmique qui s'exécute dans factorial timeO(n!)
. L'algorithme peut être une approche naïve pour résoudre un problème mais ne peut pas être artificiellement gonflé pour fonctionner en temps factoriel.
Crédits de rue supplémentaires si l'algorithme temps factoriel est le meilleur algorithme connu pour résoudre le problème.
Vous avez des listes n!
, vous ne pouvez donc pas atteindre une meilleure efficacité que O(n!)
.
Travelling Salesman a une solution naïve qui est O (n!), Mais une solution de programmation dynamique est O (n ^ 2 * 2 ^ n)
Lister toutes les permutations d'un tableau est O (n!). Vous trouverez ci-dessous une implémentation récursive utilisant la méthode d'échange. La récursivité est à l'intérieur de la boucle for et les éléments du tableau sont permutés jusqu'à ce qu'il ne reste plus d'éléments. Comme vous pouvez le constater à partir du nombre de résultats, le nombre d'éléments dans le tableau est n !. Chaque permutation est une opération et il y a n! opérations.
def permutation(array, start, result)
if (start == array.length) then
result << array.dup
end
for i in start..array.length-1 do
array[start], array[i] = array[i], array[start]
permutation(array, start+1,result)
array[start], array[i] = array[i], array[start]
end
result
end
p permutation([1,2,3], 0, []).count #> 6 = 3!
p permutation([1,2,3,4], 0, []).count #> 24 = 4!
p permutation([1,2,3,4,5], 0, []).count #> 120 = 5!
Voici un exemple simple avec Big O (n!):
Ceci est en python 3.4
def factorial(n):
for each in range(n):
print(n)
factorial(n-1)