Opción 0: Permuting In Place (1995) de Faith E. Fich, J. Ian Munro, Patricio V. Poblete tiempo espacio.O(nlogn)O(log2n)
Opción 1: Haga trampa comprimiendo su permutación a una estructura de datos sucinta, consulte Munro http://www.itu.dk/people/ssrao/icalp03-a.pdf .
Opción 2: use una descomposición del ciclo principal para almacenar la permanente de manera sucinta y use ese espacio adicional para hacer trampa http://oeis.org/A186202
Opción 3: realizar un seguimiento del índice más grande de cada ciclo manipulado. Para cada iteración, use el índice invisible más grande para mover todo en su ciclo por uno. Si llega a un índice visto, deshaga todo ese trabajo porque el ciclo ya ha sido manipulado. tiempo, espacio.O(n2)O(#cycles∗logn)
Opción 4: realice un seguimiento del índice más grande de cada ciclo manipulado, pero solo hágalo en lotes de distintas duraciones de ciclo. Para cada iteración, use el índice invisible más grande para mover todo en su ciclo por uno. Si llega a un índice visto, deshaga todo ese trabajo porque el ciclo ya ha sido manipulado. tiempo, espacio.O(n2∗distinct_cycle_lengths)O((#cycles_with_same_size)∗logn)
Opción 5: del mismo documento de Munro que la Opción 0, para gire el ciclo de si es el índice más grande en ese ciclo. tiempo y espacio.i=1..np(i)iO(n2)O(logn)