Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. Teorı́a de grafos 1
1.1. Definiciones básicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Ejemplos de grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3. Grafos como modelos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3.1. Grafo de conocidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3.2. Grafo de hipervı́nculos . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3.3. Grafo de torneo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3.4. Grafo de rutas aéreas . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3.5. Grafo de precedencias . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.6. Grafo de adyacencias . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4. Más definiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5. Representación de grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.5.1. Listas de adyacencias . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.5.2. Matriz de adyacencia . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.5.3. Matriz de incidencia . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.6. Grafos ponderados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.7. Grafos planos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.8. Árboles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.9. Árboles recubridores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.10. Árbol recubridor minimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.11. Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2. Relaciones de recurrencia 49
2.1. Definiciones básicas y ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . 49
2.2. Resolución de recurrencias lineales homogéneas . . . . . . . . . . . . . . . . 53
2.2.1. Recurrencias lineales de orden 1 . . . . . . . . . . . . . . . . . . . . 53
2.2.2. Recurrencias lineales de orden 2 . . . . . . . . . . . . . . . . . . . . 54
2.2.3. Orden superior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
2.3. Resolución de recurrencias lineales no homogéneas . . . . . . . . . . . . . . 60
2.4. Problemas modelados con recurrencias . . . . . . . . . . . . . . . . . . . . . 62
2.4.1. Modelos de crecimiento . . . . . . . . . . . . . . . . . . . . . . . . . 62
2.4.2. Préstamo con pagos parciales . . . . . . . . . . . . . . . . . . . . . . 63
2.4.3. Operaciones necesarias en ordenamiento por burbuja . . . . . . . . . 64
2.4.4. Construcciones geométricas recursivas (fractales) . . . . . . . . . . . 65
i
ÍNDICE GENERAL
3. Aritmética entera 75
3.1. Números naturales y enteros . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
3.2. Divisibilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
3.3. Números primos y sus aplicaciones . . . . . . . . . . . . . . . . . . . . . . . 79
3.4. División entera (Algoritmo de Euclides) . . . . . . . . . . . . . . . . . . . . 80
3.5. Ecuaciones diofánticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
3.5.1. Ecuaciones diofánticas a x + b y = mcd(a, b) . . . . . . . . . . . . . . 85
3.5.2. Ecuaciones diofánticas a x + b y = c con c múltiplo de mcd(a, b) . . . 88
3.5.3. Solución general de una ecuación diofántica . . . . . . . . . . . . . . 88
3.6. Congruencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
3.6.1. Definiciones, propiedades y ejemplos . . . . . . . . . . . . . . . . . . 93
3.6.2. Aplicaciones de congruencias . . . . . . . . . . . . . . . . . . . . . . 98
3.7. Ecuaciones en congruencias . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
3.7.1. Ecuaciones lineales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
3.7.2. Sistemas de ecuaciones lineales: Teorema chino del resto . . . . . . . 107
3.8. Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
ii
ÍNDICE GENERAL
iii
ÍNDICE GENERAL
iv
Capı́tulo 1
Teorı́a de grafos
1
1.1. Definiciones básicas
Proposición 1.1. P
En todo grafo se cumple que 2|E| = vi ∈V gr(vi ). ♦
Proposición 1.2. P P
En todo grafo dirigido se cumple que |E| = vi ∈V ge(vi ) = vi ∈V gs(vi ). ♦
Un grafo es regular si todos sus vértices tienen el mismo grado. Si el grado de cada
vértice es k, se dice que es k-regular.
Ejemplo 1.1
En la figura 1.1a se muestra un grafo con V = {v1 , v2 , v3 , v4 , v5 , v6 , v7 , v8 , v9 , v10 } y E =
{e1 , e2 , ..., e13 }, con e1 = {v1 , v2 }, e2 = {v1 , v3 }, e3 = {v2 , v3 }, e4 = {v1 , v7 }, e5 = {v7 , v8 },
..., e12 = {v2 , v6 }, e13 = {v2 , v5 } (el orden de las aristas y también de los vértices es
totalmente arbitrario). Los vértices v1 y v2 tienen grado 5; los vértices v3 , v4 , v6 , v7 , v9
tienen grado 2, los vértices v5 y v8 tienen grado 3, mientras que el vértice v10 tiene grado
0. Este vértice es aislado.
En la parte b de la figura 1.1 se observa un multigrafo. Las aristas {u1 , u3 } y {u2 , u6 }
están repetidas. Además, el grafo tiene un bucle en el vértice u4 . El grado de este vértice
es 5.
Un grafo dirigido se muestra en la parte c de la figura. No es un multigrafo porque no
hay aristas repetidas. Las aristas (v2 , v5 ) y (v5 , v2 ) son distintas, porque si bien relaciona
el mismo par de vértices, las direcciones son distintas. Los grados de entrada y salida
de algunos vértices son: gs(v1 ) = 2, ge(v1 ) = 0, gs(v3 ) = 1, ge(v3 ) = 3, gs(v4 ) = 1,
ge(v4 ) = 1, etc.
Finalmente, la figura 1.1d muestra un multigrafo dirigido. La arista (u2 , u4 ) está repe-
tida. Los grados de algunos vértices son: gs(u1 ) = 2, ge(u1 ) = 0, gs(u4 ) = 1, ge(u4 ) = 2,
etc.
Ejemplo 1.2
Los dos grafos de la figura 1.2 son regulares. El de la izquierda es 2-regular (cada uno de
los 7 vértices tienen grado 2). El grafo de la derecha es 3-regular.
2
1. Teorı́a de grafos
v8
v9
v5
v7 v6 u5
u6
v4 u7
u4
v1 v2 u3
v10
v3 u1 u2
a
b
u5
v4
v5 u1
v6
v3 u2 u3
v2
v1 u4
c d
u1
u6
v4 v6 u2 u4
v3 u3
v5
v1
v2
v7 u5
a b
3
1.2. Ejemplos de grafos
v3
v4 v3
v3 v4 v2
v1 v2 v1 v2 v5 v1
K3 K4 K5
b. Grafo ciclo. Un grafo tiene estructura de ciclo si tiene vértices v1 , v2 , ..., vn , tal
que las aristas son {v1 , v2 }, {v2 , v3 }, ..., {vn , v1 }. Al grafo ciclo de n vértices se lo
denota Cn . Además |E| = n y gr(vi ) = 2 para todo vértice vi . Todo grafo ciclo es
2-regular.
v3
v4 v3
v3 v4 v2
v1 v2 v1 v2 v5 v1
C3 C4 C5
4
1. Teorı́a de grafos
v4
v1 v4
v1 v5 v3
v0 v0
v0
v2 v3 v2 v3 v1 v2
S3 S4 S5
d. Grafo rueda. Un grafo rueda es un grafo ciclo, junto con un grafo estrella. Si el
grafo rueda se origina con un ciclo de n vértices, entonces |V | = n + 1 y se lo denota
Wn . Además, |E| = 2n y gr(vi ) = 3 si son vértices periféricos, y gr(v0 ) = n para el
vértice central.
v4
v1 v4
v1 v5 v3
v0 v0
v0
v2 v3 v2 v3 v1 v2
W3 W4 W5
e. Grafo lineal. Un grafo lineal de n vértices, denotado Ln tiene vértices v1 , v2 , ...,
vn , tal que las aristas son {v1 , v2 }, {v2 , v3 }..., {vn−1 , vn }. En este grafo, |V | = n,
|E| = n − 1, gr(vi ) = 2 si i = 2, 3, ..., n − 1, y gr(v1 ) = gr(vn ) = 1.
v1 v2 v3 vn−1 vn
Ln
5
1.3. Grafos como modelos
Pedro Rocı́o
Nacho Ivan
Ana
Marcos
Juan
Laura Luis
Marı́a
www.1.com www.8.gov.ar
www.2.com www.7.gov.ar
www.3.com www.6.net
www.4.com.ar www.5.com.ar
6
1. Teorı́a de grafos
Sporting
Cebollitas
Sacachispas Club
Se pueden analizar cuestiones simples como: ¿Quién ganó (perdió) más veces? O cues-
tiones más complejas como por ejemplo: ¿Cómo se puede determinar el ganador del torneo?
¿Cómo se puede armar un ranking de los equipos, en base a los resultados?
Córdoba
Paraná
Mendoza
Buenos Aires
Montevideo
Calafate
Rı́o Gallegos
7
1.3. Grafos como modelos
El grafo permite analizar situaciones como: ¿Hay algún destino tal que si su aeropuerto
está inoperante durante un tiempo, quedan ciudades desconectadas en este esquema de
rutas? Claramente Buenos Aires lo es. Otro destino con esta caracterı́stica es Mendoza,
ya que si no se llega hasta allı́, Salta queda desconectada.
Por otra parte, si una persona en Salta quiere llegar a Iguazú, ¿cuál es la menor
cantidad de vuelos que debe tomar?
L8
L1 L3
L4 L7 L9
L2 L10
L5
L6
8
1. Teorı́a de grafos
(n − 1, m) (n, m) (n + 1, m)
(n, m − 1)
(n − 1, m) (n, m) (n + 1, m)
(n − 1, m − 1) (n, m − 1) (n + 1, m − 1)
Se puede definir punto de borde como aquel cuyo vértice correspondiente tiene grado
menor a 4, y los puntos interiores como aquellos cuyo vértice correspondiente tiene grado
4.
9
1.4. Más definiciones
Teorema 1.3.
Un grafo de n vértices es conexo si y sólo si entre cualquier par de vértices existe un
camino de longitud menor o igual a n − 1. ♣
10
1. Teorı́a de grafos
v1 v2
v7 v8 v3
v6
v5 v4
Un vértice tal que al eliminarlo del grafo, junto con las aristas que inciden en él,
aumenta la cantidad de componentes conexas del grafo, se denomina vértice de ar-
ticulación. Un vértice de articulación se caracteriza por ser un vértice intermedio en
todos los caminos que conectan a algún par de vértices.
En el grafo de rutas aéreas de la subsección 1.3.4, el vértice Buenos Aires es un vértice
de articulación, y Mendoza es otro vértice de articulación. Nótese que todos los caminos
que conectan, por ejemplo, Calafate y Tucumán, pasan por Buenos Aires, y todos los
caminos que conectan Salta y Calafate pasan por Mendoza.
11
1.4. Más definiciones
Teorema 1.4.
Una arista es de corte si y sólo si no participa de ningún ciclo. ♣
En el grafo de conocidos, las aristas {Marı́a, Luis} y {Marcos, Iván} son aristas de corte.
En el grafo de rutas aéreas, las aristas {Salta, Mendoza} y {Buenos Aires, Montevideo}
son aristas de corte.
En un grafo sin vértices aislados, un recorrido euleriano es un recorrido que
pasa por cada arista exactamente una vez. Un circuito euleriano es un recorrido
euleriano cerrado.
No todo grafo admite un recorrido (circuito) euleriano.
Ejemplo 1.6
El grafo de la figura 1.4a sı́ admite un recorrido euleriano. Un recorrido de ese tipo es
v5 − v1 − v2 − v3 − v4 − v1 − v3 . Puede comprobarse que este grafo no admite circuito
euleriano.
El grafo de la figura 1.4b no admite un recorrido euleriano. Se puede intentar construir
un recorrido que pase por todas las aristas, y se comprobará fácilmente que es imposible.
Proposición 1.5.
Un grafo (o multigrafo) sin vértices aislados admite un circuito euleriano si y sólo si es
conexo y todos sus vértices tienen grado par. ♦
Proposición 1.6.
Un grafo (o multigrafo) sin vértices aislados admite un recorrido euleriano (y no circuito
euleriano) si y sólo si es conexo y tiene exactamente dos vértices de grado impar.
12
1. Teorı́a de grafos
v2
v1
v5 v6
v3 v2
v1 v3
v5
v4 v4
a b
El grafo de la figura 1.4a, que admite recorrido euleriano pero no circuito euleriano,
tiene exactamente dos vértices de grado impar: v3 y v5 .
En el grafo de la figura 1.4b no pudimos hallar un recorrido euleriano. Que no se haya
podido encontrar, no implica que no existe; podrı́a ser que la búsqueda no fue exhausti-
va. Sin embargo, como tiene cuatro vértices de grafo impar, las proposiciones 1.6 y 1.5
permiten asegurar que no existe un recorrido (ni circuito) euleriano en ese grafo.
Para grafos dirigidos, recorrido (circuito) euleriano se define similarmente, requiriendo
un recorrido (circuito) dirigido que pase por todas las aristas.
Proposición 1.7.
Un grafo (o multigrafo) dirigido sin vértices aislados tiene un circuito euleriano si y sólo
si G es conexo y gs(vi ) = ge(vi ) para cada vértice vi . ♦
Ejemplo 1.7
Considere el grafo de la figura 1.5. En cada vértice se verifica que el grado de entrada es
igual al grado de salida. Por lo tanto, la proposición 1.7 asegura que se puede encontrar
un circuito euleriano dirigido.
Éste podrı́a ser v1 − v2 − v6 − v8 − v5 − v4 − v1 − v1 − v7 − v8 − v9 − v5 − v3 − v2 − v7 −
v3 − v7 − v9 − v6 − v1 .
Para pensar.
¿Cuál deberı́a ser la condición necesaria y suficiente para que un grafo o multi-
grafo dirigido admita recorrido euleriano?
13
1.4. Más definiciones
v4
v3
v2
v1 v5
v7
v6
v9
v8
C = v1 − v3 − v4 − v5 − v2 − v9 − v3 − v7 − v8 − v6 − v2 − v1
1
Como C0 es circuito, w1 = ws . Además, w1 = uj , porque ası́ fue elegido
14
1. Teorı́a de grafos
v1 v1
v9 v9
v2 v3 v2 v3
v5 v4 v5 v4
v6 v7 v6 v7
v8 v8
a b
v1 v1
v9 v9
v2 v3 v2 v3
v5 v4 v5 v4
v6 v7 v6 v7
v8 v8
c d
15
1.4. Más definiciones
a b c
Figura 1.7: a- Grafo del ejemplo 1.9. b-Un camino hamiltoniano. c. Un ciclo hamiltoniano
Aún quedan aristas sin usar. Entonces procedemos nuevamente: se busca un circuito
que use aristas punteadas en la figura 1.6c. Por ejemplo, comenzando en v9 con la arista
{v9 , v4 } obtenemos el nuevo circuito: C0 = v9 − v4 − v7 − v6 − v5 − v9 que se muestra en
trazo grueso en la figura 1.6d, y actualizamos el circuito C:
C = v 1 − v3 − v4 − v5 − v2 − v9 − v4 − v7 − v6 − v5 − v9 − v3 − v7 − v8 − v6 − v2 − v1
Quedan algunas aristas sin usar. Construimos un circuito que use esas aristas (pun-
teadas en la figura 1.6d). Comenzando en v2 , es C0 = v2 − v3 − v8 − v2 y actualizamos
C = v1 −v3 −v4 −v5 −v2 −v9 −v4 −v7 −v6 −v5 −v9 −v3 −v7 −v8 −v6 −v2 −v3 − v8 − v2 −v1
Ahora todas las aristas del grafo están en el circuito, por lo tanto, es un circuito
euleriano.
Para pensar.
16
1. Teorı́a de grafos
Ejemplo 1.10
El grafo de la figura 1.8 no admite un ciclo hamiltoniano. Sin embargo, sı́ es posible trazar
un camino hamiltoniano (marcado en la figura de la derecha).
Dado un grafo, sobre todo si tiene gran tamaño, no es fácil determinar si admite o
no un camino (ciclo) hamiltoniano. No existen condiciones necesarias y suficientes para
la existencia de un camino (ciclo) hamiltoniano. Pero sı́ algunas condiciones necesarias, y
algunas condiciones suficientes:
Proposición 1.8.
Si un grafo admite un ciclo hamiltoniano, entonces es conexo, y gr(vi ) > 2.
Proposición 1.9.
Un grafo con n vértices, y n > 3, que verifica que cada vértice tiene grado gr(vi ) > n/2,
admite un ciclo hamiltoniano.
Ejemplo 1.11
Se tienen las ocho secuencias de tres bits (ceros y unos). Se quiere ordenarlas de forma
tal que cada secuencia difiera de la siguiente en sólo un bit; y que la última difiera de la
primera en un sólo bit. Esto se conoce como código Gray.
Un código Gray para secuencias de tres bits se puede obtener fácilmente si se ubican las
ocho secuencias como etiquetas en los vértices de un grafo, cuyas aristas conectan vértices
tal que sus etiquetas difieren en un sólo bit. El ordenamiento que se busca corresponde con
un ciclo hamiltoniano en tal grafo. En la figura 1.9 se muestra el grafo descrito, llamado
3-cubo, y un ciclo hamiltoniano en él. Esto nos da el código Gray: 000- 001 - 101 - 111 -
011 - 010 - 110 - 100.
Imitando estas ideas para obtener un código Gray para secuencias de cuatro bits, se
generarı́a un grafo de 16 vértices y 32 aristas, llamado 4-cubo. Hacer una representación
gráfica de este grafo y buscar en él un ciclo hamiltoniano puede resultar engorroso. En
lugar de eso, se puede razonar ası́: ordenemos primero las ocho secuencias de cuatro bits
que comienzan con 0 (llamemos C0 a este ordenamiento), luego las ocho secuencias de
cuatro bits que comienzan con 1 (llamemos C1 a esta lista). Posteriormente, se conectan
estas dos ordenaciones, manteniendo la condición de que secuencias consecutivas difieran
sólo en un bit.
17
1.5. Representación de grafos
110 111
010 011
100 101
000 001
Ordenar las secuencias que comienzan con 0 (o con 1) es equivalente a ordenar las
secuencias de tres bits. De lo hecho anteriormente, siguiendo el ciclo hamiltoniano en el
3-cubo se puede obtener el ordenamiento: C0 : 0000 - 0001 - 0101 - 0111 - 0011 - 0010 -
0110 - 0100, para las secuencias que comiencen con 0. Aquı́ se une con C1 . El final de
C0 debe enlazarse con el inicio de C1 , de forma que cambie sólo un bit, en este caso, el
primer bit. Por lo tanto, C1 debe comenzar con 1100. Además, el primer elemento de C0
enlazarse con el último elemento de C1 . Ası́, C1 debe terminar en 1000. Entonces, para
establecer el orden en C1 se sigue el ciclo del 3-cubo, pero en orden inverso al seguido para
obtener C0 . Resulta: C1 : 1100 - 1110 - 1010 - 1011 - 1111 - 1101 - 1001 - 1000.
La secuencia obtenida al concatenar C0 y C1 es un ordenamiento de las secuencias de
cuatro bits con las condiciones pedidas. Equivale a un ciclo hamiltoniano en el 4-cubo.
Este razonamiento se puede generalizar para secuencias de n bits, que equivalen a ciclos
hamiltonianos en n-cubo. Ası́, se prueba que el grafo n-cubo, para cualquier n, admite un
ciclo hamiltoniano.
En grafos dirigidos, camino (ciclo) hamiltoniano se define como un camino (ciclo)
dirigido que pasa por todos los vértices.
Ejemplo 1.12
Todo grafo torneo (grafo completo dirigido) admite un camino hamiltoniano. Por ejemplo,
en el torneo de 4 vértices de la figura 1.10, un camino hamiltoniano es v2 − v3 − v4 − v1 .
Otro camino es v4 − v2 − v3 − v1 . No es posible construir un ciclo hamiltoniano, ya que
gs(v1 ) = 0, y un ciclo debe poder salir de cada vértice.
En el torneo de 5 vértices de la figura 1.10 se tiene el camino hamiltoniano dirigido
v1 − v2 − v5 − v3 − v4 , y otro camino posible es v4 − v5 − v1 − v2 − v3 . Este torneo también
admite un ciclo hamiltoniano dirigido: v1 − v2 − v3 − v4 − v5 − v1 .
18
1. Teorı́a de grafos
v3 v2
v3 v2
v4 v1
v4 v1 v5
a b
Resulta una matriz binaria (sus elementos son 0 y 1) tal que aparece un 1 en la
intersección de una fila y una columna correspondientes a vértices adyacentes.
Para grafos dirigidos, los elementos de la matriz de adyacencia se definen:
1 si vj es adyacente desde vi
aij =
0 en otro caso
Ejemplo 1.13
La matriz de adyacencia del grafo de la figura 1.4b es:
0 1 0 1 1 0
1 0 1 1 1 1
0 1 0 1 0 1
A=
1 1 1 0 0 0
1 1 0 0 0 0
0 1 1 0 0 0
19
1.5. Representación de grafos
0 0 1 0 1
1 0 0 1 1
A=
0 1 0 0 1
1 0 1 0 1
0 0 0 0 0
Ejemplo 1.14
La matriz de adyacencia del grafo de la figura 1.11 es
0 1 1 1 0 0 0
1 0 1 0 1 0 0
1 1 0 1 1 0 0
A=
1 0 1 0 1 0 0
0 1 1 1 0 0 0
0 0 0 0 0 1 1
0 0 0 0 0 1 0
20
1. Teorı́a de grafos
v1 v2
v6
v3
v4 v5
v7
21
1.5. Representación de grafos
1 si la arista ek es incidente en vi
bik =
0 en otro caso
Cada fila se asocia a un vértice, y cada columna a una arista. Los elementos 1 muestran
la incidencia de aristas en vértices.
La matriz de incidencia de un grafo no dirigido es tal que en cada columna hay dos 1,
si la columna no se corresponde con un bucle. En la columna correspondiente a un bucle,
hay un solo 1. Es decir, la suma de los elementos de cada columna es siempre 2, salvo que
la columna corresponda con un bucle. La suma de las filas es el grado de cada vértice, si
el vértice no tiene un bucle. Un vértice aislado tiene asignada una fila de 0.
Para grafos dirigidos, los elementos de la matriz de incidencia se definen:
1 si vi es el vértice final de la arista ek
bik = −1 si vi es el vértice inicial de la arista ek
0 en otro caso
En este caso, no está bien definida la matriz si tiene un bucle dirigido. Por convención,
se ignoran los bucles (es decir, no aparecen como columnas en la matriz de incidencia).
En cada columna de la matriz de incidencia de un grafo dirigido hay un 1 y un -1.
La suma de cada fila da la diferencia entre el grado de entrada y el grado de salida del
correspondiente vértice.
La matriz de incidencia depende de un orden asignado a los vértices y a las aristas.
Cambiando el orden, cambia la matriz.
Ejemplo 1.15
La matriz de incidencia del grafo que se muestra en la figura 1.4b, con un determinado
orden de las aristas, es:
1 1 1 0 0 0 0 0 0
1 0 0 1 1 1 1 0 0
0 0 0 1 0 0 0 1 1
A=
0 1 0 0 1 0 0 1 0
0 0 1 0 0 1 0 0 0
0 0 0 0 0 0 1 0 1
1 −1 1 −1
0 0 0 0 0 0
−1 0 0 0 1 −1 −1 0 0 0
A=
0 1 0 0 −1 0 0 1 −1 0
0 0 −1 0 0 1 0 −1 0 −1
0 0 0 1 0 0 1 0 1 1
22
1. Teorı́a de grafos
15 v8
v9
v2 17 v3 8 11
v4 16
3 20 v10
10 v7 10
v1 10
4
v5 v6
10
Ejemplo 1.16
Considere el grafo ponderado de la figura 1.12. El peso del grafo es 134. El camino v1 −
v2 − v6 − v5 − v4 − v3 − v7 tiene peso 62. La distancia entre v1 y v7 es 40 (el peso del
camino mı́nimo v1 −v2 −v3 −v7 ). La distancia de v5 a v3 es 19 (el peso del camino mı́nimo
v5 − v4 − v3 ).
Dado un grafo ponderado de n vértices, los pesos de las aristas pueden darse en una
matriz de pesos W de n × n, tal que elemento wij sea el peso de la arista que une vi
y vj .
La matriz de pesos del grafo de la figura 1.12 es
− 3 − − − − − − − −
3 − 17 − 10 10 − − − −
− 17 − 15 − − 20 − − −
− − 15 − 4 − − − − −
− 10 − 4 − 10 − − − −
W =
− 10 − − 10 − − − − −
− − 20 − − − − 8 11 10
− − − − − − 8 − − −
− − − − − − 11 − − 16
− − − − − − 10 − 16 −
23
1.6. Grafos ponderados
En muchas aplicaciones interesa determinar la longitud del camino más corto entre
dos nodos. Por ejemplo, en el problema de rutas aéreas, ponderando las rutas según su
distancia en kilómetros, se quiere conocer el camino más corto entre dos ciudades. En
otro ejemplo, considérese el problema de una red de terminales, donde cada conexión
entre terminales se pondera con el tiempo que insumen los datos en transmitirse de una
terminal a la otra. Aquı́ interesa hallar la ruta entre dos terminales que haga que los datos
se transfieran en el menor tiempo posible.
A continuación se describe un algoritmo que realiza un procedimiento para hallar la
longitud del camino mı́nimo entre dos vértices, a y z.
El algoritmo procede iterativamente, etiquetando los vértices del grafo con la distancia
del camino más corto entre a y ese vértice, tal que el camino use vértices en cierto conjunto
S. La etiqueta del nodo v se denota L(v). El conjunto S y las etiquetas se van actualizando
en cada iteración.
Inicialmente el conjunto S contiene sólo el vértice a, y la etiqueta L(v) para cada v es
el peso de la arista {a, v}. Se selecciona el vértice u (distinto de a) con mı́nima etiqueta,
y se agrega este vértice en S. Para este vértice, la longitud del camino mı́nimo de a hasta
él es el valor de su etiqueta.
Luego se actualizan las demás etiquetas. Recordemos que en cada iteración, la etiqueta
de cada vértice indica la longitud del camino mı́nimo que usa vértices que están en S. Para
la actualización, se compara el valor de la etiqueta actual L(v) de cada vértice v con el
valor de sumar la etiqueta de u más el peso de la arista de u a v, W (u, v). Si esta suma
es menor que L(v), indica que existe un camino de a a v, pasando por u, que tiene menor
longitud que L(v). Entonces, se cambia la etiqueta de v por L(u) + W (u, v) (véase el
esquema debajo). Ası́, la etiqueta de v cambia de valor si L(v) > L(u) + W (u, v), y no
cambia si L(v) 6 L(u) + W (u, v). De modo que la actualización puede realizarse con
L(v) = min{L(v), L(u) + W (u, v)} .
L(u)
W (u, v) v
a
u
L(v)
Estos pasos se repiten: se selecciona un vértice de mı́nima etiqueta entre los que no
están en S, se lo agrega a S y se actualizan las etiquetas, hasta que z esté en S. En este
punto, la etiqueta de z indica la longitud del camino mı́nimo entre a y z.
Los pasos se describen en pseudocódigo a continuación.
24
1. Teorı́a de grafos
Se comienza etiquetando todos los nodos con ∞, excepto v1 , que etiquetamos con 0, e
inicializamos S = ∅.
Dado que el vértice z no está en S, procedemos: seleccionamos el vértice de menor
etiqueta, que es v1 . Se agrega: S = {v1 }. Ahora, se actualizan las etiquetas de todos los
vértices que no están en S. Como L(v2 ) = ∞, W (v1 , v2 ) = 13, la etiqueta de v2 resulta:
L(v2 ) = min{L(v2 ), L(v1 ) + W (v1 , v2 )} = min{∞, 0 + 13} = 13. Del mismo modo, la
etiqueta de v3 toma el valor: L(v3 ) = min{L(v3 ), L(v1 ) + W (v1 , v3 )} = min{∞, 0 + 30} =
25
1.6. Grafos ponderados
30. Todos los otros vértices son tales que W (v1 , vj ) = ∞, por lo tanto, no van a cambiar
sus etiquetas. El nuevo etiquetado se muestra en la figura siguiente.
∞
v6
∞ 41
v5 32
13 10
v2
13 27
0 v7 ∞
45
v1 5 50
11
30
v4
v3 9 ∞
30
Como z no está en S, proseguimos. De los vértices que no están en S, quien tiene
menor etiqueta es v2 . Entonces, S = {v1 , v2 } y se actualizan las etiquetas de los vértices
que no están en S:
L(v3 ) = min{L(v3 ), L(v2 ) + W (v2 , v3 )} = min{30, 13 + ∞} = 30
L(v4 ) = min{L(v4 ), L(v2 ) + W (v2 , v4 )} = min{∞, 13 + 50} = 63
L(v5 ) = min{L(v5 ), L(v2 ) + W (v2 , v5 )} = min{∞, 13 + 10} = 23
L(v6 ) = min{L(v6 ), L(v2 ) + W (v2 , v6 )} = min{∞, 13 + ∞} = ∞
L(v7 ) = min{L(v7 ), L(v2 ) + W (v2 , v7 )} = min{∞, 13 + ∞} = ∞
26
1. Teorı́a de grafos
Para pensar
v1 v5
v4 v1
v4
v5 v6 v6
Ejemplo 1.17
El grafo K4 es plano, como puede verse en la representación plana siguiente:
27
1.7. Grafos planos
v3 v2
v4 v1
Ejemplo 1.18
El grafo cubo Q3 es plano, como se aprecia en la siguiente representación
Los grafos K5 y K3,3 no son planos. Más adelante se darán justificaciones de esta
afirmación.
La planaridad de grafos es importante en muchas aplicaciones prácticas. Por ejemplo,
si se quiere conectar un conjunto de usuarios con un conjunto de servicios, utilizando
cañerı́as subterráneas, estando todas las conexiones al mismo nivel, se debe pensar en un
grafo plano. La situación con tres usuarios y tres servicios se puede estudiar mediante el
grafo K3,3 . Como K3,3 no es plano, no se pueden construir las conexiones al mismo nivel.
En el campo de la electrónica, un circuito electrónico es un conjunto de componen-
tes interconectados con hilos conductores. Cuando se diseña un circuito electrónico debe
atenderse a que las conexiones no se crucen. Nuevamente aquı́ es importante el concepto
de grafo plano. Si el circuito que se quiere implementar no tiene una representación plana,
será necesaria la utilización de puentes (cables aislados superpuestos).
La representación plana de un grafo conexo de V vértices y A aristas determina un
conjunto de R regiones. Entre estas cantidades se da la Fórmula de Euler:
Proposición 1.10.
Toda representación plana de un grafo plano conexo con V vértices y A aristas divide el
plano en R = A − V + 2 regiones. ♦
Ejemplo 1.19
En el grafo Q3 , V = 8, A = 12. Toda representación plana divide el plano en R =
12 − 8 + 2 = 6 regiones. Esto puede comprobarse en el ejemplo 1.18.
Ejemplo 1.20
Un grafo ciclo con V vértices tiene A = V aristas. Entonces, una representación planar
divide el plano en R = V − V + 2 = 2 regiones.
28
1. Teorı́a de grafos
Ejemplo 1.21
Todo grafo estrella Sn tiene V = n + 1 vértices, A = n aristas. Entonces, una representa-
ción plana de este grafo divide el plano en R = n − (n + 1) + 2 = 1 región.
Como corolarios de la proposición anterior, se pueden enunciar:
Corolario 1.11.
En un grafo plano conexo sin bucles con V > 3 vértices y A aristas, se verifica la desigual-
dad A 6 3V − 6. ♦
Esto implica, que si en un grafo conexo sin bucles, se verifica A > 3V − 6, entonces el
grafo no es plano. Pero no implica que si se verifica A 6 3V − 6, entonces el grafo debe
ser plano.
Ejemplo 1.22
Apliquemos este corolario al grafo completo de 5 vértices. En este caso, V = 5 > 3, A = 10,
es conexo y no tiene bubles. Además, A = 10 > 3V − 6 = 15 − 6 = 9. Por lo tanto, no
puede ser plano.
Ejemplo 1.23
El grafo bipartito K3,3 tiene A = 9 aristas y V = 6 vértices. Y se verifica A 6 3V − 6, ya
que 9 6 3. · 6 − 6 = 12. Pero el grafo no es plano.
El siguiente corolario se aplica al caso más restrictivo de grafos en los que no existan
ciclos de longitud 3.
Corolario 1.12.
En un grafo plano conexo sin bucles con V > 3 vértices y A aristas, tal que no contenga
ciclos de longitud 3, se verifica la desigualdad A 6 2V − 4. ♦
Este corolario implica que si en un grafo conexo sin bucles y sin ciclos de longitud 3
se verifica A > 2V − 4, entonces el grafo no es plano.
Ejemplo 1.24
El grafo bipartito K3,3 no tiene ciclos de longitud 3. Además, es conexo y no tiene bucles.
La cantidad de aristas es A = 9 y la cantidad de vértices es V = 6. Se cumple la desigualdad
A = 9 > 2V − 4 = 12 − 4 = 8. Por el corolario anterior, este grafo no puede ser plano.
Finalmente, el teorema siguiente da condiciones necesarias y suficientes para determi-
nar la planaridad de un grafo.
Teorema 1.13.
Teorema de Kuratowski.
Un grafo es plano si y sólo si no contiene un subgrafo homeomorfo a K5 o a K3,3 . ♣
Dos grafos son homeomorfos si uno se puede obtener del otro mediante subdivisiones
elementales. Una subdivisión elemental consiste en reemplazar una arista {ui , uj } por dos
aristas y un vértice nuevo v, es decir, se agregan las aristas {ui , v} y {v, uj }. En la figura
1.13 se observan dos grafos homeomorfos.
29
1.8. Árboles
v1 v2
v1 w1 v2
v4 v3
v4 v3 w1
Ejemplo 1.25
El grafo de la figura 1.14a se conoce como grafo de Petersen. En la parte b de la figura se
observa un subgrafo del grafo de Petersen homeomorfo a K3,3 . Mediante cuatro subdivi-
siones elementales del grafo de la parte c de la figura se obtiene el subgrafo mostrado en
la parte b.
Entonces, el teorema de Kuratowski asegura que el grafo de Petersen no es plano.
1.8. Árboles
Un grafo se denomina árbol si es conexo y no contiene ciclos. Como un bucle es un
ciclo de longitud 1, un árbol no tiene bucles.
Hay otras caracterizaciones de árboles, y se dan en el siguiente
Teorema 1.14.
Las siguientes afirmaciones son equivalentes:
Un grafo G es un árbol.
G es un grafo conexo tal que si se elimina una arista, queda un grafo no conexo.
Ejemplo 1.26
Consideremos el grafo de la figura siguiente. Nótese que es conexo, y tiene 8 nodos y
7 aristas. Entonces es un árbol. Además, al eliminar cualquier arista (por ejemplo, la
arista {v4 , v7 }, el grafo resulta disconexo, ya que no existe camino que una v5 con v1 . Una
situación similar aparece si se elimina cualquiera de las otras aristas. Por otra parte, si
agregamos una arista nueva, por ejemplo, {v5 , v6 }, aparece un ciclo: v4 − v5 − v6 − v1 −
v8 − v7 − v4 . Del mismo modo, intentando agregar cualquier otra arista, se crea un ciclo.
30
1. Teorı́a de grafos
v3 v3
v8 v8
v4 v7 v2 v4 v7 v2
v9 v9
v10 v10
v6 v6
v5 v1 v5 v1
a b
v1 v2
v4 v5
v10 v6
c
31
1.8. Árboles
v3 v4
v3 v2
v1 v5
v4
v2
v8 v6
v5
v1
v8 v7
v6
v7 v9
Grafo del ejemplo 1.26 Grafo del ejemplo 1.27
Ejemplo 1.27
Consideremos el grafo de la derecha en la figura anterior. Ese grafo tiene 9 nodos y 8
aristas. Sin embargo no es árbol. Por un lado porque tiene un ciclo: v7 − v5 − v8 − v3 −
v7 . Pero además, es disconexo. Las componentes conexas tienen vértices {v4 , v2 , v1 , v6 } y
{v3 , v5 , v7 , v8 , v9 } respectivamente.
Para pensar
¿Cuáles son los vértices de articulación de un árbol? Si un árbol tiene V vértices,
cuál es la cantidad máxima de vértices de articulación? ¿Cuál es la cantidad
mı́nima de vértices de articulación?
v8
v1 v7
v3 v6 v4
v5 v2
En un árbol con raı́z, los nodos con gs(vi ) = 0 se denominan hojas. Todos los demás
nodos se denominan nodos de ramificación.
32
1. Teorı́a de grafos
Si existe una arista dirigida (vi , vj ), entonces se dice que vi es el padre de vj , y que
vj es el hijo de vi .
Un árbol con raı́z puede dividirse en niveles. En el nivel 0 se encuentra la raı́z. En el
nivel 1 los hijos de la raı́z, en el nivel 2 todos los hijos de los nodos del nivel 1. En general,
en el nivel k se ubican los hijos de los nodos ubicados en el nivel k − 1. La altura de un
árbol con raı́z es el mayor nivel con nodos.
Los árboles con raı́z suelen ser dibujados como el siguiente grafo:
v1 Nivel 0
v2 v3 Nivel 1
v4 v5 v6 Nivel 2
Nivel 3
v7 v8 v9 v10 v11
Con esta ubicación de los nodos, no es necesario indicar la dirección de las aristas, ya
que queda sobreentendido (se dirigen hacia abajo). En el árbol de la figura anterior, la
raı́z es v1 , las hojas son v5 , v7 , v8 , v9 , v10 y v11 .
Un árbol con raı́z se dice binario si todos los nodos de ramificación tienen a lo sumo
2 hijos. En forma general, un árbol se dice m-ario si todos los nodos de ramificación
tienen a lo sumo m hijos. Un árbol m-ario completo es aquel tal que cada nodo tiene
m o ningún hijo. Un árbol con raı́z de altura h se dice balanceado si todas sus hojas
están en los niveles h o h − 1.
El árbol de la figura anterior es 3-ario (no completo). La figura 1.15 muestra árboles
binarios.
Teorema 1.15.
Un árbol m-ario completo con R nodos de ramificación tiene V = m · R + 1 vértices y
H = (m − 1) · R + 1 hojas. ♣
Teorema 1.16.
Un árbol m-ario de altura L tiene a lo sumo mL hojas. ♣
Corolario 1.17.
Si un árbol m-ario de altura L tiene H hojas, entonces L > ⌈logm H⌉. Si el árbol es
balanceado completo, entonces L = ⌈logm H⌉. ♦
Ejemplo 1.28
Considere un árbol binario con V vértices. La altura máxima que puede tener es V − 1,
en el caso en que cada vértice de ramificación tenga un solo hijo, y el árbol tenga una
sola hoja (resulta un grafo lineal). Y la altura mı́nima que puede alcanzar se obtiene si es
completo balanceado. En tal caso, por el teorema 1.15, la cantidad de nodos de ramificación
33
1.8. Árboles
v1 v1
v2 v2 v1
v3
v3 v4 v3 v4 v2
v7
v7 v5 v6 v7 v4 v5 v6
Ejemplo 1.29
En un árbol ternario completo con 34 vértices de ramificación (R=34), la cantidad total
de vértices es V = 3· 34 + 1 = 103, y la cantidad de hojas es el total de vértices menos los
vértices de ramificación: H = V − R = 103 − 34 = 69.
Ejemplo 1.30
Suponga que en una red social con 205 miembros se establece un sistema de comunicación
donde un miembro determinado (emisor) envı́a un mensaje a otros cuatro miembros. Éstos
retransmiten el mensaje a otros cuatro miembros, y ası́ cada uno que recibe un mensaje lo
retransmite a cuatro miembros, hasta que los 205 miembros hayan recibido el mensaje. La
situacion se puede representar mediante un árbol cuaternario (o 4-ario) completo, donde
la raı́z es el emisor. El árbol debe tener 205 vértices, (205-1)/4=51 nodos de ramificación
y 205-51=154 hojas. Los nodos de ramificación representan los miembros que transmiten
el mensaje.
Podrı́amos preguntarnos: ¿cuántas veces se envı́a el mensaje? Para responder esta
pregunta no es necesario aplicar lo aprendido sobre árboles. Cada vez que se transmite el
mensaje, le llega a un nuevo miembro. Como todos los miembros, excepto el emisor, lo
reciben individualmente, se transmite 204 veces.
Por otro lado, ahora sı́ mirando la estructura de árbol, cada transmisión de mensaje se
asocia a una arista de éste. Y se sabe (visto en el inicio de esta sección) que la cantidad
de aristas de un árbol es uno menos que la cantidad de vértices. Como el árbol tiene 205
vértices, tiene 204 aristas, por lo tanto, llegamos a la misma conclusión (se transmite 204
veces) con otro argumento.
Una pregunta más interesante es: si el tiempo que pasa entre que un miembro recibe el
mensaje y lo retransmite es una hora, ¿cuál es el tiempo mı́nimo necesario para que todos
34
1. Teorı́a de grafos
reciban el mensaje? Se está preguntando cuál es la altura mı́nima del árbol cuaternario.
Esta altura mı́nima se alcanza cuando es un árbol balanceado. En tal caso, la altura es
h = ⌈log4 154⌉ = ⌈3,63⌉ = 4. Es decir, se requieren, como mı́nimo, 4 horas para que todos
reciban el mensaje.
Ejemplo 1.31
Considere que se tienen 65 computadoras que deben conectarse a la red eléctrica mediante
cables de tres salidas. Se desea saber cuántos cables de este tipo se necesitan. Un cable
irá conectado a la toma de energı́a. Para hacer prolongaciones, un cable se puede conectar
a una salida de otro cable. Ası́ hechas las conexiones, resultará una estructura de árbol con
raı́z. La raı́z será la toma de energı́a, las hojas serán las computadores, mientras que los
nodos de ramificación serán las conexiones (la toma de energı́a o las salidas de los cables).
Cada nodo de ramificación puede tener hasta tres ramas, por lo que es un árbol ternario.
Tenemos: H = 65 hojas, m = 3. Por el teorema 1.15, 65 = (3 − 1) · R + 1, por lo que se
tienen R = (65 − 1)/2 = 32 vértices de ramificación. O sea, se necesitan 32 cables.
Ejemplo 1.32
En una situación como el ejemplo anterior, suponga que se tienen 40 cables de tres salidas.
¿Cuál es la máxima cantidad de computadoras que se pueden conectar?
De acuerdo al teorema 1.15, la cantidad de computadores (hojas) es H = (3 − 1) · 40 =
80.
Ahora, si se tiene cantidad ilimitada de cables, pero se impone la restricción de que no
pueden colocarse más de cuatro cables en serie, ¿cuántas computadoras como máximo se
pueden conectar?
En este caso, el esquema de conexiones será un árbol ternario con raı́z, de altura menor
o igual a 4. Luego, por el teorema 1.16, para un árbol ternario de altura 4, la cantidad
máxima de hojas es 34 = 81. Esta es la cantidad máxima de computadoras que se pueden
conectar con el esquema descrito.
Ejemplo 1.33
En la figura 1.16a se muestra un grafo con 10 vértices y 16 aristas. Un árbol recubridor
debe incluir los 10 vértices y 9 aristas. En la parte b y c se muestran (en lı́neas gruesas)
dos árboles recubridores de este grafo.
35
1.9. Árboles recubridores
c b c b c b
h h h
d a g d a g d a g
i i i
f f f
e e e
j j j
a b c
Una forma de obtener un árbol recubridor es eliminar aristas del grafo a fin de cortar
los ciclos. Pero esta estrategia no es eficiente. Existen algoritmos más eficientes, conocidos
como búsqueda en profundidad y búsqueda en ancho.
Si ası́ se recorren todos los vértices del árbol, el camino hallado es un árbol recubridor.
En caso contrario, sean u y v los últimos vértices del camino, en ese orden. El algoritmo
entonces retrocede hasta u y construye a partir de este vértice un camino simple lo más
largo posible, visitando nodos no visitados previamente, pasando de uno a otro con aristas
del grafo.
Cuando se llegue al último vértice de este camino (es decir, no se pueden agregar
vértices no visitados), se retrocede al vértice anterior, y se busca un camino simple como
antes.
36
1. Teorı́a de grafos
Ejemplo 1.34
Consideremos el grafo de la figura 1.17a. Aplicaremos el algoritmo de búsqueda en profun-
didad para construir un árbol recubridor.
Paso 1:
V = {v1 }
A = ∅.
v = v1
Paso 2: El primer adyacente a v es v3 . Se actualiza:
V = {v1 , v3 }
A = {{v1 , v3 }}
v = v3
Volvemos al paso 2:
El primer vecino de v3 que no está en el árbol es v2 , entonces se agrega:
V = {v1 , v3 , v2 }
A = {{v1 , v3 }, {v3 , v2 }}
v = v2
Volvemos al paso 2: Buscamos un adyacente a v2 que no esté ya incluı́do en el árbol.
Como v2 no tiene vértices adyacentes que no estén en el árbol, vamos al paso 3.
Como no estamos en el vértice inicial, se retrocede al anterior: v = v3 . Pasamos a
paso 2.
v3 sı́ tiene un vecino que no está en el árbol (v4 ), se agrega:
37
1.9. Árboles recubridores
V = {v1 , v3 , v2 , v4 }
A = {{v1 , v3 }, {v3 , v2 }, {v3 , v4 }}
v = v4
El primer vecino de v4 no incluido aún en el árbol es v5 , se actualiza:
V = {v1 , v3 , v2 , v4 , v5 }
A = {{v1 , v3 }, {v3 , v2 }, {v3 , v4 }, {v4 , v5 }}
v = v5
El siguiente vértice a agregar es v6 :
V = {v1 , v3 , v2 , v4 , v5 , v6 }
A = {{v1 , v3 }, {v3 , v2 }, {v3 , v4 }, {v4 , v5 }, {v5 , v6 }}
v = v6
Luego se agrega v7 :
V = {v1 , v3 , v2 , v4 , v5 , v6 , v7 }
A = {{v1 , v3 }, {v3 , v2 }, {v3 , v4 }, {v4 , v5 }, {v5 , v6 }, {v6 , v7 }}
v = v7
Como v7 no tiene vecinos no incluidos en el árbol, vamos al paso 3.
No es el nodo inicial, entonces se retrocede al anterior: v = v6 .
v6 tiene un vértice adyacente no incluido aún en el árbol, v8 . Actualizamos:
V = {v1 , v3 , v2 , v4 , v5 , v6 , v7 , v8 }
A = {{v1 , v3 }, {v3 , v2 }, {v3 , v4 }, {v4 , v5 }, {v5 , v6 }, {v6 , v7 }, {v6 , v8 }}
v = v8
En los siguientes pasos se agregan las aristas {v8 , v9 } y {v9 , v10 }. En v10 se debe re-
troceder a v9 . De aquı́, se avanza a v11 . Hasta aquı́, el árbol es:
V = {v1 , v3 , v2 , v4 , v5 , v6 , v7 , v8 , v9 , v10 , v11 }
A = {{v1 , v3 }, {v3 , v2 }, {v3 , v4 }, {v4 , v5 }, {v5 , v6 }, {v6 , v7 }, {v6 , v8 }, {v8 , v9 },
{v9 , v10 }, {v9 , v11 }}
De v11 hay que retroceder al anterior, v9 , y luego al vértice anterior, v8 . Ası́ sucesi-
vamente. Cada vez que se retrocede, no se encuentran nuevos vértices para agregar. El
proceso de retroceso finaliza cuando se llega a v1 , el vértice inicial. Ası́, el algoritmo ter-
mina, obteniéndose el árbol recubridor que se muestra en la figura 1.17b.
Para pensar:
1. Se ha dicho que un árbol no conexo no admite un árbol recubridor. ¿Qué su-
cede si la entrada del algoritmo anterior es un grafo no conexo?
2. Luego de que se agrega el último vértice al árbol, sólo se realizan operaciones
de retroceso. Por lo tanto, el árbol está completamente construı́do cuando se
agrega este último vértice, y las operaciones de retroceso se realizan sólo para
conseguir el criterio de salida. ¿Cómo deberı́a modificarse el algoritmo para que
finalice al terminar de formar el árbol, sin las operaciones finales de retroceso?
38
1. Teorı́a de grafos
v7 v7
v1 v5 v6 v10 v1 v5 v6 v10
v3 v3
v9 v9
v4 v8 v4 v8
v2 v11 v2 v11
a b
Figura 1.17: Grafo del ejemplo 1.34 y el árbol recubridor obtenido con la búsqueda en
profundidad.
todos los vértices adyacentes a éste, junto con las aristas que los conectan. Los vértices
agregados se guardan en una lista con estructura FIFO (cola).
Luego, se toma el primer vértice de la cola, se lo elimina de la misma, y se agregan al
árbol todos los vértices adyacentes a él que no hayan sido incluı́dos aún en el árbol. Los
vértices agregados al árbol, se suman a la cola. Esta operación de tomar el primer vértice
y agregar a sus adyacentes al árbol se repite hasta que la lista quede vacı́a.
Los detalles del algoritmo se describen a continuación:
Ejemplo 1.35
Apliquemos el algoritmo de búsqueda a lo ancho para hallar un árbol recubridor en el grafo
de la figura 1.18a. Comenzando con el vértice v1 , agregamos sus vecinos al árbol, y los
nuevos vértices a la cola:
39
1.9. Árboles recubridores
V = {v1 , v2 , v3 , v4 }
A = {{v1 , v2 }, {v1 , v3 }, {v1 , v4 }}
Q = {v2 , v3 , v4 }
En el siguiente paso, se quita el primer elemento de Q, v2 , y se agregan al árbol los
vértices adyacentes a v2 que aún no estén incluidos, ademas de agregarlos en Q:
V = {v1 , v2 , v3 , v4 , v8 }
A = {{v1 , v2 }, {v1 , v3 }, {v1 , v4 }, {v2 , v8 }}
Q = {v3 , v4 , v8 }
A continuación, se toma el primer elemento de Q, v3 , se elimina de Q, y se consideran
los vecinos de v3 no incluidos. No hay ningún vértice con esas condiciones. Entonces el
único cambio es en Q:
Q = {v4 , v8 }
En el paso siguiente, se toma el primer elemento de Q, v4 , se agregan nuevos vértices,
adyacentes a v4 , y se actualiza el árbol y la cola:
V = {v1 , v2 , v3 , v4 , v8 , v5 , v7 }
A = {{v1 , v2 }, {v1 , v3 }, {v1 , v4 }, {v2 , v8 }, {v4 , v5 }, {v4 , v7 }}
Q = {v8 , v5 , v7 }
A continuación, se toma v8 , y se agregan al árbol el vértice adyacente v9 :
V = {v1 , v2 , v3 , v4 , v8 , v5 , v7 , v9 }
A = {{v1 , v2 }, {v1 , v3 }, {v1 , v4 }, {v2 , v8 }, {v4 , v5 }, {v4 , v7 }, {v8 , v9 }}
Q = {v5 , v7 , v9 }
Luego, se saca v5 de Q y se considera su adyacente v6 :
V = {v1 , v2 , v3 , v4 , v8 , v5 , v7 , v9 , v6 }
A = {{v1 , v2 }, {v1 , v3 }, {v1 , v4 }, {v2 , v8 }, {v4 , v5 }, {v4 , v7 }, {v8 , v9 }, {v5 , v6 }}
Q = {v7 , v9 , v6 }
En el siguiente paso se elimina v7 y se agrega el nuevo vértice v10 :
V = {v1 , v2 , v3 , v4 , v8 , v5 , v7 , v9 , v6 , v10 }
A = {{v1 , v2 }, {v1 , v3 }, {v1 , v4 }, {v2 , v8 }, {v4 , v5 }, {v4 , v7 }, {v8 , v9 }, {v5 , v6 }, {v7 , v10 }}
Q = {v9 , v6 , v10 }
El primer elemento de Q es v9 , que no tiene nuevos vértices para agregar al árbol. El
siguiente es v6 , que es adyacente a v11 :
V = {v1 , v2 , v3 , v4 , v8 , v5 , v7 , v9 , v6 , v10 , v11 }
A = {{v1 , v2 }, {v1 , v3 }, {v1 , v4 }, {v2 , v8 }, {v4 , v5 }, {v4 , v7 }, {v8 , v9 }, {v5 , v6 }, {v7 , v10 }, {v6 , v11 }}
Q = {v10 , v11 }
El primer elemento en la cola es v10 . No tiene nuevos vecinos, por lo tanto, se elimina
de Q. Finalmente, queda v11 , que tampoco tiene nuevos vecinos. Se elimina de Q. Ası́, Q
queda vacı́o y el algoritmo termina.
Para pensar:
40
1. Teorı́a de grafos
v1 v1
v5 v4 v3 v5 v4 v3
v2 v2
v7 v7
v6 v6
v8 v8
Figura 1.18: Grafo del ejemplo 1.35 y el árbol recubridor obtenido con la búsqueda en
profundidad.
En los dos algoritmos descritos, el árbol generado depende del orden asignado a los
vértices. Cambiando el orden de los mismos, el árbol generado será distinto.
41
1.11. Problemas
maximal.
Describiremos dos algoritmos muy conocidos, para hallar árboles recubridores minima-
les. Estos algoritmos son voraces. Se llama ası́ a los algoritmos que en cada paso realizan
una elección óptima. Los árboles producidos por los algoritmos que detallaremos a conti-
nuación son globalmente óptimos.
Algoritmo: Kruskal
Entrada: Un grafo con pesos en las aristas.
Salida: Un árbol recubridor de peso mı́nimo.
Inicio:
n := cantidad de vértices en el grafo
Inicializar el árbol vacı́o.
Para i de 1 a n − 1 hacer
Seleccionar una arista de peso mı́nimo entre las que no se hayan agregado
al árbol, tal que no forme un ciclo al agregarla.
Agregar la arista y sus extremos al árbol
Fin para
Algoritmo: Prim
Entrada: Un grafo con pesos en las aristas.
Salida: Un árbol recubridor de peso mı́nimo.
Inicio:
n := cantidad de vértices en el grafo
Inicializar el árbol con la arista de peso mı́nimo, y sus vértices extremos.
Para i de 1 a n − 2 hacer
Seleccionar una arista incidente en algún vértice del árbol, de peso mı́ni-
mo entre las que no están en el árbol, tal que no forme un ciclo al agregarla.
Agregar la arista seleccionada y sus extremos al árbol.
Fin para
Para pensar.
1.11. Problemas
Problema 1.1
Para cada uno de los grafos de la figura 1.20, indicar:
42
1. Teorı́a de grafos
v1 v1
17 10 2 17 10 2
v5 14 v4 20 v3 11 v2 v5 14 v4 v3 v2
13 6 6 1 6
v6 3 v7 10 v8 v6 3 v7 10 v8
16 20 13 20
2 17
v5 v4 v3 v2 v5 14 v4 20 v3 11 v2
13 6 6 1 13
v6 3 v7 10 v8 v6 v7 v8
16 13 16 20 13
43
1.11. Problemas
h
a b
d e k
i g
f
g h c
j
f i
a b
j
e d
c
G1 G2
b c
a b
d
g
a
h
j c d
f i
e
f e
G3 G4
a. El grado de cada vértice. Verificar la fórmula que relaciona los grados de vértices
con el número de aristas.
b. Un ciclo en el grafo, (si hay).
c. Un camino cerrado que no sea ciclo (si hay).
d. Un recorrido de a a d, que no sea camino simple (si hay).
e. Un ciclo de longitud par (si hay).
f. Todos los caminos simples de e a d.
g. La cantidad de componentes conexas.
h. La cantidad mı́nima de aristas que deben eliminarse para aumentar la cantidad de
componentes conexas.
i. La cantidad máxima de aristas que pueden eliminarse manteniendo la cantidad de
componentes conexas.
44
1. Teorı́a de grafos
a
h
b g c h
a
f g
c i
d
b j
d e
e
f
G5 G6
Problema 1.2
Para cada uno de los grafos o multigrafos dirigidos de la figura 1.21, indicar:
a. El grado de entrada, y el grado de salida de cada vértice. Verificar la fórmula que
relaciona los grados de entrada y salida de los vértices con el número de aristas.
b. Un ciclo dirigido en el grafo, (si hay).
c. Caminos dirigidos desde a los demás vértices.
Problema 1.3
Dada una colección de conjuntos, el grafo de intersección se define como el que tiene
un vértice por cada conjunto, y una arista entre dos vértices que representan conjuntos
de intersección no vacı́a. Representar el grafo de intersección de los conjuntos dados y
escribir la matriz de adyacencia de cada uno.
a. A1 = {0, 1, 2, 3, 4, 5}; A2 = {10, 11, 12}; A3 = {1, 5, 10, 15, 20}; A4 = {3, 12, 19};
A5 = {0, 10, 20, 30, 40}; A6 = N = {números naturales}
b. B1 = {n ∈ N : n es divisor de 4 mayor que 1}; B2 = {n ∈ N : n es divisor de 6
mayor que 1}; B3 = {n ∈ N : n es divisor de 11 mayor que 1};B4 = {n ∈ N :n es
divisor de 9 mayor que 1};
c. C1 = {n ∈ N : n es múltiplo de 4}; C2 = {n ∈ N : n es múltiplo de 6}; C3 = {n ∈ N :
n es múltiplo de 11}; C4 = {n ∈ N : n es múltiplo de 9};
Problema 1.4
Indicar si existe un grafo regular con las siguientes caracterı́sticas (dar un ejemplo o jus-
tificar la no existencia):
a. 7 vértices y 7 aristas
b. 7 vértices y 16 aristas
45
1.11. Problemas
a. Construir el 2-cubo.
b. Construir el 3-cubo.
c. ¿Es conexo el n-cubo? Justificar.
d. Calcular el número de vértices y de aristas del n-cubo. Justificar.
e. Probar que el grafo n-cubo es bipartito. Graficar el 3-cubo de forma de mostrar que
es bipartito.
f. ¿Para qué n el n-cubo es regular? Justificar.
g. ¿Puede existir un ciclo de longitud 3 en el n-cubo? Justificar. (Pensarlo desde el
punto de vista de las etiquetas, ¿qué representa un ciclo de longitud 3?)
h. ¿Puede existir un ciclo de longitud impar?
i. ¿Para qué valores de n el n-cubo es plano?
Problema 1.9
¿Cómo se puede determinar la cantidad de aristas de un grafo a partir de su matriz de
adyacencia? ¿Cómo se puede determinar el conjunto de vértices conectados con un vértice
determinado, a partir de la matriz de adyacencia?
Problema 1.10
Si A es la matriz de adyacencia de un grafo, Ak es una matriz cuyo elemento (i, j) es el
número de caminos de longitud k que hay en el grafo entre los vértices i y j. ¿Cómo se
puede usar este resultado para probar si un grafo es conexo?
Problema 1.11
Indicar para qué valores de n los siguientes grafos admiten un circuito euleriano: Kn , Cn ,
Wn , S n , Ln .
Problema 1.12
Considere el grafo bipartito completo K3,2 , que consiste de 5 vértices: a, b, c, u y v; y las
aristas unen a con u y v; b con u y v; y c con u y v.
46
1. Teorı́a de grafos
Problema 1.13
La distancia entre dos vértices u y v en un grafo es la longitud del camino mı́nimo entre u y
v. Se define el diámetro de un grafo conexo G como la mayor distancia entre dos vértices
del grafo; y se denota diam(G). Hallar diam(Kn,m ), diam(Kn ), diam(Cn ), diam(Wn ),
diam(Ln ).
Problema 1.14
Considere el grafo dado por la siguiente matriz de adyacencia:
0 0 1 0 1 0 1 0 1 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 1 0 1 0 0 1
0 0 0 0 0 1 0 0 0 1 0 0
1 0 0 0 0 0 1 1 0 0 0 0
0 0 0 1 0 1 0 0 0 0 0 0
1 0 1 0 1 0 0 1 0 0 0 0
0 0 0 0 1 0 1 0 1 0 1 0
1 0 1 0 0 0 0 1 0 0 0 0
0 0 0 1 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1 0 0 0 1
0 0 1 0 0 0 0 0 0 0 1 0
Problema 1.15
Dado el grafo ponderado que se muestra a continuación,
47
1.11. Problemas
v9
15 v8
11 16
17 v3
v2 8
v4 3 20 7
v1
v7 v10
5 10 22 10
4
4 v5
10 v6
Obtener:
48
Capı́tulo 2
Relaciones de recurrencia
49
2.1. Definiciones básicas y ejemplos
50
2. Relaciones de recurrencia
también es satisfecha por la sucesión -5/3, 1/3, 7/3, 13/3,... Sin embargo, si especificamos
el primer término, la solución es única.
En el ejemplo 2.5 se obtiene la recurrencia an = an−1 + an−2 para la sucesión 1, 1,
2, 3, 5, 8, ... . Esa recurrencia también describe la sucesión 1, 0, 1, 1, 2, 3, ..., y también
la sucesión 1, -1, 0, -1, -1, -2, -3, ... . En estas dos nuevas sucesiones, cada término (a
partir del tercero) es igual a la suma de los dos términos anteriores. Además, en este caso,
todas empiezan con 1. Por ser una recurrencia de orden dos, se necesita especificar los dos
primeros términos para que la solución sea única.
En la relación de recurrencia general, an = f (an−1 , an−2 , ..., an−k ), especificando los
primeros k términos, la solución es única. Es decir, existe una sola sucesión que verifica
Ejemplo 2.9
Considere la recurrencia an = (an−1 )2 + 1, para n > 1, con condición inicial a0 = −1. La
recurrencia indica que cada término es el cuadrado del anterior más 1. Entonces,
para n = 1, a1 = a20 + 1 = (−1)2 + 1 = 2
para n = 2, a2 = a21 + 1 = 22 + 1 = 5
para n = 3, a3 = a22 + 1 = 52 + 1 = 26
para n = 4, a4 = a23 + 1 = 262 + 1 = 677
...
Ejemplo 2.10
Considere la recurrencia de orden 2 que indica que cada término es el anterior menos el
anterior del anterior: an = an−1 − an−2 , para n > 2, con condiciones iniciales a0 = 0,
a1 = 1. Entonces,
para n = 2, a2 = a1 − a0 = 1 − 0 = 1
para n = 3, a3 = a2 − a1 = 1 − 1 = 0
para n = 4, a4 = a3 − a2 = 0 − 1 = −1
para n = 5, a5 = a4 − a3 = −1 − 0 = −1
para n = 6, a6 = a5 − a4 = −1 − (−1) = 0
para n = 7, a7 = a6 − a5 = 0 − (−1) = 1
...
Aparentemente, en la sucesión se alternan repeticiones dobles de 1 y -1, intercaladas con
repeticiones simples de 0.
51
2.1. Definiciones básicas y ejemplos
Ejemplo 2.11
Considere una sucesión donde cada término an es el producto de su posición n por el
término anterior an−1 . Es decir, satisface la recurrencia an = n · an−1 , n > 1 con condi-
ción inicial a0 = 1. Los primeros términos son:
para n = 1, a1 = 1 a0 = 1
para n = 2, a2 = 2 a1 = 2· 1 = 2
para n = 3, a3 = 3 a2 = 3· 2· 1 = 6
para n = 4, a4 = 4 a3 = 4· 3· 2· 1 = 24
para n = 5, a5 = 5 a4 = 5· 4· 3· 2· 1 = 120
Ejemplo 2.12
Dada la recurrencia an = 2an−1 , n > 1, con condición inicial a0 = −1/3, tenemos:
para n = 1, a1 = 2a0 = −2/3
para n = 2, a2 = 2a1 = −4/3
para n = 3, a3 = 2a2 = −8/3
para n = 4, a4 = 2a3 = −16/3
para n = 5, a5 = 2a4 = −32/3
Ejemplo 2.13
En el problema de la inversión en el banco, Cn = (1 + p) · Cn−1 . Si el depósito inicial es
de 1000, es decir, C0 = 1000,
en el primer mes C1 = (1 + p) · C0 = (1 + p) · 1000
en el segundo mes C2 = (1 + p) · C1 = (1 + p)2 · 1000
en el tercer mes C3 = (1 + p) · C2 = (1 + p)3 · 1000
en el cuarto mes C4 = (1 + p) · C3 = (1 + p)4 · 1000
Ası́, la solución puede expresarse: Cn = (1 + p)n · C0 .
donde ci son constantes, y g(n) es una función que puede depender de n, pero no de los
an . Si g(n) = 0, la recurrencia es homogénea.
Ejemplo 2.14
De las recurrencias vistas en los ejemplos anteriores, las que no son RLCC son: an =
n·an−1 porque el coeficiente que multiplica al término n−1 no es constante; an = an−1 . an−3
porque aparecen dos términos de la sucesión multiplicándose; an = (an−1 )2 + 1 porque apa-
rece un término de la sucesión al cuadrado. Todas las demás son lineales con coeficientes
constantes.
52
2. Relaciones de recurrencia
Debe notarse que la recurrencia también puede estar dada en la forma an+1 = c · an .
Ejemplo 2.17
Suponga que se tiene la recurrencia an+1 = (3/5)an para n > 0, con condición inicial
a0 = 1/5. La solución general puede plantearse: an = α(3/5)n . La condición inicial indica
que a0 = α(3/5)0 = 1/5, de donde α = 1/5. La solución es: an = (1/5)(3/5)n = 3n /5n+1 .
La recurrencia dada expresa el término n + 1 en función de un término anterior. No es
correcto despejar an , llegar a an = (5/3)an+1 y dar la solución de la forma an = α ·(5/3)n .
Ejemplo 2.18
Se realiza una experimentación sobre el tiempo que demora un determinado algoritmo en
resolver un problema, conociendo el tamaño de la entrada (por ejemplo, si la entrada es un
53
2.2. Resolución de recurrencias lineales homogéneas
vector de datos, el tamaño es la cantidad de datos, la dimensión del vector). Los resultados
de la experimentación indican que si el tamaño de la entrada es 4, el algoritmo tarda 3
segundos, y si el tamaño es 5, consume 4.5 segundos. Además, se sabe que el tiempo an
que consume con una entrada n satisface una relación de RLCC homogénea de primer
orden. Se desea predecir an para cualquier n.
La recurrencia que rige la sucesión de tiempos es an = c · an−1 . Para n = 5, a5 = c · a4 ,
y entonces, de acuerdo a la experimentación, 4,5 = c · 3. Ası́ surge que c = 1,5.
¿Cuánto tiempo consume el algoritmo si el tamaño de la entrada es 2? Se puede cal-
cular, retrocediendo desde los datos, ya que se conoce la recurrencia: an = 1,5 · an−1 .
Con n=4: a4 = 1,5 · a3 → a3 = 2
Con n=3: a3 = 1,5 · a2 → a2 = 4/3.
La solución general es an = A · cn = A · 1,5n .
A debe ser a0 , pero no se conoce. Sin embargo, tomando n = 4, resulta a4 = 3 = A·1,54 ,
y A = 3 · 1,5(−4) . Ası́, an = 3 · 1,5n−4 es el tiempo que tarda el algoritmo para una entrada
de tamaño n.
an = c1 an−1 + c2 an−2
r n = c1 r n−1 + c2 r n−2
Dividiendo ambos miembros por r n−2 queda:
r 2 = c1 r + c2
a0 = α1 r10 + α2 r20 = A
a1 = α1 r11 + α2 r21 = B
54
2. Relaciones de recurrencia
Resolviendo ese sistema de dos ecuaciones lineales con 2 incógnitas (α1 y α2 ), se obtienen
los valores de éstas. Veámoslo en ejemplos.
Ejemplo 2.19
Resolvamos la recurrencia an = 3an−1 − 2an−2 , n > 2, con condiciones iniciales a0 = 1;
a1 = 0. Antes de hallar la solución general, veamos los siguientes términos de la sucesión:
para n=2, a2 = 3a1 − 2a0 = 3 · 0 − 2 · 1 = −2
para n=3, a3 = 3a2 − 2a1 = 3 · (−2) − 2 · 0 = −6
para n=4, a4 = 3a3 − 2a2 = 3 · (−6) − 2 · (−2) = −14
para n=5, a5 = 3a4 − 2a3 = 3 · (−14) − 2 · (−6) = −30
...
Veamos ahora la solución general. La ecuación caracterı́stica es r 2 = 3r − 2. Las raı́ces
son r1 = 2 y r2 = 1. La solución general es
an = α1 2n + α2 1n
Para verificar, nótese que, por ejemplo, a5 = −25 + 2 = −32 + 2 = −30, que coincide con
el valor obtenido antes.
Ejemplo 2.20
Dada la recurrencia de segundo orden an = (4/3)an−2 , la ecuación caracterı́stica es r 2 =
√ √
4/3, que tiene soluciones r1 = 2/ 3 y r2 = −2/ 3. La solución puede plantearse
2 n −2 n
an = α1 √ + α2 √
3 3
Si las condiciones iniciales son a0 = −2 y a1 = 0, los coeficientes se hallan resolviendo
el sistema 0 0
a0 = α1 √23 + α2 √ −2
= α1 + α2 = −2
1 3 1
a1 = α1 √23 + α2 √ −2
3
= α1 √23 − α2 √23 = 0
cuya solución es α1 = −1 y α2 = −1.
Entonces la solución de la recurrencia con las condiciones iniciales dadas es
2 n −2 n
an = − √ − √
3 3
La sucesión comienza con los términos a0 = −2, a1 = 0, a2 = −8/3, a3 = 0, a4 =
−32/9, a5 = 0. Puede observarse que cuando n es impar, an = 0, y para n par de la forma
j
n = 2j, an = −2 43
55
2.2. Resolución de recurrencias lineales homogéneas
Ejemplo 2.21
Resolvamos la recurrencia 2an +an−1 = an−2 , n > 3 con condiciones iniciales a1 = 2, a2 =
1. Nótese que esta recurrencia describe una sucesión a partir de a1 (no de a0 ). Despejando
an , la recurrencia se puede escribir an = − 21 an−1 + 12 an−2 . La ecuación caracterı́stica es
r 2 = − 21 r + 12 , o equivalentemente 2r 2 + r − 1 = 0. Las raı́ces de la ecuación caracterı́stica
son r1 = −1 y r2 = 12 . La solución está dada entonces por
n
n 1
an = α1 (−1) + α2
2
Los coeficientes se determinan con las condiciones iniciales para n = 1 y n = 2,
a1 = α1 (−1)1 + α2 ( 12 )1 = −α1 + α2 /2 = 2
a2 = α1 (−1)2 + α2 ( 12 )2 = α1 + α2 /4 = 1
De aquı́ surgen los valores α1 = 0 y α2 = 4. Entonces, la solución de la recurrencia es
n
1 4
an = 4 = n
2 2
Ejemplo 2.22
Consideremos la recurrencia an+2 = 2an+1 + 4an , n > 0 con condiciones iniciales a0 = 21 ,
a1 = 21 . La igualdad de la recurrencia dice: cada término (an+2 ) es igual al doble del
término anterior (an+1 ) más cuatro veces el anterior al anterior (an ). La recurrencia es
equivalente a
an = 2an−1 + 4an−2 n > 2
2 = 2r + 4, o equivalentemente r 2 − 2r − 4 = 0. Las raı́ces
La ecuación caracterı́stica es r√ √
de esta ecuación son r1 = 1 + 5 y r2 = 1 − 5. La solución está dada entonces por
√ √
an = α1 (1 + 5)n + α2 (1 − 5)n
Ejemplo 2.23
Se sabe que los primeros términos de una sucesión son a1 = 1, a2 = 2, a3 = 1,2, a4 = 1,28.
También se sabe que la sucesión verifica una RLCC homogénea de orden 2. Se quiere hallar
una expresión explı́cita para todos los términos de la sucesión.
La recurrencia es de la forma an = c1 an−1 + c2 an−2 . Haciendo n = 3 y n = 4, se llega
a
a3 = c1 a2 + c2 a1 → 1,2 = 2c1 + c2
a4 = c1 a3 + c2 a2 → 1,28 = 1,2c1 + 2c2
56
2. Relaciones de recurrencia
Estas dos ecuaciones nos permiten obtener los valores de los coeficientes de la recurrencia,
c1 = 0,4, c2 = 0,4.
Para hallar la solución explı́cita de la recurrencia an = 0,4an−1 + 0,4an−2 se calculan√
ecuación caracterı́stica r 2 = 0,4r + 0,4. Las raı́ces son r1 = 0,2 + 0,2 11
las raı́ces de la √
y r1 = 0,2 − 0,2 11. √ √
Se llega a que la solución es an = α1 (0,2+0,2 11)n +α2 (0,2−0,2 11)n . Los coeficientes
α1 y α2 se pueden calcular reemplazando n por 1 y por 2 en la solución general:
√ √
a1 = 1 = α1 (0,2 + 0,2√11)1 + α2 (0,2 − 0,2√11)1
a2 = 2 = α1 (0,2 + 0,2 11)2 + α2 (0,2 − 0,2 11)2
Los valores de los coeficientes (aproximándolos con 4 cifras decimales) son α1 = 2,1508
y α2 = 1,8492.
Los términos de la sucesión,
√ √ expresados en función de n son an = 2,1508 · (0,2 +
n n
0,2 11) + 1,8492 · (0,2 − 0,2 11) , para n > 1.
Ejemplo 2.24
Se sabe que a1 = 1, a2 = −1, a3 = 1/3, a5 = 1/9 son términos de una sucesión que
satisface una recurrencia lineal de segundo orden homogénea de la forma an = c1 an−1 +
c2 an−2 .
Podrı́amos calcular c1 y c2 como en el ejemplo anterior. Pero en este caso no conocemos
a4 , ası́ que hay que hacer algunas cuentas más.
Reemplazando n por 3, por 4 y por 5, se llega a:
a3 = c1 a2 + c2 a1 → 1/3 = −c1 + c2
a4 = c1 a3 + c2 a2 → a4 = (1/3)c1 − c2
a5 = c1 a4 + c2 a3 → 1/9 = a4 c1 + (1/3)c2
1/3 = −c1 + c2
1/9 = (c1 /3 − c2 )c1 + c2 /3
Ejemplo 2.25
Resolvamos la recurrencia 4an + an−2 = 0, que es equivalente a an = − 41 an−2 ; con condi-
ciones iniciales a0 = −1, a1 = 1.
La ecuación caracterı́stica es r 2 = − 14 , que tiene raı́ces r1 = 2i y r2 = − 2i .
La solución de la recurrencia es
57
2.2. Resolución de recurrencias lineales homogéneas
n n
i i
an = α1 + α2 −
2 2
los coeficientes α1 y α2 se calculan con las condiciones iniciales,
i 0
0
+ α2 − 2i
a0 = α1 2 = α1 + α2 = −1
i 1 i 1
= i α21 − i α22 = 1
a1 = α1 2 + α2 − 2
de donde surge que α1 = − 1+2i
2 y α2 = − 1−2i
2 . Finalmente, la solución de la recurrencia
es
1 + 2i i n 1 − 2i
n
i
an = − − −
2 2 2 2
Si estamos interesados, por ejemplo, en el término a6 de la sucesión, se calcula de la
siguiente manera,
i 6
6
a6 = − 1+2i 1−2i
− 2i
2 2 − 2
= − 1+2i
2
−1 1−2i
64 − 2
−1
64
1
= 64
Ejemplo 2.26
La recurrencia del ejemplo 2.10 es an = an−1 − an−2 , que tiene ecuación caracterı́stica
√ √
3 3
r 2 − r + 1 = 0, cuyas raı́ces son complejas conjugadas: r1 = 12 + i 2 y r2 = 1
2 −i 2 . Por
lo tanto, la solución tiene la forma
√ !n √ !n
1 3 1 3
an = α1 +i + α2 −i
2 2 2 2
Imponiendo las condiciones iniciales dadas en el ejemplo 2.10, se llega al sistema de ecua-
ciones para α1 y α2
√ 0 √ 0
1 3 1 3
a0 = α1 2 +i 2 + α2 2 −i 2
= α1 + α2 = 0
√ 1 √ 1
a1 = α1 21 + i 23 + α2 12 − i 23
√ √
= α1 21 + i 23 + α2 21 − i 23 = 1
Verifiquemos que esta fórmula explı́cita nos da los valores de la sucesión correcta:
58
2. Relaciones de recurrencia
√ 0 √ 0
1 3 1 3
a0 = − √i3 2 +i 2 + √i
3 2 −i 2 =0
√ 1 √ 1
a1 = − √i3 1
2 + i 23 + √i
3
1
2 − i 23 = − 2√i 3 + 12 + 2√i 3 + 12 = 1
√ 2 √ 2 √ √
a2 = − √i3 1
2 + i 23 + √i
3
1
2 − i 23 = − √i3 −1
2 + i 2
3
− −1
2 − i 2
3
=1
√ 3 √ 3
a3 = − √i3 1
2 + i 23 + √i
3
1
2 − i 23 = − √i3 (−1 − (−1)) = 0
√ 4 √ 4 √ √
a4 = − √i3 1
2 + i 23 + √i
3
1
2 − i 23 = − √i3 −1
2 − i 2
3
− −1
2 + i 2
3
= −1
...
Los valores hallados coinciden con los de la sucesión del ejemplo 2.10.
an = (α1 + n · α2 ) · r1n
a0 = (α1 + 0 · α2 ) · r10 = A
a1 = (α1 + 1 · α2 ) · r11 = B
Resolviendo ese sistema de dos ecuaciones lineales con 2 incógnitas (α1 y α2 ), se obtienen
los valores de éstas.
Ejemplo 2.27
Dada la recurrencia an = 6an−1 − 9an−2 , n > 2, la ecuación caracterı́stica correspondiente
es r 2 − 6r + 9 = 0, que tiene una raı́z doble r1 = 3. La solución es an = (α1 + n · α2 ) · 3n .
Teniendo condiciones iniciales a0 = − 51 y a1 = 53 , los coeficientes se encuentran
resolviendo el sistema:
a0 = (α1 + 0 · α2 ) · 30 = α1 = − 15
a1 = (α1 + 1 · α2 ) · 31 = 3α1 + 3α2 = 35
a0 = (− 15 + 2
5 · 0) · 30 = − 15
a1 = (− 15 + 2
5 · 1) · 31 = − 35 + 6
5 = 5
3
a2 = (− 15 + 2
5 · 2) · 32 = − 95 + 36
5 = 5
27
a3 = (− 15 + 2
5 · 3) · 33 = − 27 162
5 + 5 = 5
135
= 27;
Ejemplo 2.28
Dada la recurrencia 2an+2 − 4an+1 = −2an , n > 0 la ecuación caracterı́stica correspon-
diente es 2r 2 − 4r + 2 = 0, o equivalentemente r 2 − 2r + 1 = 0 que tiene una raı́z doble
r1 = 1. La solución es
an = (α1 + n · α2 ) · 1n = α1 + n · α2
59
2.3. Resolución de recurrencias lineales no homogéneas
an = ahn + apn
Ya hemos visto antes cómo obtener soluciones de recurrencias lineales, ahora nos cen-
traremos en hallar una solución particular de la recurrencia lineal no homogénea.
Como solución particular se propone una sucesión apn que cumple la recurrencia. En
general, esta solución particular tiene la misma forma funcional que el término no ho-
mogéneo. Es decir, si el término no homogéneo es en , la solución particular tiene la misma
60
2. Relaciones de recurrencia
apn = 2apn−1 + 1
A = 2A + 1
Ejemplo 2.30
Sea la recurrencia lineal no homogénea an + 2an−1 = 5 · 3n , n > 1, con condición inicial
a0 = −1. El término no homogéneo es 5 · 3n . La recurrencia homogénea asociada es
an + 2an−1 = 0. La solución de ésta es ahn = α · (−2)n .
Dado que el término no homogéneo tiene forma de potencia de 3, se propone apn =
A · 3n como solución particular. El coeficiente A se calcula de tal modo que se cumpla la
recurrencia. Entonces, se reemplaza la solución particular en la recurrencia, notando que
apn−1 = A · 3n−1 . Entonces, debe ser:
apn + 2apn−1 = 5 · 3n
n
A · 3 + 2A · 3 n−1 = 5 · 3n
an = −4(−2)n + 3n+1
1
La última fila de la tabla vale en el caso que t no sea raı́z de la ecuación caracterı́stica. En otro caso,
si t es raı́z de la ecuación caracterı́stica con multiplicidad m, la solución particular propuesta debe ser un
polinomio de n de grado m − 1
61
2.4. Problemas modelados con recurrencias
Ejemplo 2.31
Considere la recurrencia lineal de segundo orden no homogénea
an = 4an−1 − an−1 + 2n
Esa igualdad debe cumplirse para todo n > 2, entonces debe ser 2A + 2 = 0 y −2A +
2B = 0 , de donde se llega a que A = −1, B = −1. Ası́, la solución particular es
apn = −n − 1.
La solución general es
√ √
an = ahn + apn = α1 (2 + 3)n + α2 (2 − 3)n − n − 1
62
2. Relaciones de recurrencia
Si se quiere determinar cuándo la red superará los mil usuarios, dado que el primer
año tiene 96, se debe determinar n tal que an > 1000, siendo A = 96. Entonces:
Por lo tanto, n debe ser mayor que 21.678. Esto indica que durante el año 21, el número
de usuarios superará los 1000.
Este es el resultado matemático. Sin embargo, se podrı́a cuestionar si la predicción de
crecimiento será válida luego de tanto tiempo, y si la recurrencia sigue valiendo para esos
n. Pero eso es otro tema.
El modelo anterior predice que a medida que pasa el tiempo, la cantidad de cuentas
crece y crece sin lı́mite (es decir, tiende a ∞ cuando n tiende a ∞), situación que no puede
ser real.
Otro modelo de crecimiento de poblaciones es el conocido como modelo logı́stico. Éste
supone que existe un máximo posible para el tamaño de la población (dado por limitaciones
de espacio o recursos). Ası́, en cada etapa, la población an será en cierta forma proporcional
a la población en la etapa anterior (an−1 ) pero también proporcional a lo que falte para
alcanzar el máximo (M − an−1 ), donde M es el máximo que puede alcanzar la población.
El modelo puede escribirse
an = b · an−1 · (M − an−1 )
o, equivalentemente, an = b · M · an−1 − b · a2n−1 . Esta es una recurrencia no lineal, ya que
un término de la serie está elevado al cuadrado.
an = an−1 + I · an−1 − P
= (1 + I) · an−1 − P
Se obtiene una relación de recurrencia lineal no homogénea de primer orden. La solución
es an = ahn + apn , donde ahn es la solución de la recurrencia homogénea asociada an =
(1 + I) · an−1 , y apn es una solución particular. En este caso, como el término no homogéneo
es constante, se propone una solución particular constante.
Entonces ahn = α · (1 + I)n y apn = A. Debe cumplirse la recurrencia para la solución
particular,
63
2.4. Problemas modelados con recurrencias
apn = (1 + I) · apn−1 − P
A = (1 + I) · A − P
P
de donde surge que A = I. Luego,
P
an = α · (1 + I)n +
I
Usando la condición inicial a0 = C (porque al inicio de la inversión lo adeudado es el
monto del préstamo), tenemos que a0 = C = α · (1 + I)0 + PI . Despejando, α = C − PI , y
la solución queda
P P
an = C − (1 + I)n +
I I
¿En cuántos meses quedará saldada la deuda? Nos preguntamos hasta qué n la deuda
será positiva, es decir, C − PI (1 + I)n + PI > 0.
P P
C− (1 + I)n + > 0
I I
P P
> − C (1 + I)n
I I
P 1
· P > (1 + I)n
I I −C
P
ln > n · ln (1 + I)
P −I ·C
P
ln / ln (1 + I) > n
P −I ·C
64
2. Relaciones de recurrencia
an = an−1 + n − 1, n > 2
Entonces, an = (n2 − n)/2. Luego, para ordenar, por ejemplo, una lista de 10 números se
realizan a10 = (102 − 10)/2 = 90/2 = 45 comparaciones.
Esta medida de complejidad del algoritmo nos dice que requiere una cantidad de com-
paraciones del orden del cuadrado del tamaño de la entrada. Esto se denota O(n2 ).
Nótese que lo analizado anteriormente es independiente del orden de los números en
la lista dada. Es decir, en una lista de 10 números, el algoritmo realiza 45 comparaciones
en cualquier caso, aún si los 10 números son dados en forma ordenada.
65
2.4. Problemas modelados con recurrencias
Etapa 0
Etapa 1
Etapa 2
Etapa 3
Curva de Koch
Consideremos otro proceso geométrico similar. Se realiza en cada paso la siguiente
transformación: a cada uno de los segmentos, se lo divide en tres segmentos de igual
longitud, y el segmento central se lo reemplaza por dos segmentos de igual longitud,
formando una carpa (figura 2.2).
2
El concepto de dimensión que se aplica a estos objetos geométricos es la dimensión de Hausdorff
66
2. Relaciones de recurrencia
Etapa 0
Etapa 1
Etapa 2
Etapa 3
Etapa 4
67
2.4. Problemas modelados con recurrencias
45+2*3, 1+0+9*4+1; mientras que no son válidas las expresiones *87+1, 12*+9, etc.
Sea an el número de expresiones aritméticas válidas con n sı́mbolos. Claramente a1 =
10, ya que las expresiones válidas de un sı́mbolo son los dı́gitos de 0 a 9. a2 = 100, ya que
las expresiones de dos sı́mbolos son 00, 01, ..., 10, 11, ...98, 99 3 .
Analicemos las cadenas de tres sı́mbolos. Si los dos últimos sı́mbolos en una cadena de
tres son dos dı́gitos, entonces tal expresión puede formarse a partir de una expresión de
dos sı́mbolos, agregándole un dı́gito de 0 a 9. El total de estas expresiones es 10 a2 . Si los
dos últimos dı́gitos de una expresión aritmética de tres sı́mbolos es un signo y un dı́gito,
tal expresión puede obtenerse de una expresión de un sı́mbolo, agregándole un signo (+,*)
y un dı́gito (0,1,...,9). Entonces, la candidad de estas expresiones es 20 a1 . Finalmente,
hemos obtenido que a3 = 10 a2 + 20 a1 = 10 · 100 + 20 · 10 = 1200.
El análisis recién expuesto se puede extender al caso general de expresiones de n sı́mbo-
los. Las expresiones de n sı́mbolos que terminan en dos dı́gitos se pueden contar notando
que se pueden obtener agregando un dı́gito a las expresiones de n − 1 sı́mbolos. Y las ex-
presiones de n sı́mbolos que terminan en un signo y un dı́gito se pueden obtener agregando
un signo y un dı́gito a las expresiones de n − 2 sı́mbolos. Luego, an = 10an−1 + 20an−2 , y
esto vale para n > 3.
Resolvamos la recurrencia.
√ La ecuación
√ caracterı́stica es r 2 − 10r − 20 = 0, cuyas
√ r1n= 5 + 3 5 √
raı́ces son y r2 = 5 − 3 5. Por lo tanto, la solución tiene la forma an =
α1 (5 + 3 5) + α2 (5 − 3 5)n . Los coeficientes se obtienen con las condiciones iniciales
para n = 1 y n = 2:
√ √
a1 = α1 (5 +√3 5) + α2 (5 − 3√ 5) = 10
a2 = α1 (5 + 3 5)2 + α2 (5 − 3 5)2 = 100
√ √
De aquı́ surge que α1 = 5/3 y α2 = − 5/3. Por lo tanto, el número de expresiones
aritméticas válidas de n sı́mbolos es
√ √
5 √ n 5 √
an = (5 + 3 5) − (5 − 3 5)n
3 3
(Sı́, aunque parezca difı́cil de creer, para cada n esa expresión es un número natural)
68
2. Relaciones de recurrencia
no es admitida. ¿Por qué? Porque la cadena de longitud 2 que la genera termina con 1,
al agregarle un 1 al final, aparecen dos 1 seguidos, lo que no es admitido. Entonces, las
cadenas de longitud 3 que no tienen dos 1 seguidos se generan agregando un 0 ó un 1 a
cadenas de longitud 2 que no terminen en 1, y agregando un 0 a las cadenas de longitud 2
(0)
que terminan en 1. ¿Cuántas son? Llamando a2 a las cadenas de longitud 2 que terminan
(1) (0) (1)
en 0, y a2 a las cadenas de longitud 2 que terminan en 1, resulta a3 = 2a2 + a2 . Dado
(0) (1) (0)
que a2 = a2 + a2 , entonces a3 = a2 + a2 . Las cadenas de longitud 2 que terminan en 0
pueden obtenerse a partir de una cadena de longitud 1, agregando un 0 al final. Entonces,
(0)
a2 = a1 . Luego, a3 = a1 + a2 .
Con un razonamiento similar para cadenas de longitud n, se obtiene que an = an−1 +
an−2 para n > 3. √
La ecuación caracterı́stica es r 2 − r − 1 = 0, que tiene por solución r1 = 1+2 5 y
√ √ n √ n
r2 = 1−2 5 . La solución de la recurrencia tiene la forma an = α1 1+2 5 + α2 1−2 5 .
√
5+3 5
Con las √
condiciones iniciales a1 = 2 y a2 = 3 se obtienen los valores α1 = 10 y
5−3 5
α2 = 10 , por lo tanto
√ ! √ !n √ ! √ !n
5+3 5 1+ 5 5−3 5 1− 5
an = +
10 2 10 2
69
2.5. Problemas
2.5. Problemas
Problema 2.1
Dar los primeros cinco términos de una sucesión que verifique la relación de recurrencia
an = nan−1 .
Problema 2.2
Dar los primeros seis términos de una sucesión de términos positivos que verifique la
relación de recurrencia an = an−1 /an−2 .
Problema 2.3
Dar los primeros cinco términos de una sucesión que verifique la relación de recurrencia
an = an−1 + n2 .
Problema 2.4
Dar los primeros cinco términos de una sucesión que verifique la relación de recurrencia
an = ran−1 .
Problema 2.5
Dar los primeros cinco términos de una sucesión que verifique la relación de recurrencia
an = (n + 1)an−2 .
Problema 2.6
Dar los primeros seis términos de una sucesión que verifique la relación de recurrencia
an = (n + 1)an−2 tal que a0 = 2.
Problema 2.7
Dar los primeros seis términos de una sucesión que verifique la relación de recurrencia
an = nan−1 tal que a3 = 18.
70
2. Relaciones de recurrencia
Problema 2.8
Resolver las relaciones de recurrencia, con las condiciones iniciales dadas.
a. an = 3(−1)n
b. an = 3(−1/2)n + 1
c. an = 4(−1)n + (1/2)n
d. 4an = −4 + (1/2)n
En caso afirmativo, justificar e indicar cuáles serı́an las condiciones iniciales que deben
imponerse para obtener dicha solución. En caso negativo, justificar.
Problema 2.10
Dada la relación de recurrencia an+2 − an = 0, indicar si las siguientes sucesiones pueden
ser solución:
a. an = 3(−1)n
b. an = 3(−1/2)n + 1
c. an = 7 + 2(−1)n
d. an = (1/3)2n
e. an = −8
En caso afirmativo, justificar e indicar cuáles serı́an las condiciones iniciales que deben
imponerse para obtener dicha solución. En caso negativo, justificar.
Problema 2.11
El número de usuarios en un sitio web es de 1000 en un momento dado. Se sabe que el
número de usuarios aumentará 25 % cada dı́a. Plantear una relación de recurrencia para
determinar el número de usuarios en el dı́a n.
71
2.5. Problemas
Problema 2.12
Una empresa de catering para eventos comienza sus actividades en enero de 2017. Du-
rante el primer mes sus ingresos fueron 11000 pesos. Un estudio de mercado predice que
los ingresos crecerán 23 % cada mes. Plantear una relación de recurrencia y las condicio-
nes iniciales necesarias para determinar los ingresos en el mes n. Dar la solución de la
recurrencia obtenida.
Problema 2.13
Una inversión de $100 iniciales recibe un interés de 10 % anual, capitalizado mensualmen-
te. Plantear una relación de recurrencia para calcular el dinero acumulado al cabo de n
meses.
Problema 2.14
Se sabe que la propagación de un virus informático en una red responde a la relación de
recurrencia an = (4/3)an−1 − (1/3)an−2 , donde an es la proporción de equipos infectados
por el virus en la semana n. A la semana siguiente de haber lanzado el virus, se detectan
1/3 de los equipos infectados. Hallar la solución para an . ¿Cuál es la proporción de equipos
infectados en la semana 3? ¿La proporción de infectados puede superar el 90 % en algún
momento?
Problema 2.15
Sea pn la probabilidad de que se detecte al menos un caso de sarampión en la semana
n-ésima de clases, luego de que se detecte el primer caso en la semana 1. Los registros
históricos indican que pn = pn−1 − 0,25pn−2 . Identificar las condiciones iniciales. ¿Cuál
es la probabilidad de contagio en la semana 5ta? Resolver la relación de recurrencia.
Problema 2.16
Cierto canal de comunicación transmite mensajes que consisten en una sucesión dos tipos
de señales, una que dura un microsegundo y otra que dura dos microsegundos. Determinar
una relación de recurrencia para contar la cantidad de mensajes distintos de n micro-
segundos de duración, que se pueden transmitir. ¿Cuáles son las condiciones iniciales?
¿Cuántos mensajes se pueden transmitir en exactamente 10 microsegundos?
Problema 2.17
Cierto canal de comunicación transmite mensajes que consisten en una sucesión dos tipos
de señales, una que dura dos microsegundo y otra que dura tres microsegundos. Determinar
una relación de recurrencia para contar la cantidad de mensajes distintos de n microse-
gundos de duración, que se pueden transmitir. ¿De qué orden es la recurrencia? ¿Cuáles
son las condiciones iniciales? ¿Cuántos mensajes se pueden transmitir en exactamente 10
microsegundos?
Problema 2.18
Hallar una relación de recurrencia para an , el número de formas de avanzar n metros
dando pasos de 1 o 2 metros. Resolverla.
Problema 2.19
* Hallar una relación de recurrencia para contar el número de sucesiones binarias de
longitud n que no tienen ceros consecutivos.
Problema 2.20
* Determinar una relación de recurrencia para el número de sucesiones de 0, 1 y 2 con
un número par de ceros.
72
2. Relaciones de recurrencia
Problema 2.21
El tamaño (en cantidad de individuos) de cierta población en cada año responde a una
relación de recurrencia homogénea lineal con coeficientes constantes de orden 1. Si se sabe
que en 2015 dicha población tiene 1500 individuos, y que en 2016 su tamaño es 1650,
hallar la cantidad de individuos en los años de 2010 a 2020.
Problema 2.22
* El tamaño (en cantidad de individuos) de cierta población en cada año responde a una
relación de recurrencia homogénea lineal con coeficientes constantes de orden 2. Se sabe
que la población tenı́a en 2014, 1500 individuos, en 2015, 1650 individuos, en 2016 1800
individuos y en 2017, 1965. Encontrar la recurrencia que la modela, y hallar la cantidad
de individuos en los años de 2010 a 2020.
Problema 2.23
Resolver las siguientes relaciones de recurrencias no homogéneas
a. an − 3an−1 = 5 · 7n , n > 1, a0 = 2.
b. an+1 = an + 2n , n > 0, a0 = 0.
c. an = an−1 + 3, n > 1, a0 = 1.
d. an+1 + 2an + an−1 = n, n > 1, a0 = 1, a1 = −1.
73
2.5. Problemas
74
Capı́tulo 3
Aritmética entera
3.2. Divisibilidad
Dados dos números enteros a y b, con a 6= 0, decimos que a es divisor de b si existe
un número entero c tal que b = a · c. En otras palabras, a es divisor de b si al dividir b
por a se obtiene un número entero. También se usan las expresiones a es factor de b,
a divide a b, y b es múltiplo de a.
Nótese que 0 no puede ser divisor de nadie, queda expresamente excluı́do de la defini-
ción.
Ejemplo 3.1
5 es divisor de 35, 21 es divisor de 84, -4 es divisor de 1024, 21 es divisor de -84.
1 es divisor de cualquier número entero. -1 es divisor de cualquier entero.
Todo número es divisor de 0.
75
3.2. Divisibilidad
Proposición 3.1.
76
3. Aritmética entera
Teorema 3.2.
Teorema fundamental de la aritmética
Todo entero mayor que 1 se puede escribir como producto de números primos en forma
única (salvo por el orden de los factores). ♣
77
3.2. Divisibilidad
Obsérvese que todos los divisores positivos de 400 son de la forma 2e1 · 5e2 , donde
0 6 e1 6 4 y 0 6 e2 6 2. Es decir, e1 puede tomar cinco valores y e2 puede tomar tres
valores. Luego, la cantidad de divisores es 5 · 3 = 15. Este resultado se generaliza en el
siguiente teorema:
Teorema 3.3.
Si la factorización de un número entero positivo n es n = pr11 ·pr12 ·...·prkk , todos sus divisores
positivos son de la forma pe11 · pe12 · ... · pekk , donde 0 6 ei 6 ri para todo i = 1, 2, ..., k. La
cantidad de divisores es (r1 + 1) · (r2 + 1) · ... · (rk + 1). ♣
Proposición 3.4.
Si dos números enteros positivos se factorizan a = pe11 · pe22 · ... · pekk y b = pf11 · pf22 · ... · pfkk ,
entonces mcd(a, b) = ps11 · ps22 · ... · pskk , donde si = mı́n(ei , fi ) para todo i = 1, 2, ..., k. ♦
Y además:
Proposición 3.5.
Dados dos enteros positivos a y b, a · b = mcd(a, b) · mcm(a, b) ♦
78
3. Aritmética entera
Proposición 3.6.
mcd(a, b) = mcd(b, a) = mcd(−a, b) = mcd(a, −b) = mcd(−a, −b)
mcd(a, b) = a si y sólo si a divide a b. ♦
Ejemplo 3.4
Dos números son coprimos o primos relativos si el máximo común divisor de ellos es 1.
79
3.4. División entera (Algoritmo de Euclides)
Existe una comunidad virtual, conocida como GIMPS (Great Internet Mersenne Prime
Search) que desde 1996 promueve la búsqueda de primos de Mersenne. En la práctica,
son personas que ponen sus computadoras a disposición del grupo para ejecutar tests de
primalidad.
El 41o primo de Mersenne, con p=24036583, fue hallado en 2006, y en 2011 se probó que
no habı́a otro menor sin descubrir.
El 47o primo de Mersenne, descubierto en 2008, es 243112609 −1 y tiene 12978189 dı́gitos.
El descubridor de este número se hizo acreedor de un premio de U$S 100000 ofrecido por la
Electronic Frontier Foundation, por ser el primer primo de más de 10 millones de dı́gitos.
Este número está disponible en Internet, en un archivo de texto de 16,73 Mb.
A principios de 2013 se descubrió el primo de Mersenne 48o , 257885161 − 1, que tiene
más de 17 millones de dı́gitos. La prueba de primalidad tomó 39 dı́as completos de cálculos
en una computadora.
En enero de 2018 se descubrió un nuevo primo de Mersenne, el más grande conocido
hasta el momento de escribir este libro. El número es 277232917 − 1 y tiene más de 23
millones de dı́gitos.
El esfuerzo computacional y humano puesto a disposición de esta búsqueda tiene va-
rias motivaciones. Además de obtener rarezas (estos números son números raros. ¡Sólo se
conocen 50 hasta ahora!) y perseguir los premios ofrecidos 1 y la fama, las personas que
trabajan en esto logran generar algoritmos para resolver más rapidamente operaciones
intermedias (por ejemplo, el producto de dos enteros grandes). Además, los programas
implementados en la búsqueda son usados para testear hardware: se ejecutan los progra-
mas (que usan intensivamente los procesadores) sobre primos conocidos, ası́ el resultado
es también conocido.
80
3. Aritmética entera
Por ejemplo:
Dividendo (a) Divisor (b) División entera Cociente (q) Resto (r)
123 4 123 = 30· 4 + 3 30 3
11 13 11 = 0· 13 + 11 0 11
204 6 204 = 34· 6 + 0 34 0
-11 13 -11 = (-1)· 13 + 2 -1 2
-315 1 -315 = (-315)· 1 + 0 -31 0
-100 7 -100 = (-15)· 7 + 5 -15 5
Nótese que el resto siempre debe ser mayor o igual a cero y menor que el divisor. Si
bien es cierta la igualdad −100 = −14 · 7 − 2, no es -2 el resto de dividir −100 por 7.
De la definición de divisor, se puede deducir que b es divisor de a si y sólo si el resto
de la división entera de a por b es 0.
Veamos cómo la división entera puede darnos otras herramientas para hallar el mcd
de dos números.
Suponga que el entero c divide a a y a b, con a > b > 0. Al hacer la división entera,
a = q · b + r, y r = a − q · b. Entonces, c también divide a r, ya que cualquier divisor
común de a y b divide a una suma de múltiplos de de a y b (por la última propiedad de
la proposición 3.1). Luego, el mcd(a, b) divide a r.
En particular, mcd(a, b) = mcd(b, r). Si r = 0, mcd(b, r) = b, por la segunda propiedad
de la proposición 3.6, ya que b divide a r en ese caso. Estas ideas proveen un método para
hallar el mcd de dos enteros. Consiste en realizar sucesivas divisiones enteras hasta tener
un resto 0, de la siguiente manera:
a = q1 · b + r1 0 6 r1 < b
b = q2 · r1 + r2 0 6 r2 < r1
r1 = q3 · r2 + r3 0 6 r3 < r2
...
rk−2 = qk · rk−1 + rk 0 6 rk < rk−1
rk−1 = qk+1 · rk
En cada división entera, se divide el anterior divisor por el anterior resto. Como los
sucesivos restos son números positivos cada vez más chicos, en algún momento se obtiene
un resto 0. Si rk es el último resto distinto de cero, rk divide a rk−1 , entonces divide a
rk−2 , ..., entonces divide a b, entonces divide a a. Luego, rk = mcd(a, b).
Ejemplo 3.5
Busquemos el mcd(1820, 231). Haciendo las sucesivas divisiones:
81
3.4. División entera (Algoritmo de Euclides)
116 = 2 · 40 + 36
40 = 1 · 36 + 4
36 = 9·4
Entonces, mcd(116, 40) = 4.
Ejemplo 3.7
Hallemos el mcd(5400, 96):
5400 = 56 · 96 + 24
96 = 4 · 24
Entonces, mcd(5400, 96) = 24.
Este método es fácilmente programable. Varios lenguajes de programación tienen una
función DIV para hallar el cociente de la división entera, y la función MOD para calcular
el resto de la división. Se da el siguiente pseudocódigo:
Algoritmo: mcd
Entrada: dos enteros positivos a y b, con a > b
Salida: el mcd de a y b
dividendo=a;
divisor=b;
Hacer
cociente= dividendo div divisor;
resto=dividendo mod divisor;
dividendo=divisor;
divisor=resto;
Hasta que resto=0
Salida: dividendo
Aún si no se tiene la función DIV, cuando la operación división (/) opera sobre variables
declaradas como enteros, da como resultado el cociente entero.
De todas formas, el cociente entero y el resto se pueden calcular usando las operaciones
matemáticas básicas, y la función parte entera (floor):
cociente=floor(dividendo/divisor)
resto=dividendo-cociente·divisor.
82
3. Aritmética entera
Ejemplo 3.8
El número cuya expresión en base 2 es (1001011)2 es (en base 10) a = 1 · 26 + 0 · 25 + 0 ·
24 + 1 · 23 + 0 · 22 + 1 · 21 + 1 · 20 = 64 + 8 + 2 + 1 = 75.
En base 16 (llamada hexadecimal) se usan los dı́gitos 0, 1, 2, ..., 9, A, B, ..., F. Los
dı́gitos de A a F representan 10, 11, ..., 15. El número cuya expresión en base 16 es
(91A4F )16 es 9 · 164 + 1 · 163 + 10 · 162 + 4 · 161 + 15 · 160 = 596784.
La descomposición de a en sumas de potencias de b puede expresarse:
a = (((an b + an−1 )b + ... + a2 )b + a1 )b + a0
De esta forma puede verse que
⋄ al dividir a por b, se obtiene cociente q0 = ((an b + an−1 )b + ... + a2 )b + a1 , y resto a0
⋄ al dividir q0 por b, se obtiene cociente q1 = (an b + an−1 )b + ... + a2 , y resto a1
⋄ ...
⋄ al dividir qn−2 por b, se obtiene cociente qn−1 = an , y resto an−1
4256 = 1064 · 4 + 0
1064 = 266 · 4 + 0
266 = 66 · 4 + 2
66 = 16 · 4 + 2
16 = 4·4+0
4 = 1·4+0
Entonces, 4256 = (1002200)4 .
El número 540013 en base 16 es:
540013 = 33750 · 16 + 13
33750 = 2109 · 16 + 6
2109 = 131 · 16 + 13
131 = 8 · 16 + 3
Luego, 540013 = (83D6D)16
El número 200 en base 2 se calcula con las divisiones:
200 = 100 · 2 + 0
100 = 50 · 2 + 0
50 = 25 · 2 + 0
25 = 12 · 2 + 1
12 = 6 · 2 + 0
6 = 3·2+0
3 = 1·2+1
Ası́, 200 = (11001000)2
83
3.5. Ecuaciones diofánticas
ax + by = c
donde a, b y c son números enteros dados, y x e y son las incógnitas, que deben tomar
valores enteros. A los números a y b se los llama coeficientes de la ecuación, y el número
c es el término independiente.
Si d es un divisor de a y de b, que también divide a c, la ecuación diofántica a x+b y = c
es equivalente a la ecuación diofántica
a b c
x+ y =
d d d
Que sean ecuaciones equivalentes implica que tienen las mismas soluciones.
Ejemplo 3.10
Dada la ecuación diofántica 2x − 5y = 1, algunas soluciones son x = 3, y = 1; x = −2,
y = −1; x = 13, y = 5. ¿Habrá más soluciones?
Ejemplo 3.11
Dada la ecuación diofántica 6x − 9y = −30, algunas soluciones son x = 10, y = 10;
x = 40, y = 30; x = −20, y = −10. Esta ecuación es equivalente a 2x − 3y = −10, por lo
que ambas ecuaciones tienen las mismas soluciones.
Ejemplo 3.12
La ecuación diofántica 6x − 9y = 8 no tiene solución. Veamos por qué: el término 6x es
múltiplo de 3 si x es entero, el término 9y es múltiplo de 3 si y toma valores enteros, por
lo tanto su resta 6x − 9y es múltiplo de 3 para cualesquiera valores enteros de x y de y.
Ası́, es imposible que sea igual a 8, ya que 8 no es múltiplo de 3.
Ejemplo 3.13
La ecuación diofántica 45x+ 75y = 40 no tiene solución. Por un lado, observemos que 45x
y 75y son múltiplos de 5 (cuando x e y toman valores enteros), y por lo tanto 45x + 75y
también es múltiplo de 5. Y el lado derecho, 40, también lo es. Pero esto no es suficiente
para asegurar la existencia de soluciones. En este caso, 45x y 75y también son múltiplos
de 3, por lo tanto su suma, 45x + 75y también es múltiplo de 3. Esta suma entonces nunca
podrá ser igual a 40, ya que éste no es múltiplo de 3.
Ejemplo 3.14
¿Tiene soluciones la ecuación diofántica 45x + 75y = 90? Sabemos que 45x + 75y es
múltiplo de 5 y también es múltiplo de 3 (entonces es múltiplo de 15). Y también 90 es
múltiplo de 15. ¿Esto me permite asegurar que la ecuación tiene solución? Veremos que
sı́. En este caso, una solución es x = −3, y = 3, otra solución es x = 2, y = 0. La ecuación
dada es equivalente a 3x + 5y = 6, que se obtiene al dividir ambos miembros de la ecuación
original por 15.
84
3. Aritmética entera
Ejemplo 3.15
La ecuación diofántica 42x + 105y = 30 no tiene solución. Por un lado, observemos que
42x y 105y son múltiplos de 3 (cuando x e y toman valores enteros), y el lado derecho,
30, también lo es. Pero además, 42x y 105y también son múltiplos de 7, por lo tanto su
suma, 42x + 105y también es múltiplo de 7. Esta suma entonces nunca podrá ser igual a
30, porque 30 no es múltiplo de 7.
Teorema 3.7.
La ecuación diofántica a x + b y = c tiene solución si y sólo si mcd(a, b) divide a c. ♣
Por eso, la ecuación del ejemplo 3.12 no tiene solución, ya que el mcd(6, −9) = 3 no
divide a 8. La ecuación del ejemplo 3.11 tiene solución, porque el mcd(6, −9) = 3 divide a
-30.
En el ejemplo 3.13, mcd(45, 75) = 15 y 15 no divide a 40. Pero sı́ divide a 90, por eso
la ecuación del ejemplo 3.14 sı́ tiene solución. Y en el ejemplo 3.15, mcd(42, 105) = 21, y
21 no divide a 30.
Ya sabemos cómo determinar si una ecuación diofántica tiene solución y o no.
Ahora la siguiente cuestión a resolver es: ¿Cómo obtener las soluciones?
Por un lado, recordemos que a x + b y = c es equivalente a ad x + db y = dc . Y ésta
ecuación tiene coeficientes más chicos que la ecuación original, y podrı́a resultar más fácil
hallar una solución de la segunda ecuación, quizás por inspección, a ojo. Por ejemplo, la
ecuación 44x − 121y = 1540 es equivalente a 4x − 11y = 140 y por inspección se puede
obtener una solución: x = −20, y = −20.
Pero como no siempre es posible esta resolución a ojo, necesitamos un procedimiento
más general.
Vamos a ir por pasos.
* Primero, y es el problema central, veremos cómo obtener una solución (x0 , y0 ) cuando
el lado derecho de la ecuación es exactamente el mcd de los coeficientes.
* Luego veremos cómo obtener una solución (x0 , y0 ) cuando el lado derecho es un
múltiplo del mcd.
* Finalmente, a partir de una solución particular, veremos cómo obtener todas las
soluciones.
Teorema 3.8.
Dados dos enteros a y b, existen enteros x e y tales que a x + b y = mcd(a, b) ♣
85
3.5. Ecuaciones diofánticas
plazan hacia atrás los sucesivos restos obtenidos, hasta quedar el mcd expresado como
combinación lineal de a y b.
Veamos en ejemplos:
Ejemplo 3.16
En el ejemplo 3.5 se calculó el mcd(1820, 231) con el algoritmo de Euclides, haciendo su-
cesivas divisiones. Éstas son:
Ası́, queda expresado el 7 como 1820 por un entero más 231 por un entero:
7 = 8 · 1820 − 63 · 231
Entonces, siendo a = 1820 y b = 231, los enteros x e y del teorema anterior son 8 y
-63, respectivamente.
En otros términos, una solución de la ecuación diofántica 1820x + 231y = 7 es x = 8,
y = −63.
Ejemplo 3.17
Hallemos el mcd(5400, 97) y escribámoslo como combinación lineal de 5400 y 97:
5400 = 55 · 97 + 65
97 = 1 · 65 + 32
65 = 2 · 32 + 1
32 = 32 · 1
Los restos obtenidos son 65, 32, 1 y 0. Entonces, mcd(5400, 97) = 1 Despejemos los restos:
65 = 5400 − 55 · 97 (a)
32 = 97 − 1 · 65 (b)
1 = 65 − 2 · 32 (c)
86
3. Aritmética entera
1 = 65 − 2 · (97 − 1 · 65) = 3 · 65 − 2 · 97
Se llegó a
3 · 5400 − 167 · 97 = 1
De aquı́ se obtiene que la ecuación diofántica 5400x + 97y = 1 tiene una solución dada
por x = 3, y = −167.
Además podemos deducir que la ecuación diofántica 5400x− 97y = 1 tiene por solución
x = 3, y = 167
Ejemplo 3.18
Hallemos el mcd(−3402, 114). Como mcd(−3402, 114) = mcd(3402, 114), hacemos las su-
cesivas divisiones enteras comenzando con 3402 dividido 114:
3402 = 29 · 114 + 96
114 = 1 · 96 + 18
96 = 5 · 18 + 6
18 = 3·6
Los restos son 96, 18, 6 y 0. Entonces, mcd(−3402, 114) = 6.
Despejando los restos se obtiene:
Se obtiene que
−6 · (−3402) − 179 · 114 = 6
Ası́, los coeficientes de la combinación lineal de −3402 y 114 para obtener el mcd 6 son
−6 y −179.
La ecuación diofántica 114x − 3402y = 6 tiene una solución x = −179, y = −6.
87
3.5. Ecuaciones diofánticas
p(a u0 + b v0 ) = p d = c
Que es equivalente a:
a (p u0 ) + b (p v0 ) = c
Esto indica que x0 = p u0 y y0 = p v0 es solución de la ecuación que queremos resolver,
a x + b y = c.
Veamos algunos ejemplos:
Ejemplo 3.19
Considere la ecuación 5400x + 97y = 2. En el ejemplo 3.17 se halló una solución para la
combinación lineal de 5400 y 97 igualada al mcd(5400, 97), que es 1. Esto es, se halló una
solución para la ecuación 5400u + 97v = 1, y es u0 = 3 y v0 = −167, ya que
5400 · 3 + 97 · (−167) = 1
5400 · (2 · 3) + 97 · (2 · (−167)) = 2 · 1
88
3. Aritmética entera
89
3.5. Ecuaciones diofánticas
b a ab ba
ax + by = a(x0 + n · ) + b(y0 − n · ) = a · x0 + n · + b · y0 − n · = a · x0 + b · y 0 = c
d d d d
Proposición 3.9.
Si (x0 , y0 ) es una solución de la ecuación diofántica a x + b y = c, y d = mcd(a, b) entonces
todas las soluciones son de la forma
x = x0 + db · n
y = y0 − ad · n
con n entero. ♦
Esta proposición por un lado, nos dice que si una ecuación diofántica tiene solución,
tiene infinitas soluciones. Además, nos indica cómo obtener todas las soluciones.
Ejemplo 3.21
Considere la ecuación 5400x + 96y = 24. En el problema 3.7, se obtuvo el mcd(5400, 96):
5400 = 56 · 96 + 24
96 = 4 · 24
Entonces, mcd(5400, 96) = 24. Como el mcd divide al término independiente de la
ecuación, ésta tiene solución.
De la primera división realizada, vemos que mcd(5400, 96) = 24 = 5400 − 59 · 96. De
aquı́ se obtiene que la ecuación diofántica 5400x + 96y = 24 admite la solución particular
x0 = 1 y y0 = −59.
90
3. Aritmética entera
La solución general es
x = x0 + 96
24 · n = 1 + 4n
5400
y = y0 − 24 · n = −59 − 225n
con n entero.
Por ejemplo, con n = 1, se tiene la solución x = 5, y = −284; con n = −1 se tiene
x = −3, y = 166, etc.
Ejemplo 3.22
Consideremos la ecuación 116x + 40y = 4.
Nótese que la ecuación dada es equivalente a 29x + 10y = 1. Para esta ecuación una
solución evidente es x0 = −1, y0 = 3. Luego, ésta también es solución de la ecuación
original.
Si uno no tuviera habilidad para la resolución por inspección o por tanteo, se puede
proceder de la siguiente manera:
Del problema 3.6 tenemos el mcd(116, 40):
116 = 2 · 40 + 36
40 = 1 · 36 + 4
36 = 9 · 4
Los restos obtenidos son 36, 4 y 0. Entonces, mcd(116, 40) = 4. Despejando los restos
se obtiene:
36 = 116 − 2 · 40 (a)
4 = 40 − 1 · 36 (b)
Entonces 4 = 40 − 1 · 36. Reemplazando el 36 de acuerdo a (a):
116 · (−1) + 40 · 3 = 4
Como queremos que el lado derecho sea 12, multiplicamos miembro a miembro por 3:
116 · (−1) · 3 + 40 · 3 · 3 = 4 · 3
116 · (−3) + 40 · 9 = 12
91
3.5. Ecuaciones diofánticas
Ejemplo 3.24
Resolvamos la ecuación diofántica 168x − 744y = 264. Los coeficientes son 168 y −744,
debemos calcular el mcd(168, −744) = mcd(168, 744).
744 = 4 · 168 + 72
168 = 2 · 72 + 24
72 = 3 · 24
El mcd es 24. Como el término independiente de la ecuación (264) es divisible por 24,
la ecuación tiene solución.
Por un lado, puede hallarse una solución considerando la ecuación equivalente obtenida
al dividir ambos miembros por el mcd de los coeficientes: 7x − 31y = 11. ¿Se puede
obtener una solución de esta ecuación por inspección? Esta vez no parece tan sencillo.
Pero si pensamos en la ecuación 7u − 31v = 1, se obtiene fácilmente la solución dada por
u0 = 9, v0 = 2. Como queremos resolver la ecuación con el lado derecho igual a 11, una
solución es x0 = 11u0 = 99, y0 = 11v0 = 22.
También puede hallarse una solución particular de la ecuación dada con las sucesivas
divisiones del Algoritmo de Euclides, haciendo reemplazos hacia atrás. En primer lugar,
despejemos los restos no nulos de las divisiones (que son 72 y 24):
72 = 744 − 4 · 168 (a)
24 = 168 − 2 · 72 (b)
Entonces: mcd(168, −744) = 24 = 168 − 2 · 72
Reemplazando el resto 72 en la igualdad anterior, usando (a):
Resulta:
168 · 9 − 744 · 2 = 24
Necesitamos que el lado derecho sea 264, entonces multiplicando término a término por
11, se llega a:
168 · 9 · 11 − 744 · 2 · 11 = 24 · 11
168 · 99 − 744 · 22 = 264
De aquı́ surge una solución de la ecuación: x0 = 99 y y0 = 22.
Y la solución general es
x = x0 + (−744)
24 · n = 99 − 31n
y = y0 − 168
24 n = 22 − 7n
·
Algunas soluciones son:
x = 68, y = 15 (con n = 1)
x = 130, y = 29 (con n = −1)
x = 37, y = 8 (con n = 2)
92
3. Aritmética entera
Ejemplo 3.25
Un dispositivo de memoria tiene capacidad de almacenar 2000 MB. Se quieren guardar
archivos de video y archivos de imágenes. Cada video tiene un tamaño de 235 MB, y cada
imagen tiene un tamaño de 10 Mb. ¿Cuántos archivos de cada tipo se puede almacenar,
de modo que no quede espacio libre en la memoria?
La situación puede modelarse con la ecuación 235x+10y = 2000, donde x es la cantidad
de archivos de video grabados en la memoria, e y es la cantidad de imágenes guardadas.
Resolvamos esa ecuación diofántica. El mcd de los coeficientes es mcd(235, 10) = 5.
Como 2000 es divisible por 5, la ecuación tiene solución.
Expresemos 5 como combinación lineal de 235 y 10. Por inspección, obtenemos que
235 · 1 + 10 · (−23) = 5. Multiplicando ambos miembros por 400, resulta:
x > 0 y > 0
400 + 2n > 0 −9200 − 47n > 0
n > −200 n 6 −9200/47 ≈ −195,7
Entonces, cada n entre −200 y −196, da una solución del problema:
3.6. Congruencias
La división entera fundamenta la aritmética modular, que se ocupa de establecer re-
laciones de equivalencias entre los enteros, basadas en los restos en la división por cierto
entero m.
93
3.6. Congruencias
Proposición 3.10.
a y b son congruentes módulo m si y sólo si a − b es divisible por m. ♦
Ejemplo 3.27
[0] = {... − 14, −7, 0, 7, 14, 21, ...} (enteros de resto 0 en la división por 7)
[1] = {... − 13, −6, 1, 8, 15, 22, ...} (enteros de resto 1 en la división por 7)
[2] = {... − 12, −5, 2, 9, 16, 23, ...} (enteros de resto 2 en la división por 7)
[3] = {... − 11, −4, 3, 10, 17, 24, ...} (enteros de resto 3 en la división por 7)
[4] = {... − 10, −3, 4, 11, 18, 25, ...} (enteros de resto 4 en la división por 7)
[5] = {... − 9, −2, 5, 12, 19, 26, ...} (enteros de resto 5 en la división por 7)
[6] = {... − 8, −1, 6, 13, 20, 27, ...} (enteros de resto 6 en la división por 7)
94
3. Aritmética entera
Proposición 3.11.
Sean a, b, c, d y m enteros, con m > 0 tales que a ≡ b (mod m) y c ≡ d (mod m).
Entonces:
Proposición 3.12.
La relación de congruencia es transitiva. Es decir:
Si a ≡ b (mod m) y b ≡ c (mod m), entonces a ≡ c (mod m)
Un número es congruente a 0 módulo m si y sólo si es múltiplo de m.
Si a ≡ b (mod m), entonces a − m ≡ b (mod m). ♦
Ejemplo 3.29
Hallemos la última cifra del número 741 . La última cifra es el resto de la división por 10.
Entonces, usando las propiedades antes enunciadas:
95
3.6. Congruencias
7 ≡ 7 (mod 10)
72 ≡ 72 ≡ 49 ≡ 9 (mod 10) ⇒ 72 ≡ 9 (mod 10)
(72 )2 ≡ 92 ≡ 81 ≡ 1 (mod 10) ⇒ 74 ≡ 1 (mod 10)
(74 )10 ≡ 110 ≡ 1 (mod 10) ⇒ 740 ≡ 1 (mod 10)
7 · (740 ) ≡ 7 · 1 ≡ 7 (10) ⇒ 741 ≡ 7 (mod 10)
Luego, la última cifra de 741 es 7.
Ejemplo 3.30
¿Cuál es el resto de dividir 9123 por 11? Empleando las propiedades de la proposición
anterior:
9 ≡ 9 (mod 11)
92 ≡ 81 ≡ 4 (mod 11)
9 · 92 ≡ 9 · 4 ≡ 36 ≡ 3 (mod 11) ⇒ 93 ≡ 3 (mod 11)
93 · 92 ≡ 3 · 4 ≡ 12 ≡ 1 (mod 11) ⇒ 95 ≡ 1 (mod 11)
(95 )24 ≡ 124 ≡ 1 (mod 11) ⇒ 9120 ≡ 1 (mod 11)
9120 · 93 ≡ 1 · 3 (mod 11) ⇒ 9123 ≡ 3 (mod 11)
Entonces, el resto de dividir 9123 por 11 es 3.
Un concepto central en congruencias es la noción de inverso modular:
El entero j es inverso de a módulo m si
a · j ≡ 1 (mod m)
a·j−m·y =1
Y esta ecuación diofántica tiene solución si y sólo si mcd(a, m) divide a 1. Pero como el
único divisor positivo de 1 es 1, se tiene el siguiente resultado:
96
3. Aritmética entera
Proposición 3.13.
a tiene inverso módulo m si y sólo si mcd(a, m) = 1. ♦
97
3.6. Congruencias
Ejemplo 3.34
Hallemos el inverso de 33 módulo 280. Dividiendo sucesivamente:
280 = 8 · 33 + 16
33 = 2 · 16 + 1
16 = 16 · 1
Reemplazando hacia atrás:
1 = 33 − 2 · 16 = 33 − 2 · (280 − 8 · 33) = 17 · 33 − 2 · 280.
Se obtiene
17 · 33 − 2 · 280 = 1
Ejemplo 3.35
Hallemos el inverso de 10 módulo 21. Dividiendo sucesivamente:
21 = 2 · 10 + 1
10 = 10 · 1
Reemplazando hacia atrás:
1 = 21 − 2 · 10.
Entonces, (−2) · 10 ≡ 1 (mod 21), y (−2) es el inverso de 10 módulo 21. Como −2
pertenece a la clase de restos [19] en Z21 , ésta es la clase de restos de los inversos de 10.
98
3. Aritmética entera
Esta función no es inyectiva (se pueden tener distintos datos, congruentes módulo m,
y por lo tanto, la función le asigna la misma dirección de memoria), entonces, puede dar
lugar a colisiones. La colisión se puede resolver asignando la dirección de la primera po-
sición de memoria libre. La probabilidad de colisiones cuando la cantidad de registros es
igual al módulo es muy alta. Una manera de disminuir la probabilidad de colisiones es
usar un módulo mayor. Por ejemplo, para el registro de los 50 alumnos, usar módulo 100.
Claro que esto requiere tener más posiciones de memoria reservadas, pero, como se dijo,
tiene la ventaja de disminuir la probabilidad de colisiones.
an 10n + an−1 10n−1 + ... + a1 101 + a0 100 ≡ (an + an−1 + ... + a1 + a0 ) (mod 3)
99
3.6. Congruencias
an 10n + ... + a3 103 + a2 102 +1 101 + a0 100 ≡ ((−1)n an + ... − a3 + a2 − a1 + a0 ) (mod 11)
De aquı́ surge el conocido criterio de divisibilidad por 11: Un entero positivo es múltiplo
de 11 si y sólo si la suma alternada de sus dı́gitos es múltiplo de 11. La suma alternada
comienza sumando el último dı́gito, restando el anteúltimo, etc.
100
3. Aritmética entera
M ≡ C d (mod n)
101
3.6. Congruencias
Luego,
C d = (M e )d = M e·d = M 1+(p−1)(q−1)y = M · M (p−1)(q−1)y
Por un resultado, conocido como Pequeño Teorema de Fermat, si M no es múltiplo de
p ni de q (lo que ocurre en la mayorı́a de los casos), sucede que M p−1 ≡ 1 (mod p) y
M q−1 ≡ 1 (mod q).
Por lo tanto,
C d = M · (M p−1 )(q−1)y ≡ M (mod p)
C d = M · (M q−1 )(p−1)y ≡ M (mod q)
Y por el Teorema Chino del Resto (subsección 3.7.2), M es la única solución, módulo
n, del sistema de congruencias
C d ≡ M (mod p)
C d ≡ M (mod q)
Esas dos congruencias son equivalentes a (por ser p y q coprimos):
C d ≡ M (mod n)
Ejemplo 3.36
Veamos un ejemplo (con enteros pequeños) de cómo funciona el algoritmo RSA.
Se quiere transmitir el mensaje GO ON, encriptándolo con el sistema RSA. El receptor
tiene clave pública n = 77 (que es producto de dos primos, p = 7 y q = 11).
Ası́, (p − 1)(q − 1) = 6 · 10 = 60. La clave pública e se toma como e = 13 (coprimo con
60).
Para enviar el mensaje, se debe traducir a enteros. Una forma de hacerlo es cam-
biando cada letra por su número de posición en el alfabeto. Entonces el mensaje es M =
07 16 16 14. Luego se encripta, haciendo las operaciones:
102
3. Aritmética entera
13 d ≡ 1 (mod 60)
Puede observarse de los ejemplos anteriores, que cuando una ecuación en congruencia
ax ≡ b (mod m) tiene solución, tiene infinitas soluciones, todas congruentes módulo m.
m
En general, todas las soluciones serán congruentes módulo mcd(a,m) .
Llamaremos solución principal a la/s solución/es xp tal que 0 6 xp < m.
La solución general es el conjunto de todas las soluciones de la ecuación en
congruencia. Veremos que la solución general es el conjunto de los enteros x = x0 + k · m
d,
k ∈ Z, siendo d = mcd(a, m) y x0 cualquier solución particular.
103
3.7. Ecuaciones en congruencias
Teorema 3.14.
Dada la ecuación en congruencia a · x ≡ b (mod m), se verifica:
a · (b · j) ≡ b (mod m)
Esto indica que x0 = b · j es una solución de la ecuación en congruencia.
La solución general es x = x0 +k ·m, con k entero. Todas las soluciones son congruentes
con x0 módulo m.
Para estos casos existe una única solución principal.
Ejemplo 3.38
Considere la ecuación 7x ≡ 1 (mod 9).
Como el mcd(7, 9) = 1 divide a 1, la ecuación tiene solución. Del algoritmo de Euclides
obtenemos:
9 = 1·7+2
7 = 3·2+1
Luego, mcd(9, 7) = 1 = 7 − 3 · 2 = 7 − 3 · (9 − 1 · 7) = −3 · 9 + 4 · 7. Esto indica que
4 es inverso de 7 módulo 9, es decir, 7 · 4 ≡ 1 (mod 9). Entonces la solución general es
x = 4 + 9k, con k entero.
La solución principal es 4. Se puede decir que la solución general es [4] en Z9
Ejemplo 3.39
Considere la ecuación 33x ≡ 38 (mod 280). Como mcd(33, 280) = 1 divide a 38, la
ecuación tiene solución.
Busquemos primero un inverso de 33, es decir, un j tal que 33j ≡ 1 (mod 280). En el
ejemplo 3.34 obtuvimos que 17 es un inverso de 33 módulo 280. Entonces j = 17.
104
3. Aritmética entera
Si multiplicamos 33 · 17 ≡ 1 (mod 280) por 38, resulta: 33 · (17 · 38) ≡ 1 · 38 (mod 280),
es decir, 33 · 646 ≡ 38 (mod 280).
Ası́, una solución particular es x0 = 646, y la solución general es x = 646 + 280k, con
k entero. Algunas soluciones son −194, 86, 366, etc.
La solución principal es la solución positiva menor a 280. Es decir,
06 x < 280
0 6 646 + 280k < 280
−646 6 280k < −366
El valor buscado se obtiene con k = −2, y nos da la solución principal xp = 86. Ası́,
la solución general puede expresarse como [86] en Z280 .
Ejemplo 3.40
Considere la ecuación en congruencia 3x ≡ 7 (mod 11). Calculemos el inverso de 3 módulo
11 (si bien en este ejemplo es fácil obtener el inverso por inspección, mirando la congruen-
cia 3j ≡ 1 (mod 11), usaremos el método algorı́tmico):
11 = 3 · 3 + 2
3 = 1·2+1
mcd(11, 37) = 1 = 3 − 1 · 2 = 3 − 1 · (11 − 3 · 3) = −1 · 11 + 4 · 3
El inverso de 3 módulo 11 es 4: 3·4 ≡ 1 (mod 11). Multiplicando por 7 ambos miembros,
se llega a 3·28 ≡ 7 (mod 11). Luego una solución particular es x0 = 28, y la solución general
es x = 28 + 11k, con k ∈ Z.
La solución principal es el valor de x tal que:
06 x < 11
0 6 28 + 11k < 11
−28 6 11k < −17
Entonces, k = −2 para la solución principal, xp = 28 − 2 · 11 = 6.
Todas las soluciones están en la clase [6] en Z11
Ejemplo 3.41
Considere la ecuación en congruencia 81x ≡ 3 (mod 256). Para hallar la solución, primero
calculemos el inverso de 81 módulo 256:
256 = 3 · 81 + 13
81 = 6 · 13 + 3
13 = 4 · 3 + 1
mcd(256, 81) = 1 = 13 − 4 · 3 = 13 − 4 · (81 − 6 · 13) = −4 · 81 + 25 · 13 = −4 · 81 + 25 ·
(256 − 3 · 81) = 25 · 256 − 79 · 81
Entonces, el inverso de 81 es (−79). Luego la solución es x = −79 · 3 + 256k =
−237 + 256k, con k ∈ Z.
La solución principal es el valor de x tal que:
06 x < 256
0 6 −237 + 256k < 256
237 6 256k < 493
Entonces, k = 1 para la solución principal, xp = −237 + 256 = 19.
105
3.7. Ecuaciones en congruencias
106
3. Aritmética entera
Entonces, se trata de averiguar x tal que 100x ≡ 8 (mod 24). Como mcd(100, 24) = 4
divide a 8, hay solución. Ésta se encuentra resolviendo la congruencia equivalente ( 1004 )x ≡
( 48 ) (mod 244 ), esto es: 25x ≡ 2 (mod 6).
Por inspección, se encuentra que x = 2 es solución. Luego, la solución general es
x = 2 + 6k. Esto es, los controles 2, 8, 14, etc., se realizan a las 8:00 hs.
En la situación descrita es fácil ver que los controles caen únicamente a las 0:00 hs.,
4:00 hs., 8:00 hs., 12:00 hs., 16:00 hs. y 20:00 hs. Si se quiere lograr que los controles
caigan en todas las horas, algo hay que cambiar. Lo que se puede cambiar es la periodicidad.
Supongamos que en lugar de controlar cada 100 horas, se hace cada a horas. Entonces el
control x cae a la hora b si a·x ≡ b (mod 24). Si se quiere elegir a tal que esta congruencia
tenga solución para todo b entre 0 y 23, se debe pedir que mcd(a, 24) divida a todos los
enteros entre 0 y 23. Esto es posible si y sólo si mcd(a, 24) = 1. Entonces, para que haya
controles a toda hora, éstos deben realizarse cada una cantidad de horas a que sea coprimo
con 24. Por ejemplo, a puede ser 1, 5, 7, 11, 13, 17, 19, 23, 25, 29, ... 97, 101, 103, etc.
Tomando a = 101, los controles que se realizan a la 1:00 hs son los x tal que 101x ≡
1 (mod 24), esto es, x = 5 + 24k, con k entero. Los controles que se realizan a las 2:00 hs.
son los x tal que 101x ≡ 2 (mod 24), esto es, x = 10 + 24k, etc.
Teorema 3.15.
Teorema chino del resto
Sean m1 , m2 , ..., mn enteros positivos, coprimos dos a dos. El sistema
x ≡ a1 (mod m1 )
x ≡ a2 (mod m2 )
...
x ≡ an (mod mn )
El teorema dice que siendo los n módulos coprimos dos a dos, el sistema tiene una
única solución 0 6 x0 < m y todas las soluciones son los elementos de la clase de restos
[x0 ] en Zm .
Daremos una forma explı́cita de hallar las soluciones. Sea Mi = m/mi para i =
1, 2, ..., n. Es decir, Mi es el producto de todos los módulos, excepto mi . Entonces Mi
y mi son coprimos, y la congruencia Mi · y ≡ 1 (mod mi ) tiene solución. Sea yi la solución.
Entonces x = a1 · M1 · y1 + a2 · M2 · y2 + ... + an · Mn · yn es solución del sistema de
congruencias del teorema.
Veamos que efectivamente es solución de todas las congruencias. Como Mk ≡ 0 (mod mj )
si j 6= k, multiplicando esta congruencia por ak y yk , resulta ak · Mk · yk ≡ 0 (mod mj ).
107
3.7. Ecuaciones en congruencias
42y1 ≡ 1 (mod 5)
105y2 ≡ 1 (mod 2)
30y3 ≡ 1 (mod 7)
70y4 ≡ 1 (mod 3)
La primera de estas congruencias tiene una solución y1 = 3, la segunda tiene solución
y2 = 1, una solución de la tercera es y3 = 4 y una solución de la cuarta es y4 = 1.
Luego, la solución del sistema de congruencias es x = a1 · M1 · y1 + a2 · M2 · y2 + a3 ·
M3 · y3 + a4 · M4 · y4 = 2 · 42 · 3 + 0 · 105 · 1 − 1 · 30 · 4 + 2 · 70 · 1, módulo 210. Es decir:
x = 252 − 120 + 140 = 272 ≡ 62 (mod 210).
Verifiquemos que ese valor de x es solución de las congruencias dadas. El resto de 62
dividido 5 es 2, y el resto de 2 dividido 5 es 2; entonces se verifica la primera congruencia.
El resto de 62 dividido 2 es 0, entonces se verifica la segunda congruencia. El resto de 62
dividido 7 es 6, y el resto de −1 dividido 7 es 6; entonces se verifica la tercera congruencia.
Y el resto de 62 dividido 3 es 2, y el resto de 2 dividido 3 es 2; entonces se verifica la
cuarta congruencia.
Ejemplo 3.46
Si los alumnos de un curso de dividen en grupos de 3 personas, todos los grupos quedan
completos (de 3 personas cada grupo). Si se dividen en grupos de 4 personas, uno de los
grupos resulta con 2 alumnos. Y si se dividen en grupos de a 5, un grupo queda de 4
personas. Se quiere saber cuántos alumnos hay en ese curso.
El enunciado indica que el número x de alumnos, cuando se lo divide por 3, queda un
resto 0; si se lo divide por 4, queda resto 2 y si se lo divide por 5 tiene resto 4. Es decir,
se satisfacen las congruencias:
x ≡ 0 (mod 3)
x ≡ 2 (mod 4)
x ≡ 4 (mod 5)
108
3. Aritmética entera
Esto puede resolverse, porque los tres módulos son coprimos dos a dos. Se calcula M =
3 · 4 · 5 = 60, M1 = 60/3 = 20, M2 = 60/4 = 15, M3 = 60/5 = 12.
Se consideran las congruencias:
20y1 ≡ 1 (mod 3)
15y2 ≡ 1 (mod 4)
12y3 ≡ 1 (mod 5)
0 = [0 (mod 3), 0 (mod 4)] 1 = [1 (mod 3), 1 (mod 4)] 2 = [2 (mod 3), 2 (mod 4)]
3 = [0 (mod 3), 3 (mod 4)] 4 = [1 (mod 3), 0 (mod 4)] 5 = [2 (mod 3), 1 (mod 4)]
6 = [0 (mod 3), 2 (mod 4)] 7 = [1 (mod 3), 3 (mod 4)] 8 = [2 (mod 3), 0 (mod 4)]
9 = [0 (mod 3), 1 (mod 4)] 10 = [1 (mod 3), 2 (mod 4)] 11 = [2 (mod 3), 3 (mod 4)]
109
3.8. Problemas
Una de las principales aplicaciones del teorema chino del resto, es en la implementación
de operaciones aritméticas con números grandes realizadas por un procesador. La idea es
tomar un módulo m mayor que los números que se quieren operar, y factorizar m en
factores coprimos m1 , m2 , ..., mn . Entonces, como cada número x se representa en forma
única por medio de sus restos, se realizan las operaciones en paralelo sobre dichos restos.
Esto, además de la ventaja de poder trabajar en paralelo con los n restos, permite realizar
operaciones con números más grandes que lo que se puede representar.
Por ejemplo, si se tiene un hardware que sólo puede realizar aritmética entera sin signo
con 4 bits, los únicos enteros que puede representar son 0, 1, ..., 15. Para hacer cálculos
con números más grandes, se pueden considerar los enteros coprimos dos a dos m1 = 13,
m2 = 14 y m3 = 15, y trabajando con la representación de enteros mediante sus restos
en la división por m1 , m2 y m3 , se puede realizar cálculos aritméticos con enteros hasta
m = 13 · 14 · 15 = 2730.
Si se quiere sumar 44 y 60, se los representa con sus restos:
44+60 = [5+8 (mod 13), 2+4 (mod 14), 14+0 (mod 15)] = [0 (mod 13), 6 (mod 14), 14 (mod 15)]
El número que tiene esta representación en restos módulo 13, módulo 14 y módulo 15
es el x que satisface:
x ≡ 0 (mod 13)
x ≡ 6 (mod 14)
x ≡ 14 (mod 15)
El valor de x que satisface esas congruencias (módulo 2730) es 104 = 44 + 60.
Si se quiere multiplicar 44 por 60, se multiplican componente a componente la repre-
sentación en restos, y se obtiene
44·60 = [5·8 (mod 13), 2·4 (mod 14), 14·0 (mod 15)] = [1 (mod 13), 8 (mod 14), 0 (mod 15)]
3.8. Problemas
Problema 3.1
Hallar la descomposición en factores primos de los números: 491891; 92400; 2541; 94017;
7!; 153. Indicar cuántos divisores tienen cada uno de esos números.
Problema 3.2
Aplicar el algoritmo de Euclides para hallar el máximo común divisor de 250 y 110 y
escribirlo como combinación lineal de 250 y 110.
110
3. Aritmética entera
Problema 3.3
Aplicar el algoritmo de Euclides para hallar el máximo común divisor de 231 y 1820 y
escribirlo como combinación lineal de 231 y 1820.
Problema 3.4
Hallar el máximo común divisor de 491891 y 92400; de 7! y 2541; de 94017 y 153.
Problema 3.5
Hallar el máximo común divisor de 2475 y 6615.
Problema 3.6
Hallar el máximo común divisor de 5544 y 1575.
Problema 3.7
Determinar si las siguientes ecuaciones diofánticas tienen solución. En caso de tenerla,
dar la solución general
a. 2x + 12y = 1
b. 25x − 100y = 25
c. 540x + 100y = 1201
d. 33x + 17y = 1
e. 87x − 14y = 3
f. 2x + 12y = 2
g. −107x − 106y = 1
h. −107x − 106y = 13
i. 126x + 819y = 21
j. 33x + 17y = 3
Problema 3.8
Decir para qué valores de c entero con −10 6 c 6 10, la ecuación diofántica 25x + 35y = c
tiene solución.
Problema 3.9
Decir para qué valores de c entero con −10 6 c 6 10, la ecuación diofántica = c tiene
solución.
Problema 3.10
Decir si las siguientes ecuaciones diofánticas tienen solución. En caso afirmativo, dar la
solución general, y en caso negativo, justificar.
a. 5544x + 1575y = 1
b. 5544x − 1575y = 0
c. 1575x + 5544y = 63
d. 1575x − 5544y = 189
111
3.8. Problemas
Problema 3.11
Decir si las siguientes ecuaciones diofánticas tienen solución. En caso afirmativo, dar la
solución general, y en caso negativo, justificar.
a. 2475x + 6615y = 5
b. 2475x − 6615y = 0
c. 6615x + 2475y = 45
d. 6615x − 2475y = 55
Problema 3.12
Hallar todos los puntos de la recta de ecuación 2475x+6615y = 45 que tengan coordenadas
enteras y que estén en el primer cuadrante.
Problema 3.13
Hallar todos los puntos de la recta de ecuación 2475x−6615y = 90 que tengan coordenadas
enteras y que estén en el primer cuadrante.
Problema 3.14
Hallar todos los puntos de la recta de ecuación 2475x − 6615y = 0 que tengan coordenadas
enteras y que estén en el primer cuadrante.
Problema 3.15
Un operador de bolsa quiere comprar y/o vender acciones de dos compañı́as, A y B. Las
acciones de cada una de esas empresas cotizan a $55 y $178 respectivamente. El operador
quiere realizar transacciones a fin de contar finalmente con una diferencia de $1000 a favor.
¿Es posible? ¿Es posible lograrlo vendiendo solamente? ¿Es posible lograrlo vendiendo
acciones de la empresa A y comprando acciones de la empresa B?
Problema 3.16
Encontrar el inverso multiplicativo de los elementos invertibles de Z7 , Z6 , Z11 y Z15 .
Problema 3.17
Hallar los divisores propios de cero en Z11 , Z15 , y en Z24 .
Problema 3.18
¿Para qué m es cierto que en Zm no existen divisores propios de cero?
Problema 3.19
Hallar los inversos multiplicativos (si existen) de 13, 54 y 102 módulo 200.
Problema 3.20
Hallar los inversos multiplicativos (si existen) de 2, 10, 59 y 102 módulo 209.
Problema 3.21
Determinar el último dı́gito de 1321 .
Problema 3.22
Dar la solución general de las siguientes ecuaciones en congruencias:
a. x ≡ 5 (mod 7)
112
3. Aritmética entera
b. 2x ≡ 5 (mod 7)
c. 3x ≡ 5 (mod 7)
d. 4x ≡ 5 (mod 7)
e. 5x ≡ 5 (mod 7)
f. 6x ≡ 5 (mod 7)
Problema 3.23
Decir si las siguientes ecuaciones en congruencia tienen solución, y en caso de tenerla,
hallar todas las soluciones.
a. 2x + 3 ≡ 0 (mod 10)
b. −x + 10 ≡ 1 (mod 6)
c. 12x ≡ 5 (mod 11)
d. 33x ≡ 1 (mod 17)
e. 3 ≡ 87x (mod 14)
f. 15x ≡ 30 (mod 55)
g. 15x ≡ −5 (mod 55)
h. 9x ≡ 2 (mod 36)
i. 13x ≡ 0 (mod 2574)
j. 107x ≡ 13 (mod 106)
k. 106x ≡ 13 (mod 106)
l. x − 405 ≡ 0 (mod 110)
Problema 3.24
Decir si las siguientes ecuaciones en congruencia tienen solución, y en caso de tenerla,
hallar todas las soluciones.
a. x = −14 + 20n
b. {..., −98, −84, −70, −56, ...}
c. x = 7 − 20n
d. x = 2 − 20n
113
3.8. Problemas
114
3. Aritmética entera
Problema 3.35
Hallar los enteros que tienen resto 1 al ser divididos por 12 y también tienen resto 1 al
ser divididos por 7.
Problema 3.36
Hallar los enteros múltiplos de 14 que tienen resto 3 al ser divididos por 5.
Problema 3.37
Hallar los enteros x tales que x + 1 es múltiplo de 4 y x − 2 es múltiplo de 5.
115
3.8. Problemas
116
Capı́tulo 4
Álgebra de Boole
117
4.1. Estructura del Álgebra de Boole
falso, vacı́o-universal, 1-n), y existen operaciones o combinaciones entre los elementos del
conjunto. Especı́ficamente, existen dos operaciones binarias, y una unaria, todas operacio-
nes cerradas.
Lo que se está identificando es una estructura matemática subyacente en esas situa-
ciones, conocida como álgebra de Boole .
Un álgebra de Boole es un conjunto B, con al menos dos elementos, denotados
0 y 1, en el que se han definido dos operaciones binarias: + : B × B → B (suma), y
· : B × B → B (producto), y una operación unaria biyectiva: ¯ : B → B (complemento),
que verifican las siguientes leyes, para todo x, y, z de B:
Asociativa (x + y) + z = x + (y + z)
(x· y)· z = x· (y· z)
Distributiva x· (y + z) = x· y + x· z
x + y· z = (x + y)· (x + z)
Inverso x + x̄ = 1
x· x̄ = 0
118
4. Álgebra de Boole
T
ya que S U = S.
Es necesario comentar en este punto un detalle teórico. Por la propiedad de dualidad
que se describirá más adelante, es indistinto llamar a una u otra operación suma o producto,
siempre que quede claro cuál es el neutro de cada una. Por ejemplo, en el caso de los
subconjuntos, se podrı́a llamar suma a la intersección, con neutro dado por el universal,
y llamar producto a la unión, siendo el neutro de este producto el vacı́o. Ası́ definidas las
operaciones, la estructura matemática sigue siendo un álgebra de Boole.
De las leyes dadas pueden deducirse otras propiedades, que se enuncian a continuación:
Idempotencia x+x = x
x· x = x
Acotación x+1 = 1
x· 0 = 0
Absorción x + x· y = x
x· (x + y) = x
Puede observarse que las demostraciones recién mostradas son muy similares, y usan
las mismas propiedades básicas, en un caso para el producto y en el otro para la suma.
Puede notarse también que todas las propiedades enunciadas (salvo la propiedad de doble
complemento) aparecen de a pares, una para el producto, y otra para la suma. Y en
cada par de propiedades si aparece un 0 en una, en la otra aparece un 1. Tales pares de
propiedades se llaman propiedades duales.
Formalmente, si P es una propiedad del álgebra de Boole, el dual de P es la propiedad
que se obtiene al reemplazar en P las ocurrencias de + por ·, las ocurrencias de · por +,
119
4.1. Estructura del Álgebra de Boole
Teorema 4.1.
Teorema de dualidad
Si P es una proposición acerca del álgebra de Boole que se puede demostrar con las
propiedades básicas u otras derivadas de éstas, entonces la proposición dual de P también
es una proposición válida en el álgebra de Boole. ♣
Luego, como x+y y x̄· ȳ satisfacen las propiedades de inversos, debe ser x + y = x̄· ȳ. De
igual modo, como x· y y x̄ + ȳ satisfacen las propiedades de inversos, debe ser x· y = x̄ + ȳ.
Ası́ como en producto de reales suele omitirse el signo ·, en este capı́tulo a partir de
ahora se escribirá xy para denotar x· y.
Las operaciones booleanas tienen un orden de precedencia. El complemento precede al
producto, y el producto precede a suma. Para alterar este orden, se requieren paréntesis.
Por ejemplo, la expresión xy+z indica que se suma el producto de x por y a z. Mientras que
x(y + z) denota el producto de x por la suma de y y z. En la expresión xy el complemento
afecta al resultado del producto de x por y , mientras que en xy, el complemento afecta
120
4. Álgebra de Boole
0+0=0
0+1=1
1+0=1
1+1=1
0· 0=0
0· 1=0
1· 0=0
1· 1=1
Y el complemento, se define:
0̄ = 1
1̄ = 0
x y f(x,y)
0 0 0
0 1 1
1 0 1
1 1 1
121
4.2. Funciones booleanas
(acá en lugar de escribir x1 y x2 para las variables booleanas, se usa x e y, para facilidad
de notación). Se puede ver que los valores de f están dados por la suma de los valores de
las dos variables, es decir, f (x, y) = x + y.
Otra función de orden 2 es:
x y g(x,y)
0 0 1
0 1 0
1 0 0
1 1 0
En este caso, los valores de g son los opuestos de los valores de la f anterior. Es decir,
para cada par (x, y), g(x, y) = f (x, y). Entonces, g(x, y) = x + y.
La función h dada por la tabla
x y h(x,y)
0 0 0
0 1 1
1 0 1
1 1 0
vale 1 si y sólo si las dos variables toman valores distintos. Esta función se la conoce como
o exclusiva, y se denota h(x, y) = x ⊕ y. En términos de las operaciones básicas, se puede
escribir h(x, y) = x̄y + xȳ.
La siguiente función
x y k(x,y)
0 0 1
0 1 0
1 0 0
1 1 1
vale 1 si y sólo si las dos variables toman valores iguales. Es el complemento de la función
anterior, k(x, y) = h(x, y) = x ⊕ y. En términos de las operaciones básicas, se puede
escribir k(x, y) = xy + x̄ȳ.
Ejemplo 4.2
Una función de orden 3 es
122
4. Álgebra de Boole
x y z f(x,y,z)
0 0 0 1
0 0 1 0
0 1 0 0
0 1 1 0
1 0 0 0
1 0 1 1
1 1 0 1
1 1 1 0
Si bien la tabla de valores de una función booleana es una buena herramienta cuando
el número de variables es 2 ó 3, con más variables, la tabla adquiere tamaño demasiado
grande. Por ejemplo, una función en B 5 requiere una tabla de 32 filas.
Afortunadamente, hay otras formas de denotar una función booleana, y es usando
expresiones booleanas, que combinan las variables booleanas con las operaciones defini-
das en el álgebra: suma, producto, complemento. Más formalmente, las expresiones
booleanas en las variables booleanas x1 , x2 , ..., xn se definen recursivamente como:
* 0,1,x1 , x2 , ..., xn son expresiones booleanas
* Si E1 y E2 son expresiones booleanas, entonces E1 , E1 E2 y E1 + E2 son expresiones
booleanas.
Ejemplo 4.3
Considere la función f (x, y, z) tal que para cada (x, y, z), la función tome el valor de la
suma del complemento de y más z. Es decir, f (x, y, z) = ȳ + z.
Para conocer explı́citamente los valores de f en cada una de las 8 ternas booleanas, se
arma la tabla de valores:
x y z ȳ f (x, y, z) = ȳ + z
0 0 0 1 1
0 0 1 1 1
0 1 0 0 0
0 1 1 0 1
1 0 0 1 1
1 0 1 1 1
1 1 0 0 0
1 1 1 0 1
Ejemplo 4.4
Una función booleana de orden 3 dada con una expresión booleana es f (x, y, z) = x(y + z).
Si se quiere conocer los valores de f para cada elemento de su dominio, se construye
la tabla de valores, siguiendo las operaciones que forman f .
123
4.2. Funciones booleanas
Ejemplo 4.5
Considere la función dada por f (w, x, y, z) = x(w + z̄) + yz. Su tabla de valores es:
Ejemplo 4.6
Una función muy sencilla de tres variables es f (x, y, z) = 0. Es la función que vale 0
siempre.
La función de tres variables f (x, y, z) = 1 vale 1 siempre.
Dos funciones booleanas definidas en B n son iguales, si para cada n-upla de B n , toman
el mismo valor. Dos expresiones booleanas son equivalentes si representan funciones iguales.
Por ejemplo, las expresiones xy y x̄+ȳ son equivalentes, ası́ como las expresiones (y+ȳ)x+z
y x + z.
Las mismas operaciones booleanas de suma, producto y complemento pueden aplicarse
a funciones, para obtener otras funciones.
124
4. Álgebra de Boole
Ejemplo 4.7
Dadas las funciones f y g en la tabla, la última columna da los valores de una nueva
función h que toma el valor de la suma de los complementos de f y g.
Ejemplo 4.8
Si se tienen dos funciones dadas con sus respectivas expresiones, f (x, y) = x + (x̄y)y,
y g(x, y) = (x̄ + y)x, la función h(x, y) = f (x, y)g(x, y) se representa con la expresión
booleana h(x, y) = (x + (x̄y)y)((x̄ + y)x).
Ejemplo 4.9
Simplifiquemos la función f (x, y, z) = (x + z̄)yz + x + y. En la siguiente tabla se muestra
la simplificación paso a paso, indicando las propiedades usadas.
(x + z̄)yz + x + y
xyz + z̄yz + x + y distributiva de producto
xyz + z̄yz + x̄ȳ De Morgan
xyz + y(zz̄) + x̄ȳ conmutativa y asociativa del producto
xyz + y0 + x̄ȳ inversos en producto
xyz + 0 + x̄ȳ acotación en producto
xyz + x̄ȳ neutro de suma
Ejemplo 4.10
La expresión x + y(z̄ + x)x̄ se puede simplificar con los siguientes pasos:
125
4.4. Formas normales
x + y(z̄ + x)x̄
x + (y z̄ + yx)x̄ distributiva del producto
x + y z̄ x̄ + yxx̄ distributiva del producto
x + y z̄ x̄ + y0 inversos en producto
x + y z̄ x̄ + 0 acotación en producto
x + y z̄ x̄ neutro en suma
Ejemplo 4.11
Dada la función h(x, y) = (x + (x̄y) y)((x̄ + y)x), una expresión simplificada se obtiene
con los siguientes pasos:
(x + (x̄y) y)((x̄ + y)x)
(x + (x + ȳ) y)((x̄ + y) + x̄) De Morgan
(x + (x + ȳ) y)(xȳ + x̄) doble complemento y De Morgan
(x + xy + ȳy)(xȳ + x̄) distributiva de producto y doble complemento
(x + ȳy)(xȳ + x̄) absorción
(x + 0)(xȳ + x̄) inversos en producto
x(xȳ + x̄) neutro en suma
xxȳ + xx̄) distributiva de producto
xȳ + 0 idempotencia en producto y producto de inversos
xȳ neutro en suma
Ejemplo 4.12
Simplifiquemos la expresión (w(x + ȳz) + x)(z + yx) + xy + w̄.
(w(x + ȳz) + x)(z + yx) + xy + w̄
(wx̄yz + x)z yx + xy + w̄ De Morgan
(wx̄(y + z) + x)z (y + x) + xy + w̄ De Morgan
(wx̄(y + z) + x)z (y + x) + xy + w̄ doble complemento
(wx̄y + wx̄ z + x) (z y + z x) + xy + w̄ distributiva de producto
(wx̄yz y + wx̄ z z y + xz y + wx̄yz x + wx̄ z z x + distributiva de producto
xz x) + xy + w̄
(wx̄0z+wx̄ z y+xz y+wx̄yz +wx̄ z +0z)+xy+w̄ conmutativa, asociativa, idempoten-
cia e inversos en producto
(0 + wx̄ z y + xz y + wx̄yz + wx̄ z + 0) + xy + w̄ acotación en producto
(wx̄ z y + xz y + wx̄yz + wx̄ z) + xy + w̄ neutro en suma
(wx̄ z(y + y + 1) + xz y) + xy + w̄ conmutativa y distributiva de pro-
ducto
(wx̄ z1 + xz y) + xy + w̄ acotación en suma
wx̄ z + xz y + xy + w̄ neutro en producto
126
4. Álgebra de Boole
Suponga que se tiene una función f de tres variables que vale 1 únicamente si x =
1, y = 1, z = 1. Claramente, una expresión algebraica para f es f (x, y, z) = xyx. Suponga
que otra función booleana, g, es tal que vale 1 únicamente si x = 1, y = 0, z = 1. Una
expresión para g es g(x, y, z) = xȳz.
Ahora, sea h una función que vale 1 cuando x = 1, y = 1, z = 1 o bien cuando x =
1, y = 0, z = 1. Entonces h vale 1 cuando f vale 1 o cuando g vale 1. Es decir, h = f +g. Por
lo tanto, una expresión algebraica para h es h(x, y, z) = f (x, y, z) + g(x, y, z) = xyz + xȳz.
x y z f g h = f +g
0 0 0 0 0 0
0 0 1 0 0 0
0 1 0 0 0 0
0 1 1 0 0 0
1 0 0 0 0 0
1 0 1 0 1 1
1 1 0 0 0 0
1 1 1 1 0 1
Ejemplo 4.13
Dada la función f cuyos valores se muestran en la siguiente tabla, se puede pensar que
es suma de tres funciones, cada una de las cuales vale 1 una sola vez. Especı́ficamente,
sean f1 , f2 y f3 las funciones dadas en las últimas columnas de la tabla, de modo que
f = f1 + f2 + f3 . Una expresión para f1 es f1 (x, y, z) = x̄yz; una expresión para f2 es
f2 (x, y, x) = xȳz y una expresión para f3 es f3 (x, y, z) = xy z̄, Luego, f puede escribirse
f (x, y, z) = x̄yz + xȳz + xy z̄.
x y z f f1 f2 f3
0 0 0 0 0 0 0
0 0 1 0 0 0 0
0 1 0 0 0 0 0
0 1 1 1 1 0 0
1 0 0 0 0 0 0
1 0 1 1 0 1 0
1 1 0 1 0 0 1
1 1 1 0 0 0 0
Ejemplo 4.14
Las funciones dadas en la tabla tienen como expresión booleana f (x, y) = x̄ ȳ, g(x, y) = x̄y
y h(x, y) = x̄ ȳ + x̄y respectivamente.
127
4.4. Formas normales
x y f g h
0 0 1 0 1
0 1 0 1 1
1 0 0 0 0
1 1 0 0 0
En todos los ejemplos anteriores se obtuvo una expresión booleana que es suma de
productos. Formalmente, la forma normal disyuntiva (FND) es suma de conjun-
ciones fundamentales. Una conjunción fundamental es el producto de todas las
variables, algunas posiblemente negadas. Cada conjunción fundamental de n variables,
vale 1 exactamente en una n-upla de variales booleanas. Por esto, también se suele llamar
mintérmino a cada conjunción fundamental, ya que vale 1 la mı́nima cantidad de veces
sin ser nula, es decir, vale 1 en un solo caso.
Entonces, cada término de una forma normal disyuntiva indica una n-upla donde la
f vale 1. Si la FND de una función booleana de n variables tiene k términos, k debe ser
menor o igual a 2n . Además, f vale 1 en k n-uplas, y vale 0 en (2n − k) n-uplas.
Ejemplo 4.15
La FND de una función de 4 variables es f (w, x, y, z) = wxyz + wx̄y z̄ + wxȳz. Entonces
f vale 1 en 3 4-uplas, y vale 0 en 16-3=13 4-uplas. Especı́ficamente, vale 1 cuando las
variables (w, x, y, z) toman los valores (1,1,1,1), (1,0,1,0), (1,1,0,1).
Ejemplo 4.16
Sea g una función de orden 5, cuya FND es g(v, w, x, y, z) = v̄wxyz + v w̄xyz + vwx̄yz +
vwxȳz+vwxy z̄. La FND tiene 5 términos, indicando que la función vale 1 en 5 oportunida-
des, cuando las variables toman los valores (0,1,1,1,1), (1,0,1,1,1), (1,1,0,1,1), (1,1,1,0,1)
y (1,1,1,1,0). En el dominio de la función hay 25 = 32 5-uplas, por lo tanto, la función
vale 0 para 32-5=27 5-uplas.
Considere ahora la situación de hallar la FND de una función conociendo alguna ex-
presión booleana de ella, y sin construir la tabla. Como la FND consiste en sumas de
productos de variables, habrá que manipular algebraicamente la expresión conocida de la
f para que queden sumas de productos de variables, aplicando las propiedades conocidas.
Pero puede suceder que con ésto no queden conjunciones fundamentales, es decir, que en
los productos no aparezcan todas las variables. Una forma de completar los productos es
multiplicar por la suma de la variable faltante más su complemento. Es decir, si para una
función de tres variables x, y, z, un producto resulta xy, multiplicar por (z + z̄). Como
esta suma es 1, y el 1 es neutro en el producto, la función no se altera. Veámoslo con un
ejemplo.
Ejemplo 4.17
La FND de f (x, y, z) = x(ȳ + xz) se obtiene haciendo:
x(ȳ + xz)
xȳ + xz distributiva del producto e idempotencia en producto
xȳ(z + z̄) + xz(y + ȳ) se multiplica por suma de opuestos de variable faltante
xȳz + xȳ z̄ + xyz + xȳz distributiva y conmutativa del producto
xȳz + xȳ z̄ + xyz idempotencia en suma
128
4. Álgebra de Boole
En el último paso se eliminan los términos repetidos (el primero y último término del
penúltimo paso), por la propiedad de idempotencia en suma. La expresión obtenida es la
FND de la función dada.
Ejemplo 4.18
La FND de f (w, x, y, z) = wx yz se obtiene haciendo:
wx yz
(w̄ + x̄) yz De Morgan
w̄yz + x̄yz distributiva de producto
w̄yz(x + x̄) + x̄yz(w + w̄) se multiplica por suma de opuestos de variable faltante
w̄xyz + w̄ x̄yz + wx̄yz + w̄ x̄yz distributiva y conmutativa
w̄xyz + w̄ x̄yz + wx̄yz idempotencia en suma
x y f g h
0 0 1 0 0
0 1 0 1 0
1 0 1 1 1
1 1 1 1 1
Ejemplo 4.20
Las funciones dadas en la tabla admiten las expresiones f (x, y, z) = x + ȳ + z̄, g(x, y, z) =
(x̄ + ȳ + z̄). Como puede observarse, h = f g, entonces h(x, y, z) = (x + ȳ + z̄)(x̄ + ȳ + z̄).
Finalmente, k(x, y, z) = x + y + z, y como j = kh = kf g, j(x, y, z) = (x + y + z)(x + ȳ +
z̄)(x̄ + ȳ + z̄).
129
4.4. Formas normales
x y z f g h k j
0 0 0 1 1 1 0 0
0 0 1 1 1 1 1 1
0 1 0 1 1 1 1 1
0 1 1 0 1 0 1 0
1 0 0 1 1 1 1 1
1 0 1 1 1 1 1 1
1 1 0 1 1 1 1 1
1 1 1 1 0 0 1 0
130
4. Álgebra de Boole
Ejemplo 4.24
La FNC de la función f (x, y, z) = x + yz se obtiene haciendo:
x + yz
(x + y)(x + z) distributiva de suma
(x + y + zz̄)(x + z) suma el producto de z por su complemento
(x + y + zz̄)(x + z + y ȳ) suma el producto de y por su complemento
(x + y + z)(x + y + z̄)(x + y + z)(x + ȳ + z) distributiva y conmutativa de suma
(x + y + z)(x + y + z̄)(x + ȳ + z) idempotencia en producto
Ejemplo 4.25
Dada la función f (w, x, y, z) = (w+x+z)(x+ ȳ +z)(w̄+y), la FNC se obtiene completando
la disyunción de cada factor:
w + x + z = w + x + z + y ȳ = (w + x + y + z)(w + x + ȳ + z)
x + ȳ + z = ww̄ + x + ȳ + z = (w + x + ȳ + z)(w̄ + x + ȳ + z)
w̄ + y = w̄ + y + xx̄ = (w̄ + x + y)(w̄ + x̄ + y) = (w̄ + x + y + zz̄)(w̄ + x̄ + y + zz̄)
= (w̄ + x + y + z)(w̄ + x + y + z̄)(w̄ + x̄ + y + z)(w̄ + x̄ + y + z̄)
La función f es el producto de las disyunciones fundamentales obtenidas. Aplicando la
ley de idempotencia, queda la FNC de f con 7 factores:
f (w, x, y, z) = (w + x + y + z)(w + x + ȳ + z)(w̄ + x + ȳ + z)(w̄ + x + y + z)(w̄ + x +
y + z̄)(w̄ + x̄ + y + z)(w̄ + x̄ + y + z̄).
Esta función vale 0 en 7 4-uplas (que son: (0,0,0,0), (0,0,1,0), (1,0,1,0), (1,0,0,0),
(1,0,0,1), (1,1,0,0), (1,1,0,1)), y vale 1 en las restantes 9 4-uplas.
En el caso de la función constantemente igual a 1, se considera que la expresión
f (x1 , x2 , ..., xn ) = 1 es su FNC.
131
4.6. Modelado con funciones booleanas
puede prescindir de la operación producto usando esa igualdad. Por ejemplo, la expresión
xȳ +yz se puede reescribir usando sólo suma y complemento: x̄ + ȳ + ȳ + z̄ = x̄ + y + ȳ + z̄.
Y la expresión x(z̄ + y) se reescribe x̄ + z̄ + y.
Por lo dicho, vemos que es posible representar cualquier función booleana usando sólo
dos operaciones. ¿Puede representarse cualquier función con sólo una operación booleana?
De nuevo la respuesta es sı́, pero tal operación no es una de las básicas.
Sea la operación NAND representada con el sı́mbolo | y definida como x|y = xy.
x y x|y
0 0 1
0 1 1
1 0 1
1 1 0
Luego, toda expresión boolena se puede representar usando esta única operación. Esto
es en virtud de las identidades
x + y = (x|x)|(y|y)
xy = (x|y)|(x|y)
x̄ = x|x
que se pueden verificar fácilmente.
Existe otra operación con la que se puede escribir toda expresión booleana. Es la
operación NOR, representada con ↓ y definida como x ↓ y = x + y.
x y x↓y
0 0 1
0 1 0
1 0 0
1 1 0
Luego, toda expresión boolena se puede representar usando esta única operación. Esto
es en virtud de las identidades
x + y = (x ↓ y) ↓ (x ↓ y)
xy = (x ↓ x) ↓ (y ↓ y)
x̄ = x ↓ x
132
4. Álgebra de Boole
133
4.6. Modelado con funciones booleanas
134
4. Álgebra de Boole
x1 x2 f2 x3 f3 (x1 , x2 , x3 )
0 0
0 0 0
1 1
0 1
0 1 1
1 0
0 1
1 0 1
1 0
0 0
1 1 0
1 1
Ejemplo 4.31
Se quiere estudiar una función booleana que, dados dos números en binario x1 x2 y y1 y2
indique si el primero es mayor que el segundo. Es decir, la función debe valer 1 si x1 x2 es
mayor que el número y1 y2 , y 0 en otro caso. La función tiene cuatro variables de entrada,
que son los dı́gitos de los números a considerar.
f vale 1 o bien si el primer dı́gito del primer número es mayor que el primer dı́gito del
segundo número, es decir: x1 = 1 y y1 = 0, o bien, si ambos dı́gitos son iguales y x2 = 1 y
y2 = 0. Una expresión que vale 1 en el primer caso es x1 y¯1 . Y una expresión que vale 1 en
el segundo caso es (x1 ⊕ y1 )x2 y¯2 . Recuérdese que la función ⊕ vale 1 si las dos variables
tienen valores distintos, entonces x1 ⊕ y1 vale 1 las dos variables tienen valores iguales.
Finalmente, la función buscada puede escribirse f (x1 , x2 , y1 , y2 ) = x1 y¯1 +(x1 ⊕ y1 )x2 y¯2 .
135
4.7. Circuitos lógicos
x x
x x̄ xy x+y
y y
a- NOT b- AND c- OR
x+y x+y
x
y
(x + y)z
z
136
4. Álgebra de Boole
x̄
x
y x̄ȳz
ȳ
z
y x̄ȳz
Figura 4.4: Circuito del ejemplo 4.32 usando puertas con más de dos entradas
Además de las puertas lógicas básicas, se pueden utilizar puertas que representan otras
operaciones booleanas. Éstas son la puerta NAND (not-and), la puerta NOR (not-
or), la puerta XOR (o exclusiva).
La puerta NAND tiene dos entradas y una salida. La salida representa la operación
producto negado. Para las entradas x y y, la salida es xy. Esto es, el cable de salida
tendrá nivel de tensión alta si y sólo si al menos una de las entradas tiene nivel de tensión
bajo.
La puerta NOR también es una puerta de dos entradas y una salida, que representa
la operación suma negada. Para las entradas x y y, la salida es x + y. Es decir, la salida
tiene nivel de tensión alto si y sólo si las dos entradas tienen de nivel bajo.
Finalmente la puerta XOR tiene dos entradas y una salida que representa la operación
137
4.7. Circuitos lógicos
x + xz
x
xz
z
(x + xz)(w + yz)
yz yz
y
w + yz
w
x x x
xy x+y x⊕y
y y y
o exclusiva, que es x ⊕ y = x̄y + xȳ. La salida tiene nivel de tensión alto si y sólo si las
entradas tienen niveles de tensión distintos. 1
La representación gráfica de estas puertas se muestra en la figura 4.6.
Ejemplo 4.34
En el ejemplo 4.30 se obtuvo una expresión booleana para el generador del dı́gito de control
de paridad. Usando (n-1) puertas XOR se puede implementar esta función (figura 4.7).
Ejemplo 4.35
Dada la función booleana de la tabla, se quiere construir un circuito de puertas lógicas
para implementarla.
1
Más generalmente, las puertas NAND, NOR y XOR admiten más de dos entradas.
138
4. Álgebra de Boole
x1
x1 ⊕ x2
x2 (x1 ⊕ x2 ) ⊕ x3
x3
((x1 ⊕ x2 ) ⊕ x3 )... ⊕ xn
xn
x y z f
0 0 0 1
0 0 1 1
0 1 0 0
0 1 1 0
1 0 0 0
1 0 1 1
1 1 0 0
1 1 1 1
139
4.7. Circuitos lógicos
equivalente al anterior, con cuatro puertas OR de tres entradas y una puerta AND (figura
4.10).
Ejemplo 4.36
Un circuito para el ejemplo de los tres interruptores (ejemplo 4.28) se muestra en la figura
4.11. Este circuito se construye directamente como una implementación de la FND de
la función. Dicha expresión puede ser simplificada de la siguiente manera: f (x, y, z) =
xyz + x̄ ȳz + x̄ y z̄ + xȳ z̄ = z(xy + x̄ȳ) + z̄(x̄y + xȳ) = z(x ⊕ y) + z̄(x ⊕ y). Ası́, un circuito
equivalente al de la figura 4.11 es el de la figura 4.12, que usa una puerta XOR, dos puertas
AND y una puerta OR.
140
4. Álgebra de Boole
141
4.8. Complejidad y minimización de circuitos
Ejemplo 4.37
Dada la función cuya FND es f (w, x, y, z) = wxȳz̄ + wxȳz + wxyz + wxy z̄, la expresión
equivalente como suma minimal de productos se obtiene haciendo las simplificaciones:
El circuito de puertas lógicas construı́do a partir de la FND tiene 4 puertas AND y una
puerta OR, todas ellas de 4 entradas. En cambio, el circuito obtenido a partir de la suma
minimal de productos resulta con sólo una puerta AND de 2 entradas.
y 0 1
x
0 1
1 1 1
representa la función de dos variables x y y que vale 1 cuando (x=0 y y=1) o cuando (x=1
y y=0) o cuando (x=1 y y=1). Es decir, representa la función f (x, y) = x̄y + xȳ + xy.
2
También conocido como diagrama de Veitch o Veitch-Karnaugh, ya que Veitch lo propuso inicialmente,
y luego Karnaugh lo modificó ligeramente y lo popularizó.
142
4. Álgebra de Boole
Dos celdas adyacentes en el diagrama representan términos que difieren en una sola
variable. En el siguiente diagrama se han encerrado en elipses las celdas adyacentes que
contienen 1. Además, se han etiquetado las filas y columnas con la variable correspondiente,
negada en la fila/columna que vale 0, y sin negar donde vale 1.
ȳ y
0 1
x̄ 0 1
x 1 1 1
Las dos celdas de la segunda fila representan las conjunciones fundamentales xȳ y xy, que
difieren en la variable y. La suma de estas conjunciones se puede simplificar, resultando
un único sumando: xȳ + xy = x(ȳ + y) = x. Por otro lado, las dos celdas en la segunda
columna corresponden a las conjunciones fundamentales x̄y y xy, que difieren sólo en x.
Entonces, ambos términos se pueden simplificar y remplazarse por un único término y.
Por lo tanto, la función correspondiente a ese diagrama es f (x, y) = x + y.
El diagrama para una función de tres variables x, y y z tiene 8 celdas, dispuestas
en 2 filas y 4 columnas. Cada fila corresponde a un posible valor de x, y cada columna
corresponde a una combinación de valores para yz, es decir, 00, 01, 10, 11. Pero se quiere
que columnas adyacentes difieran sólo en una variable, entonces estos 4 valores se ordenan
de la siguiente manera: 00, 01, 11, 10. En este caso, también se consideran adyacentes las
columnas 1 y 4, ya que las celdas difieren en una sola variable.
El diagrama
ȳ y
yz
x 00 01 11 10
x̄ 0 1
x 1 1 1 1
z̄ z z̄
corresponde a la función f (x, y, z) = x̄yz+xȳz̄+xyz+xy z̄. Se han etiquetado las filas con x̄
y x indicando los valores 0 y 1 de x correspondientes a cada fila. Además, las dos primeras
columnas corresponden a celdas donde y vale 0, por eso fueron etiquetadas con ȳ. Las dos
últimas columnas tienen celdas correspondientes a mintérminos que tienen y sin negar.
Por su parte, las columnas primera y cuarta corresponden a celdas cuyos mintérminos
contienen z̄, y ası́ lo indican las etiquetas en la parte inferior de la tabla. Y las columnas
segunda y tercera corresponde a z sin negar.
Para simplificar la FND de la función correspondiente se localizan las celdas adyacentes
que tengan 1. Éstas son las dos de la tercera columna, las dos últimas celdas de la segunda
143
4.8. Complejidad y minimización de circuitos
0 1
1 1 1 1
Entonces, para el primer par mencionado, correspondiente a las conjunciones x̄yz y xyz
(difieren en la variable x) se simplifica yz. El segundo par mencionado corresponde a
conjunciones que difieren en z, por lo tanto se simplifica xy, y el último par difiere en el
valor de y, y resulta simplificado xz̄. Luego, la función se escribe como suma minimal de
productos f (x, y, z) = yz + xy + xz̄.
El siguiente diagrama de Karnaugh
ȳ y
yz
x 00 01 11 10
x̄ 0 1 1
x 1 1 1
z̄ z z̄
corresponde a la función f (x, y, z) = x̄yz + x̄y z̄ + xyz + xy z̄. Esta FND se puede simplificar
de la siguiente manera: f (x, y, z) = x̄y(z+z̄)+xy(z+z̄) = x̄y+xy = y(x̄+x) = y. Entonces,
la expresión booleana como suma minimal de productos es y. Nótese que los cuatro 1 de la
tabla forman un bloque de 2 × 2, y corresponde a todas las conjunciones minimales en las
que aparece y sin negar, mientras que x y z aparecen en todas las combinaciones posibles
(negadas y sin negar).
Esto muestra que también se pueden simplificar bloques de celdas de 2 × 2 que con-
tengan 1.
En el siguiente ejemplo se muestra otra aplicación de esta simplificación por bloques.
ȳ y
00 01 11 10
x̄ 0 1 1 1
x 1 1 1 1
z̄ z z̄
144
4. Álgebra de Boole
yz
x 00 01 11 10
0 1 1 1
1 1 1 1
Se tiene un bloque de 2 × 2 celdas con 1, las dos de la primera columna y las dos de la
cuarta columna. Esas 4 celdas corresponen a conjunciones fundamentales que continen
z̄, mientras que x y y aparecen en todas las combinaciones posibles. Entonces, esas 4
conjunciones se simplifica z̄.
Pero además, hay un par de celdas adyacentes con 1, las dos primeras de la última fila,
que se simplifica como xȳ, y un segundo par de celdas adyacentes con 1, las dos últimas de
la primera fila. Éstas se simplifican y resulta el producto x̄y. Luego, la suma de productos
minimales es f (x, y, z) = z̄ + xȳ + x̄y.
También es posible simplificar bloques de 4 celdas dispuestas en un arreglo de 1 × 4.
Se muestra un ejemplo:
ȳ y
00 01 11 10
x̄ 0 1
x 1 1 1 1 1
z̄ z z̄
Las cuatro celdas de la segunda fila corresponden a las conjunciones xȳz̄, xȳz, xyz y xy z̄.
La suma de ellas se simplifica y resulta x.
Además, en la tabla se encuentra el par de celdas adyacentes en la primera columna,
correspondientes a las conjunciones x̄ȳz̄ y xȳ z̄, cuya suma se simplifica ȳz̄. La expresión
como suma minimal de productos es f (x, y, z) = x + ȳ z̄.
Para funciones de cuatro variables w, x, y, z, se construye un diagrama de Karnaugh
con 16 celdas, ubicadas en un arreglo de 4× 4. Cada fila corresponde a una combinación de
valores binarios para el par wx, y cada columna corresponde a una combinación de valores
para el par yz, de modo que cada una de las 16 celdas corresponde a un mintérmino. Y
tales combinaciones se ubican de modo que entre filas (columnas) adyacentes, difiere el
valor de una sola variable. En este caso, también se consideran adyacentes la primera y la
cuarta columna, y la primera y la cuarta fila.
Las dos primeras columnas comparten el valor y = 0, se etiquetan con ȳ. Las dos
últimas columnas correspondientes a y = 1 son etiquetadas con y. Las columnas primera
y última se etiquetan con z̄ (ya que esas columnas corresponden a las celdas con z = 0),
y las columnas segunda y tercera se etiquetan con z.
Las dos primeras filas llevan la etiqueta x̄, y las dos últimas filas se etiquetan con x.
La primera y la última fila corresponden a las celdas con w = 0, por eso se etiquetan con
w̄, mientras que las filas segunda y tercera llevan la etiqueta w.
145
4.8. Complejidad y minimización de circuitos
El diagrama
ȳ y
yz
wx 00 01 11 10
00 1 1 w̄
x̄
10 1 1
w
11 1 1
x
01 w̄
z̄ z z̄
corresponde a la función f (w, x, y, z) = w̄x̄ȳ z̄ + w̄x̄y z̄ + wx̄ȳz̄ + wx̄y z̄ + wxȳz + wxyx. Los
bloques de celdas adyacentes se muestran en el siguiente diagrama:
yz
wx 00 01 11 10
00 1 1
10 1 1
11 1 1
01
146
4. Álgebra de Boole
ȳ y
yz
wx 00 01 11 10
01 1 1 w̄
x̄
10 1
w
11 1 1 1 1
x
00 1 1 w̄
z̄ z z̄
En la tercera fila hay un bloque de celdas con 1 de 1 × 4, que coinciden en los valores
w = 1 y x = 1, y las otras variables alcanzan todas las combinaciones posibles. Por lo
tanto, estos cuatro 1 se simpifican como: wx.
Las cuatro celdas de las esquinas son también adyacentes, y coinciden en los valores
w = 0 y z = 0, mientras que las otras variables alcanzan todas las combinaciones posibles.
Resulta el producto w̄z̄.
Finalmente, el par de 1 adyacentes en la segunda columna coinciden en w = 1, y = 0
y z = 1, mientras que x toma los dos posibles valores. Entonces, esos 1 corresponden al
producto wȳz.
La función como suma de productos minimales es f (w, x, y, z) = wx + w̄z̄ + wȳz.
En el siguiente diagrama se muestran los bloques usados para minimizar la expresión.
yz
wx 00 01 11 10
00 1 1
10 1
11 1 1 1 1
01 1 1
147
4.8. Complejidad y minimización de circuitos
yz
wx 00 01 11 10
00 1 1 1
10 1 1
11 1 1 1
01 1 1 1
yz
wx 00 01 11 10
00 0 0
10
11 0
01 0 0
148
4. Álgebra de Boole
4.9. Problemas
Problema 4.1
Dar la tabla de valores de las siguientes funciones booleanas.
a. f (x, y) = x ȳ
b. f (x, y, z) = x + yz
c. f (w, x, y, z) = w xyz
d. f (x, y) = xy + xy + x y + xy
Problema 4.2
Simplificar las siguientes expresiones booleanas, indicando qué leyes del álgebra de Boole
se aplican.
Problema 4.3
Dadas las funciones f y h del problema anterior, construir la tabla de valores de las
funciones f , h, f h, f ,hh, f + f , hh .
Problema 4.4
Hallar una expresión para las funciones booleanas de tres variables descritas por las si-
guientes condiciones:
149
4.9. Problemas
a. Función de dos variables (x,y) que vale 1 si las variables toman valores distintos.
b. Función de 3 variables (x,y,z) que vale 1 únicamente si x e y tienen el mismo valor,
y z tiene un valor distinto.
c. Función de 4 variables (w,x,y,z) que vale 1 sólo si las 4 variables valen 1.
d. Función de 4 variables (w,x,y,z) que vale 0 sólo si las 4 variables valen 1.
e. Función de 4 variables (w,x,y,z) que vale 1 sólo si w + z = 1 y x + y es 0.
f. Función de 4 variables (w,x,y,z) que vale 1 sólo si el número binario wxyz representa
un entero mayor o igual a 12.
g. Función de 4 variables (w, x, y, z) que vale 1 sólo si el número binario wxyz repre-
senta un entero mayor o igual a 9.
h. Función de 5 variables (v,w,x,y,z) que vale 0 sólo si las tres últimas no son todas 1.
i. Función de 5 variables (v,w,x,y,z) que vale 0 sólo si las tres primeras variables son
0.
j. Función de 5 variables (v,w,x,y,z) que vale 0 sólo si las cuatro primeras variables no
son todas 1.
Problema 4.6
Determinar la forma normal conjuntiva y la forma normal disyuntiva de las siguientes
funciones
x y z f g h
0 0 0 1 1 1
0 0 1 1 1 0
0 1 0 1 0 1
0 1 1 0 1 0
1 0 0 1 0 0
1 0 1 0 1 1
1 1 0 1 0 0
1 1 1 0 0 0
Problema 4.8
Si la función booleana f : B 4 → B se expresa en su forma normal conjuntiva (FNC) como
f (w, x, y, z) = (w + x̄ + y + z)(w̄ + x + ȳ + z)(w + x + ȳ + z̄)(w + x + y + z)
150
4. Álgebra de Boole
a. f (x, y) = xy + xy + xy
b. f (x, y, z) = xyz + xyz + xyz + xyz
c. f (x, y, z) = xyx + xyz + xyz + xyz
d. f (w, x, y, z) = wxyz + wxyz + wxyz + wxyz
151
4.9. Problemas
152
Capı́tulo 5
Autómatas, Lenguajes y
Gramáticas
Para cualquier alfabeto, Σ0 = cadenas con cero sı́mbolos = {ǫ}, esto es, un conjunto
con una única cadena, la cadena vacı́a.
Como todo alfabeto es finito, el conjunto de palabras Σk también es finito para cual-
quier k. Especı́ficamente, si el alfabeto tiene n sı́mbolos, la cantidad de cadenas en Σk es
nk .
153
5.1. Alfabetos y lenguajes
Σ∗ = Σ0 ∪ Σ1 ∪ Σ2 ∪ Σ3 ∪ ...
Nótese que siempre la cadena vacı́a está en Σ∗ . Si se quieren considerar sólo las cade-
nas de longitud mayor a cero, se utiliza la notación Σ+ , que denota lo que se denomina
clausura positiva:
Σ+ = Σ1 ∪ Σ2 ∪ Σ3 ∪ ...
154
5. Autómatas, Lenguajes y Gramáticas
L es finito
L es unión o concatenación de otros lenguajes regulares
L es la clausura de algún lenguaje regular
155
5.2. Expresiones regulares
Lenguaje Justificación
L1 = {01, 10} Es finito
L2 = {0} Es finito
L3 = {0, 00, 000, 0000, ...} = cadenas Es la clausura de L2
de ceros
L4 = {001, 010, 0001, 0010, 00001, Es la concatenación de los lenguajes re-
00010, ...} = cadenas de ceros seguida gulares L3 y L1
de 01 o de 10
L5 = cadenas de A y B = {A, B}∗ Es la clausura del lenguaje finito
{A, B}
L6 = cadenas de A y B que comiencen Es la concatenación del lenguaje regu-
con A lar finito {A} con el lenguaje regular
L5
L7 = cadenas de A y B que contienen Es la concatenación de L5 con el len-
la subcadena BBB guaje finito {BBB}, concatenado con
L5
L8 = palabras reservadas en un lengua- Es finito
je de programación
ǫ y ∅ son expresiones regulares, que denotan los lenguajes L(ǫ) = {ǫ} y L(∅) = {}.
156
5. Autómatas, Lenguajes y Gramáticas
Ası́, la ER (a + b)∗ denota la clausura del lenguaje formado por las cadenas a y b. Es
decir, denota el conjunto de cadenas de caracteres a y b (incluı́da la cadena vacı́a ǫ, que
está en toda clausura). Y la ER a(a + b)∗ denota la concatenación del lenguaje {a}, con
la clausura del lenguaje formado por las cadenas a y b. Es decir, es el conjunto de cadenas
de a y b que comienzan con a.
La ER (x + y)∗ yy(x + y)∗ denota el lenguaje que es concatenación de la clausura del
lenguaje {x, y}, con el lenguaje {yy} y la clausura del lenguaje {x, y}. Es decir, denota el
conjunto de cadenas de x e y que contienen la subcadena yy. Son cadenas de este lenguaje
xxxyyy, xyxyyyxx, yy, etc. Nótese que la cadena vacı́a ǫ está en {x, y}∗ , por lo tanto,
concatenando ǫ, yy y ǫ resulta la cadena yy.
La ER (10)∗ denota la clausura del lenguaje formado por la concatenación de 1 y 0.
Ası́, resulta el conjunto de cadenas de 0 y 1 formadas por repeticiones de 10. Están en
este lenguaje las cadenas ǫ, 10, 1010, 101010, etc.
En las operaciones con ER hay un orden de precedencia. La clausura se aplica primero,
luego la concatenación, luego la suma. Entonces, la ER 10∗ denota las cadenas formadas
por concatenación de la cadena 1 con una cadena en la clausura de {0}, es decir, una
cadena de 0. Son cadenas en este lenguaje 1, 10, 100, 1000, etc. Para cambiar el orden de
precedencia natural se usan paréntesis.
Por otro lado, la ER a + bc denota el lenguaje formado por la cadena a y la cadena
bc, mientras que (a + b)c denota las cadenas formadas por concatenación de las cadenas
a o b con la cadena c. Es decir, contiene las palabras ac y bc.
La suma de ER es conmutativa: E1 + E2 = E2 + E1
La suma de ER es asociativa: (E1 + E2 ) + E3 = E1 + (E2 + E3 )
La suma es idempotente: E1 + E1 = E1
∅ es el neutro de la suma: E1 + ∅ = E1
La concatenación de ER no es conmutativa. En general, E1 E2 6= E2 E1
157
5.2. Expresiones regulares
5.2.3. Ejemplos
Ejemplo 5.1
Vamos a construir una ER para denotar el lenguaje de las cadenas de 0 y 1 alternados.
En este lenguaje están las cadenas 1010, 01010, 101, 010, 10, 0, 1, etc.
En principio se puede plantear la ER (01)∗ . Pero todas las cadenas en L((01)∗ ) co-
mienzan con 0 y terminan con 1. Es decir, falta considerar las cadenas que empiezan con
1 y terminan con 0, y las que empiezan y terminan con 1 o con 0. Considerando todos los
casos, se puede plantear la ER: (01)∗ + 1(01)∗ + (01)∗ 0 + 0(01)∗ 0. Usando equivalencias
de ER, se puede escribir:
(1 + ǫ)(01)∗ (0 + ǫ)
Ejemplo 5.2
Considere el lenguaje de cadenas de caracteres a, b y c que no tengan dos o más b seguidas,
y que no terminen en b. Para construir una ER que represente este lenguaje, debe tenerse
en cuenta que cada vez que aparece una b, debe haber otro caracter después. Puede pensarse
que las cadenas en este lenguaje están formadas por repeticiones de las cadenas a, c, bc
y ba. Entonces, una ER adecuada es (a + c + ba + bc)∗ , que representa la clausura del
lenguaje {a, c, ba, bc}. Esa ER también se puede escribir
(a + c + b(a + c))∗
158
5. Autómatas, Lenguajes y Gramáticas
(a + c + ab + cb)∗ = (a + c + (a + c)b)∗
Ejemplo 5.3
Sea L el conjunto de cadenas de 0 y 1 tales que el tercer sı́mbolo es 1. La regularidad de
las cadenas en este lenguaje es que tienen un primer caracter 0 ó 1, un segundo caracter 0
ó 1, el tercer caracter 1, y luego cualquier cadena (posiblemente vacı́a) de 0 y 1. Entonces,
una ER es
(0 + 1)(0 + 1)1(0 + 1)∗
Ejemplo 5.4
La ER (A + B)∗ A(A + B) representa el lenguaje de cadenas de A y B tales que el an-
teúltimo caracter es A.
Ejemplo 5.5
Considere el lenguaje de las cadenas en el alfabeto {a, b} con una cantidad par de a.
Para construir una expresión regular, se debe tener en cuenta que en las cadenas de este
lenguaje las a se pueden agrupar en grupos de a dos (no necesariamente consecutivas).
Entonces se puede pensar que cada cadena es concatenación de subcadenas, cada una de
ellas conteniendo dos a, y cualquier cantidad de b. Entonces, una ER para este lenguaje
es
(b∗ ab∗ ab∗ )∗
Esta expresión regular admite la cadena vacı́a. Eso es correcto, ya que la cadena vacı́a
tiene 0 caracteres a, y el 0 es un número par.
Ejemplo 5.6
Sea L1 el lenguaje de las palabras que usan los caracteres a, b y c, tales que tienen la
subcadena bb. Una ER para este lenguaje es
Ahora, sea L2 el lenguaje de las cadenas de a, b y c, en las que aparece una sola
vez la subcadena bb, y no tienen repeticiones de 3 o más b seguidas. La ER anterior no
es adecuada, ya que al concatenar (a + b + c)∗ con bb, quedan admitidas palabras que
se obtienen de concatenar, por ejemplo ab con bb, lo que genera la cadena abbb, que no
está en L2 .
Entonces, las cadenas en L2 se pueden obtener concatenando una subcadena de a, b, y c
que no termine en b (posiblemente la cadena vacı́a), con la subcadena bb, concatenado con
otra cadena de a, b, y c que no empiece con b (posiblemente la cadena vacı́a). Entonces,
en vista del ejemplo 5.2, una ER adecuada es
159
5.3. Autómatas
Ejemplo 5.7
Una ER que describe los números decimales es
5.3. Autómatas
5.3.1. Autómatas finitos deterministas
Un autómata es una máquina o dispositivo con capacidad de computación. Es decir, un
dispositivo que puede recibir información (codificada con cierto alfabeto) y dar información
o una salida referida a ella. Su estudio es importante en ciencias de la computación, ya
que permite estudiar en forma teórica qué es computable y qué no. En esta sección se
definirá un tipo particular de autómatas, conocidos como autómatas finitos.
Algunas de las aplicaciones de los autómatas finitos son
160
5. Autómatas, Lenguajes y Gramáticas
Pulsar
start of f on
Pulsar
Ejemplo 5.11
Suponga que se tiene un analizador léxico de un compilador, que busca la palabra reservada
while. El analizador lee uno a uno los caracteres del código fuente. Es decir, la información
que recibe del exterior está codificada en caracteres ASCII. Si en algún momento lee el
caracter w, el analizador debe recordarlo, ya que puede ser el comienzo de la palabra
buscada. Si el caracter siguiente es h, debe recordar que hasta el momento leyó wh, ya
que puede ser parte de la palabra buscada. En cambio, si después de w, lee cualquier otro
caracter, distinto de h, quiere decir que no comenzó a leer la palabra buscada.
De la misma forma, a medida que lee caracteres, debe recordar si los últimos caracteres
leı́dos pueden formar parte de la palabra buscada. Esto hasta leer los 5 caracteres w, h, i,
l, y e consecutivamente, o terminar de leer el código y no haber encontrado la palabra.
161
5.3. Autómatas
Σ − {l}
Σ − {h}
w h i l e
start w wh whi whil while
Σ − {i} Σ
Σ − {w}
Σ − {e}
Ejemplo 5.12
Una máquina expendedora de gaseosas recibe monedas de $1 y $2. Una lata de gaseosa
cuesta $4. A medida que la máquina recibe monedas debe ir recordando la suma total para
decidir si luego de una determinada entrada entrega o no el producto. Entonces podemos
decir que la máquina puede encontrarse en el estado q0 si no recibió ninguna moneda, en
el estado q1 si recibió un total de $1, en el estado q2 si hasta el momento recibió $2, en el
estado q3 si recibió $3 en total, o en el estado q+4 si recibió $4 o más. Nótese que no es
importante si recibe más o exactamente $4, ya que no se analiza en este modelo la entrega
de vuelto.
Si el autómata está en el estado q0 y recibe $1, pasará al estado q1 , y si recibe una
moneda de $2 pasará al estado q2 . Ası́ en cada uno de los estados: recibiendo una u otra
moneda, cambiará su estado para recordar la nueva situación.
q0 es el estado inicial, en el que se encuentra antes de empezar a recibir monedas, y
q+4 es el estado final o de aceptación: si llega a este estado, la entrada de monedas se
acepta y la máquina entrega el producto.
La situación puede representarse en el gráfico de la figura 5.3. Como en el ejemplo
anterior, los estados se representan con nodos en el grafo, y las transiciones entre estados
mediante arcos. Los arcos están etiquetados de acuerdo a la entrada que provoca ese cambio
de estado.
Con los ejemplos motivadores descritos, se presenta la definición formal de autómata
finito determinista.
162
5. Autómatas, Lenguajes y Gramáticas
start q0 q+4
1,2
2
2
1 q2 1,2
1 1
q1 q3
2
Puede pensarse que la cadena de entrada está escrita en una celda semiinfinita, de
modo que el primer caracter de la cadena está escrito en la primera celda. El autómata
lee uno a uno el contenido de las celdas, desde el primero hasta el último caracter de la
cadena de entrada. El funcionamiento de un AFD consiste en ir pasando de un estado a
otro a medida que lee los caracteres. Estos pasajes de estado están dados por la función
de transición. Al terminar de leer una palabra, el autómata se encuentra en algún estado.
Si ese estado es uno de los estados de aceptación (indicados en los grafos como nodos
con cı́rculo doble), se dice que el autómata acepta la cadena. Por ejemplo, en el ejemplo
de la máquina expendedora de gaseosas, el único estado de aceptación es q+4 . La cadena
22 es aceptada por el autómata, ası́ como las cadenas 11111, 2111, 212. No son cadenas
aceptadas 111, 21, 12 (el autómata termina en q3 ), 2, 11 (el autómata termina en el estado
q2 ), 1 (termina en q1 ), y la cadena vacı́a (termina en q0 ).
El lenguaje aceptado por un autómata es el conjunto de cadenas aceptadas por
éste. También se dice que es el lenguaje que reconoce el autómata.
El tipo de lenguaje que puede reconocer un AFD es el conjunto de lenguajes regulares.
Esto es: el lenguaje aceptado por un AFD es un lenguaje regular; y viceversa: dado un
lenguaje regular, existe un AFD que lo reconoce. Esto implica que un lenguaje que no
sea regular no puede ser reconocido por un AFD. Se verán más adelante autómatas más
generales, capaces de aceptar lenguajes no regulares.
163
5.3. Autómatas
q0 0 q1 1 q2
start
1 0 0,1
1 2
→ q0 q1 q2
q1 q2 q3
q2 q3 q+4
q3 q+4 q+4
∗q+4 q+4 q+4
Ejemplo 5.13
Sea el lenguaje L = {w01v, w ∈ {0, 1}∗ , v ∈ {0, 1}∗ }. Es decir, el conjunto de las cadenas
de 0 y 1 que contienen la secuencia 01. Son palabras en este lenguaje 111101, 01, 0101010,
00000110, mientras que las cadenas 111110, 0000, 11, ǫ no pertenecen a L. Un AFD que
acepta ese lenguaje se muestra en la figura 5.4. Dado que existe un AFD que reconoce este
lenguaje, es regular. Una ER para este lenguaje es (0 + 1)∗ 01(0 + 1∗ ).
Nótese que si la entrada es 111101, 01, 0101010, 00000110 el AFD termina en el
estado q3 que es estado de aceptación. Mientras que si la entrada es 111110 ó 0000 el
AFD termina en el estado q1 , y si la entrada es 11 o ǫ el AFD termina en el estado q0 , y
ninguno de estos estados es de aceptación.
Ejemplo 5.14
Considere el lenguaje de las cadenas de A y B que tienen una cantidad impar de A.
Un autómata para reconocer este lenguaje debe recordar si la cantidad de A leı́das hasta
el momento es par o impar. Se puede diseñar con dos estados: q0 , donde se encuentra el
164
5. Autómatas, Lenguajes y Gramáticas
start q0 q1
A
B B
Ejemplo 5.15
Sea L el lenguaje de las cadenas de A y B que tienen una cantidad par de A y una cantidad
par de B.
Un autómata que reconozca este lenguaje puede encontrarse en la situación de haber
leı́do cantidad par de A y de B, cantidad par de A e impar de B, cantidad impar de A y
de B, cantidad impar de A y par de B. Entonces, se necesitan 4 estados, que se denotan
q0 , q1 , q2 y q3 respectivamente. En este caso, el estado de aceptación es q0 .
La tabla de transición para este autómata es
A B
* → q0 q3 q1
q1 q2 q0
q2 q1 q3
q3 q0 q2
En la figura 5.6 se muestra el grafo de transición.
Si la entrada del autómata es AABBAA, el autómata pasa por los estados q0 , q3 , q0 , q1 ,
q0 , q3 , q0 , terminando en el estado de aceptación. Por lo tanto, esta cadena es aceptada.
Si la entrada es BBBB, el autómara pasa por los estados q0 , q1 , q0 , q1 , q0 , y también es
aceptada. Si la entrada es ǫ, el AFD que inicialmente está en q0 , permanece allı́, porque no
lee ningún caracter, por lo tanto no hay transición. Entonces, la cadena vacı́a es aceptada.
1
Ejemplo 5.16
Considere la tabla de transición dada a continuación.
1
La cadena vacı́a tiene cero A y cero B. Y cero es un número par, entonces esta cadena satisface la
definición del lenguaje, y pertenece a él.
165
5.3. Autómatas
B
start q0 q1
B
A A A A
B
q3 q2
B
A B C D
*→ q0 q2 q1 q2 q2
*q1 q2 q2 q0 q0
q2 q2 q2 q2 q2
Se quiere identificar el lenguaje aceptado por el AFD que tiene la función de transición
de la tabla. Una forma fácil de hacerlo es dibujar el grafo de transiciones e identificar
qué cadenas llevan al autómata a uno de los estados de aceptación.
En la figura 5.7 se muestra el diagrama de transición correspondiente. Se pueden ana-
lizar distintas cadenas de prueba, para ver cómo se comporta el autómata. Por ejemplo,
dadas las cadenas ABC, DDCD, AADBBBD, BCD, BBABD, BB, al ser leı́das por el
autómata, éste termina en el estado q2 , que no es de aceptación. Por lo tanto, estas cade-
nas no están en el lenguaje reconocido por el AFD.
Por otra parte sı́ acepta las cadenas BC, BCBDBC, BDBC (el autómata termina en q0 )
y B, BDBDB, BCB, BCBDB (el autómata termina en q1 ). ¿Qué caracterı́sticas definen
a las cadenas aceptadas? No tienen el caracter A, comienzan con B, y después de cada B,
si no es el último caracter, debe aparecer una C o una D. Y después de cada C o D (si no
son el último caracter) debe aparecer una B.
La descripción algebraica de este lenguaje con una ER es (BC + BD)∗ (ǫ + B). Esto
indica que cada cadena en el lenguaje aceptado es concatenación de BC y BD (entre cero
y varias veces), y concatenada con una B final, o con la cadena vacı́a.
Ejemplo 5.17
Se define el lenguaje L1 de las cadenas binarias que comienzan con 00. En la figura 5.8a se
muestra el autómata que reconoce este lenguaje. Los estados q0 , q1 , q2 y q3 representan la
situación de no haber leı́do ningún caracter, haber recibido un 0 al inicio, haber recibido dos
0 consecutivos al inicio, y haber recibido algo distinto a dos 0 al inicio, respectivamente.
Obviamente, el estado de aceptación es q2 . Luego de haber detectado los dos 0 iniciales, y
estar en el estado q2 se puede seguir leyendo cualquier caracter, y el autómata permanece
en el mismo estado.
166
5. Autómatas, Lenguajes y Gramáticas
C,D
start q0 q1
B
A,B
A,C,D
q2 A,B,C,D
q0 0 q1 q0 0 q1
start start
1 1 0 1 1 0
q3 q2 q3 q2
Este ejemplo muestra que si se conoce un AFD que acepte un lenguaje L, para construir
un AFD que acepte el lenguaje Lc = Σ∗ − L, basta con tomar como estados de aceptación
a los que antes no lo eran, y viceversa. Esto se conoce como diseño por complemento.
Para un mismo lenguaje se pueden construir autómatas distintos. Se dice que dos
autómatas son equivalentes si aceptan exactamente el mismo lenguaje.
167
5.3. Autómatas
De acuerdo a esta definición, la diferencia entre AFD y AFN es que las transiciones
en este último están dadas por una relación (no función): podrı́a haber más de un posible
estado al que pasa el autómata en un momento determinado (es decir, para un q y un
caracter a, δ(q, a) podrı́a ser más de un estado). Ası́, en cada momento el AFN puede
estar en más de un estado. Por otra parte, puede no haber transición desde determinado
estado con determinado caracter (es decir, δ(q, a) puede ser vacı́o para algún q y algún
a), y puede haber transiciones espontáneas (cambios de estado sin leer caracteres de la
entrada).
Claramente, esta definición es más abarcativa, y de hecho, todo AFD es un AFN.
Para el caso de AFN, el lenguaje aceptado es el conjunto de cadenas tales que el
autómata puede terminar en un estado de aceptación cuando las lee. Como el AFN puede
estar simultáneamente en varios estados, al terminar de leer una cadena podrı́a estar en
un conjunto de estados. Tal cadena será aceptada por el autómata si este conjunto de
estados contiene algún estado de aceptación.
Por ejemplo, considere el AFN mostrado en la figura 5.9.
q0 B q1 A q2
start
A,B
168
5. Autómatas, Lenguajes y Gramáticas
A B B A
q0 q0 q0 q0 q0
q1 q1 q2
X
B B A B A B
q0 q0 q0 q0 q0 q0 q0
q1 q1 q1 q1
X q2 q2
X X
169
5.3. Autómatas
A B C B B
q0 q1 q1 q1 q1 q1
q2 X q2 q2
A A B A A
q0 q1 q1 q1 q1 q1
q2 X
A,B,C
q0 A q1 B q2
start
Ejemplo 5.19
Dado el alfabeto Σ = {0, 1, ..., 9, +, −, .}, se puede definir el lenguaje de los números deci-
males. Una cadena que representa un número decimal puede comenzar con un signo +, un
signo -, o puede no tener signo inicial. A continuación sigue una cadena de dı́gitos (parte
entera), un punto, y otra cadena de dı́gitos (parte decimal). Se puede suponer que alguna
de estas cadenas de dı́gitos puede ser vacı́a, pero no ambas. Entonces, son cadenas válidas
+3.234, -0.001, .45, -23., 98.1.
El autómata no determinista de la figura 5.11 reconoce este lenguaje.
Veamos el funcionamiento cuando la cadena de entrada es 98.1. Se muestra en el
siguiente diagrama:
170
5. Autómatas, Lenguajes y Gramáticas
0,1,...,9 0,1,...,9
ǫ, +, − . 0,1,...,9
start q0 q1 q2 q3 q5
ǫ
0,1,...,9 .
q4
9 8 . 1
q0 X
q1 q1 q1 q2 q3
q4 q4 q5
X q3 q3
q5 q5
- 2 3 .
q0 q1 q1 q1 q2
q1 X q4 q4 q3
X q5
171
5.3. Autómatas
. 1 0 . 2
q0 X
q1 q2 q3 q3 X
q5 q5 X
Cada vez que el autómata esté en q0 o en q3 puede pasar espontáneamente (sin consumir
caracteres de la entrada) al estado q1 y q5 respectivamente, por la transición con ǫ.
El autómata no termina de leer la entrada, porque todas las trayectorias posibles están
bloqueadas luego de leer el segundo punto. Entonces, el autómata no acepta esta palabra.
Una ER para este lenguaje es:
(ǫ + + + −)(0 − 9)∗ .(0 − 9)(0 − 9)∗ + (ǫ + + + −)(0 − 9)(0 − 9)∗ .(0 − 9)∗
Ejemplo 5.20
Sean los alfabetos Σ1 = {A, B, ..., Z, a, b, ..., z, ⌣, á, é, ı́, ó, ú } y Σ2 = { ¿,?,!,¡,@,(,),.}.
La unión Σ = Σ1 ∪ Σ2 es el alfabeto de entrada del autómata de la figura 5.12. Es un
autómata no determinista porque desde q0 hay dos transiciones con el caracter ⌣, desde
q1 no hay transiciones para casi todos los caracteres, no hay transiciones desde q3 , etc.
Las siguientes son cadenas aceptadas:
Hey⌣¿estás?
⌣¿Cuál⌣es?
Hola⌣Juan⌣¿Cómo⌣estás?⌣Vamos
Podrı́a pensarse en principio que este AFN acepta las cadenas que contengan una
pregunta bien formulada. Esto no es correcto, porque si bien las cadenas que contienen una
pregunta son aceptadas, también son aceptadas otras cadenas que no son de esa forma,
por ejemplo: ⌣¿?aaa, b⌣¿sje?¡.
El lenguaje aceptado es regular, y se puede representar con la ER: E∗ ⌣¿ E∗1 ?E∗
donde E1 = (A − Z + a − z+ ⌣+ á-ú) y E = E1 + ¿ + ? + ¡ + ! + @ + ( + ) + .
No se demostrará aquı́, pero puede probarse que dado un AFN, puede construirse
un AFD que acepte exactamente el mismo lenguaje. Existe un procedimiento algorı́tmico
para tal construcción. Entonces, cabe preguntarse cuál es la ventaja de introducir no
determinismo, si no se amplı́a el conjunto de lenguajes reconocibles. La ventaja es que
desde el punto de vista del diseño de estos autómatas, es más fácil construir un AFN para
un determinado lenguaje que un AFD, y resulta un autómata más simple.
Con el procedimiento algorı́tmico para obtener un AFD a partir de un AFN, resulta
un autómata determinista que, en general tiene muchos más estados. En el peor de los
casos, partiendo de un AFN con n estados, el AFD equivalente tiene 2n estados.
172
5. Autómatas, Lenguajes y Gramáticas
q3
Σ Σ1
Σ2
⌣ ¿ ?
start q0 q1 q2 q4 Σ
Lo dicho hasta aquı́ implica que todo lenguaje aceptado por un AFN es aceptado
también por un AFD. Entonces, el tipo de lenguaje aceptado por la clase de autómatas
no deterministas es el de lenguajes regulares.
El funcionamiento de los autómatas se puede implementar algorı́tmicamente con un
programa que codifique la función (relación) de transición, y simule el cambio de estado.
Decidir si una cadena de longitud n es aceptada o no por un AFD puede hacerse en tiempo
lineal de orden n.
El no determinismo en la simulación de AFN implica explorar varios caminos posibles
a fin de analizar si alguno llega a un estado de aceptación. Esto es, se debe explorar en
profundidad un árbol de altura n (para una cadena de longitud n). Esto requiere un tiempo
exponencial de orden n.
Máquina de Mealy
En las máquinas de Mealy la salida depende de la transición. La representación gráfica
es con el grafo de transiciones, y en este caso la etiqueta de los arcos son de la forma a/w
donde a es el caracter que lee de entrada, y w es el caracter de salida.
En la figura 5.13 se muestra un ejemplo de una máquina de Mealy que da como salida
la cadena de entrada invertida. El funcionamiento al leer la cadena 0010111 se muestra en
el esquema siguiente.
173
5.3. Autómatas
0/1
start q0 q1
1/0
1/0 0/1
Estado q0 q1 q1 q0 q1 q0 q0 q0
Caracter 0 0 1 0 1 1 1
Salida 1 1 0 1 0 0 0
Ejemplo 5.21
Considere una máquina que detecta secuencias bbb en cadenas en {a, b}∗ .
Dada una cadena, la máquina localiza secuencias de tres b seguidas. Para la cadena
aabbbaabbabbbaa, la salida serı́a 000010000000100, donde los 1 corresponden al último
caracter de la secuencia bbb localizada. Las secuencias pueden solaparse, como en el caso
de la cadena bbbbabbbbb. Para esta cadena, la salida deberı́a ser 0011000111. El 1 en la
tercera posición indica la secuencia bbb que se ubica en las posiciones 1, 2 y 3; el 1 en la
cuarta posición indica la secuencia bbb que se ubica en las posiciones 2, 3 y 4; etc.
La máquina debe recordar los últimos caracteres leı́dos. En particular, debe recordar si
el último caracter fue una a, o si lo último que se leyó fue una secuencia de una b, o una
secuencia de dos b, o una secuencia de tres b. Estas situaciones dan lugar a cuatro estados
de la máquina, q0 , q1 , q2 y q3 , respectivamente. Las transiciones que lleven al estado q3
darán una salida 1, mientras que las otras darán salida 0.
En la figura 5.14 se muestra el diagrama de transiciones para esta máquina.
La tabla de transición para máquinas con salida debe incluir la información de la salida,
además del cambio de estado. Esto puede hacerse agregando columnas correspondientes a
la función de salida, por cada caracter de entrada. La tabla para el ejemplo 5.21 es
Transición Salida
a b a b
→ q0 q0 q1 0 0
q1 q0 q2 0 0
q2 q0 q3 0 1
q3 q0 q3 0 1
Ejemplo 5.22
Un tipo importante de autómata finito con salida es la llamada máquina de k-retardo,
siendo k un número natural. Esta máquina toma la entrada a1 a2 a3 ...an−1 an y da como
salida la cadena 0 . . . 0a1 a2 ...an−k , es decir, devuelve k ceros, y luego da los caracteres de
entrada, retrasados k posiciones. En particular, para k = 1, la salida es 0a1 a2 ...an−1 .
174
5. Autómatas, Lenguajes y Gramáticas
a/0
b/1
q0 b/0 q1 b/0 q2 q3
start
a/0
a/0 b/1
a/0
Para k = 1, la máquina debe recordar cuál fue el anterior caracter leı́do. Si el alfabeto
de entrada es {+, ∗}, necesita un estado para representar que el último caracter leı́do es +,
y un estado para representar que el último caracter leı́do es *. Además, un estado inicial
para representar que no se ha leı́do caracter hasta el momento. Estos estados se denotan
q+ , q∗ y q0 respectivamente. Entonces, cada vez que se lee un +, debe ir a q+ y cada vez
que se lee el caracter *, debe ir a q∗ . Además, cuando se sale de q+ con una transición, la
máquina debe dar como salida +. Y cuando una transición salga del estado q∗ , debe dar
como salida *.
La figura 5.15 muestra el diagrama de transición. Analizando el diagrama, se puede
simular el comportamiento de la máquina. Por ejemplo, para la cadena ++*+***+, la
secuencia de estados y la salida se muestra a continuación:
Estado q0 q+ q+ q∗ q+ q∗ q∗ q∗ q+
Caracter + + * + * * * +
Salida 0 + + * + * * *
Transición Salida
+ * + *
→ q0 q+ q∗ 0 0
q+ q+ q∗ + +
q∗ q+ q∗ * *
Máquinas de Moore
En las máquinas de Moore la salida depende del estado en que se encuentra el autómata.
Cada vez que se produce una transición, el autómata da como salida una cadena o sı́mbolo
asociado al estado al que llega.
Una manera de representarlo es con un grafo de transiciones, como antes, pero ahora
en cada estado se indica la cadena o sı́mbolo de salida.
175
5.4. Expresiones regulares y autómatas
q+ +/+
+/0
*/0
q∗ */*
0
q0 q1
start
0 1
1
1 0
Por ejemplo, considere el autómata de Moore de la figura 5.16. Éste recibe una cadena
de 0 y 1. Cada vez que llega al estado q0 , da como salida un 0, y cada vez que llega al
estado q1 da como salida un 1.
Para analizar su comportamiento, se puede simular el paso de estados y la salida en
cada paso. Al leer la cadena, 0010111, la sucesión de estados en los que se encuentra y la
salida se muestran en la tabla siguiente:
Estado q0 q1 q1 q0 q1 q0 q0 q0
Salida 0 1 1 0 1 0 0 0
Caracter 0 0 1 0 1 1 1
Nótese que el autómata devuelve como salida la cadena de entrada invertida, con un
0 adicional al inicio.
176
5. Autómatas, Lenguajes y Gramáticas
q0 E q1
start
E1 E2 E1 E2
qi qj qi qk qj
E1
E1 + E2 qi qj
qi qj E2
E1
E1 ∗ ǫ ǫ
qi qj qi qk qj
0∗ + 1∗
start q0 q1
0∗
start q0 q1
1∗
177
5.4. Expresiones regulares y autómatas
q2
ǫ ǫ
start q0 q1
ǫ ǫ
q3
Ejemplo 5.24
Se propone construir un autómata finito que acepte el lenguaje representado por la ER
(0 + 1)∗ 1(0 + 1). Este lenguaje contiene las cadenas de 0 y 1 tales que el anteúltimo
caracter es un 1.
El AFN correspondiente se obtiene con los siguientes gráficos de conversión.
(0 + 1)∗ 1(0 + 1)
start q0 q1
(0 + 1)∗ 1(0 + 1)
start q0 q2 q1
(0 + 1)∗ 1 (0 + 1)
start q0 q2 q3 q1
1
q0 ǫ q4 ǫ q2 1 q3 q1
start 0
0+1
1
1
q0 ǫ q4 ǫ q2 1 q3 q1
start 0
178
5. Autómatas, Lenguajes y Gramáticas
1
1
q0 1 q3 q1
start 0
Ejemplo 5.25
La ER oh∗ !∗ representa el lenguaje de cadenas formadas por una o, una cadena (posible-
mente vacı́a) de h y una cadena (posiblemente vacı́a) de !. No confundir con (oh)∗ !∗ , que
representa el lenguaje de repeticiones de oh, seguido de repeticiones de !.
La ER da lugar al AFN que se obtiene con los siguientes gráficos de conversión.
q0 oh∗ !∗ q1
start
q0 o q2 h∗ q3 !∗ q1
start
h !
q0 o q2 ǫ q4 ǫ q3 ǫ q5 ǫ q1
start
h !
q0 o q2 ǫ q1
start
5.5. Gramáticas
5.5.1. Definición
Los lenguajes formales también pueden representarse con una gramática formal. Una
gramática es básicamente, un conjunto de reglas de formación de cadenas válidas en un
lenguaje. Una regla es una expresión de la forma α → β, donde α y β son cadenas de
179
5.5. Gramáticas
Estas reglas indican que una frase está formada por sujeto y predicado. Sujeto pue-
de estar formado por artı́culo-sustantivo-adjetivo o artı́culo-sustantivo. Predicado puede
formarse con un verbo o con un verbo seguido de adverbio. Un artı́culo es el o la, sus-
tantivo puede ser libro o pelı́cula, adjetivo es nuevo y verbo es entretiene o aburre.
En este ejemplo, frase, sujeto, predicado, artı́culo, sustantivo, adjetivo, verbo y adverbio
son sı́mbolos no terminales o variables (también llamadas categorı́as sintácticas), mientras
que el, la, libro, pelı́cula, nuevo, aburre y entretiene son sı́mbolos terminales.
La aplicación de la regla α → β a la cadena uαv, genera la cadena uβv. Es regla de
reemplazo: si aparece la cadena α que está a la izquierda de la regla, se reemplaza por la
cadena de la derecha β.
Con las reglas dadas para la construcción de frases en español, comenzando con f rase,
se puede generar la siguiente frase válida:
frase
sujeto+predicado
artı́culo + sustantivo + predicado
artı́culo + sustantivo + verbo
el + libro + entretiene
180
5. Autómatas, Lenguajes y Gramáticas
tales que ai derive de ai−1 para i=2, 3, ..., n, a1 derive de S (el sı́mbolo inicial de la
gramática) y w derive de an . En notación compacta: S ⇒ a1 ⇒ a2 ⇒ ... ⇒ an ⇒ w.
El lenguaje generado por una gramática es el conjunto de cadenas deriva-
bles a partir de las reglas de la gramática.
Las gramáticas se clasifican de acuerdo al tipo de cadenas a la izquierda y derecha de
las reglas. Esta clasificación de gramáticas impone una jerarquı́a en el tipo de lenguaje
que cada una puede generar. La clasificación de lenguajes que se dará fue propuesta por
Chomsky.
1: S → 0S1
2: S→ǫ
Veamos ejemplos de cadenas derivadas con estas reglas.
Cadena Derivación
0011 S ⇒1 0S1 ⇒1 00S11 ⇒2 0011
000111 S ⇒1 0S1 ⇒1 00S11 ⇒1 000S111 ⇒2 000111
(El subı́ndice en las flechas de derivación indica la regla usada en ese paso).
Debido a la forma de las reglas gramaticales que lo generan, este lenguaje es un lenguaje
independiente del contexto.
Ejemplo 5.27
Considere la gramática de tipo 2 que tiene alfabeto de constantes Σ = {(, )}, variable S, y
reglas:
1: S → SS
2: S → (S)
3: S → ()
181
5.5. Gramáticas
Con estas reglas, se pueden derivar las cadenas de paréntesis bien balanceados (lenguaje
independiente del contexto). Algunas derivaciones son:
Cadena Derivación
()((())) S ⇒1 SS ⇒2 S(S) ⇒2 S((S)) ⇒3 S((())) ⇒3 ()((()))
((()())()) S ⇒2 (S) ⇒1 (SS) ⇒3 (S()) ⇒2 ((S)()) ⇒1 ((SS)()) ⇒3
((S())()) ⇒3 ((()())())
(()) S ⇒2 (S) ⇒3 (())
Muchas veces en una gramática hay varias reglas que tienen la misma cadena a la
izquierda. Una notación compacta para el conjunto de reglas X → Y , X → Z y X → T
es X → Y |Z|T .
Ejemplo 5.28
En ciertos lenguajes de programación, los identificadores son cadenas de caracteres al-
fanuméricos que deben comenzar con una letra. El conjunto de todos los identificadores
válidos se pueden generar con las siguientes reglas:
1: IDEN T IF → LET RA
2: IDEN T IF → IDEN T IF DIGIT O
3: IDEN T IF → IDEN T IF LET RA
4: LET RA → a|b|c...y|z
5: DIGIT O → 0|1|2..,8|9
IDENTIF, LETRA, DIGITO son sı́mbolos no terminales, y a, b, c,..., z, 0, 1, ..., 9
son sı́mbolos terminales.
Con estas reglas se pueden derivar los identificadores válidos. Por ejemplo, para de-
rivar el identificador punto0, se utilizan las siguientes derivaciones: IDEN T IF ⇒2
IDEN T IF DIGIT O ⇒5 IDEN T IF 0 ⇒3 IDEN T IF LET RA 0 ⇒4 IDEN T IF o0
⇒3 IDEN T IF LET RA o0 ⇒4 IDEN T IF to0 ⇒3 IDEN T IF LET RA to0 ⇒4
IDEN T IF nto0 ⇒3 IDEN T IF LET RA nto0 ⇒4 IDEN T IF unto0 ⇒1 LET RA unto0
⇒4 punto0
182
5. Autómatas, Lenguajes y Gramáticas
permanecerá inalterado en todo el proceso. Esto indica que todas las cadenas del lenguaje
generado por estas reglas comienzan con 1.
Toda derivación termina cuando ya no hay variables en la cadena que se está gene-
rando. En este caso, la derivación termina únicamente con la aplicación de la regla 2.c.
Entonces, toda cadena derivada terminará con 1.
Resumiendo, todas las palabras del lenguaje generado por esta gramática son cadenas
de 0 y 1 que comienzan y terminan con 1. En ER se escribe: 1(0 + 1)∗ 1
Ejemplo 5.30
Considere la gramática con sı́mbolos no terminales S, A y B, sı́mbolos terminales Σ =
{0, 1}, y las siguientes reglas:
1:a,b,c S → 0A|1B|1
2:a,b A → 0A|1B
3:a,b,c,d B → 0B|1B|0|1
Estas reglas permiten obtener las siguientes cadenas:
Cadena Derivación
0010 S ⇒1a 0A ⇒2a 00A ⇒2b 001B ⇒3c 0010
01011 S ⇒1a 0A ⇒2b 01B ⇒3a 010B ⇒3b 0101B ⇒3d 01011
000110 S ⇒1a 0A ⇒2a 00A ⇒2a 000A ⇒2b 0001B ⇒3b 00011B ⇒3c 000110
1 S ⇒1c 1
1101 S ⇒1b 1B ⇒3b 11B ⇒3a 110B ⇒3d 1101
El lenguaje generado es 0∗ 1(0 + 1)∗ . Está formado por cadenas de 0 y 1 que consisten
en una cadena de 0 (posiblemente vacı́a), seguido de un 1, seguido de una cadena de 0 y
1.
La variable A indica que se están agregando 0 antes del primer 1. Cuando aparece el
primer 1, se usa la variable B. Ésta indica que ya se generó el primer 1, y que luego puede
aparecer cualquier caracter 0 ó 1 hasta el final de la palabra generada.
Ejemplo 5.31
Se propone hallar una gramática con sı́mbolos constantes Σ = {0, 1, 2}, que genere el
lenguaje de las palabras que contengan la subcadena 22.
Las variables en una gramática denotan determinadas situaciones o estados. Podemos
pensar en este caso en las siguientes variables:
S: representa la situación de no haber producido ningún 2.
X: representa la situación de haber producido un 2.
Y: representa la situación de ya haber generado la subcadena 22.
Las reglas para esta gramática, con las variables ası́ definidas, son:
1: S → 0S|1S|2X
2: X → 0S|1S|2Y |2
3: Y → 0Y |1Y |2Y |0|1|2
La variable S puede reemplazarse por 0S o 1S. En ambos casos, sigue estando la variable
S porque aún no se recibió un 2. Pero S también puede reemplazarse por 2X. En esta regla
se agrega un 2 a la cadena que se está derivando, y por esto aparece la variable X.
183
5.5. Gramáticas
0,1
1 1
start S A Z
Ejemplo 5.33
Dada la gramática del ejemplo 5.30, un AFN que acepte el lenguaje generado por ella
tiene tres estados correspondientes a las variables S, A y B respectivamente, y un estado
de aceptación Z. Siguiendo las reglas de la gramática, desde el estado S salen transiciones
hacia A con el caracter 0, hacia B con el caracter 1 y hacia Z con el caracter 1. Desde
el estado A salen transiciones hacia A con caracter 0 y hacia B con caracter 1. Desde el
estado B las transiciones son hacia B con etiquetas 0 y 1, y hacia Z con etiquetas 0 y 1.
El diagrama del AFN se observa en la figura 5.18.
184
5. Autómatas, Lenguajes y Gramáticas
1 0,1
0 1
start S A B
1 0 0,1
0,1 0,1,2
2 2 0,1,2
start S X Y Z
0,1
2
Figura 5.19: AFN para el lenguaje de cadenas de 0,1,2 que contienen la subcadena 22
(ejemplo 5.31)
Ejemplo 5.34
Considere la gramática del ejemplo 5.31, que genera el lenguaje de cadenas que tienen
la subcadena 22, es decir, el lenguaje (0 + 1 + 2)∗ 22(0 + 1 + 2)∗ . A esta altura es fácil
obtener el AFN que acepte el mismo lenguaje, y se muestra en la figura 5.19.
Para convertir un AFD en una gramática que genere el lenguaje aceptado, el proceso
es similar. La gramática tendrá una variable por cada estado, y la transición del estado
qi al estado qj con el caracter x se convierte en la regla Qi → xQj , donde Qi y Qj son
las variables correspondientes a los estados mencionados. Además, para cada estado de
aceptación qf , si existe una transición de qk al estado qf con caracter z, se convierte en la
regla Qk → z (este tipo de reglas gramaticales, que no tienen variables a la derecha, son
las que dan por terminada la derivación de una cadena).
Ejemplo 5.35
Considere el AFD de la figura 5.20. Este autómata reconoce las cadenas del alfabeto {+, ∗}
tienen tres * seguidos.
La gramática equivalente tiene cuatro variables Q0 , Q1 , Q2 y Q3 . Y las reglas, siguiendo
las transiciones, son:
185
5.5. Gramáticas
+ + +,*
q0 * q1 * q2 * q3
start
Q0 → ∗Q1 | + Q0
Q1 → +Q0 | ∗ Q2
Q2 → +Q0 | ∗ Q3
Q3 → +Q3 | ∗ Q3 | ∗ |+
Ejemplo 5.36
El autómata de la figura 5.8a reconoce el lenguaje de cadenas binarias que comienzan con
00. Las reglas para una gramática que genere ese lenguaje son:
Q0 → 0Q1 |1Q3
Q1 → 0Q2 |1Q3
Q2 → 0Q2 |1Q2 |0|1
Q3 → 0Q3 |1Q3
Ejemplo 5.37
Se da un ejemplo de una GIC para generar expresiones artiméticas válidas con números
naturales, con sumas y producto:
186
5. Autómatas, Lenguajes y Gramáticas
1: S→I
2: S →S+S
3: S →S ·S
4: S → (S)
5: I → I0|I1|...|I9
6: I → 0|1|...|9
Ejemplo 5.38
Considere el lenguaje de las cadenas palı́ndromas, aquellas que se leen igual al derecho y
al revés. Para simplificar, considere que los caracteres del alfabeto son a y b.
Las reglas de una gramática para este lenguaje pueden formar las cadenas agregando
el mismo caracter adelante y atrás de la cadena. Es decir, S → aSa y S → bSb. Estas
dos reglas no son suficientes, porque se necesita al menos una regla que no deje variables,
como por ejemplo S → ǫ. Con estas tres reglas se pueden generar todos los palı́ndromos de
longitud par. Se necesitan reglas que permitan formar los palı́ndromos de longitud impar,
y éstas son S → a (si el caracter central es a) y S → b (si el caracter central es b). Ahora
sı́, la gramática está completa, y consta de las reglas:
1: S → aSa
2: S → bSb
3: S →ǫ
4: S →a
5: S →b
Ejemplo 5.39
Una GIC para generar programas con sentencias if y if else se puede plantear de la siguiente
manera. Sean las variables o caracteres no terminales V = { S, STAT }, y las constantes
o caracteres terminales Σ = { if, then, else, cond, otras } y las reglas:
S → ST AT
ST AT → if cond then ST AT
ST AT → if cond then ST AT else ST AT
ST AT → ST AT ST AT
ST AT → otras
Ejemplo 5.40
Una versión muy simplificada de la estructura del lenguaje HTML puede ser descrita con
las reglas:
187
5.5. Gramáticas
Ejemplo 5.41
La cadena baabaab es un palı́ndromo que puede generarse con la gramática del ejemplo
5.38. El árbol de derivación de esta cadena es:
188
5. Autómatas, Lenguajes y Gramáticas
b S b
a S a
a S a
S + S
I S · S
I 3 I I
2 1 I 8
Ejemplo 5.43
La gramática dada en el ejemplo 5.27 genera las cadenas de paréntesis balanceados. Las
reglas permiten derivar la cadena ()((())()). Su árbol de derivación es:
S S
( ) ( S )
S S
( S )( )
( )
189
5.6. Autómatas a pila
S · S
S + S I
I I I 8
I 3 1 4
Cuando esto ocurre se dice que la gramática es ambigua. Existen técnicas para eliminar
la ambigüedad de una gramática. Pero aún ası́ hay lenguajes independientes de contexto
para los que no existe una gramática no ambigua.
190
5. Autómatas, Lenguajes y Gramáticas
Ejemplo 5.44
Un AP para el lenguaje {0n 1n , n > 1} es el que se muestra en la figura 5.21. El AP tiene
dos estados. q0 representa la situación de estar leyendo caracteres 0, y q1 representa la
situación de leer caracteres 1.
Al inicio, el AP se encuentra en q0 . Si recibe un 0, no saca nada de la pila, y agrega
un caracter 0 a la misma. Si estando en q0 recibe un 1, pasa al estado q1 , y elimina un
0 del tope de la pila. Mientras esté en q1 y siga recibiendo caracteres 1, va eliminado
caracteres 0 de la pila. Si estando en q1 recibe un 0, no lo puede leer (no hay transición
definida para este caso), y el autómata se detiene sin haber podido terminar la palabra. En
cambio, mientras reciba 1, y haya caracteres 0 para sacar de la pila, el autómata continúa
en ese estado. Si llega al final de la palabra y la pila esta vacı́a (se consumieron todos los 0
agregados mientras estaba en q0 ), la cadena es aceptada, porque q1 es estado de aceptación.
Estudiemos el funcionamiento del AP para la cadena 000111. El cambio de estado y
el contenido de la pila (entre paréntesis, al lado del estado) se muestran en el siguiente
diagrama:
0 0 0 1 1 1
0 0 1 1 1
0 1 0 1 1 0
0/ǫ/0
1/0/ǫ
start q0 q1 1/0/ǫ
191
5.6. Autómatas a pila
Nuevamente, en este caso, no puede terminar de leer la palabra, porque no hay transi-
ción definida desde q1 con el caracter 0.
Y si la cadena de entrada es 00011:
0 0 0 1 1
Ejemplo 5.45
Un AP que reconozca el lenguaje de los palı́ndromos de longitud par, con los caracteres x
e y se muestra en la figura 5.22.
Cada vez que recibe un caracter en la primera mitad de la palabra, lo guarda en el
tope de la pila. La transición que cambia de estado sin consumir caracter se supone que se
ejecuta en la mitad de la palabra. Al recibir un caracter de la segunda mitad de la cadena,
elimina el caracter del tope de la pila, que debe ser el mismo caracter recibido.
Para la cadena xyyx, el funcionamiento es como sigue:
x y y x
X X q1 (x) X
q1 (ǫ)
Hay tres trayectorias que se bloquean porque la transición correspondiente indica eli-
minar un determinado caracter de la lista, pero este caracter no está disponible en el tope
de la pila. Estos bloqueos se representan con las X.
Al terminar de leer la palabra existen tres trayectorias no bloqueadas, una termina en
el estado q0 , que no es de aceptación, y la otra termina en el estado q1 , que es estado
de aceptación, pero la pila no está vacı́a, y la tercera trayectoria termina en el estado de
aceptación q1 y además la pila se encuentra vacı́a en este punto. Por lo tanto, la cadena
es aceptada por el AP.
Para la cadena xyx, el funcionamiento es como sigue:
192
5. Autómatas, Lenguajes y Gramáticas
x/ǫ/x x/x/ǫ
ǫ/ǫ/ǫ
start q0 q1
y/ǫ/y y/y/ǫ
x y x
X X X
Al terminar de leer la cadena, las dos trayectorias no bloquedas muestran que la pila no
está vacı́a. Por lo tanto, la cadena no es aceptada, no pertenece al lenguaje de palı́ndromos
de longitud par.
193
5.7. Máquina de Turing
Ejemplo 5.46
Se describirá en este ejemplo una MT que reconoce el lenguaje {0n 1n , n > 1}. La cadena
de entrada está escrita en la cinta, y el cabezal apunta al primer caracter. La máquina
funcionará de la siguiente manera: se ubica en el 0 más a la izquierda, lo reemplaza por
el caracter X, y moviéndose a la derecha, busca el primer 1 y lo reemplaza por Y. Luego
se mueve hacia la izquierda y busca el 0 más a la izquierda (que estará a la derecha de las
X escritas en la cinta). Lo reemplaza por X, y continúa iterando como antes.
En cada momento, la cinta contiene una cadena formada por una secuencia de X,
seguida de una secuencia de 0, seguida de una secuencia de Y, seguida de una secuencia de
0 y 1. Si la cadena de entrada es de la forma 0n 1n , en cada momento, la cinta tendrá escrita
una cadena de la forma X k 0n−k Y k 1n−k o X k 0n−k Y k−1 1n−k+1 .
La máquina tiene 4 estados: q0 , que identifica la situación de estar leyendo el 0 más
194
5. Autómatas, Lenguajes y Gramáticas
Y /Y /D B/B/D
start q0 q3 q4
X/X/D 0/X/D Y /Y /D
Y /Y /I q2 q1 Y /Y /D
1/Y /I
0/0/I 0/0/D
Con este ejemplo como modelo, no es difı́cil construir una MT que reconozca el lenguaje
0n 1n 2n . Podrı́a pensarse en el mismo funcionamiento: buscar el 0 más a la izquierda y
cambiarlo por X, moverse a la derecha y buscar el 1 más a la izquierda y cambiarlo por
Y, moverse a la derecha y buscar el 2 más a la izquierda y cambiarla por Z. Luego volver
hacia la izquierda hasta encontrar una X, y repetir el proceso.
Como se sabe, no existe un AF o AP que reconozca este lenguaje.
Además de reconocer lenguajes, las MT también se aplican al cálculo de funciones. El
resultado escrito en la cinta puede pensarse como el resultado de un cálculo, la salida de
una función.
Por ejemplo, la suma de dos números naturales escritos en representación unaria (el
número n se representa con una cadena de n unos) puede pensarse como una función
de dos entradas. Una posible MT para implementarla podrı́a funcionar de la siguiente
manera: la cadena de entrada representa los dos números a sumar, n y m, que se escriben
en la cinta como una cadena de n unos, seguida de un cero, seguida de una cadena de
m unos. La máquina, comenzando a la izquierda de la entrada, puede borrar el primer 1,
moverse hasta el 0, y sobreescribir un 1 en esa posición. El resultado es una cadena de
n + m unos.
Toda función que se puede implementar en una máquina de Turing se dice que es
computable. Existen funciones no computables.
Por ejemplo, sea B(n) una función que indica el número máximo de unos que una MT
con n estados puede escribir sobre una cinta inicialmente en blanco. Se sabe que B(2) = 4,
195
5.7. Máquina de Turing
B(3) = 6, B(4) = 13. Sin embargo, se desconoce B(n) para n > 5. No existe una MT que
pueda calcular esta función.
El diseño de MT que implemente funciones puede resultar muy complicado, aún para
funciones simples. Sin embargo, la potencia de este modelo está en la respuesta a la
pregunta de qué se puede computar y qué no, más que la construcción en sı́ misma.
Se han propuesto diseños alternativos de MT para aumentar su capacidad de cómputo.
Por ejemplo, se han estudiado MT con más de una cinta, más de un cabezal, una cinta
como un arreglo bidimensional, etc. Pero todos estos estudios determinaron que ninguna
de estas ideas consigue aumentar la capacidad de la MT definida aquı́, es decir, que todas
las variantes del modelo son equivalentes. Se conoce como Tesis de Church-Turing a la
afirmación (no demostrada pero universalmente aceptada) de que todo lo que pueda hacer
un dispositivo de computación, puede ser hecho por alguna MT.
Se ha mencionado que una MT acepta una cadena si termina en un estado de acepta-
ción. Existe otra idea de aceptación, y es el de funcionamiento finito. O, en otras
palabras, que la MT pare en algún momento, por ejemplo, llegando a un estado q, apun-
tando a un caracter a, siendo que no está definida la transición para este caso.
Siempre es posible hacer que una MT pare cuando acepta una palabra, por ejemplo,
si no hay transiciones desde el estado de aceptación. Pero puede ser que la máquina no se
detenga si no acepta la palabra, y quede ciclando infinitamente. Los lenguajes reconocidos
por MT que siempre se detienen, ya sea que acepten o no la cadena analizada, se denominan
recursivos.
Se ha dicho que un lenguaje aceptado por una MT entra en la tipificación de lenguajes
recursivamente enumerables. Esta clasificación no abarca a todos los lenguajes, ya que
hay lenguajes que no son aceptados por una MT. Como en este contexto, problemas y
lenguajes puede verse como lo mismo, estamos diciendo que hay problemas indecidibles.
Daremos un ejemplo de un problema indecidible, es decir, para el cual no existe una MT
que pueda resolverlo.
Todas las MT se pueden codificar con cadenas binarias. Es decir, la descripción de la
función de transición se puede hacer con cadenas de 0 y 1. Dada una MT A, llamaremos
wA a su codificación. Y consideremos las máquinas cuyo alfabeto de entrada es {0, 1}.
El problema de decidir si una MT A acepta la cadena wA es indecidible. Es decir, no
existe una MT que resuelva esa cuestión para toda MT de alfabeto binario. En términos
de lenguajes, se está considerando el lenguaje LnoRE = {w : w no es aceptada por la MT
codificada con w}, consistente en las codificaciones de máquinas que no son aceptadas
por la misma máquina. Este lenguaje no es recursivamente enumerable: no existe MT que
acepte exactamente las cadenas en LnoRE .
Si existiera tal máquina, llamémosla T . Sea wT su codificación.
Si wT ∈ LnoRE , es aceptada por T , ya que esta máquina acepta las cadenas en el
lenguaje LnoRE . Pero, por definición de LnoRE , wT no es aceptada por la máquina que
representa, es decir, no es aceptada por T , y se llega a una contradicción.
Si wT ∈ / LnoRE , no es aceptada por T , ya que T acepta únicamente las cadenas en
LnoRE . Por definición de LnoRE , como wT no está en ese conjunto, es aceptada por la
máquina que representa, T . Nuevamente se llega a una contradicción.
Las contradicciones surgen de suponer que la máquina T existe. Entonces, no existe
máquina que reconozca LnoRE y entonces no es un lenguaje recursivamente enumerable.
196
5. Autómatas, Lenguajes y Gramáticas
Para finalizar, se presenta una tabla resumen de los tipos de lenguajes, tipos de gramáti-
cas y tipos de máquinas correspondientes.
5.8. Problemas
Problema 5.1
Sean Σ1 = {a, b, c}, Σ2 = {0, 1, 2} y Σ3 = Σ1 ∪ Σ2 alfabetos; y considere los lenguajes
L1 = {0i 2j : i, j ∈ Z, i, j > 1}, L2 = {ai bj : i, j ∈ Z, i, j > 1}; L3 = {0i 2j : i, j ∈ Z, 1 6
i, j 6 3}; L4 = {a0i2 j b : i, j ∈ Z, 1 6 i, j 6 3} y L5 = {a, c, 0, 1, 2}.
Dar cuatro cadenas de cada uno de los lenguajes.
Problema 5.2
Decir cuáles de las siguientes afirmaciones sobre los lenguajes definidos en el problema
anterior son verdaderas.
a. L1 es un lenguaje sobre Σ2
b. L2 está contenido en la clausura de Σ1
c. L3 es un subconjunto de L1
d. L4 es un subconjunto de L1
e. L5 es un lenguaje sobre Σ3
f. L5 es finito
g. L1 es finito
h. L3 es finito
Problema 5.3
Dado el alfabeto Σ = {a, c, l, n, d} y los lenguajes L1 = {ala, c, ca} y L2 = {ana, ada, da},
dar los lenguajes L1 L2 y L1 ∪ L2 .
¿Cuál es la relación entre la cantidad de palabras en L1 , en L2 , en L1 L2 y en L1 ∪ L2 ?
Problema 5.4
Dar un ejemplo de dos lenguajes L1 y L2 tales que |L1 L2 | = |L1 ||L2 | y |L1 ∪ L2 | =
|L1 | + |L2 |.
Problema 5.5
Dado el alfabeto Σ = {0, 1}, describa las cadenas de los lenguajes
197
5.8. Problemas
a. 0∗ 1(01)∗ 1
b. 001∗ 0
c. 10∗
d. (0 + 1)0
e. 0∗ 13 0
Problema 5.6
Dado el alfabeto Σ = {0, 1}, determine si la cadena 010001 pertenece a algun/os de los
siguientes lenguajes: 01(00)∗ 1; 010∗ 1; (01) + 0∗ (01); (010001)+
Problema 5.7
Dado el alfabeto Σ = {0, 1}, dé expresiones regulares para describir los lenguajes
q0 1 q1
start
0 1 0
q2
0,1
198
5. Autómatas, Lenguajes y Gramáticas
Problema 5.13
Generar una gramática libre de contexto que genere las palabras binarias que comienzan
con 1.
Problema 5.14
Proponer una gramática libre de contexto para producir el lenguaje {ai bj , i > j}.
Problema 5.15
Proponer una gramática libre de contexto para producir el lenguaje de paréntesis, corchetes
y llaves balanceados.
Problema 5.16
En un lenguaje de programación, cada aparición de un else debe ir precedida por un if. Y
cada if no puede corresponder a más de un else. Por otro lado, puede aparecer un if sin
un else.
Entonces, en un programa en ese lenguaje pueden aparecer secuencias como if ... if ...
else ... if ...; pero no es correcta la secuencia if ... else ... else ... if ... else ....
Proponer una gramática para generar las secuencias de if y else válidas .
Problema 5.17
Diseñar un autómata a pila para aceptar el lenguaje de los palı́ndromos con un número
par de sı́mbolos.
Problema 5.18
Diseñar un autómata a pila para aceptar el lenguaje formado por las palabras de {0, 1}∗
que tenga la misma cantidad de unos que de ceros.
Problema 5.19
Si se quiere diseñar un autómata para buscar ciertas palabras claves en un texto , ¿qué tipo
de autómata es más apropiado?
Problema 5.20
Suponga que se requiere un analizador léxico para detectar direcciones (nombre de calle +
número de casa) en páginas web. Construye una expresión regular para el analizador.
199