recursivo que probabilidad operaciones numero factoriales ejemplos definicion con calcule calcular algoritmo algorithm complexity-theory time-complexity factorial

algorithm - que - operaciones con factoriales



Ejemplo de un algoritmo de tiempo factorial O(n!) (3)

Genera todas las permutaciones de una lista

Tienes n! listas, por lo que no puede lograr una mejor eficiencia que O(n!) .

Estoy estudiando la complejidad del tiempo en la escuela y nuestro foco principal parece ser el tiempo polinomial algoritmos y tiempo cuasi lineal algoritmos con el tiempo exponencial ocasional algoritmo como un ejemplo de la perspectiva de tiempo de ejecución. Sin embargo, lidiar con complejidades de tiempo más grandes nunca fue cubierto.

Me gustaría ver un problema de ejemplo con una solución algorítmica que se ejecuta en tiempo factorial . El algoritmo puede ser un enfoque ingenuo para resolver un problema, pero no puede inflarse artificialmente para funcionar en tiempo factorial.

Verificación de calle adicional si el algoritmo de tiempo factorial es el algoritmo mejor conocido para resolver el problema.


Listar todas las permutaciones de una matriz es O (n!). A continuación se muestra una implementación recursiva utilizando el método de intercambio. La recursión está dentro del ciclo for y los elementos de la matriz se intercambian en su posición hasta que no quedan más elementos. Como puede ver en el recuento de resultados, la cantidad de elementos en la matriz es n !. Cada permutación es una operación y hay n! operaciones.

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!


¡Traveling Salesman tiene una solución ingenua que es O (n!), Pero tiene una solución de programación dinámica que es O (n ^ 2 * 2 ^ n)