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())
- ¿Qué es un código de clasificación?
- ¿Los algoritmos de aprendizaje automático han salido del laboratorio y han pasado a entornos clínicos que involucran pacientes?
- ¿Cuál es el mejor enfoque para adivinar los diacríticos árabes mediante programación?
- Cómo convertir el ciclo while en declaraciones if
- Algoritmos aleatorizados: ¿Dónde puedo encontrar una colección extraña de cosas no relacionadas?
# #
# 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()