web-dev-qa-db-fra.com

Exemple d'algorithme temps factoriel O (n!)

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.

32
recursion.ninja

Générer toutes les permutations d'une liste

Vous avez des listes n!, vous ne pouvez donc pas atteindre une meilleure efficacité que O(n!).

38
Ziyao Wei

Travelling Salesman a une solution naïve qui est O (n!), Mais une solution de programmation dynamique est O (n ^ 2 * 2 ^ n)

16

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!
5
archie

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)
1
grepit