Necesito calcular permutaciones iterativamente. La firma del método se ve así:¿Cómo calcularías todas las permutaciones posibles de 0 a N de forma iterativa?
int[][] permute(int n)
Para n = 3
por ejemplo, el valor de retorno sería:
[[0,1,2],
[0,2,1],
[1,0,2],
[1,2,0],
[2,0,1],
[2,1,0]]
Cómo haría usted para hacer esto de forma iterativa de la manera más eficiente posible? Puedo hacer esto recursivamente, pero estoy interesado en ver muchas formas alternativas de hacerlo iterativamente.
Como ya he mencionado en mi respuesta (después edité utilizar el algoritmo QuickPerm como uray sugirió), la forma más eficiente sería iterar sobre las permutaciones viven. Construir una lista completa es probable que no sea muy útil, ya que solo puede procesar la iteración actual. – Matthew
Correcto, por lo que el código de Ruby que agregué a la respuesta de uray usa rendimiento y bloques. Pasa cada permutación al bloque de código suministrado antes de calcular la siguiente permutación. –
Consulte esta pregunta y sus respuestas: http://stackoverflow.com/questions/352203/generating-permutations-lazily/ – ShreevatsaR