Mi pregunta es: se da una lista L de longitud n, y un número entero tal que 0 < = i < n !, cómo se puede escribir una función permanente (L, n) para producir la i-permutación de L en O (n) tiempo? Lo que quiero decir con ITH permutación es simplemente la permutación i en algún orden definido aplicación que deben tener las propiedades:¿Cómo generar una permutación?
Para cualquier i y cualquier 2 listas A y B, Perm (a, i) y Perm (B , i) ambos deben asignar el elemento j-ésimo de A y B a un elemento en la misma posición para A y B.
Para cualquier entrada (A, i), (A, i) permanente (A, i)) == perm (A, j) si y solo si i == j.
NOTA: esto no es tarea. De hecho, resolví esto hace 2 años, pero olvidé por completo cómo, y me está matando. Además, aquí es un intento rota que hice en una solución:
def perm(s, i):
n = len(s)
perm = [0]*n
itCount = 0
for elem in s:
perm[i%n + itCount] = elem
i = i/n
n -= 1
itCount+=1
return perm
también NOTA: el O (n) requisito es muy importante. De lo contrario, podría generar el n! lista de todas las permutaciones y solo devuelve su i-ésimo elemento.
seguramente, quieres decir permanente (L, i) y no permanente (L, n)? –
Bueno, primero revise si hay desbordamiento. Luego determina la primera letra usando mod. Luego determine la segunda letra recurrente. Espero que ayude. –
Supongamos que está intentando permutar la lista '(ABCDEF)'. Entonces, la primera letra será A siempre que tu 'i' sea menor que el número de permutaciones de' (BCDEF) '. Ahora resta el número de permutaciones de '(BCDEF)' de 'i', y recurse en esta lista más pequeña. –