Lucas Mesías
(library(gtools))
## [1] "gtools" "stats" "graphics" "grDevices" "utils" "datasets"
## [7] "methods" "base"
Permutaciones vs Combinaciones: Ambas generan dos distintas formas de mezclar datos de un vector, siendo difenecia es que mientras que las combinaciones no se preocupan del orden de los objetos, las permutaciones tratan cada conjunto que tiene los mismos elementos en distinto orden como una mezcla distinta. Por ejemplo, tenemos las combinaciones y permutaciones sin repetición del vector {a, b} (r = 2):
combinations(2, 2, v=letters[1:2], repeats=FALSE)
## [,1] [,2]
## [1,] "a" "b"
permutations(2, 2, v=letters[1:2], repeats=FALSE)
## [,1] [,2]
## [1,] "a" "b"
## [2,] "b" "a"
En las combinaciones, el vector {a,b} es equivalente a {b,a}. En las permutaciones, ambos son resultados diferentes.
Combinaciones sin repetición: \(C(n,r) = n! / (r! * (n - r)!)\)
\(Ej: n=4, r=2\)
\(C(4, 2) = (4 * 3) / (2 * 1) = 6\)
Combinaciones con repetición: \(C(n + r - 1, r) = (n + r - 1)! / (r! * (n - 1)!)\)
A la ecuación anterior se le suma \(r-1\) a \(n\), para compensar las repeticiones posibles.
\(Ej: n=11, r=3\)
\(C(13, 3) = (13 * 12 * 11) / (3 * 2 * 1) = 286\)
Permutaciones sin repetición: \(P(n,r) = n! / (n - r)!\)
\(Ej: n=4, r=2\)
\(P(4, 2) = (4 * 3) = 12\)
Esto se debe a que hay 4 posibles items para elegir, pero al momento de “escoger” el siguiente, la cantidad de items se reduce en 1.
Permutaciones con repetición: \(n^r\)
\(Ej: n=4, r=2\)
\(4 * 4 = 16\)
Similarmente al razonamiento anterior, se escoge 1 item del total, pero este no es removido de los items seleccionables, por lo que la cantidad de items que pueden ser seleccionados en el siguiente puesto, no disminuye.
Las funciones de la librería gtools, permutations y combinations generan una matriz de matriz con las permutaciones o combinaciones respectivamente, basandose en los siguientes parámetros:
permutations(3, 2, v=c("a", "b", "b"), set = FALSE)
## [,1] [,2]
## [1,] "a" "b"
## [2,] "a" "b"
## [3,] "b" "a"
## [4,] "b" "b"
## [5,] "b" "a"
## [6,] "b" "b"
permutations(2, 2, v=c("a", "b", "b"), set = TRUE)
## [,1] [,2]
## [1,] "a" "b"
## [2,] "b" "a"
permutations(2, 2, v=letters[1:2], repeats = FALSE)
## [,1] [,2]
## [1,] "a" "b"
## [2,] "b" "a"
permutations(2, 2, v=letters[1:2], repeats = TRUE)
## [,1] [,2]
## [1,] "a" "a"
## [2,] "a" "b"
## [3,] "b" "a"
## [4,] "b" "b"
Con repetición
11^3
## [1] 1331
Sin repetición
factorial(11)/factorial(11-3)
## [1] 990
combinations(5, 3, v=letters[1:5], repeats=FALSE)
## [,1] [,2] [,3]
## [1,] "a" "b" "c"
## [2,] "a" "b" "d"
## [3,] "a" "b" "e"
## [4,] "a" "c" "d"
## [5,] "a" "c" "e"
## [6,] "a" "d" "e"
## [7,] "b" "c" "d"
## [8,] "b" "c" "e"
## [9,] "b" "d" "e"
## [10,] "c" "d" "e"
combinations(5, 3, v=letters[1:5], repeats=TRUE)
## [,1] [,2] [,3]
## [1,] "a" "a" "a"
## [2,] "a" "a" "b"
## [3,] "a" "a" "c"
## [4,] "a" "a" "d"
## [5,] "a" "a" "e"
## [6,] "a" "b" "b"
## [7,] "a" "b" "c"
## [8,] "a" "b" "d"
## [9,] "a" "b" "e"
## [10,] "a" "c" "c"
## [11,] "a" "c" "d"
## [12,] "a" "c" "e"
## [13,] "a" "d" "d"
## [14,] "a" "d" "e"
## [15,] "a" "e" "e"
## [16,] "b" "b" "b"
## [17,] "b" "b" "c"
## [18,] "b" "b" "d"
## [19,] "b" "b" "e"
## [20,] "b" "c" "c"
## [21,] "b" "c" "d"
## [22,] "b" "c" "e"
## [23,] "b" "d" "d"
## [24,] "b" "d" "e"
## [25,] "b" "e" "e"
## [26,] "c" "c" "c"
## [27,] "c" "c" "d"
## [28,] "c" "c" "e"
## [29,] "c" "d" "d"
## [30,] "c" "d" "e"
## [31,] "c" "e" "e"
## [32,] "d" "d" "d"
## [33,] "d" "d" "e"
## [34,] "d" "e" "e"
## [35,] "e" "e" "e"
factorial(39)/factorial(39-25)
## [1] 233978916085905571104620824042424088
factorial(39)/(factorial(39-25) * factorial(25))
## [1] 15084504396
Considere un problema de una vendedora viajera que debe recorrer 50 ciudades y volver al origen sin pasar dos veces por la misma ciudad. Considerando que solo existe una ruta óptima, si se selecciona una ruta al azar:
Se trata de una permutación sin repetición \(n=50, r=50\), ya que el orden en que se visitan las ciudades importa, y se asume que al llegar a la última ciudad de la vector resultado, la vendedora vuelve a la primera ciudad del set. Por lo que hay 50! posibles rutas, y solo una es la óptima, asi que la probabilidad es:
1/factorial(50)
## [1] 0.00000000000000000000000000000000000000000000000000000000000000003287949416633196809
Se le resta 1 a la cantidad total de rutas posibles:
1/(factorial(50) - 1)
## [1] 0.00000000000000000000000000000000000000000000000000000000000000003287949416633196809
Debido a que la cantidad total de combinaciones es monstruosamente grande, no es eficiente usar ni combinations() ni permutations(), ya que ambas funciones generarán primero cada combinación, almacenarán cada una de ellas en un arreglo, y luego para responder la pregunta, se deberá iterar en dicho arreglo, contando cuantas hay. Esta operación tardará mucho y usará muchos recursos del computador.
0.05
## [1] 0.050000000000000002776
(0.1)+(0.15)
## [1] 0.25
(0.1)+(0.6)+(0.15)+(0.05)+(0.10)
## [1] 1
Primero, la suma de las probabilidades de que cada empleado atienda al cliente es 1 (100%), por lo que no hay ninguna posibilidad de que un empleado no sea atendido por uno de ellos.
(0.1)+(0.6)+(0.15)+(0.05)+(0.10)
## [1] 1
Por otro lado, las probabilidades de que un empleado sea atendido Y que su parabrisas sea limpiado, es menor a 1:
(0.1 * 19/20)+(0.6 * 9/10)+(0.15 * 9/10)+(0.05 * 19/20)+(0.10 * 2/5)
## [1] 0.85749999999999992895
Pero como se nos da la condición inicial de que el parabrisas ya fue limpiado, no tomamos en cuenta el caso de ser atendido y no tener limpio el parabrisas
Asumiendo que una vez seleccionada, la persona es removida del conjunto de posibles candidatos seleccionables:
18/40 * 17/39 * 16/38
## [1] 0.082591093117408906354