Sunteți pe pagina 1din 5

Laboratorio 1.

Matemáticas Discretas
Sergio Hernández
Facultad de ciencias de la Ingenieria
Universidad Católica del Maule
shernandez@ucm.cl

23 de marzo de 2018

1. Permutaciones y combinatoria
Muchos problema de conteo pueden ser vistos como arreglos de los elementos de un
conjunto de objetos con o sin repeticiones. Los principios fundamentales para el análisis de
problemas de conteo son la regla del producto y la regla de la suma.

Definición 1. Principio multiplicativo


Suponga que existe un procedimiento A que puede ser dividido en m sub-tareas
A = {A1 × A2 × · · · × Am }, donde cada una de las sub-tareas puede ser realizada
de ni = |Ai | formas.
La cantidad total de maneras de realizar la tarea n = |A| es entonces:

|Ai = |A1 | × |A2 | × · · · × |Am |


n = n1 × n1 × nm

Definición 2. Principio aditivo


Si un procedimiento A puede ser realizado en m formas distintas A = {A1 ∪ A2 ∪
· · · ∪ Am }, y cada forma tiene de ni = |Ai | pasos.
La cantidad total de maneras de realizar la tarea n = |A| es entonces:

|A1 ∪ A2 ∪ · · · ∪ Am | = |A1 | + |A2 | + · · ·


+|Am | + |A1 ∩ A2 ∩ · · · ∩ Am |

1
Por ejemplo, usando la regla del producto podemos calcular la cantidad total patentes
de auto que es posible generar. En Chile, las patentes consisten un 4 letras y 2 números.
De modo de evitar la formación de palabras que puedan incomodar a los conductores,
se eliminaron algunos caracteres tales como las vocales y las letras Ñ,Q,M y N. De modo
Podemos separar el problema en 6 sub-tareas donde los primeros 4 elementos son caracteres
y los siguientes 2 elementos son digitos. Por lo tanto el número total de patentes es n =
184 ∗ 102

Program 1 Cantidad de patentes de autos


import string

lic_gen = lambda C,D : {(a,b,c,d,f,g) for a in C for b in C


for c in C for d in C for f in D for g in D}

C=set(string.ascii_uppercase) - {’A’,’E’,’I’,’O’,’U’,’M’,’N’,’Q’}
D=set(range(10))
patentes=lic_gen(C,D)
len(patentes)

#resultado: 10497600

Muchos problemas requieren utilizar ambos principios al mismo tiempo. Por ejemplo,
el siguiente código genera todos las contraseñas de 4 elementos donde el primer caracter es
una letra mayscula o minscula, tales como A,B,C,a,b y c. Los siguientes caracteres pueden
ser algunas de estas letras o un nmero A,B,C,a,b,c,1,2,3.

Program 2 Cantidad contraseñas de 4 caracteres


pass_gen_4 = lambda F,S : {(a,b,c,d) for a in F for b in S
for c in S for d in S}
F={’a’,’b’,’c’,’A’,’B’,’C’}
S={’a’,’b’,’c’,’A’,’B’,’C’,1,2,3}
print(len(pass_gen_4(F,S)))

#resultado: 4374

2
Utilizando el principio multiplicativo podemos observar que la cantidad de contraseñas
es n = 6 ∗ 93 . Sin embargo aparte de las contraseñas de largo 4, ahora también permitimos
contraseñas de largo 6 y 8. Por lo tanto, según el principio aditivo, el nmero total de
contraseñas ahora debiera ser n = 6 ∗ 93 + 6 ∗ 95 + 6 ∗ 97 . Es posible verificar este resultado
mediante el siguiente ejemplo:

Program 3 Cantidad contraseñas de 6 y 8 caracteres


pass_gen_6 = lambda F,S : {(a,b,c,d,f,g) for a in F for b in S
for c in S for d in S for f in S for g in S}
pass_gen_8 = lambda F,S : {(a,b,c,d,f,g,h,i) for a in F for b in S
for c in S for d in S for f in S for g in S for h in S for i in S}
F={’a’,’b’,’c’,’A’,’B’,’C’}
S={’a’,’b’,’c’,’A’,’B’,’C’,1,2,3}
print(len(pass_gen_6(F,S))+len(pass_gen_4(F,S))+len(pass_gen_8(F,S)))

#resultado: 29056482

La regla del producto sirve para determinar el número n de permutaciones que es


posible obtener de un conjunto finito de A con m elementos, tal que cada permutación
corresponde a un ordenamiento distinto de los elementos de A.

n = (m) × (m − 1) × · · · × 1
= m!

Por ejemplo, sea el conjunto A = {1, 2, 3} un conjunto finito que contiene 3 elementos.
El número total de permutaciones n se obtiene a través de la regla del producto. El siguiente
código NumPy genera las permutaciones:
En general:

Definición 3. Permutaciones
Si n es un entero positivo y r es otro entero tal que 1 ≤ r ≤ n entonces existen
P (n, r) = n × (n − 1) × (n − 2) × · · · × (n − r + 1) permutaciones con r elementos
de un conjunto de n elementos distintos. Entonces:

n!
P (n, r) =
(n − r)!

Las permutaciones corresponden a subconjuntos con cardinalidad r, cuyos elementos


obedecen un orden en particular. Ahora, nos interesa definir otro tipo de subconjunto cuyo
orden no es de interés.

3
Program 4 Generador de permutaciones
import itertools as it
import numpy as np

# Lista todas las permitaciones


var=list(it.permutations(range(1,4)))

# mostrar forma alternativa


# for i in range(len(var)):
# print var[i]

#mostrar forma alternativa


# mostrar el primer elemento de la tupla
#for i in range(len(var)):
# print var[i][0]

#generar una permutacin aleatoria


np.random.permutation(3)

Definición 4. Combinaciones
Si n es un entero positivo y r es otro entero tal que 1 ≤ r ≤ n entonces existen
C(n, r) subconjuntos con r elementos de un conjunto de n elementos distintos
sin orden en particular. Entonces:

n!
C(n, r) =
r!(n − r)!

Program 5 Generador de combinaciones


import itertools as it
import numpy as np

r=2
list(it.combinations(range(3),r))

4
Figura 1:

2. Tarea
1.) Permutaciones
El orden lexicográfico generaliza el ordenamiento común de un diccionario, sus-
tituyendo el alfabeto por cualquier collección que permita un orden. Por ejemplo
la cadenas S = {1, 3, 2, 4} es menor que V = {1, 3, 4, 2}, dado que S[3] < V [3].
Implemente el siguiente pseudo-codigo (Figura 1) para generar la siguiente per-
mutación en orden lexicográfico (tip:utilice generadores).
2.) Combinatoria
Dos equipos A y B juegan en un torneo donde el que ganador es aquel que gana
3 partidos.

Cual es la máxima cantidad de juegos posible en el torneo?

Construya el arbol de posibles juegos.

S-ar putea să vă placă și