2010-03-04 20 views

Respuesta

5

Guau, sí, esa no es la mejor descripción de algoritmo :).

Mi interpretación es que quieren que hagas lo siguiente:

 
fannkuch(n) { 
int maxFlips = 0, printCount = 0; 
foreach permutation p of [1..n] { 
    maxFlips = max(maxFlips, flipCount(p)); 
    if (printCount++ < 30) printPermutation(p); 
} 
print(maxFlips); 
} 

flipCount(p) { 
int count = 0; 
while (p[0] != 1) { 
    reverse(p, p + p[0]); 
    count++; 
} 
return count; 
} 
+0

Gracias Gary. Estoy entendiendo esto ahora, sin embargo, noté que parece haber un orden correcto de permutaciones que se imprimen. Estoy tratando de entender ahora por qué se imprimen esas 30 permutaciones específicas, y por qué en ese orden. – mudge

+1

La orden de permutación específica realmente no importa. Ese orden específico enumera las permutaciones en orden lexicográfico de 'más pequeño' a 'más grande'. Eso es generalmente cómo se comportarían las funciones como next_permutation() en C++ dada una lista ordenada. Interesante artículo sobre esto -> http://marknelson.us/2002/03/01/next-permutation/. –

+0

¿Entonces la lista de 30 permutaciones es solo el resultado de la función para generar las primeras permutaciones? No están completamente en orden lexicográfico. La cuarta y quinta permutaciones están fuera del orden lexicográfico. – mudge

-2

Véase el Benchmarks Game - Fannkuch

que requieren los primeros 30 permutaciones para ser impreso era sólo una forma sencilla para limitar los cambios aceptables que podrían ser hecho al algoritmo.