¿Cómo se encuentran todos los arreglos posibles de un conjunto dado de números?

Al principio estaba un poco confundido por su pregunta, pero esto * aclaró mucho mis dudas. Iba a escribir algo sobre factoriales y combinatoria, pero esto es ligeramente diferente. Antes de continuar, deje que [math] n! = \ Prod_ {k = 1} ^ {n} k = n \ times (n-1)! [/ Math], o más simplemente, [math] n! [/ Math ] es la multiplicación de todos los enteros que van de [matemáticas] 1 [/ matemáticas] a [matemáticas] n [/ matemáticas] (estoy excluyendo la función gamma).

* Suponiendo que solo puede usar las letras del alfabeto y no puede repetir ninguna de ellas, su contraseña puede tener entre [matemática] 1 [/ matemática] y [matemática] 26 [/ matemática] dígitos de largo. En esta situación, ¿cuántos resultados son posibles?

Bueno, primero lo primero. Definamos nuestro alfabeto, que tiene 26 letras [matemáticas] [/ matemáticas].

Su contraseña puede tener entre [matemática] 1 [/ matemática] y [matemática] 26 [/ matemática] dígitos de largo.

No puede repetir ninguna de las letras más adelante en el código.


Establezcamos algunos casos y busquemos una solución general:

Caso 1. La contraseña es [matemática] 1 [/ matemática] carácter largo: [matemática] 26 [/ matemática] los resultados son posibles para el único caracter. Mis posibilidades de adivinar la contraseña son [math] \ frac {1} {26} [/ math].

Caso 2. La contraseña tiene [matemática] 2 [/ matemática] caracteres largos: [matemática] 26 [/ matemática] los resultados son posibles para el primer carácter, y [matemática] 25 [/ matemática] los resultados son posibles para el primer caracter ( ¡Hemos usado uno en el primer espacio!). Ahora hay [matemática] 26 \ veces 25 [/ matemática] posibilidades para la contraseña. Mis posibilidades son [matemáticas] \ frac {1} {650} [/ matemáticas].

Puede inferir el resto de los casos.


Si la contraseña fuera [matemática] 26 [/ matemática] dígitos, habría [matemática] 26! = 26 \ veces 25 \ veces 24 \ veces 23 \ veces 22 \ veces \ ldots \ veces 3 \ veces 2 \ veces 1 [/ math] posibilidades, y mis posibilidades de adivinar correctamente serían [math] \ frac {1} {26!} [/ math]. ( como si fuera a escribir el alfabeto en un cierto orden, y tuviera que adivinar el orden letra por letra ).

Además, si no supiera la cantidad de dígitos en la contraseña, mis posibilidades serían aún peores. ¡Tendría todos los casos anteriores como ‘posibilidades’, y aún así eso no significaría que se adivinó la contraseña! Entonces, los posibles resultados para la contraseña son

[matemáticas] 26 \ veces (26 \ veces 25) \ veces (26 \ veces 25 \ veces 24) \ veces (26 \ veces 25 \ veces 24 \ veces 23) \ veces (26 \ veces 25 \ veces24 \ veces 23 \ veces 22) \ veces \ ldots \ veces 26! = C. [/ matemáticas]

Observe cómo [math] 26 [/ math] se ha definido como las posibilidades para la contraseña con [math] 1 [/ math] dígito, y [math] 26! [/ Math] se ha definido como las posibilidades de la contraseña con [matemáticas] 26 [/ matemáticas] dígitos.

Y mis posibilidades, [matemáticas] C ^ {- 1} [/ matemáticas] … Bueno, digamos que no adiviné la contraseña.


Leer más sobre factoriales: Factorial – Wikipedia

Arreglos es una palabra vaga para matemáticos. Tendemos a preferir “Combinaciones” donde el orden no es importante, o “Permutaciones” donde el orden sí importa.

Como ejemplo:

¿Cuántas permutaciones de 2 letras son posibles desde ABCDE?

AB, AC, AD, AE, BA, BC, BD, BE, CA, CB, CD, CE, DA, DB, DC, DE, EA, EB, EC, ED. Entonces hay 20.

¿Cuántas combinaciones de 2 letras son posibles desde ABCD?

AB, AC, AD, AE, (BA), BC, BD, BE, (CA), (CB), CD, CE, (DA), (DB), (DC), DE, (EA), (EB ), (CE), (ED) esos dentro de paréntesis representan un duplicado si el orden no importa.

AB, AC, AD, AE, BC, BD, BE, CD, CE, DE Solo diez.

Si por “arreglos” quiere decir permutaciones donde el orden importa.

Entonces tiene n elección para la primera letra, (n-1) para la segunda, (n-2) y así sucesivamente.

Matemáticamente esto es “nPr” n cosas tomadas r a la vez. Muchas calculadoras científicas tienen un botón para esto. La fórmula matemática utiliza el concepto factorial, ¡símbolo!

La fórmula es (n!) / ([Nr]!) De mi ejemplo anterior, 5 letras tomadas 2 a la vez = (5!) / ([5–2]!) = (5 X 4 X 3 X 2 X 1 ) / (3 X 2 X 1) = 120/6 = 20.

Si por “arreglos” te refieres a combinaciones donde el orden no importa.

Matemáticamente esto es “nCr” n cosas tomadas r a la vez.

La fórmula es (n!) / (R!) ([Nr]!) De mi ejemplo anterior 5 letras tomadas 2 a la vez = (5!) / (3!) ([5–2]!) = (5 X 4 X 3 X 2 X 1) / (3 X 2 X 1) (2 X 1) = 120 / (6) (2) = 120/12 = 10

No estoy muy seguro de lo que quieres decir.

Si tiene un conjunto de n números, todos diferentes, entonces el primer número puede ser cualquiera de los n, el segundo puede ser cualquiera de los n-1 restantes y así sucesivamente hasta que solo quede uno para elegir. ¡No hay! (n factorial), y puede elegirlos sistemáticamente. Por ejemplo, con 1, 2, 3 hay 3! o 6 arreglos, 1,2,3; 1,3,2; 2,1 3; 2,3,1; 3,1,2 y 3,2,1.

Si algunos de los números se repiten, entonces es un poco más complicado. Por ejemplo, si tiene 1, 1, 2, 3, el primer número aún puede ser cualquiera de tres, pero si el primer número es 1, tiene tres opciones para el segundo número, mientras que si el segundo número es 2 o 3, usted solo tiene dos opciones. Los arreglos son 1,1,2,3; 1,1,3,2; 1,2,1,3; 1,2,3,1; 1,3,1,2; 1,3,2,1; 2,1,1,3; 2,1,3,1; 2,3,1,1; 3,1,1,2; 3,1,2,1 y 3,2,1,1. Hay C (4,2) = 6 formas de colocar las dos, luego las 3 y 2 se pueden insertar de dos maneras en las dos ranuras restantes. 6 x 2 = 12. La fórmula general si tienes k1, k2,. . ., kn de los números 1 a n, donde la suma si las k es K, es C (K, k1) * C (K-k1, k2) *. . . * C (K-k1-k2-…-K_i, k_i + 1) *. . . * 1.

Esta es una función recursiva.

Toma cada dígito por turno. El resultado es cada disposición de los dígitos restantes, cada uno precedido por el dígito que tomó.

  • por ejemplo, arreglos [1,2,3] = cada arreglo de [2,3] precedido por 1 + cada arreglo de [1,3] precedido por 2 + cada arreglo de [1,2] precedido por 3
  • cada arreglo de [2,3] = cada arreglo de [3] precedido por 2 + cada arreglo de [2] precedido por 3
  • cada arreglo de [3] = una lista singleton, [[3]] (el caso base)

Aquí hay una implementación del esquema:

(use srfi-1)

(define (flatmap f lst)
(aplicar agregar (mapa f lst)))

(definir (permisos lst)
(if (null? (cdr lst)); prueba barata para lista singleton
(lista lst); caso base: solo 1 forma de organizar 1 artículo
(mapa plano
(lambda (x); toma cada elemento a su vez como x
(map (lambda (p) (cons xp)) (perms (delete x lst))))
lst)))

#; 1> (permisos ‘(1 2))
((1 2) (2 1))
#; 2> (permisos ‘(1 2 3))
((1 2 3) (1 3 2) (2 1 3) (2 3 1) (3 1 2) (3 2 1))
#; 3> (permisos ‘(1 2 3 4))
((1 2 3 4) (1 2 4 3) (1 3 2 4) (1 3 4 2) (1 4 2 3) (1 4 3 2) (2 1 3 4) (2 1 4 3) ( 2 3 1 4) (2 3 4 1) (2 4 1 3) (2 4 3 1) (3 1 2 4) (3 1 4 2) (3 2 1 4) (3 2 4 1) (3 4 1 2) (3 4 2 1) (4 1 2 3) (4 1 3 2) (4 2 1 3) (4 2 3 1) (4 3 1 2) (4 3 2 1))

#; 5> (longitud (permisos ‘(1 2 3 4 5 6 7 8)))
40320