Tengo un conjunto ordenado de símbolos S = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }. Quiero encontrar la permutación 1.000.000-ésima en orden lexicográfico de S. Es un rompecabezas de programación, pero quería encontrar una manera sin forzar la tarea.
Así que mi pensamiento era el siguiente:
Para 10 posiciones de símbolos variables, tenemos 10! permutaciones, obviamente. Ahora queremos encontrar el primer símbolo.
Si fijamos el primer símbolo, los 9 símbolos restantes pueden tener 9 combinaciones.
Esto significa que el 0 o el 1 no pueden ser el primer símbolo, porque la posición más alta posible es 2*9! = 725.760, que es inferior a 1.000.000.
¡La posición más baja para un 3 inicial es 3*9! + 1 = 1.088.641, por lo que tampoco puede ser 3 ni superior.
Por lo tanto, el primer número debe ser 2. ¡2*9! es el mayor múltiplo de 9! no mayor que 1.000.000, así que necesito el segundo símbolo (basado en el cero) del conjunto actual.
Así que ahora la pregunta es, de los restantes S := S \{2}, ¿qué permutación de estos símbolos está en la posición lexicográfica (¡1.000.000 - 2*9!) = 274.240?
6*8! = 241.920 es el mayor múltiplo de 8! que es menor que 274.240, por lo que necesito el 6º símbolo más pequeño del conjunto restante, que es 7. Así que el prefijo debería ser 27 por ahora.
De esta manera, sigo adelante y finalmente llego a: ¡1,000,000 = 2*9! ¡+ 6*8! ¡+ 6*7! ¡+ 2*6! ¡+ 5*5! ¡+ 1*4! ¡+ 2*3! ¡+ 2*2! ¡+ 0*1! ¡+ 0*0!
que resulta en "2783905614" como mi solución.
Sin embargo, según el probador de soluciones (req. registro gratuito) que es incorrecto.
¿En qué me equivoqué al pensar o aplicar?
1 votos
La solución es $2783915460$ , puedes encontrar muchas explicaciones sobre cómo conseguirlo al ver la página de la solución.
3 votos
¿No debería 1*4! dar como resultado un dígito 1, no 0?
1 votos
¿No será ese término $1*4!$ significa que el sexto dígito debe ser $1$ no $0$ ?
5 votos
Ver también es.wikipedia.org/wiki/Sistema_numérico_factorial