Cómo generar todas las permutaciones de fila de una matriz 2D dada de forma recursiva

A continuación se muestra un script de Python que genera todas las permutaciones de fila de una matriz [math] 2 [/ math] -d dada de forma recursiva. Esencialmente, itera sobre las filas de la matriz, colocando la fila actual como la primera y obteniendo todas las permutaciones con esa fila como la primera. Luego retrocede e intenta la siguiente fila en el lugar actual. Si la matriz de entrada tiene [math] n [/ math] filas y [math] m [/ math] elementos totales (contando aquellos dentro de sus filas), la complejidad de tiempo asintótica del código siguiente es [math] \ Theta (n! M) [/mates]. Esto se debe a que itera sobre las permutaciones [math] n! [/ Math] de la matriz, y para cada permutación, crea una copia de toda la matriz (que es el trabajo [math] \ Theta (m) [/ math] )

def main ():
matriz = [[1, 2, 3, 4],
[5, 6, 7]
[8, 9, 10]
[11, 12, 13, 14, 15]]
perms = getPermutationsOfTwoDArray (matriz)
para permanente en permanentes:
print str (permanente)

# #
# Devuelve todas las permutaciones de las filas de la “matriz” 2-d dada.
# #
def getPermutationsOfTwoDArray (matriz):
return helpGetPermutationsOfTwoDArray (matriz,
conjunto(),
lista(),
lista())

# #
# Devuelve algunas de las permutaciones de las filas de la “matriz” 2-d dada.
# Solo devuelve las permutaciones que comienzan con “currentAnswer”.
# Agregue cualquier permutaciones nuevas a las “respuestas” y devuélvalas.
# “indicesPlaced” es un conjunto útil para realizar un seguimiento de qué filas de
# La matriz 2-d original ya se ha colocado en nuestra permutación actual.
# #
def helpGetPermutationsOfTwoDArray (matriz,
índices colocados,
currentAnswer,
respuestas):
if len (currentAnswer) == len (matriz):
# Caso base: si la respuesta actual ya tiene todas las filas,
# luego inclúyalo como una respuesta de permutación.
answers.append (list (currentAnswer))
más:
para índice en rango (len (array)):
si el índice no está en índices Colocado:
# Si esta fila aún no se ha colocado, colóquela a continuación
# en nuestra permutación actual y procedemos a agregar más filas.
currentAnswer.append (array [index])
indicesPlaced.add (index)
helpGetPermutationsOfTwoDArray (matriz,
índices colocados,
currentAnswer,
respuestas)
indicesPlaced.remove (index)
currentAnswer.pop ()
devolver respuestas

if __name__ == ‘__main__’:
principal()

More Interesting

¿Qué algoritmos usa Bing para clasificar los resultados de búsqueda? ¿La patente de Google les impide usar PageRank? Análisis de enlaces en general?

Cómo resolver un problema de programación difícil por mi cuenta

Si podemos ordenar datos usando SQL, ¿por qué necesitamos estudiar diferentes algoritmos de ordenación?

¿Por qué el cifrado de la función Algoritmo de hash no puede transformar el texto cifrado en texto sin formato?

¿Hay alguna relación de recurrencia famosa aparte de Fibonacci?

¿Cuáles son los algoritmos de vanguardia para las características de textura eficientes para la recuperación de imágenes?

¿Cómo se puede implementar un algoritmo de ordenación rápida en el cálculo Lambda?

¿Cuáles son las amplias variedades en programación dinámica que se preguntan con frecuencia en los concursos de codificación?

¿Cuáles son los principales cambios en los algoritmos de Google en 2017?

¿Es posible elegir aleatoriamente un número de (0 a infinito), de modo que cada número tenga la misma probabilidad de ser elegido?

¿Qué es la notación O grande? ¿Y deberían saberlo los programadores principiantes?

Cómo guardar una entrada del usuario en una matriz definida en Java

Cómo agregar un contador de comparación para combinar la clasificación en Python

En el 8 rompecabezas, ¿por qué solo es posible alcanzar la mitad de todas las combinaciones posibles desde cualquier estado dado?

¿Cuáles son todas las estructuras de datos que conoce? ¿Cuál de estos usas con frecuencia? Agrúpelos en "Básico" y "Avanzado".