Dada una lista de n elementos distintos, ¿cómo puedo pasar por cada permutación de los elementos intercambiando sólo un par de valores en un momento? (Supongo que es posible, sin duda se siente como debería ser).Pasando a través de todas las permutaciones de un intercambio en un momento
Lo que estoy buscando es un iterador que arroja los índices del siguiente par de elementos para intercambiar, de modo que si se itera n! -1 veces va a pasar por el n! permutaciones de la lista en algún orden. Si repetirlo una vez más restauraría la lista a su orden de inicio sería una bonificación, pero no es un requisito. Si todos los pares implican el primer (resp. El último) elemento como uno de los dos, de modo que la función sólo tiene que devolver un solo valor, que también sería una ventaja.
Ejemplo: - para 3 elementos, puede intercambiar el último elemento alternativamente con los elementos primero y segundo para recorrer las permutaciones, a saber: (abc) swap 0-2 => (cba) 1-2 (cab) 0-2 (bac) 1-2 (bca) 0-2 (acb).
voy a estar poniendo en práctica en C, pero es probable que pueda descifrar soluciones en la mayoría de los idiomas.
Preguntar http://stackoverflow.com/users/91671/lbushkin –