You are on page 1of 210

Complejidad computacional de problemas y el

an alisis y dise no de algoritmos


Dra. Elisa Schaeffer
4 de julio de 2011
Prefacio
Estas notas fueron escritas para el curso de An alisis y Dise no de Algoritmos
(MECBS5126) del Programa de Posgrado en Ingeniera de Sistemas (PISIS) de la Fac-
ultad de Ingeniera Mec anica Y El ectrica (FIME) de la Universidad Aut onoma de Nuevo
Le on, ubicada en San Nicol as de los Garza, en el estado de Nuev o Le on en M exico. Es un
curso del programa doctoral, aunque tambi en permitimos estudiantes de maestra llevarlo
a su propio riesgo. La mayora de los estudiantes de PISIS no son comp utologos, y a un
menos del campo de teora de computaci on, por lo cu al la presentaci on es simplicada de
lo usual de programas con enfoque en computaci on.
Mucho de este material se debe a los materiales que use yo misma cuando estudi e las mis-
mas temas en la Universidad Polit ecnica de Helsinki (TKK). En el a no 2000 trabaj e como
asistente de ense nanza en un curso de an alisis y dise no de algoritmos bajo la instrucci on
del Dr. Eljas Soisalon-Soininen, y juntos con otro asistente de ense nanza Riku Saikkonen,
compilamos un documento en n es L
A
T
E
X basado en las diapositivas escritas a mano por
el Dr. Soisalon-Soininen y en el libro de texto de Cormen et al. [4]. Al empezar a compilar
este documento en castellano, mi primer recurso era el documento antiguo en n es, por
lo cual varios ejemplos son inspirados por el trabajo que hicimos en el a no 2000.
Otro fuente importante es el Dr. Ilkka Niemel a de TKK y el curso de complejidad com-
putacional que di o el, basado en el libro de texto cl asico de Christos Papadimitriou [15].
Dr. Niemel a me prest o todas sus diapositivas del curso para la preparaci on de este docu-
mento, por lo cual le agradezco mucho.
Otras partes del documento est an prestadas y modicadas de trabajos anteriores mos, en
la revisi on de los cuales he contado con el apoyo de muchas personas, los m as importantes
siendo el asesor de mi tesis doctoral el Dr. Pekka Orponen y el oponente de la misma tesis
el Dr. Josep Daz.
I
II

Indice general
1. Deniciones matem aticas y computacionales 1
1.1. Conjuntos y permutaciones . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1. Subconjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.2. Relaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.3. Permutaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2. Mapeos y funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3. Funci on exponencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4. Logaritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5. Sucesiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.5.1. Series aritm eticas . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.5.2. Series geom etricas . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5.3. Otras series . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.6. Demostraciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.7. L ogica matem atica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.7.1. L ogica booleana . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.7.2. L ogica proposicional . . . . . . . . . . . . . . . . . . . . . . . . 14
1.7.3. Informaci on digital . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.7.4. Redondeo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.8. Teora de grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.8.1. Clases de grafos . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.8.2. Adyacencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.8.3. Grafos bipartitos . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.8.4. Densidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.8.5. Caminos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.8.6. Conectividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
III
IV

INDICE GENERAL
1.8.7. Subgrafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.8.8.

Arboles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2. Problemas y algoritmos 23
2.1. Problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1.1. Problema de decisi on . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1.2. Problema de optimizaci on . . . . . . . . . . . . . . . . . . . . . 23
2.2. Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.2.1. Algoritmo recursivo . . . . . . . . . . . . . . . . . . . . . . . . 25
2.3. Calidad de algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.3.1. Operaci on b asica . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.3.2. Tama no de la instancia . . . . . . . . . . . . . . . . . . . . . . . 26
2.3.3. Funciones de complejidad . . . . . . . . . . . . . . . . . . . . . 27
2.3.4. Consumo de memoria . . . . . . . . . . . . . . . . . . . . . . . 27
2.3.5. An alisis asint otico . . . . . . . . . . . . . . . . . . . . . . . . . 28
3. Modelos de computaci on 31
3.1. M aquinas Turing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2. M aquinas de acceso aleatorio (RAM) . . . . . . . . . . . . . . . . . . . . 34
3.3. M aquinas Turing no deterministas . . . . . . . . . . . . . . . . . . . . . 37
3.4. M aquina Turing universal . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.5. M aquina Turing precisa . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4. Complejidad computacional de problemas 41
4.1. Clases de complejidad de tiempo . . . . . . . . . . . . . . . . . . . . . . 41
4.2. Clases de complejidad de espacio . . . . . . . . . . . . . . . . . . . . . . 42
4.3. Problemas sin soluci on . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.4. Problema complemento . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.5. Algunos problemas fundamentales . . . . . . . . . . . . . . . . . . . . . 44
4.5.1. Problemas de l ogica booleana . . . . . . . . . . . . . . . . . . . 44
4.5.2. Problemas de grafos . . . . . . . . . . . . . . . . . . . . . . . . 46
5. Clases de complejidad 53
5.1. Jer arquias de complejidad . . . . . . . . . . . . . . . . . . . . . . . . . . 55

INDICE GENERAL V
5.2. Reducciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.3. Problemas completos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.3.1. Problemas NP-completos . . . . . . . . . . . . . . . . . . . . . . 67
5.3.2. Caracterizaci on por relaciones: certicados . . . . . . . . . . . . 69
5.4. Complejidad de algunas variaciones de SAT . . . . . . . . . . . . . . . . 70
5.4.1. Problemas kSAT . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.4.2. SAT de no todos iguales (NAESAT) . . . . . . . . . . . . . . . 71
5.5. Complejidad de problemas de grafos . . . . . . . . . . . . . . . . . . . . 72
5.5.1. El problema de ujo m aximo . . . . . . . . . . . . . . . . . . . . 73
5.5.2. El problema de corte mnimo . . . . . . . . . . . . . . . . . . . . 76
5.5.3. Caminos y ciclos de Hamilton . . . . . . . . . . . . . . . . . . . 78
5.5.4. Coloreo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.5.5. Conjuntos y n umeros . . . . . . . . . . . . . . . . . . . . . . . . 80
5.6. Algoritmos pseudo-polinomiales . . . . . . . . . . . . . . . . . . . . . . 80
5.7. Problemas fuertemente NP-completos . . . . . . . . . . . . . . . . . . . 81
6. Estructuras de datos 83
6.1. Arreglos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.1.1. B usqueda binaria . . . . . . . . . . . . . . . . . . . . . . . . . . 84
6.1.2. Ordenaci on de arreglos . . . . . . . . . . . . . . . . . . . . . . . 85
6.2. Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.2.1. Pilas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.2.2. Colas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
6.2.3. Ordenaci on de listas . . . . . . . . . . . . . . . . . . . . . . . . 90
6.3.

Arboles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.3.1.

Arboles binarios . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.3.2.

Arboles AVL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
6.3.3.

Arboles rojo-negro . . . . . . . . . . . . . . . . . . . . . . . . . 97
6.3.4.

Arboles B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
6.3.5.

Arboles biselados . . . . . . . . . . . . . . . . . . . . . . . . . . 99
6.4. Montculos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
6.4.1. Montculos bin omicos . . . . . . . . . . . . . . . . . . . . . . . 102
6.4.2. Montculos de Fibonacci . . . . . . . . . . . . . . . . . . . . . . 103
VI

INDICE GENERAL
6.5. Grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
6.5.1. B usqueda y recorrido en grafos . . . . . . . . . . . . . . . . . . 106
6.5.2. Componentes conexos . . . . . . . . . . . . . . . . . . . . . . . 109
6.6. Tablas de dispersi on din amicas . . . . . . . . . . . . . . . . . . . . . . . 113
6.7. Colas de prioridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
6.8. Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
6.8.1. Estructuras unir-encontrar . . . . . . . . . . . . . . . . . . . . . 116
6.8.2. Implementaci on de un conjunto en forma de un arbol . . . . . . . 116
7. An alisis de algoritmos 119
7.1. Algoritmos simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
7.2. Complejidad de algoritmos recursivos . . . . . . . . . . . . . . . . . . . 120
7.2.1. Soluci on general de una clase com un . . . . . . . . . . . . . . . 121
7.2.2. M etodo de expansi on . . . . . . . . . . . . . . . . . . . . . . . . 123
7.2.3. Transformaciones . . . . . . . . . . . . . . . . . . . . . . . . . . 124
7.3. An alisis de complejidad promedio . . . . . . . . . . . . . . . . . . . . . 125
7.3.1. Ordenaci on r apida . . . . . . . . . . . . . . . . . . . . . . . . . 125
7.4. An alisis de complejidad amortizada . . . . . . . . . . . . . . . . . . . . 128
7.4.1. Arreglos din amicos . . . . . . . . . . . . . . . . . . . . . . . . . 129
7.4.2.

Arboles biselados . . . . . . . . . . . . . . . . . . . . . . . . . . 133
7.4.3. Montculos de Fibonacci . . . . . . . . . . . . . . . . . . . . . . 136
8. T ecnicas de dise no de algoritmos 139
8.1. Algoritmos de lnea de barrer . . . . . . . . . . . . . . . . . . . . . . . . 139
8.2. Dividir y conquistar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
8.2.1. Cubierta convexa . . . . . . . . . . . . . . . . . . . . . . . . . . 144
8.3. Podar-buscar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
8.4. Programaci on din amica . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
8.4.1. Triangulaci on optima de un polgono convexo . . . . . . . . . . . 150
9. Optimizaci on combinatoria 153
9.1.

Arbol cubriente mnimo . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
9.2. Ramicar-acotar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
9.2.1. Problema de viajante . . . . . . . . . . . . . . . . . . . . . . . . 155

INDICE GENERAL VII


10. Algoritmos de aproximaci on 157
10.1. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
10.2. B usqueda local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
10.2.1. Deniciones b asicas . . . . . . . . . . . . . . . . . . . . . . . . 160
10.2.2. Ejemplo: 2-opt . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
10.2.3. Complejidad de b usqueda local . . . . . . . . . . . . . . . . . . 161
11. Algoritmos aleatorizados 165
11.1. Complejidad computacional . . . . . . . . . . . . . . . . . . . . . . . . 167
11.2. Problema de corte mnimo . . . . . . . . . . . . . . . . . . . . . . . . . 168
12. Transiciones de fase 171
12.1. Modelo de Ising . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
12.2. Problema del viajante (TSPD) . . . . . . . . . . . . . . . . . . . . . . . 173
12.3. Grafos aleatorios uniformes . . . . . . . . . . . . . . . . . . . . . . . . . 173
12.3.1. Familias y propiedades . . . . . . . . . . . . . . . . . . . . . . . 173
12.3.2. Modelos de generaci on . . . . . . . . . . . . . . . . . . . . . . . 174
12.3.3. Comportamiento repentino . . . . . . . . . . . . . . . . . . . . . 175
12.3.4. Aparici on de un componente gigante . . . . . . . . . . . . . . . 175
12.4. Cubierta de v ertices (VERTEX COVER) . . . . . . . . . . . . . . . . . . 176
Listas de smbolos 179
Conjuntos y conteo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Mapeos y funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
L ogica matem atica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Probabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Lista de abreviaciones 183
Minidicconario espa nol-ingl es 184
Minidicconario ingl es-espa nol 187
Lista de guras 189
VIII

INDICE GENERAL
Lista de cuadros 191

Indice alfab etico 195


Captulo 1
Deniciones matem aticas y
computacionales
1.1. Conjuntos y permutaciones
Si unos elementos a, b y c forman un conjunto, se asigna una letra may uscula para denotar
el conjunto y ofrece una lista de los elementos seg un la siguiente notaci on:
A = a, b, c . (1.1)
Si el elemento a pertenece a un conjunto A, se escribe a A. Si el elemento a no
pertenece al conjunto A, se escribe a / A.
Z es el conjunto de n umeros enteros y R es el conjunto de n umeros reales.
Si un conjunto est a ordenado, se puede denir para cada par de elementos si uno est a may-
or, menor o igual a otro seg un el orden denido.
El cardinalidad de un conjunto A es el n umero de elementos que pertenecen al conjunto.
Se denota por [A[. Por ejemplo, la cardinalidad del conjunto A = a, b, c es tres, [a[ = 3.
La uni on de dos conjuntos Ay B contiene todos los elementos de Ay todos los elementos
de B y se denota por AB. La intersecci on de dos conjuntos A y B se denota por AB
y contiene solamente los elementos que pertenecen a ambos conjuntos:
c (A B)
_
(c A) (c B)
_
, (1.2)
donde signica que la expresi on a la izquierda siendo verdadera implica que la expre-
si on a la derecha tambi en tiene que ser v alida y viceversa.
Nota que necesariamente [A B[ m ax [A[ , [B[ y [A B[ mn [A[ , [B[. El
conjunto vaco que no contiene ning un elemento se denota con .
1
2 CAP

ITULO 1. DEFINICIONES MATEM



ATICAS Y COMPUTACIONALES
1.1.1. Subconjuntos
Un subconjunto B A es un conjunto que contiene alg un parte de los elementos del
conjunto A. Si no se permite incluir todos los elementos de A en B, escribimos B A y
aplica [B[ < [A[. Por ejemplo, si A = a, b, c, B = b, c y C = c, d, tenemos que
B A, pero C no es un subconjunto: C A.
El complemento de un conjunto A es el conjunto

A que contiene cada elemento del uni-
verso que no est a incluido en A,

A = a [ a / A . (1.3)
El complemento de un subconjunto B A se denota por A B (leer: A sin B) y es el
conjunto de todos elementos a A tales que a / B. En general, la diferencia de dos
conjuntos A y B es el conjunto de los elementos que est an en A pero no en B,
A B = a [ a A, a / B . (1.4)
Dado un conjunto A, el conjunto de todos sus subconjuntos se denota con 2
A
. El n umero
total de tales subconjuntos es 2
|A|
. Por ejemplo, si A = a, b, c, tenemos [A[ = 3, 2
3
= 8
y
2
A
= , a, b, c, a, b, b, c, a, c, A.
Un k-subconjunto de un conjunto Aes un subconjunto de k elementos de A. Si [A[ = n, el
n umero de los diferentes combinaciones de k elementos posibles es el coeciente binomio
_
n
k
_
=
n!
k!(n k)!
, (1.5)
donde n! es el factorial. El factorial est a denido a todo n umero entero k Z tal que
k! = k (k 1) (k 2) . . . 2 1. (1.6)
Una aproximaci on muy util del factorial es la aproximaci on de Stirling
k! k
k
e
k

2k (1.7)
y una versi on mejorada por Gosper es
k!
_
(2k +
1
3
)k
k
e
k
, (1.8)
donde e 2, 718 es el n umero neperiano.
El coeciente binomio permite una denici on recursiva:
_
n
k
_
=
_ _
n1
k1
_
+
_
n1
k
_
, si 0 < k < n
1, en otro caso.
(1.9)
1.1. CONJUNTOS Y PERMUTACIONES 3
El rango (cerrado) es un subconjunto de un conjunto ordenado desde el elemento a hasta
el elemento b se marca con [a, b]. El rango abierto que no incluye el primer ni el ultimo
elemento sino todos los elementos intermedios c tales que a < c < b se denota con (a, b).
Si uno de los puntos extremos s se incluye y el otro no, la notaci on es (a, b] o [a, b),
dependiendo de cu al extremo est a incluido.
El conjunto AB es el conjunto de todos los pares ordenados (a, b) de elementos de los
conjuntos A y B tal que a A y b B,
AB = (a, b) [ a A, b B . (1.10)
El conjunto A B se llama el producto cartesiano. Se puede generalizar a m as de dos
conjuntos: para n conjuntos A
1
, A
2
, . . . , A
n
, es el conjunto de todos los n-eadas ordenadas
A
1
A
2
. . . A
n
= (a
1
, a
2
, . . . , a
n
) [ a
i
A
i
, i [1, n] . (1.11)
1.1.2. Relaciones
Una relaci on 1 AB es un subconjunto de pares. Una relaci on entre un conjunto A =
a
1
, a
2
, . . . , a
n
y otro conjunto B = b
1
, b
2
, . . . , b
m
es un subconjunto de asociaciones
de elementos de Acon los elementos de B. Se escribe (a, b) 1o alternativamente a1b.
Una relaci on se puede representar en la forma de una n m matriz, donde n = [A[ y
m = [B[. La representaci on es una matriz binaria A tal que el elemento a
ij
de la matriz
A tiene el valor uno si y s olo si los elementos a
i
y b
j
forman uno de los pares incluidos
en la relaci on 1:
a
ij
=
_
1, si (a
i
, b
j
) 1,
0, si (a
i
, b
j
) / 1.
(1.12)
Una relaci on 1 AA entre un conjunto y si mismo se dice una relaci on en el conjunto
A. Tal relaci on es transitiva si a, b, c A tales que a1b y b1c, tambi en aplica que a1c.
Una relaci on 1 en A es reexiva si para todo a A, aplica que a1a. Una relaci on 1 en
A es sim etrica si aplica que
(a
i
, a
j
) 1 (a
j
, a
i
) 1. (1.13)
Esto implica que la n n matriz A, donde n = [A[, es tambi en sim etrica: A = A
T
.
El clausura transitiva de una relaci on 1 A A es la relaci on transitiva 1
T
A
A de cardinalidad menor que contiene 1. Entonces, a1
T
b para a, b A s y s olo si
c
0
, c
1
, . . . , c
k
A tales que c
0
= a, c
k
= b y c
i
1
T
c
i+1
para todo i [0, n).
La clausura reexiva de la relaci on 1 en A es la relaci on mnima reexiva 1
R
en A que
contiene 1: para todo a, b A aplica a1
R
b si y s olo si a = b o a1b.
En la clausura reexiva y transitiva 1

aplica que (a, b) 1

si y s olo si o a = b o existe
un c A tal que (a, c) 1y (c, b) 1

.
4 CAP

ITULO 1. DEFINICIONES MATEM



ATICAS Y COMPUTACIONALES
1.1.3. Permutaciones
Una permutaci on de un conjunto A es un orden de los elementos. Si [A[ = n, A tiene n!
permutaciones. Por ejemplo, si A = a, b, c, d, las 4! = 24 permutaciones de A son
abcd abdc adbc adcb acbd acdb
bacd badc bdac bdca bcad bcda
cabd cadb cdab cdba cbad cbda
dabc dacb dcab dcba dbac dbca
El n umero de k-subconjuntos ordenados del conjunto A de orden [A[ = n es
k!
_
n
k
_
=
n!
(n k)!
. (1.14)
Por ejemplo, si A = a, b, c, d y k = 3, los 12 ordenes son
abc abd acd bac bad bcd
cab cad cbd dab dbc dcb
1.2. Mapeos y funciones
Un mapeo (ingl es: map o mapping) g : A B es un tipo de relaci on que asocia algunos
elementos de A a elementos de B, pero no necesariamente todos. Un mapeo es t ecnica-
mente equivalente a una relaci on 1
g
, pero tpicamente se escribe g(a) = b para signicar
que (a, b) 1
g
. Nota que se puede asignar varios elementos de A a un elemento de B y
viceversa.
El conjunto A se llama el dominio de la relaci on y el conjunto B el rango. El conjunto
de los elementos b
i
B para las cuales aplica (a, b
i
) 1
g
(es decir g(a) = b
i
) son
la imagen de a en B. El conjunto de los elementos de A que corresponden a un cierto
elemento b B tal que (a, b) 1
g
es la imagen inversa de b, g
1
(b).
Un mapeo g : A B es sobreyectivo (tambi en epiyectivo; ingl es: surjection o onto) si
para cada elemento del rango est a asignada alg un elemento del dominio:
b Ba A tal que g(a) = b. (1.15)
Un mapeo es inyectivo (ingl es: injection o one-to-one) si
a
1
, a
2
A tales que a
1
= a
2
g(a
1
) = g(a
2
), (1.16)
o sea, la imagen inversa de todo b B tiene cardinalidad menor o igual a uno. Aqu
signica que la expresi on a la izquierda siendo verdadera implica que la expresi on a la
derecha tambi en tiene que ser v alida, pero no es necesariamente as en la direcci on con-
traria: g(a
1
) = g(a
2
) no implica que necesariamente sea a
1
= a
2
, puede ser que a
1
,= a
2
tambi en.
1.3. FUNCI

ON EXPONENCIAL 5
Un mapeo es biyectivo si es inyectivo y sobreyectivo: todo elemento de A tiene una ima-
gen distinta y la uni on de las im agenes cubren todo el rango B.
Una funci on f : A B es un mapeo sobreyectivo pero no necesariamente una inyectiva.
El smbolo f reere a la funci on misma, mientras f(x) reere al valor de la funci on en x,
o sea, el elemento del rango B a lo cual corresponde el elemento del dominio x A.
Una funci on f : R R es convexa si para todo x
1
, x
2
y [0, 1]
f(x
1
+ (1 )x
2
) f(x
1
) + (1 )f(x
2
). (1.17)
El valor absoluto de x R es una funci on de valores reales a valores reales positivos:
[x[ =
_
x, si x 0
x, si x < 0.
(1.18)
1.3. Funci on exponencial
La funci on exponencial se dene por un serie (la expansi on de Taylor) como
exp(x) = e
x
=

i=0
x
i
i!
= 1 + x +
x
2
2!
+
x
3
3!
+ . . . (1.19)
donde e 2, 718281828 es el constante de Napier. La gura 1.1 muestra su forma. Una
denici on alternativa es por lmite:
e
x
= lm
n
_
1 +
x
n
_
n
. (1.20)
0
200
400
600
800
1000
0 2 4 6 8 10
Escala lineal
1
10
100
1000
10000
0 2 4 6 8 10
Escala logartmica
Figura 1.1: Gr acas de la funci on exponencial f(x) = exp(x): a la izquierda, en escala
lineal, mientras a la derecha, el eje y tiene escala logartmica (ver la secci on 1.4).
La funci on exponencial comparte las propiedades de exponentes sin importar la base b,
que en el caso de exp(x) es e:
b
0
= 1
b
1
= b
b
a+c
= b
a
b
c
b
ac
= (b
a
)
c
b
a
=
_
1
b
_
a
=
1
b
a
(1.21)
6 CAP

ITULO 1. DEFINICIONES MATEM



ATICAS Y COMPUTACIONALES
mientras tambi en tiene otras propiedades interesantes: es su propio derivativo
D(e
x
) = e
x
. (1.22)
Aplican las siguientes cotas y aproximaciones que resultan utiles en varios contextos de
an alisis de algoritmos:
_
1
1
x
_
k
e

k
x
1 x e
x
x
x
x!
< e
x
para [x[ 1 : e
x
(1 x
2
) 1 + x e
x
para k x : 1
k
x
e

k
x
.
(1.23)
1.4. Logaritmos
El logaritmo en base b es una funci on que se dene por la ecuaci on
b
log
b
x
= x, (1.24)
donde x > 0. Eso quiere decir que si log
b
x = y, b
y
= x. Se dene adem as que log
b
1 = 0.
Se puede realizar cambios de base b a otra base b

:
log
b
(x) =
log
b
(x)
log
b
(b

)
. (1.25)
El logaritmo con la base e se llama el logaritmo natural o neperiano. En la gura 1.2, se
muestra las funciones para tres valores de base. Tpicamente se escribe ln x para log
e
x
y log x sin base normalmente se interpreta como log
10
, aunque en computaci on la inter-
pretaci on log x = log
2
x es muy com un cuando x Z.
Tpicamente en el an alisis de algoritmos se utiliza b = 2. El logaritmo es una funci on
inyectiva,
log
b
x = log
b
y = x = y, (1.26)
y tambi en es una funci on creciente
x > y = log
b
x > log
b
y. (1.27)
Cuenta con algunas propiedades de inter es que ayuden a simplicar f ormulas:
Logaritmo de multiplicaci on: log
b
(x y) = log
b
x + log
b
y
Logaritmo de divisi on: log
b
_
x
y
_
= log
b
x log
b
y
Logaritmo con potencia: log
b
x
c
= c log
b
x
Logaritmo en el exponente: x
log
b
y
= y
log
b
x
,
Logaritmo de un factorial: log
b
(n!) =

n
i=1
log
b
i
(1.28)
1.5. SUCESIONES 7
1
2
3
4
5
6
7
8
9
10
0 200 400 600 800 1000
b = 2
b = e
b = 10
Figura 1.2: Las funciones logartmicas por tres valores tpicos de la base: b 2, e, 10,
donde e 2, 718 es el n umero neperiano.
la segunda igualdad siendo consecuencia de la primera, la pen ultima igualdad siendo
consecuencia de la tercera y la ultima siendo consecuencia de la primera.
Una variaci on de la aproximaci on de Stirling para el factorial cuenta con logaritmos:
ln k! k ln k k (1.29)
que aplica para valores grandes de k. Una forma que aplica m as generalmente es
ln k!
2k + 1
2
ln k k +
ln(2)
2
. (1.30)
1.5. Sucesiones
Dado una sucesi on de n umeros, asignamos un ndice a cada n umero de la sucesi on. Por
ejemplo, el primer n umero ser a x
1
, el segundo x
2
, etc etera, hasta el ultimo n umero, que
marcamos con x
n
, n siendo el largo de la sucesi on. Cada uno de los x
1
, x
2
, . . . se llama
un t ermino. Para hablar de un t ermino arbitrario cualquiera, usamos x
i
(o alguna otra letra
de ndice), donde se supone de una manera implcita que 1 i n.
La suma de los t erminos de una sucesi on x
1
, x
2
, . . . , x
n
se llama una serie S y la sumaci on
tiene su notaci on especial donde un ndice i corre desde el valor uno hasta el valor n:
S = x
1
+ x
2
+ x
3
+ . . . + x
n
=
n

i=1
x
i
. (1.31)
Una serie parcial S
k
es la suma hasta el t ermino x
k
:
S
k
=
k

i=1
x
i
. (1.32)
8 CAP

ITULO 1. DEFINICIONES MATEM



ATICAS Y COMPUTACIONALES
Tal que S
n
= S. Depende la sucesi on de qu e manera calcular el valor de la serie S o un
subserie S
k
.
Tambi en se puede denir el producto de una sucesi on:
P = x
1
x
2
x
3
. . . x
n
=
n

i=1
x
i
. (1.33)
1.5.1. Series aritm eticas
En las series aritm eticas, la diferencia entre cada par de t erminos subsecuentes x
i
y x
i+1
es un constante d:
x
i+1
x
i
= d (1.34)
para todo i [0, n 1] si es una sucesi on nita y para todo i [0, ) en el otro caso.
La suma de una sucesi on innita es innita positiva si la diferencia d > 0 y innita
negativa si la diferencia d < 0 es negativa. La subserie de los n t erminos primeros
de una sucesi on aritm etica es
S
n
=
n1

i=0
(x
1
+ i d) =
n(x
1
+ x
n
)
2
. (1.35)
Se puede derivar la f ormula por pensar en la suma como un tri angulo de encima de colum-
nas que todos tienen una base de altura x
1
, y en cada columna, el cambio de altura es d a
en comparaci on con la columna anterior. Se deja como un ejercicio hacer el c alculo que
corresponde.
Otra manera de derivar el resultado es a trav es de la ecuaci on recursiva de los t erminos:
x
i+1
= x
i
+ d. (1.36)
Aplicamos esta ecuaci on de una manera repetitiva para encontrar una ecuaci on para x
n
:
x
2
= x
1
+ d,
x
3
= x
2
+ d = (x
1
+ d) + d = x
1
+ 2d,
x
4
= x
3
+ d = (x
1
+ 2d) + d = x
1
+ 3d,
.
.
.
x
n
= x
1
+ (n 1)d.
(1.37)
En la otra direcci on, tenemos
x
n1
= x
n
d,
x
n2
= x
n1
d = (x
n
d) d = x
n
2d,
x
n3
= x
n2
d = (x
n
2d) d = x
n
3d,
.
.
.
x
nk
= x
nk1
d = x
n
(n k)d,
x
1
= x
n(n1)
= x
n

_
n
_
n (n 1)
_
_
d = x
n
(n 1)d.
(1.38)
1.5. SUCESIONES 9
Al sumar x
1
+x
2
+. . . +x
n
escrito por la formulaci on de la ecuaci on 1.37 con lo mismo
pero escrito por la formulaci on de la ecuaci on 1.38 nos da 2S
n
y se simplica a dar el
mismo resultado. El c alculo se deja como ejercicio.
Tambi en hay que notas que transformaciones del ndice hacen que las series se ven m as
complejas:
n

i=1
(n i + 1) =
n

i=1
i. (1.39)
1.5.2. Series geom etricas
En una serie geom etrica, la proporci on de un t ermino con el siguiente es constante:
x
i+1
= x
i
d. (1.40)
Si [d[ > 1, la serie innita tiene un valor innita el signo de cual depende de los signos
de x
1
y d. Cuando [d[ < 1, incluido las series innitas tienen una suma nita:
S =

i=0
d
i
x
i
=
x
1
1 d
. (1.41)
Nota que hay que empezar del ndice i = para lograr que el primer t ermino tenga el valor
x
1
= d
0
x
1
.
Las sumas parciales hasta t ermino n cuando d ,= 1 tienen la f ormula siguiente:
S
n
=
n

i=0
d
i
x
i
=
x
1
(1 d
n+1
)
1 d
. (1.42)
Cuando d = 1, todos los t erminos son iguales a x
1
y la suma parcial es simplemente
S
n
= n x
1
.
Un ejemplo es la subserie donde x
1
= 1 y d ,= 1, o sea, la suma parcial de la sucesi on,
1, d, d
2
, d
3
, . . .:
S
n
=
n

i=0
d
i
=
1(1 d
n+1
)
1 d
=
d
n+1
1
d 1
. (1.43)
Entonces, si d = 2 y x
1
= 1, tenemos la suma de potencias de dos:
S
n
=
n

i=0
2
i
=
2
n+1
1
2 1
= 2
n+1
1. (1.44)
10 CAP

ITULO 1. DEFINICIONES MATEM



ATICAS Y COMPUTACIONALES
1.5.3. Otras series
Hay algunas series interesantes donde el ndice de la sumaci on aparece en el t ermino.
Aqu incluyamos unos ejemplos:
n

i=1
i
2
=
n(n + 1)(2n + 1)
6
n

i=0
i d
i
=
n d
n+2
(n + 1) d
n+1
+ d
(d 1)
2
, donde d ,= 1

i=0
d
i
=
1
1 d
, donde d ,= 1

i=n
k
i
=
k
n
1 k
, donde x (0, 1)

i=1
i
2
=

2
6
.
(1.45)
1.6. Demostraciones
Para analizar si o no algo es valido en todo caso, se necesita utilizar los conceptos de
sistemas matem aticos: los hechos universales se llaman axiomas. Adem as se cuenta con
deniciones donde se ja el sentido de alg un formalismo, notaci on o terminologa. La
meta es derivar de los axiomas y las deniciones, algunos teoremas, que son proposi-
ciones verdaderas. Cada teorema trata de una cierta propiedad de inter es. Los teoremas
auxiliares que uno tiene que demostrar para llegar al resultado nal deseado se lla-
man lemas. La cadena de pasos que establecen que un teorema sea verdad es llama la
demostraci on (o tambi en prueba) del teorema.
Una t ecnica esencial de demostraci on es la inducci on matem atica, donde primero se es-
tablece que una condici on inicial c
1
es v alida y verdadera (el paso base), y despu es deriva
que si c
k
es v alida y verdadera, tambi en c
k+1
lo es (el paso inductivo).
Por ejemplo, para vericar que la suma de la ecuaci on 1.35 (en la p agina 8) es la f ormula
correcta para la sucesi on 3, 5, 8, 11, 14, 17, 20, . . . , 213, primero sacamos los valores x
1
=
d = 3 y mostramos que S
1
= x
1
+0d = 3+0 = 3 = x
1
es v alida (el paso base). Despu es
hay que mostrar que S
n
+ x
n+1
= S
n+1
(el paso inductivo). Cuando uno establece esto,
la demostraci on de que la validez de la f ormula de la ecuaci on 1.35 est a completa.
1.7. L

OGICA MATEM

ATICA 11
1.7. L ogica matem atica
1.7.1. L ogica booleana
La l ogica booleana de trata de un conjunto X de variables que tambi en se llama atomos
x
1
, x
2
, . . .. Una variable se interpreta a tener el valor verdad (se denota con el smbolo
) o falso (se denota con el smbolo ). La negaci on de una variable x
i
se denota con
x
i
:
x
i
=
_
, si x
i
= ,
, si x
i
= .
(1.46)
Se puede formar expresiones de las variables con los smbolos. Las expresiones b asicas
son los literales x
i
y x
i
. Adem as se puede formar expresiones con los conectivos (o),
(y) tambi en se considera un conectivo. Si
1
y
2
son expresiones booleanas,
tambi en (
1

2
), (
1

2
) y
1
lo son. Por ejemplo, ((x
1
x
2
) x
3
) es una expre-
si on booleana pero ((x
1
x
2
)x
3
) no lo es. Para simplicar las expresiones, existen las
convenciones siguientes:
n

i=1

i
signica
1

n
n

i=1

i
signica
1

n

1

2
signica
1

2

1

2
signica (
1

2
) (
2

1
).
(1.47)
Lo de se llama una implicaci on y lo de se llama una equivalencia.
Es siempre recomendable marcar con par entesis la precedencia deseada de los operadores
l ogicos, pero en su ausencia, la precedencia se interpreta en el orden (de la m as fuerte al
m as d ebil): , , , , . Por ejemplo, la expresi on
x
1
x
2
x
3
x
4
x
1
x
3
(1.48)
debera ser interpretada como
((((x
1
) x
2
) x
3
) ((x
4
) (x
1
x
3
))). (1.49)
Como las variables se interpreta como verdaderas o falsas, tambi en es posible evaluar si o
no es verdadera cualquier expresi on booleana. Una asignaci on de verdad T es un mapeo
de una subconjunto nito X

X al conjunto de valores , . Denota por X() el


conjunto de variables booleana que aparezcan en una expresi on . Una asignaci on de
valores T : X

, es adecuada para si X() X

. Escribimos x
i
T si
T(x
i
) = y x
i
/ T si T(x
i
) = .
Si T satisface a , lo que se denota por T [= tiene siguiente la denici on inductiva:
(I) Si X

, aplica T [= si y s olo si T() = .


12 CAP

ITULO 1. DEFINICIONES MATEM



ATICAS Y COMPUTACIONALES
(II) Si =

, aplica T [= si y s olo si T ,[=

(lee: T no satisface a

).
(III) Si =
1

2
, aplica T [= si y s olo si T [=
1
y T [=
2
.
(IV) Si =
1

2
, aplica T [= si y s olo si T [=
1
o T [=
2
.
Una expresi on booleana es satisfactible si existe una asignaci on de verdad T que es
adecuada para y adem as T [= .
Una expresi on booleana es v alida si para toda T imaginable aplica que T [= . En este
caso, la expresi on es una tautologa y se lo denota por [= . En general aplica que [= si
y s olo si es no satisfactible.
Dos expresiones
1
and
2
son l ogicamente equivalentes si para toda asignaci on T que es
adecuada para las dos expresiones aplica que
T [=
1
si y s olo si T [=
2
. (1.50)
La equivalencia l ogica se denota por
1

2
.
Por ejemplo, si tenemos la asignaci on T(x
1
) = y T(x
2
) = , es v alido que T [=
x
1
x
2
, pero T ,[= (x
1
x
2
) (x
1
x
2
). Unos ejemplos de expresiones l ogicamente
equivalentes son los siguientes:

(
1

2
) (
2

1
)
((
1

2
)
3
) (
1
(
2

3
))
((
1

2
)
3
) ((
1

3
) (
2

3
))
(
1

2
) (
1

2
)
(
1

1
)
1
.
(1.51)
Existen formas normales de escribir expresiones booleana. Las dos formas normales son
la forma normal conjuntiva (CNF) que utiliza puramente el conectivo y literales y la
forma normal disyunctiva (DNF) que utiliza puramente el conectivo y literales. Una
conjunci on de literales se llama un implicante y una disyunci on de literales se llama una
cl ausula. Se puede asumir que ninguna cl ausula ni implicante sea repetido en una forma
normal, y tampoco se repiten literales dentro de las cl ausulas o los implicantes. Las reglas
para transformar una expresi on booleana a una de las dos formas normales son los sigu-
ientes: primero eliminamos las notaciones auxiliares y y movemos las negaciones
a formar literales:
(I) Eliminar la notaci on auxiliar de : La expresi on
1

2
es l ogicamente equiv-
alente a la expresi on (
1

2
) (
1

2
) por lo cual puede ser reemplazado
con la expresi on m as larga que ya no contiene el smbolo auxiliar no permitido
en las formas normales.
(II) Eliminar la notaci on auxiliar de : La expresi on
1

2
es l ogicamente equiv-
alente a la expresi on
1

2
por lo cual puede ser reemplazado con la segunda
1.7. L

OGICA MATEM

ATICA 13
expresi on que ya no contiene el smbolo auxiliar no permitido en las formas
normales.
(III) Mover negaciones donde las variables para formar literales: utiliza las sigu-
ientes equivalencias l ogicas para cambiar la ubicaci on de los smbolos de negaci on
tal que no habr a redundancia y que cada negaci on forma un literal y ya no aplica
a una expresi on compleja:
es equivalente a
(
1

2
) es equivalente a
1

2
(
1

2
) es equivalente a
1

2
.
(1.52)
Despu es de aplicar esas reglas tantas veces como posible, queda una expresi on de puros
literales con los conectivos y . Para lograr una forma normal conjunctiva, hay que
mover los conectivos afuera de los disyunciones aplicando las equivalencias l ogicas
siguientes:

1
(
2

3
) es equivalente a (
1

2
) (
1

3
)
(
1

2
)
3
es equivalente a (
1

3
) (
2

3
).
(1.53)
Si la meta es lograr la forma normal disyuntiva, hay que aplicar las equivalencias sigu-
ientes para mover los conectivos afuera de los conjunciones:

1
(
2

3
) es equivalente a (
1

2
) (
1

3
)
(
1

2
)
3
es equivalente a (
1

3
) (
2

3
).
(1.54)
Es importante tomar en cuenta que las expresiones en forma normal pueden en el peor
caso tener un largo exponencial en comparaci on con el largo de la expresi on original.
Para dar un ejemplo de la transformaci on, consideramos el caso de la expresi on (x
1

x
2
) (x
2
x
3
) y su transformaci on a la forma normal conjuntiva utilizando las reglas
mencionadas. Cada lnea en el proceso es l ogicamente equivalente con todas las versiones
anteriores por las equivalencias ya denidas; para ahorrar espacio, utilizamos la notaci on
siguiente para las variables: a = x
1
, b = x
2
y c = x
3
.
(a b) (b c)
(a b) (b c)
(a b) ((b c) (c b))
(a b) ((b c) (c b))
(a ((b c) (c b))) (b ((b c) (c b)))
((a (b c)) (a (c b))) (b ((b c) (c b)))
((a (b c)) (a (c b))) ((b (b c)) (b (c b)))
(1.55)
Una funci on booleana de n-dimensiones f es un mapeo de ,
n
al conjunto , .
El conectivo corresponde a una funci on unaria f

: , , denida por
la ecuaci on 1.46. Los conectivos , , y denen cada uno una funci on binaria
f : ,
2
, .
14 CAP

ITULO 1. DEFINICIONES MATEM



ATICAS Y COMPUTACIONALES
Cada expresi on booleana se puede interpretar como una funci on booleana con la dimen-
si on n = [X()[. Se dice que una expresi on booleana expresa una funci on f si cada
n-eada de valores de verdad = (t
1
, . . . , t
n
) aplica que
f() =
_
, si T [= ,
, si T ,[= ,
(1.56)
donde T es tal que T(x
i
) = t
i
para todo i = 1, . . . , n.
Las funciones booleanas se puede representar a trav es de grafos (ver secci on 1.8 como
circuitos booleanos: los v ertices son puertas y el grafo es dirigido y no cclico. Un grafo
dirigido no cclico siempre se puede etiquetar tal que cada v ertice est a representado por
un n umero entero, V = 1, 2, . . . , n, de tal manera que aplica para cada arista dirigida
i, j E que i < j. La asignaci on de tales etiquetas se llama sorteo topol ogico.
Cada puerta es de un cierto tipo: la puerta puede representar una variable x
i
, una valor
o o un conectivo (, o ). Los v ertices que corresponden a variables o los valores
de verdad deben tener grado de entrada cero. Las puertas de tipo negaci on tienen grado
de entrada uno y las puertas con o tienen grado de entrada dos. El ultimo v ertice n
representa la salida del circuito.
Los valores de verdad de las distintas puertas se determina con un procedimiento induc-
tivo tal que se dene el valor para cada puerta todas las entradas de la cual ya est an
denidos. Cada circuito booleano corresponde a una expresi on booleana . Los circuitos
pueden ser representaciones m as compactas que las expresiones, porque en la construc-
ci on del circuito se puede compartir la denici on de un subcircuito, mientras en las
expresiones habr a que repetir las subexpresiones que aparecen en varias partes de la ex-
presi on.
1.7.2. L ogica proposicional
La l ogica de primer orden es una l ogica donde se cuantica variables individuales. Ca-
da variable individual corresponde a una oraci on. Los smbolos de cuanticaci on son la
cuanticador para la cuanticaci on existencial y la cuanticador para la cuanticaci on
universal.
La cuanticaci on existencial quiere decir que en un conjunto indicado existe por lo menos
una variable que cumpla con una cierta requisito, mientras la cuanticaci on universal dice
que alguna requisito se aplica para todas las variables del conjunto indicado. Por ejemplo,
x R, y tal que x = 2y. (1.57)
Se puede cuanticar varias variables al mismo tiempo:
x, y Z, z, z

Z tal que x y = z y x + y = z

. (1.58)
1.7. L

OGICA MATEM

ATICA 15
0
20
40
60
80
100
120
140
0 1 2 3 4 5 6 7
1
100
10000
1e+06
1e+08
1e+10
1e+12
1e+14
1e+16
1e+18
1e+20
0 10 20 30 40 50 60
Figura 1.3: Gr acas de las potencias de dos: a la izquierda, con ejes lineales hasta x = 7,
y a la derecha, con ejes de escala logartmica hasta x = 64.
1.7.3. Informaci on digital
Bit
El bit es la unidad b asica de informaci on digital. Un bit es una variable binaria: tiene dos
valores posibles que se interpreta como los valores l ogicos verdad (1) y falso (0).
En la memoria de una computadora, se expresa los n umeros enteros con sumas de poten-
cias de dos (ver el cuadro 1.1 y la gure 1.3), empezando con la potencia m as grande que
quepa en el n umero e iterando hasta llegar a la suma correcta.
Representamos la presencia de una cierta potencia con un bit de valor 1 y su ausencia por
un bit de valor 0, empezando con la potencia m as grande presente:
61 = 32 + 29 = 32 + 16 + 13 = 32 + 16 + 8 + 5
= 32 + 16 + 8 + 4 + 1
= 25 + 24 + 23 + 22 + 20
111101.
Entonces se necesita seis bits para representar el valor 61. Por lo general, la cantidad b de
bits requeridos para representar un valor x Z
+
est a el exponente de la mnima potencia
de dos mayor a x,
b = mn
kZ
_
k [ 2
k
> x
_
. (1.59)
Para incluir los enteros negativos, se usa un bit auxiliar de signo.
Byte
El byte es la unidad b asica de capacidad de memoria digital. Un byte (se pronuncia bait)
es una sucesi on de ocho bits. El n umero entero m as grande que se puede guardar en un
solo byte es
2
7
+ 2
6
+ 2
5
+ 2
4
+ 2
3
+ 2
2
+ 2
1
+ 2
0
= 2
8
1 = 255
16 CAP

ITULO 1. DEFINICIONES MATEM



ATICAS Y COMPUTACIONALES
Cuadro 1.1: Algunas potencias del n umero dos, 2
k
= x
2
1
= 2 2
20
= 1 048 576 2
40
= 1 099 511 627 776
2
2
= 4 2
21
= 2 097 152 2
41
= 2 199 023 255 552
2
3
= 8 2
22
= 4 194 304 2
42
= 4 398 046 511 104
2
4
= 16 2
23
= 8 388 608 2
43
= 8 796 093 022 208
2
5
= 32 2
24
= 16 777 216 2
44
= 17 592 186 044 416
2
6
= 64 2
25
= 33 554 432 2
45
= 35 184 372 088 832
2
7
= 128 2
26
= 67 108 864 2
46
= 70 368 744 177 664
2
8
= 256 2
27
= 134 217 728 2
47
= 140 737 488 355 328
2
9
= 512 2
28
= 268 435 456 2
48
= 281 474 976 710 656
2
10
= 1 024 2
29
= 536 870 912 2
49
= 562 949 953 421 312
2
11
= 2 048 2
30
= 1 073 741 824 2
50
= 1 125 899 906 842 624
2
12
= 4 096 2
31
= 2 147 483 648 2
51
= 2 251 799 813 685 248
2
13
= 8 192 2
32
= 4 294 967 296 2
52
= 4 503 599 627 370 496
2
14
= 16 384 2
33
= 8 589 934 592 2
53
= 9 007 199 254 740 992
2
15
= 32 768 2
34
= 17 179 869 184 2
54
= 18 014 398 509 481 984
2
16
= 65 536 2
35
= 34 359 738 368 2
55
= 36 028 797 018 963 968
2
17
= 131 072 2
36
= 68 719 476 736 2
56
= 72 057 594 037 927 936
2
18
= 262 144 2
37
= 137 438 953 472 2
57
= 144 115 188 075 855 872
2
19
= 524 288 2
38
= 274 877 906 944 2
58
= 288 230 376 151 711 744
2
39
= 549 755 813 888 2
59
= 576 460 752 303 423 488
1.7. L

OGICA MATEM

ATICA 17
y entonces, contando cero, son 256 valores posibles por un byte. Nota que aplica en
general la igualdad
2
k+1
1 =
k

i=0
2
i
. (1.60)
Un kilobyte es 1024 bytes, un megabyte es 1024 kilobytes (1048576 bytes) y un gigabyte
es 1024 megabytes (1073741824 bytes). Normalmente el prex kilo implica un mil, pero
como mil no es ning un potencia de dos, eligieron la potencia m as cercana, 2
10
= 1024,
para corresponder a los prexes.
Representaci on de punto otante
Para representar n umeros reales por computadora, hay que denir hasta que exactitud
se guarda los decimales del n umero, como el espacio para guardar un n umero entero
est a limitada a un tama no constante. El m etodo com un de lograr tal representaci on es
lo de punto otante (tambi en conocido como coma otante) donde la representaci on se
adapta al orden magnitud del valor x R. La idea es trasladar la coma decimal hacia la
posici on de la primera cifra signicativa de x mediante un exponente :
x = m b

, (1.61)
donde m se llama la mantisa y contiene los dgitos signicativos de x es com un nor-
malizar la mantisa tal que su parte entera consta de solamente la primera cifra signicativa
de x. La mantisa tpicamente tiene un tama no m aximo limitado a una cierta cantidad ja
de bytes.
El par ametro b en ecuaci on 1.61 es la base del sistema de representaci on. Los n umeros
binarios tienen base b = 2 y com unmente en c alculo utilizamos b = 10. Tambi en existen
sistemas en base b = 8 (el sistema octal) y b = 16 (el sistema hexadecimal).
Lo que determina el rango de valores posibles que se puede representar en punto otante
es la cantidad de memoria reservada para el exponente Z de la ecuaci on 1.61.
La otra opci on sera simplemente reservar una cierta cantidad de bytes para la repre-
sentaci on y jar a posici on en la cual se supone que est e la coma decimal. La repre-
sentaci on de punto ja es mucho m as restrictiva con respeto al rango de valores posibles
de guardar. En comparaci on, el m etodo de punto otante causa variaciones en la exactitud
de la representaci on, mientras permite guardar valores de un rango mucho m as amplio.
1.7.4. Redondeo
Funciones techo y piso
La funci on piso x : R Z dene el n umero entero m aximo menor a x R:
x = m ax
yZ
y [ x y . (1.62)
18 CAP

ITULO 1. DEFINICIONES MATEM



ATICAS Y COMPUTACIONALES
Por denici on, siempre aplica para todo x R que
x x < x + 1 (1.63)
donde la igualdad ocurre solamente cuando x Z. Igualmente, tenemos
x 1 < x x (1.64)
Tambi en, para todo k Z y x R aplica
k + x = k +x. (1.65)
Una sucesi on de combinar las propiedades del logaritmo con la funci on piso es que siem-
pre aplica tambi en para x > 0, x R que
x
2
< 2
log
2
x
x, (1.66)
la vericaci on de que se deja como ejercicio.
La funci on techo x : R Z dene el n umero entero mnimo mayor a x R:
x = mn
yZ
y [ x y . (1.67)
Aplica por denici on que
x x < x + 1. (1.68)
Se deja como ejercicio vericar que tambi en para x R, x > 0 aplica
x 2
log
2
x
< 2x. (1.69)
Funci on parte entera
Varios lenguajes de programaci on incorporan una manera de convertir un n umero en for-
mato punto otante a un valor entero. Por ejemplo, en C se permite la construcci on sigu-
iente
float a = 3.76;
int b = (int)a;
donde la regla de asignar un valor a la variable b es una mezcla de la funciones piso y
techo: denota el valor de la variable a por a. Si a 0, se asigna a b el valor a, y cuando
a < 0, se asigna a b el valor a.
La funci on que captura esta comportamiento es la funci on parte entera
[x] : R Z. (1.70)
El redondeo tpico de x R al entero m as pr oximo es equivalente a [x + 0,5].
Hay que tener mucho cuidado con la operaci on de parte entera en programaci on, como
implica p erdida de datos. Acumulando uno despu es de otro, los errores de redondeo se
pueden amplicar y causar comportamiento no deseado en el programa. Por ejemplo, en
algunas implementaciones una sucesi on instrucciones como
1.8. TEOR

IA DE GRAFOS 19
float a = 0.6/0.2;
int b = (int)a;
puede resultar en b asignada al valor 2, porque por la representaci on binaria de pun-
to otante de los valores 0,6 y 0,2, su divisi on resulta en el valor punto otante
2,999999999999999555910790149937. Entonces, aplicar la funci on parte entera al val-
or de la variable a resulta en el valor 2, aunque la respuesta correcta es 3.
1.8. Teora de grafos
Un grafo (tambi en se dice gr aca) G es un par de conjuntos G = (V, E), donde V es un
conjunto de n v ertices (o sea, nodos), u, v, w V y E es un conjunto de aristas m (o sea,
arcos). Utilizamos la notaci on [V [ = n, [E[ = m
Las aristas son tpicamente pares de v ertices, u, v E, o sea, las aristas denen una
relaci on entre el conjunto V con si mismo:
E V V, (1.71)
pero tambi en se puede denir grafos donde el producto es entre m as de dos copias del
conjunto V , el cual caso se habla de hpergrafos.
El complemento de un grafo G = (V, E) es un grafo

G = (V,

E) donde
v ,= u :
_
v, u

E v, u / E
_
. (1.72)
1.8.1. Clases de grafos
Un grafo es plano si se puede dibujar en dos dimensiones tal que ninguna arista cruza a
otra arista. En un grafo no dirigido, los v ertices v y w tienen un papel igual en la arista
v, u. Si las aristas tienen direcci on, el grafo G es dirigido (tambi en digrafo) y el v ertice
v es el origen (o inicio) de la arista dirigida v, w y el v ertice w es el destino (o n) de la
arista. Un bucle es una arista reexiva, donde coinciden el v ertice de origen y el v ertice
de destino: v, v o v, v. Si un grafo G no cuente con ninguna arista reexiva, el grafo
es no reexivo.
En el caso general, E puede ser un multiconjunto, es decir, es posible que haya m as de una
arista entre un par de v ertices. En tal caso, el grafo se llama multigrafo. Si no se permiten
aristas m ultiples, el grafo es simple.
Si se asignan pesos (v) w (o costos o longitudes) a las aristas, el grafo es ponderado. Si
se asigna identidad a los v ertices o las aristas, es decir que sean distinguibles, el grafo es
etiquetado.
20 CAP

ITULO 1. DEFINICIONES MATEM



ATICAS Y COMPUTACIONALES
1.8.2. Adyacencia
Dos aristas v
1
, v
2
y w
1
, w
2
de un grafo son adyacentes si tienen un v ertice en com un:
[v
1
, v
w
w
1
, w
2
[ 1 (1.73)
(el valor puede ser mayor a uno solamente en un multigrafo). Una arista es incidente a un
v ertice si esta lo une a otro v ertice.
Dos v ertices v y w son adyacentes si una arista los une:
v, w E. (1.74)
V ertices adyacentes son llamados vecinos y el conjunto de vecinos del v ertice v se llama
su vecindario y se denota con (v).
La matriz A que corresponde a la relaci on E se llama la matriz de adyacencia del grafo;
para construir la matriz, es necesario etiquetar los v ertices para que sean identicados
como v
1
, v
2
, . . . , v
n
. La matriz de adyacencia de un grafo no dirigido es sim etrica.
Para representar la adyacencia de multigrafos, es mejor abandonar la matriz binaria y con-
struir otra matriz entera A

donde el elemento a

ij
0 contiene el n umero de aristas entre
v
i
y v
j
. Para grafos ponderados, es mejor usar una matriz (real) A

donde el elemento a

ij
contiene el peso de la arista v
i
, v
j
o cero si no hay tal arista en el grafo.
El grado deg (v) de un v ertice v es el n umero de aristas incidentes a v. Para grafos dirigi-
dos, se dene el grado de salida

deg (v) de un v ertice v como el n umero de aristas que
tienen su origen en v y el grado de entrada

deg (v) de v como el n umero de aristas que
tienen su destino en v. El grado total de un v ertice de un grafo dirigido es
deg (v) =

deg (v) +

deg (v) . (1.75)


En un grafo simple no dirigido, el grado deg (v
i
) del v ertice v
i
es la suma de la ij esima
la de A.
Nota que siempre aplica

vV
deg (v) = 2m. (1.76)
La sumaci on sobre v V quiere decir que cada v ertice v del conjunto V se toma en
cuenta una vez en el c alculo.
En un grafo simple no reexivo, aplica
deg (v) = [(v)[ . (1.77)
Si todos los v ertices tienen el mismo grado k, el grafo es regular, o mejor dicho, k-regular.
En un grafo n 1-regular, cada v ertice est a conectado a cada otro v ertice por una arista.
Se llama un grafo completo y se denota por K
n
.
1.8. TEOR

IA DE GRAFOS 21
1.8.3. Grafos bipartitos
Un grafo bipartito es un grafo G = (V, E) cuyos v ertices se pueden separar en dos
conjuntos disjuntos U y W,
U W = , U W = V (1.78)
tal que las aristas solamente unen v ertices de un conjunto con algunos v ertices del otro:
u, w E (u U w W) (u W w U). (1.79)
En un grafo bipartito completo est an presentes todas las aristas entre U y W. Se denota
tal grafo por K
a,b
donde a = [U[ y b = [W[. Nota que para K
a,b
, siempre aplica que
m = a b.
1.8.4. Densidad
El n umero m aximo posible de aristas en un grafo simple es
m
max
=
_
n
2
_
=
n(n 1)
2
. (1.80)
Para K
n
, tenemos m = m
max
. La densidad (G) de un G se dena como
(G) =
m
m
max
=
m
_
n
2
_. (1.81)
Un grafo denso tiene (G) 1 y un grafo escaso tiene (G) 1.
1.8.5. Caminos
Una sucesi on de aristas adyacentes que empieza en v y termina en w se llama un camino
de v a w. El largo de un camino es el n umero de aristas que contiene el camino. La
distancia dist (v, w) entre v y w es el largo mnimo de todos los caminos de v a w. La
distancia de un v ertice a si mismo es cero. El di ametro diam(G) de un grafo G es la
distancia m axima en todo el grafo,
diam(G) = m ax
vV
wV
dist (v, w) . (1.82)
Un camino simple solamente recorre la misma arista una vez m aximo, nunca dos veces o
m as. Un ciclo es un camino que regresa a su v ertice inicial. Un grafo que no cuente con
ning un ciclo es acclico. Un grafo no dirigido acclico es necesariamente un arbol, pero
en grafos dirigidos la ausencia de ciclos no implica que sea un arbol. Un grafo es bipartito
si y s olo si no tiene ning un ciclo de largo impar.
22 CAP

ITULO 1. DEFINICIONES MATEM



ATICAS Y COMPUTACIONALES
1.8.6. Conectividad
Un grafo G es conexo si cada par de v ertices est a conectado por un camino. Si por al-
gunos v ertices v y w no existe ning un camino de v a w en el grafo G, el grafo G es no
conexo, la distancia entre los dos v ertices no est a denido, y en consecuencia el di ametro
diam(G) del grafo tampoco es denido. Un grafo G es fuertemente conexo si cada par de
v ertices est a conectado por al menos dos caminos disjuntos, es decir, dos caminos que no
comparten ninguna arista.
Un grafo no conexo se puede dividir en dos o m as componentes conexos que son formados
por tales conjuntos de v ertices de distancia denida.
1.8.7. Subgrafos
Un grafo G(S) = (S, F) es un subgrafo del grafo G = (V, E) si S V y F E tal que
v, w F
_
(v S) (w S)
_
. (1.83)
Cada componente conexo es un subgrafo conexo maximal, o sea, a cual no se puede
a nadir ning un otro v ertice sin romper conectividad.
Un subgrafo que completo se dice una camarilla (ingl es: clique).
Un grafo G
1
es isomorfo a otro grafo G
2
si y s olo si existe una funci on f : V
1
V
2
de
los v ertices V
1
de G
1
a los v ertices V
2
de G
2
tal que para en conjunto de aristas de G
1
,
denotado por E
1
, y lo de las aristas de G
2
, denotado por E
2
aplica que
v
1
, u
1
E
1
f(v
1
), f(u
1
) E
2
. (1.84)
1.8.8.

Arboles
Un arbol es un grafo conexo acclico. Un arbol cubriente (tambi en: un arbol de expan-
si on) de un grafo G = (V, E) es un subgrafo de grafo que es un arbol y contiene todos
los v ertices de G. Si el grafo es ponderado, el arbol cubriente mnimo es cualquier arbol
donde la suma de los pesos de las aristas incluidas es mnima. Un grafo G no conexo es
un bosque si cada componente conexo de G es un arbol.
Captulo 2
Problemas y algoritmos
En este curso, veremos c omo analizar de complejidad de dos conceptos diferentes de com-
putaci on: problemas y algoritmos. Un problema es un conjunto (posiblemente innita) de
instancias junto con una pregunta sobre alguna propiedad de las instancias. Un algoritmo
es un proceso formal para encontrar la respuesta correcta a la pregunta de un problema
para una cierta instancia del problema.
2.1. Problema
Problemas en general son conjuntos de instancias al cual corresponde un conjunto de solu-
ciones, junto con una relaci on que asocia para cada instancia del problema un subconjunto
de soluciones (posiblemente vaco).
Los dos tipos de problemas que estudiamos son los problemas de decisi on y los problemas
de optimizaci on . En los primeros, la respuesta es siempre s o no, mientras en la
segunda clase de problemas la pregunta es del tipo cu al es el mejor valor posible o con
qu e conguraci on se obtiene el mejor valor posible.
2.1.1. Problema de decisi on
En un problema de decisi on, la tarea es decidir si o no la relaci on entre instancias y
soluciones asigna un subconjunto vaco a una dada instancia. Si existen soluciones, la
respuesta a la pregunta del problema es si, y si el subconjunto es vaco, la respuesta es
no.
2.1.2. Problema de optimizaci on
Para problemas de optimizaci on, la instancia est a compuesta por un conjunto de congu-
raciones, un conjunto de restricciones, y adem as una funci on objetivo que asigna un valor
23
24 CAP

ITULO 2. PROBLEMAS Y ALGORITMOS


(real) a cada instancia. Si las conguraciones son discretas, el problema es combinatorial.
La tarea es identicar cu al de las conguraciones factibles, es decir, las que cumplen con
todas las restricciones, tiene el mejor valor de la funci on objetivo. Depende del problema
si el mejor valor es el mayor (problema de maximizaci on) o el menor (problema de mini-
mizaci on). La conguraci on factible con el mejor valor se llama la soluci on optima de la
instancia.
2.2. Algoritmo
Un algoritmo es un m etodo de soluci on para resolver una dada instancia de un cierto
problema. En computaci on, por lo general, se escribe el algoritmo en un lenguaje de
programaci on para ser ejecutado por una computadora. Ejemplos de algoritmos son los
m etodos sistem aticos de resolver los problemas siguientes:
C omo encontrar un nombre en la gua telef onica?
C omo llegar de mi casa a m ocina?
C omo determinar si un dado n umero es un n umero primo?
Para denir un algoritmo, hay que denir primero dos conjuntos:
(I) un conjunto c de las entradas del algoritmo, que representan las instancias del
problema y
(II) un conjunto o de las salidas, que son los posibles resultados de la ejecuci on del
algoritmo.
Para un problema, por lo general existen varios algoritmos con diferente nivel de ecien-
cia (es decir, diferente tiempo de ejecuci on con la misma instancia del problema). En
algoritmos deterministas, la salida del algoritmo depende unicamente de la entrada de
lo mismo, por lo cual se puede representar el algoritmo como una funci on f : c o.
Existen tambi en algoritmos probabilistas o aleatorizados donde esto no es el caso.
Los algoritmos se escribe como sucesiones de instrucciones que procesan la entrada c
para producir el resultado o. Cada instrucci on es una operaci on simple, produce un
resultado intermedio unico y es posible ejecutar con eciencia.
La sucesi on S de instrucciones tiene que ser nita y tal que para toda c, si P est a eje-
cutada con la entrada , el resultado de la computaci on ser a f() o. Sera altamente
deseable que para todo c, la ejecuci on de S terminar a despu es de un tiempo nito.
Los algoritmos se implementa como programas de c omputo en diferentes lenguajes de
programaci on. El mismo algoritmo se puede implementar en diferentes lenguajes y para
diferentes plataformas computacionales. En este curso, los ejemplos siguen las estructuras
b asicas de programaci on procedural, en pseudoc odigo parecido a C y Java.
2.3. CALIDAD DE ALGORITMOS 25
2.2.1. Algoritmo recursivo
Un algoritmo recursivo es un algoritmo donde una parte del algoritmo utiliza a si mis-
ma como subrutina. En muchos casos es m as f acil entender la funci on de un algoritmo
recursivo y tambi en demostrar que funcione correctamente. Un algoritmo que en vez de
llamarse a si mismo repite en una manera cclica el mismo c odigo se dice iterativo. En
muchos casos, el pseudoc odigo de un algoritmo recursivo resulta m as corto que el pseu-
doc odigo de un algoritmo parecido pero iterativo para el mismo problema. Es un he-
cho universal que cada algoritmo recursivo puede ser convertido a un algoritmo iterativo
(aunque no viceversa), aunque tpicamente hace da no a la eciencia del algoritmo hacer
tal conversi on. Depende del problema cu al manera es m as eciente: recursiva o iterativa.
Como ejemplo, veremos dos algoritmos para vericar si o no una dada palabra (una sola
palabra de puras letras; en espa nol, tpicamente ignorando los acutes de las letras) es un
palndromo, o sea, que se lee igual hacia adelante que hacia atr as. Un ejemplo de tal
palabra es reconocer. Un algoritmo recursivo simplemente examinara la primera y la
ultima letra. Si son iguales, el algoritmo los quita de la sucesi on de letras y llama a si
mismo para ver si el resto tambi en lo es. Al recibir una sucesi on de un smbolo o vaco,
el algoritmo da la respuesta s:
procedimiento rpal(palabra P =
1

2
. . .
n1

n
)
si n 1
devuelve verdadero ;
si
1
=
2
devuelve rpal(
2

3
. . .
n2
n 1);
en otro caso
devuelve falso
Una versi on iterativa examinara al mismo tiempo desde el inicio y desde el n vericando
para cada letra si son iguales:
procedimiento ipal(palabra P =
1

2
. . .
n1

n
)
i = 1;
j = n;
mientras i < j
si
i
,=
j
devuelve falso ;
en otro caso
i := i + 1;
j := j 1;
devuelve verdadero ;
2.3. Calidad de algoritmos
Las dos medidas m as importantes de la calidad de un algoritmo son
26 CAP

ITULO 2. PROBLEMAS Y ALGORITMOS


(I) el tiempo total de computaci on, medido por el n umero de operaciones de c omputo
realizadas durante la ejecuci on del algoritmo, y
(II) la cantidad de memoria utilizada.
La notaci on para capturar tal informaci on es a trav es de funciones de complejidad.
Para eliminar el efecto de una cierta computadora o un cierto lenguaje de programaci on,
se considera que el algoritmo se ejecuta en una m aquina modelo virtual tipo RAM (in-
gl es: random access machine) que no tiene lmite de memoria ni lmite de precisi on de
representaci on de n umeros enteros o reales.
2.3.1. Operaci on b asica
Para poder contar las operaciones que ejecuta un algoritmo, hay que denir cu ales op-
eraciones se cualican como operaciones b asicas. Tpicamente se considera b asicas los
siguientes tipos de operaciones:
(I) operaciones simples aritm eticas (+, , , /, m od ),
(II) operaciones simples l ogicas (, , , , ),
(III) comparaciones simples (<, >, =, ,=, , ),
(IV) asignaciones de variables (:=),
(V) instrucciones de salto (break, continue, etc etera).
2.3.2. Tama no de la instancia
Para un cierto problema computacional, existen tpicamente varias si no una cantidad in-
nita de instancias. Para denir el tama no de una dicha instancia, hay que jar cu al ser a la
unidad b asica de tal c alculo. Tpicamente se utiliza la cantidad de bits, bytes, variables
enteras, etc etera que se necesita ocupar para representar el problema en su totalidad en la
memoria de una computadora.
Para un algoritmo de ordenar una lista de n umeros, el tama no de la instancia es la cantidad
de n umeros que tiene como entrada. Por ejemplo, si la instancia es un grafo, su tama no es
bien capturado en la suma n+m, como ninguno de los dos n umeros s olo puede capturar el
tama no de la instancia completamente. En realidad, para guardar cada arista, se necesita
guardar su punto de inicio y su punto nal, sumando en 2m, pero por lo general se suele
ignorar multiplicadores constantes en tal an alisis, como veremos en secci on 2.3.5.
2.3. CALIDAD DE ALGORITMOS 27
2.3.3. Funciones de complejidad
Incluso se jamos el tama no de la instancia, todava hay variaciones en la cantidad de
tiempo requerido para la ejecuci on del algoritmo. Por ejemplo, es m as difcil ordenar
la lista [3, 5, 2, 9, 1] que la lista [1, 3, 5, 6, 7], como la segunda ya est a ordenada. Lo que
queremos nosotros es tal caracterizaci on de la calidad de un algoritmo que nos facilita
hacer comparaciones entre algoritmos. Las soluciones incluyen el uso del caso peor, caso
promedio y el caso amortizado.
Funci on del peor caso
Formamos una funci on de complejidad f : Z
+
Z
+
tal que para un valor n, el valor f(n)
representa el n umero de operaciones b asicas para el m as difcil de todas las instancias de
tama no n. La unica dicultad es identicar o construir la instancia que es el peor posible
para la ejecuci on del algoritmo.
Funci on del caso promedio
Formamos una funci on de complejidad f : Z
+
R tal que para un valor n, el valor
f(n) representa el n umero promedio de operaciones b asicas sobre todas las instancias
de tama no n. Aqu la parte con posible dicultad es la estimaci on de la distribuci on de
probabilidad: con qu e probabilidad ocurren diferentes tipos de instancias? En pr actica,
si el peor caso es muy raro, resulta m as util estudiar el caso promedio, si es posible.
Complejidad amortizada
En algunos casos, es posible que el tiempo de ejecuci on de un algoritmo depende de
las ejecuciones anteriores. Este ocurre cuando uno procesa una serie de instancias con
alg un tipo de dependencia entre ellas. En tal caso, las funciones de peor caso y caso
promedio pueden resultar pesimistas. La complejidad amortizada sirve para evaluar la
eciencia de un algoritmo en tal caso. La idea es ejecutar el algoritmo varias veces en
secuencia con diferentes instancias, ordenando las instancias de la peor manera posible
(para consumir m as recursos), calculando el tiempo total de ejecuci on, y dividiendo por
el n umero de instancias. En muchos casos, la computaci on de la complejidad amortizada
resulta razonable y no demasiado compleja.
2.3.4. Consumo de memoria
Igual como el tiempo de ejecuci on, el consumo de memoria es una medida importante
en la evaluaci on de calidad de algoritmos. Hay que denir cu al ser a la unidad b asica de
memoria para hacer el an alisis: puede ser un bit, un byte o una variable de tama no con-
stante de un cierto tipo. El caso peor de consumo de memoria es la cantidad de unidades
28 CAP

ITULO 2. PROBLEMAS Y ALGORITMOS


de memoria que el algoritmo tendr a que ocupar simultaneamente en el peor caso imag-
inable. Se dene el caso promedio y el caso amortizado igual como con el tiempo de
ejecuci on.
2.3.5. An alisis asint otico
La meta del an alisis de algoritmos es evaluar la calidad de un algoritmo en comparaci on
con otros algoritmos o en comparaci on a la complejidad del problema o alguna cota de
complejidad conocida. Sin embargo, tpicamente el conteo de pasos de computaci on
falta precisi on en el sentido que no es claro que cosas se considera operaciones b asicas.
Por eso normalmente se caracteriza la calidad de un algoritmo por la clase de magnitud
de la funci on de complejidad y no la funci on exacta misma. Tampoco son interesantes los
tiempos de computaci on para instancias peque nas, sino que instancias grandes con una
instancia peque na, normalmente todos los algoritmos producen resultados r apidamente.
Para denir clases de magnitudes, necesitamos las deniciones siguientes. Para funciones
f : Z
+
R y g : Z
+
R, escribimos
(I) f(n) O(g(n)) si c > 0 tal que [f(n)[ c [g(n)[ para sucientemente grandes
valores de n,
(II) f(n) (g(n)) si c > 0 tal que [f(n)[ c [g(n)[ para sucientemente grandes
valores de n,
(III) f(n) (g(n)) si c, c

> 0 tales que c [g(n)[ [f(n)[ c

[g(n)[ para
sucientemente grandes valores de n y
(IV) f(n) o(g(n)) si lm
n
f(n)
g(n)
= 0.
El smbolo se reemplaza frecuentemente con =. La funci on O(f(n)) es una cota supe-
rior asint otica al tiempo de ejecuci on, mientras la (f(n)) es una cota inferior asint otica.
La tercera denici on quiere decir que las dos funciones crecen asint oticamente iguales.
Las deniciones se generalizan para funciones de argumentos m ultiples.
Estas deniciones son transitivas:
(f(n) O(g(n)) g(n) O(h(n))) f(n) O(h(n)) . (2.1)
Igualmente, si tenemos que
(f(n) (g(n)) g(n) (h(n))) f(n) (h(n)) . (2.2)
Como este aplica para (f(n)) y O(f(n)) los dos, aplica por denici on tambi en para
(f(n)).
2.3. CALIDAD DE ALGORITMOS 29
0.1
1
10
100
1000
10000
100000
1e+06
1e+07
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
f(x) = e
x
f(x) = 2
x
f(x) = x
3
f(x) = x
2
f(x) = x log
2
(x)
f(x) = x
f(x) = log
2
(x)
Figura 2.1: Crecimiento de algunas funciones com unmente encontrados en el an alisis
de algoritmos. Nota que el ordenaci on seg un magnitud cambia al comienzo, pero para
valores sucientemente grandes ya no hay cambios.
Otra propiedad util es que si
(f(n) O(h(n)) g(n) O(h(n))) f(n) + g(n) O(h(n)) . (2.3)
Si g(n) O(f(n)), f(n) + g(n) O(f(n)). Esto nos permite f acilmente formar
O(f(n)) de polinomios y muchas otras expresiones. Por denici on, podemos ignorar
coecientes num ericos de los t erminos de la expresi on. Adem as con el resultado anterior
nos permite quitar todos los t erminos salvo que el t ermino con exponente mayor. Por lo
general, O(f(n)) es la notaci on de complejidad asint otica m as com unmente utilizado.
Una observaci on interesante es la complejidad asint otica de funciones logartmicas: para
cualquier base b > 0 y cada x > 0 tal que x R (incluso n umeros muy cercanos a cero),
aplica que log
b
(n) O(n
x
) (por la denici on de logaritmo). Utilizando la denici on de
ecuaci on 1.25 para cambiar la base de un logaritmo, llegamos a tener
log
a
(n) =
1
log
b
(a)
log
b
(n) (log
b
n) , (2.4)
porque log
b
(a) es un constante. Entonces, como log
a
(n) = (log
b
n), no hay necesidad
de marcar la base en una expresi on de complejidad asint otica con logaritmos.
Otra relaci on importante es que para todo x > 1 y todo k > 0, aplica que n
k
O(x
n
)
es decir, cada polinomial crece asint oticamente m as lentamente que cualquiera expresi on
exponencial.
En t erminos no muy exactos, se dice que un algoritmo es eciente si su tiempo de ejecu-
ci on tiene una cota superior asint otica que es un polinomio. Un problema que cuenta con
por lo menos un algoritmo eciente es un problema polinomial. Un problema es intratable
si no existe ning un algoritmo eciente para resolverlo. Tambi en se dice que un problema
sin soluci on si no cuenta con algoritmo ninguno. El el siguiente captulo formulamos estes
tipos de conceptos formalmente.
Para ilustrar el efecto del tiempo de ejecuci on, el cuadro 2.1 (adaptado de [10]) muestra
la dependencia del tiempo de ejecuci on del n umero de operaciones que se necesita.
30 CAP

ITULO 2. PROBLEMAS Y ALGORITMOS


Cuadro 2.1: En la tabla (originalmente de [10]) se muestra para diferentes valores de n el
tiempo de ejecuci on (en segundos (s), minutos (min), horas (h), das (d) o a nos (a)) para un
algoritmo necesita exactamente f(n) operaciones b asicas del procesador para encontrar
soluci on y el procesador es capaz de ejecutar un mill on de instrucciones por segundo.
Si el tiempo de ejecuci on es mayor a 10
25
a nos, lo marcamos simplemente como ,
mientras los menores a un segundo son 0. El redondeo con tiempos mayores a un
segundo est an redondeados a un segundo entero mayor si menos de un minuto, al minuto
entero mayor si menores a una hora, la hora entera mayor si menores a un da, y el a no
entero mayor si medidos en a nos.
f(n) ()
n ()
n nlog
2
n n
2
n
3
1, 5
n
2
n
n!
10 0 0 0 0 0 0 4 s
30 0 0 0 0 0 18 min 10
25
a
50 0 0 0 0 11 min 36 a
100 0 0 0 1 s 12, 892 a 10
17
a nos
1000 0 0 1 s 18 min
10000 0 0 2 min 12 d
100000 0 2 s 3 h 32 a
1000000 1 s 20 s 12 d 31710 a
Captulo 3
Modelos de computaci on
3.1. M aquinas Turing
Un modelo formal de computaci on es lo de la m aquina Turing. Las m aquinas Turing
pueden simular cualquier algoritmo con p erdida de eciencia insignicante utilizando
una sola estructura de datos: una sucesi on de smbolos escrita en una cinta (innita) que
permite borrar y imprimir smbolos. Formalmente, se dene una m aquina Turing M =
(K, , , s) por
(I) un conjunto nito de estados K,
(II) un conjunto nito de smbolos , que se llama el alfabeto de M que contiene dos
smbolos espacieles , ,
(III) una funci on de transici on
: K (K alto, s, no) , , , (3.1)
(IV) un estado de alto alto, un estado de acepto s y un estado de rechazo no y
(V) direcciones del puntero: (derecha), (izquierda) y (sin mover).
La funci on captura el programa de la m aquina. Si el estado actual es q K y el
smbolo actualmente bajo el puntero es , la funci on nos da
(q, ) = (p, , D), (3.2)
donde p es el estado nuevo, es el smbolo que ser a escrito en el lugar de y D ,
, es la direcci on a la cual mover a el puntero. Si el puntero mueve fuera de la sucesi on
de entrada a la derecha, el smbolo que es ledo es siempre (un smbolo blanco) hasta
que la m aquina lo reemplaza por imprimir algo en esa posici on de la cinta. El largo de la
31
32 CAP

ITULO 3. MODELOS DE COMPUTACI



ON
cinta en todo momento es la posici on m as a la derecha ledo por la m aquina, es decir, la
mayor cantidad de posiciones utilizada por la m aquina hasta actualidad.
Cada programa comienza con la m aquina en el estado inicial s con la cinta inicializada
a contener x, donde x es una sucesi on nita de smbolos en ( )

, y el puntero
puntando a en la cinta. La sucesi on x es la entrada de la m aquina.
Se dice que la m aquina se ha detenido si se ha llegado a uno de los tres estados de alto
alto, s, no. Si la m aquina se detuvo en s, la m aquina acepta la entrada. Si la
m aquina se detuvo en no, la m aquina rechaza su entrada. La salida M(x) de la m aquina
M con la entrada x se dene como
(I) M(x) = s si la m aquina acepta x,
(II) M(x) = no si la m aquina rechaza x,
(III) M(x) = y si la m aquina llega a alto y y . . . es la sucesi on escrita en la cinta
de M en el momento de detenerse y
(IV) M(x) =si M nunca se detiene con la entrada x.
Un ejemplo es la m aquina siguiente para el c omputo de n + 1 dado n Z, n > 0, en
representaci on binaria. Tenemos dos estados s y q (adem as del estado alto) y cuatro
smbolos: = 0, 1, , . La funci on de transici on se dene como
p K (p, )
s, 0 (s, 0, )
s, 1 (s, 1, )
s, (q, , )
s, (s, , )
q, 0 (alto, 1, )
q, 1 (q, 0, )
q, (alto, , )
Una conguraci on (q, w, u) es tal que q K es el estado actual y w, u

tal que w es
la parte de la sucesi on escrita en la cinta a la izquierda del puntero, incluyendo el smbolo
debajo del puntero actualmente, y u es la sucesi on a la derecha del puntero.
La relaci on rinde en un paso
M
es la siguiente:
(q, w, u)
M
(q

, w

, u

) (3.3)
as que si es el ultimo smbolo de w y (q, ) = (p, , D), aplica que q

= p y los w

y u

se construye seg un (p, , D). Por ejemplo, si D =, tenemos w

igual a w con el
ultimo smbolo reemplazado por y el primer smbolo de u concatenado. Si u es vaca,
se adjunta un a w. Si u no es vaca, u

es como u pero sin el primer smbolo, y si u es


vaca, u

tambi en la es.
3.1. M

AQUINAS TURING 33
Para la relaci on rinde en k pasos, denimos
(q, w, u)
M

k
(q

, w

, u

) (3.4)
si y s olo si existen conguraciones (q
i
, w
i
, u
i
), i = 1, . . . , k + 1 as que
(I) (q, w, u) = (q
1
, w
1
, u
1
),
(II) (q
i
, w
i
, u
i
)
M
(q
i+1
, w
i+1
, u
i+1
), i = 1, . . . , k y
(III) (q

, w

, u

) = (q
k+1
, w
k+1
, u
k+1
).
La relaci on de rinde en general denimos como
(q, w, u)
M

(q

, w

, u

) (3.5)
si y s olo si k 0 tal que (q, w, u)
M

k
(q

, w

, u

). La relaci on
M

es la clausura transitiva
y reexiva de
M
.
Las m aquinas Turing son una representaci on bastante natural para resolver muchos prob-
lemas sobre sucesiones, como por ejemplo reconocer lenguajes: sea L ( )

un lenguaje. Una m aquina Turing M decide el lenguaje L si y s olo si para toda sucesi on
x ()

aplica que si x L, M(x) = s y si x , L, M(x) = no. La clase de


lenguajes decididos por alguna m aquina Turing son los lenguajes recursivos.
Una m aquina Turing acepta un lenguaje L si para toda sucesi on x ( )

aplica
que si x L, M(x) = s, pero si x , L, M(x) =. Los lenguajes aceptados por alg un
m aquina Turing son recursivamente numerables. Nota que si L es recursivo, tambi en es
recursivamente numerable.
Para resolver un problema de decisi on por una m aquina Turing, lo que se hace es decidir
un lenguaje que consiste de representaciones de las instancias del problema que corre-
sponden a la respuesta s. Los problemas de optimizaci on est an resueltos por m aquinas
Turing que hagan el c omputo de una funci on apropiada de sucesiones a sucesiones, rep-
resentando tanto la entrada como la salida en formato de sucesiones con un alfabeto ade-
cuado.
T ecnicamente, cualquier objeto matem atico nito puede ser representado por una suce-
si on nita con un alfabeto adecuado. Por lo general, n umeros siempre deberan estar rep-
resentados como n umeros binarios.
Por ejemplo, para representar grafos, se puede preparar una sucesi on con informaci on de
n y despu es los elementos de su matriz de adyacencia. Si existen varias maneras de hacer
la codicaci on, todas las representaciones tienen largos polinomialmente relacionados:
siendo N el largo de una representaci on de una dada instancia, las otras tienen largo no
mayor a p(N) donde p() es alg un polinomio. La unica excepci on es la diferencia entre la
representaci on singular (ingl es: unary) en comparaci on con la representaci on binaria: la
singular necesita una cantidad exponencial de smbolos en la cinta.
34 CAP

ITULO 3. MODELOS DE COMPUTACI



ON
Cuadro 3.1: Instrucciones de las m aquinas de acceso aleatorio (RAM). Aqu j es un entero,
r
j
es el contenido actual del registro R
j
, i
j
es el contenido del registro de entrada I
j
. La
notaci on x signica que puede ser reemplazado por cualquier de los tres operadores j, j
o = j x

es el resultado de tal reemplazo. es el contador del programa que determina


cual instrucci on de se est a ejecutando.
Instrucci on Operando Sem antica
READ j r
0
:= i
j
READ j r
0
:= i
r
j
STORE j r
j
:= r
0
STORE j r
r
j
:= r
0
LOAD x r
0
:= x

ADD x r
0
:= r
0
+ x

SUB x r
0
:= r
0
x

HALF r
0
:=
r
0
2

JUMP j := j
JPOS j si r
0
> 0, := j
JZERO j si r
0
= 0, := j
JNEG j si r
0
< 0, := j
HALT := 0
3.2. M aquinas de acceso aleatorio (RAM)
Una pregunta interesante es si se puede implementar cualquier algoritmo como una
m aquina Turing. Hay una conjectura que dice que cualquier intento razonable de mode-
lado matem atico de algoritmos computacionales y su ecacia (en t erminos de tiempo de
ejecuci on) resultar a en un modelo de computaci on y costo de operaciones que es equiva-
lente, con diferencia polinomial, a lo de m aquinas Turing.
Un modelo ideal de computaci on es lo de m aquinas de acceso aleatorio (ingl es: random
access machines, RAM) . Un RAM es capaz de manejar n umeros enteros de tama no arbi-
trario. La estructura de datos de un RAM es un arreglo de registros R
0
, R
1
, R
2
, . . ., cada
uno con capacidad de un entero cualquiera, posiblemente negativo. Un programa RAM es
una sucesi on nita de instrucciones de tipo assembler, = (
1
,
2
, . . . ,
m
). La entrada
al programa est a guardada en un arreglo nito de registros de entrada I
1
, I
2
, . . . , I
n
.
El primer registro r
0
sirve como una acumuladora y las instrucciones posibles se muestra
en el cuadro 3.1
Una conguraci on es un par C = (, 1), donde es el contador del programa que deter-
mina cual instrucci on de se est a ejecutando y 1 = (j
1
, r
j
1
), (j
2
, r
j
2
), . . . , (j
k
, r
j
k
) es
un conjunto nito de pares registro-valor. La conguraci on inicial es (1, ). Se dene una
3.2. M

AQUINAS DE ACCESO ALEATORIO (RAM) 35
Cuadro 3.2: Una RAM para computar la funci on (x, y) = [x y[ para enteros arbitrarios
x, y. La entrada del ejemplo es I = (6, 10), o sea, x = 6 y y = 10, lo que nos da como
resultado (I) = 4. Las conguraciones para el ejemplo se muestra a la derecha, mientras
el programa general est a a la izquierda.
Programa Conguraci on
READ 2 (1, )
STORE 2 (2, (0, 10))
READ 1 (3, (0, 10), (2, 10))
STORE 1 (4, (0, 6), (2, 10))
SUB 2 (5, (0, 6), (2, 10), (1, 6))
JNEG 8 (6, (0, 4), (2, 10), (1, 6))
HALT (8, (0, 4), (2, 10), (1, 6))
LOAD 2 (9, (0, 10), (2, 10), (1, 6))
SUB 1 (10, (0, 4), (2, 10), (1, 6))
HALT (0, (0, 4), (2, 10), (1, 6))
relaci on de un paso
(, 1)
,I
(

, 1

) (3.6)
entre las conguraciones para un programa RAM y una entrada I de n instrucciones:

es el valor nuevo de despu es de haber ejecutado la instrucci on en posici on (nota


que no es necesariamente

= + 1) y 1

es una versi on posiblemente modicada de


1donde alg un par (j, x) puede haber sido removido y alg un par (j

, x

) a nadido seg un la
instrucci on en posici on del programa . Esta relaci on induce otras relaciones
,I

k
(da
en k pasos) y
,I

(da eventualmente) como en el caso de las m aquinas Turing.


Si D es una sucesi on nita de enteros, se dice que una m aquina de acceso aleatorio com-
pute una funci on : D Z si y s olo si para toda I D aplica que
(1, )
,I

(0, 1) (3.7)
as que (0, (I)) 1. Como un ejemplo, tenemos la RAM que computa la funci on
(x, y) = [x y[ en el cuadro 3.2.
El modelo de tiempo de ejecuci on es el siguiente: la ejecuci on de cada instrucci on cuenta
como un paso de computaci on. La abstracci on normalmente considerala sumaci on de en-
teros grandes como es algo que no se puede hacer r apidamente. Tambi en hay que tomar
en cuenta que multiplicaci on no est a incluida como instrucci on y que se implementa por
sumaci on repetida. El tama no de la entrada se considera en logaritmos: sea b
i
una repre-
sentaci on binaria del valor absoluto un entero i sin ceros no signicativos al comienzo.
Para valores negativos, pensamos que hay un bit gratuito para el signo. El largo del
entero en el contexto RAM es el n umero de bits en b
i
. El largo de la entrada entera /(I)
es la suma de los largos de los enteros en estos t erminos.
36 CAP

ITULO 3. MODELOS DE COMPUTACI



ON
Se dice que un programa RAM computa una funci on : D Z en tiempo f(n) donde
f : N
+
N
+
si y s olo si para toda I D aplica que
(1, )
,I

k
(0, 1) (3.8)
as que k f(/(I)).
Con una RAM, se puede simular una m aquina Turing M con un alfabeto =

1
, . . . ,
k
con p erdida lineal de eciencia. El rango de entradas posibles para la
RAM simulando a M es
D

= (i
1
, . . . , i
n
, 0) [ n 0, 1 i
j
k, j = 1, . . . , n. (3.9)
Para un lenguaje L ( )

, hay que denir una funci on


L
: D

0, 1
as que
L
(i
1
, . . . , i
n
, 0) = 1 si y s olo si
i
1

in
L. La tarea de decidir el lenguaje
L es equivalente a la tarea de computar
L
. La idea de la construcci on es preparar una
subrutina RAM para simular cada transici on de una m aquina Turing M que decide L. Eso
se puede probar formalmente, llegando a la teorema siguiente:
Teorema 3.1. Dado un lenguaje L que se puede decidir en tiempo f(n) por una m aquina
Turing, existe una RAM que computa la funci on
L
en tiempo O(f(n)).
Tambi en funciona viceversa: cada RAM se puede simular con una m aquina Turing con
p erdida de eciencia polinomial. Primero hay que representar la sucesi on de entrada I =
(i
1
, . . . , i
n
) de enteros como una cadena b
I
= b
1
; b
2
; . . . ; b
n
donde b
j
es la representaci on
binaria del entero i
j
. Ahora sea D un conjunto de sucesiones nitas de enteros y : D
Z. Se dice que una m aquina Turing M computa si y s olo si para cualquier I D aplica
que M(b
I
) = b
(I)
, donde b
(I)
es la representaci on binaria de (I).
La prueba de este resultado utiliza m aquinas Turing con siete cintas. Para muchos ca-
sos, es m as f acil considerar m aquinas Turing de cintas m ultiples, aunque todas esas
m aquinas pueden ser simuladas por una m aquina Turing ordinaria. Las siete cintas sir-
ven los prop ositos siguientes:
(I) una cinta para la entrada,
(II) una cinta para representar los contenidos de los registros en su representaci on bi-
naria, como pares de n umero de registro y su contenido separados por el smbolo
;,
(III) una cinta para el contador de programa ,
(IV) una cinta para el n umero de registro que se busca actualmente y
(V) tres cintas auxiliares para usar en la ejecuci on de las instrucciones.
Teorema 3.2. Si un programa RAM compute la funci on en tiempo f(n), existe nece-
sariamente una m aquina Turing M de siete cintas que compute la misma funci on en
tiempo O(f(n)
3
).
3.3. M

AQUINAS TURING NO DETERMINISTAS 37
La idea es que cada instrucci on del programa RAM se implementa por un grupo de es-
tados de M. En la segunda cinta de la m aquina hay O(f(n)) pares. Se necesita O(f(n))
pasos para simular una instrucci on de , donde es el tama no m aximo de todos los en-
teros en los registros. Entonces, simulaci on de con M requiere O(f(n)
2
) pasos.
Todava habr a que establecer que = O(f(n)) para llegar a tener Teorema 3.2. Cuando
se ha ejecutado t pasos del programa con la entrada I, el contenido de cada registro
tiene largo m aximo t + /
i
+ b
j
donde j es el entero mayor referido a el cualquier in-
strucci on de . Esto es v alido para t = 0. Por inducci on, probamos que si esto es verdad
hasta el paso n umero t 1, ser a v alido tambi en en el paso n umero t. Para establecer la
prueba por inducci on, hay que analizar los casos de diferentes tipos de instrucciones. Las
instrucciones que son saltos, HALT, LOAD, STORE o READ no crean valores nuevos,
por lo cual no alteran la validez de la proposici on. Para la operaci on aritm etica ADD de
dos enteros i y j, el largo del resultado es uno m as el largo del operando mayor (por ar-
itm etica binaria), y como el operando mayor tiene largo m aximo t 1 +/
I
+ b
j
, hemos
establecido
1 + t 1 +/
I
+ b
j
= t + N(I) + N(B) (3.10)
y as llegado a validar el Teorema 3.2.
3.3. M aquinas Turing no deterministas
El modelo de m aquinas Turing no deterministas (NTM) no son un modelo realstico de
computaci on, pero nos va a servir mucho para denir complejidad computacional. Se
puede simular cada m aquina Turing no determinista con una m aquina Turing determinista
con una p erdida exponencial de eciencia. La pregunta interesante y abierta es si
es posible simularlas con p erdida solamente polinomial de eciencia.
Una m aquina Turing no determinista es un cu adruple N = (K, , , s) donde la difer-
encia a una m aquina Turing determinista es que ahora no es una funci on de transici on,
pero una relaci on de transici on:
(K ) [(K alto, s, no) , , ]. (3.11)
La denici on de una conguraci on no cambia, pero la relaci on de un paso generaliza:
(q, w, u)
N
(q

, w

, u

) si y s olo si la transici on est a representada por alg un elemento en


.
Cualquier computaci on de N es una secuencia de selecciones no deterministas. Una
m aquina Turing no determinista acepta su entrada si existe alguna secuencia de selec-
ciones no deterministas que resulta en el estado de aceptaci on s. Una m aquina Turing
no determinista rechaza su entrada si no existe ninguna secuencia de selecciones no deter-
ministas que resultara en s. El grado de no determinismo de una NTM N es la cantidad
m axima de movimientos para cualquier par estado-smbolo en .
Se dice que una NTM N decide un lenguaje L si y s olo si para todo x

aplica lo
38 CAP

ITULO 3. MODELOS DE COMPUTACI



ON
siguiente:
x L si y s olo si (s, , x)
N

(s, w, u) (3.12)
para algunas cadenas w y u.
Adem as, una NTM N decide un lenguaje L en tiempo f(n) si y s olo si N decide L y para
todo x

aplica lo siguiente:
_
(s, , x)
N

k
(q, w, u)
_

_
k f([x[)
_
. (3.13)
Esto quiere decir que todos los caminos de computaci on en el arbol de las decisiones no
deterministas tiene largo m aximo f([x[).
3.4. M aquina Turing universal
Como las hemos denido, cada m aquina Turing es capaz de resolver un cierto problema.
Ahora denimos una m aquina Turing universal U la entrada de la cual es la descripci on
de una m aquina Turing M junto con una entrada x para M y la funci on de U es tal que
U simula a M con x as que U(M; x) = M(x).
Habr a que ver c omo representar una m aquina Turing por una cadena se smbolos de alg un
alfabeto. Dada una m aquina Turing M = (K, , , s), podemos codicarlo utilizando
n umeros enteros de la manera siguiente, donde = [[ y k = [K[:
= 1, 2, . . . , ,
K = + 1, + 2, . . . , + k ,
d onde s = + 1 y nalmente
, , , alto, s, no = + k + 1, + k + 2, . . . , + k + 6 .
(3.14)
Ahora, para lograr un alfabeto nito, codicamos todo esto con las representaciones bina-
rias y el smbolo ;: M = (K, , , s) est a representada por M
b
= b

; b
K
; b

donde cada
entero i est a representado como b
i
con exactamente log( +k +6) bits y la codicaci on
de es una secuencia de pares ((q, ), (p, , D)) de la funci on de transici on utilizando
las representaciones binarias de sus componentes.
La m aquina universal U necesita adem as de la cinta de entrada donde tiene x, una cinta
S
1
para guardar la descripci on M
b
de M y otra cinta S
2
para guardar la conguraci on
actual de M, (q, w, u). Cada paso de la simulaci on consiste de tres fases:
(I) Buscar en S
2
para el entero que corresponde al estado actual de M.
(II) Buscar en S
1
para la regla de que corresponde al estado actual.
(III) Aplicar la regla.
(IV) En cuanto M para, tambi en U para.
3.5. M

AQUINA TURING PRECISA 39
3.5. M aquina Turing precisa
Sea M una m aquina Turing con m ultiples cintas, determinista o no, con o sin entrada y
salida. La m aquina M es precisa si existen funciones f y g tales que para todo n 0,
para toda entrada x del largo [x[ = n y para cada computaci on de M aplica que M
para despu es de exactamente f([x[) pasos de computaci on y todas sus cintas que no son
reservados para entrada o salida tienen largo exactamente g([x[) cuando M para.
Dada una m aquina M (determinista o no) que decide el lenguaje L en tiempo f(n) donde
f es una funci on correcta de complejidad. Entonces necesariamente existe una m aquina
Turing precisa M

que decide L en tiempo O(f(n)). La construcci on de tal m aquina


M

es as que M

usa M
f
para computar una vara de medir
f(|x|)
y simula M o por
exactamente f([x[) pasos. Lo mismo se puede denir para espacio en vez de tiempo,
alterando la construcci on de M

as que en la simulaci on de M, se ocupa exactamente


f([x[) unidades de espacio.
40 CAP

ITULO 3. MODELOS DE COMPUTACI



ON
Captulo 4
Complejidad computacional de
problemas
4.1. Clases de complejidad de tiempo
Empezamos a denir clases de complejidad computacional a trav es de las m aquinas Tur-
ing deterministas y no deterministas:
Denici on 4.1. Una clase de complejidad TIME(f(n)) es el conjunto de lenguajes L
tales que una m aquina Turing (determinista) decide L en tiempo f(n).
Denici on 4.2. Una clase de complejidad NTIME(f(n)) es el conjunto de lenguajes L
tales que una m aquina Turing no determinista decide L en tiempo f(n).
Denici on 4.3. El conjunto Pcontiene todos los lenguajes decididos por m aquinas Turing
(deterministas) en tiempo polinomial,
P =
_
k>0
TIME
_
n
k
_
. (4.1)
Denici on 4.4. El conjunto NP contiene todos los lenguajes decididos por m aquinas Tur-
ing no deterministas en tiempo polinomial,
NP =
_
k>0
NTIME
_
n
k
_
. (4.2)
41
42 CAP

ITULO 4. COMPLEJIDAD COMPUTACIONAL DE PROBLEMAS


Teorema 4.3. Supone que una NTM N decide un lenguaje L en tiempo f(n). Entonces
existe una m aquina Turing determinista M que decide L en tiempo O
_
c
f(n)
N
_
, donde
c
N
> 1 es un constante que depende de N. Eso implica que
NTIME(f(n))
_
c>1
TIME
_
c
f(n)
_
. (4.3)
Para comprobar Teorema 4.3, sea N = (K, , , s) una NTM y denota por d el grado de
no determinismo de N. Numeramos las opciones disponibles a cada momento de decisi on
con los enteros 0, 1, . . . , d 1. Entonces, la secuencia de selecciones en un camino de
computaci on de N se representa como una secuencia de t enteros. La m aquina M que
puede simular a N necesita considerar todas las secuencias posibles en orden de largo
creciente y simula el conducto de N para cada secuencia jada en turno, es decir, con
la secuencia (c
1
, c
2
, . . . , c
t
) la m aquina M simula las acciones que hubiera tomado N si
N hubiera elegido la opci on c
i
en su selecci on n umero i durante sus primeros t pasos de
computaci on.
Si M llega a simular una secuencia que resulta a s en N, M tambi en termina con
s. Si una secuencia no resulta en s para N, la m aquina M continua con la siguiente
secuencia en su lista. Despu es de haber simulado todas las secuencias sin llegar a s (o
sea, siempre ha llegado a no o alto), M rechaza la entrada.
La cota de tiempo de ejecuci on O
_
c
f(n)
_
resulta como el producto del n umero total de
secuencias posibles
f(n)

t=1
d
t
= O
_
d
f(n)+1
_
(4.4)
y el costo de simular cada secuencia O
_
2
f(n)
_
.
4.2. Clases de complejidad de espacio
Para considerar complejidad del espacio, o sea, la necesidad de memoria, hay que denir
una NTM con cintas m ultiples. Dada una NTM N con k cintas, se dice que N decide a un
lenguaje L dentro de espacio f(n) si N decide L y para todo x ( )

aplica que
_
(s, , x, , , . . . , , , )
N

(q, w
1
, u
1
, . . . , w
k
, u
k
)
_

k1

i=2
[w
i
u
i
[ f([x[),
(4.5)
donde [w
i
u
i
[ es el largo (en cantidad de smbolos) de la cadena concatenada de las dos
cadenas w
i
y u
i
.
4.3. PROBLEMAS SIN SOLUCI

ON 43
4.3. Problemas sin soluci on
Existen m as lenguajes que m aquinas de Turing. Entonces, habr a que existir lenguajes
que no son decididos por ninguna m aquina Turing. Un problema que no cuente con una
m aquina Turing se llama un problema una problema sin soluci on (ingl es: undecidable
problem). Un problema sin soluci on muy famoso es el problema HALTING:
Problema 4.1: HALTING
Dado: una descripci on M
b
de una m aquina Turing M y una entrada
x
Pregunta: va a parar M cuando se ejecuta con x?
El lenguaje que corresponde al HALTING es simplemente
H = M
b
; x [ M(x) ,=, (4.6)
donde M
b
es una descripci on de M. Resulta que HALTING es recursivamente numerable,
lo que se puede comprobar por modicar un poco la m aquina Turing universal U. La
m aquina modicada U

es tal que cada estado de alto de U est a reemplazada con s.


Entonces, si M
b
; x H, por denici on M(x) ,=por lo cual U(M
b
; x) ,=, que resulta
en U

(M
b
; x) = s. Al otro lado, si M
b
; x , H, aplica que M(x) = U(M
b
; x) =
U

(M
b
; x) =.
Sin embargo, HALTING no es recursivo: supone que H sea recursivo, o sea, alguna
m aquina Turing M
H
decide H. Dada la m aquina D con entrada M tal que
D(M
b
) =
_
, si M
H
(M
b
; M
b
) = s,
s, en otro caso.
(4.7)
tomamos la representaci on de D misma, D
b
. Qu e es el resultado de D(D
b
)? Si
D(D
b
) =, tenemos M
H
(D
b
; D
b
) = s que implica que D(D
b
) ,= y llegamos a
una contradicci on. Entonces, si D(D
b
) ,=, tenemos M
H
(D
b
, D
b
) ,= s. Pero como
M
H
es la m aquina que decide H, M
H
(D
b
, D
b
) = no, por lo cual D
b
; D
b
, H, o sea,
D(D
b
) =, que nos da otra contradicci on. Entonces H no puede ser recursivo.
4.4. Problema complemento
Dado un alfabeto y un lenguaje L

, el complemento del lenguaje L es el lenguaje

L =

L. (4.8)
En el contexto de problemas de decisi on, si la respuesta para el problema Acon la entrada
x es s, la respuesta para su problema complemento A Complement es no y viceversa:
A Complement(x) = s si y s olo si A(x) = no. (4.9)
44 CAP

ITULO 4. COMPLEJIDAD COMPUTACIONAL DE PROBLEMAS


Teorema 4.4. Si un lenguaje L es recursivo, su complemento

L tambi en lo es.
Teorema 4.5. Un lenguaje L es recursivo si y s olo si los ambos lenguajes L y

L son
recursivamente numerables.
Cada lenguaje recursivo es tambi en recursivamente numerable. En la otra direcci on la
demostraci on necesita un poco m as atenci on: vamos a simular con una m aquina S las dos
m aquinas M
L
y M
L
con la misma entrada x tomando turnos paso por paso. Si M
L
acepta
a x, S dice s y si M
L
acepta a x, S dice no.
Entonces, el complemento

H de H (el lenguaje del problema HALTING) no es recursiva-
mente numerable. Resulta que cualquier propiedad no trivial de las m aquinas Turing no
tiene soluci on:
Teorema 4.6. (Teorema de Rice) Sea R el conjunto de lenguajes recursivamente numer-
ables y , = C R. El siguiente problema es sin soluci on: dada una m aquina Turing M,
aplica que L(M) C si L(M) es el lenguaje aceptado por M?
4.5. Algunos problemas fundamentales
4.5.1. Problemas de l ogica booleana
El problema de satisabilidad (SAT) es el siguiente:
Problema 4.2: SAT
Dado: una expresi on booleana en CNF
Pregunta: es satisfactible?
Utilizando tablas completas de asignaciones, se puede resolver el problema SAT en tiempo
O(n
2
2
n
). Aplica que SAT NP, pero no se sabe si SAT est a tambi en en P.
Para demostrar que SAT NP, formulamos una m aquina Turing no determinista para
examinar si es satisfactible: asignamos para cada variable x
i
X() de una manera no
determinista un valor T(x) := o alternativamente T(x) := . Si resulta que T [= ,
la respuesta es s. En el otro caso, la respuesta es no. El problema complemento de
SAT es:
Problema 4.3: SAT Complement
Dado: una expresi on booleana en CNF
Pregunta: es no satisfactible?
4.5. ALGUNOS PROBLEMAS FUNDAMENTALES 45
Una clase especial de inter es de SAT es la versi on donde solamente cl ausulas Horn est an
permitidos. Una cl ausula Horn es una disyunci on que contiene por m aximo un literal
positivo (es decir, todas menos una variable tienen que ser negadas). Si una cl ausula Horn
contiene un literal positivo, se llama implicaci on por la raz on siguiente: la cl ausula Horn
_
(x
1
) (x
2
) . . . ()x
k
x
p
_
(4.10)
es l ogicamente equivalente a la expresi on
(x
1
x
2
. . . x
l
) x
p
(4.11)
por las reglas de transformaci on de la secci on 1.7.1. El problema HORNSAT es el sigu-
iente:
Problema 4.4: HORNSAT
Dado: una expresi on booleana que es una conjunci on de cl ausu-
las Horn
Pregunta: es satisfactible?
Resulta que HORNSAT s tiene un algoritmo polinomial, por lo cual HORNSAT P. El
algoritmo para determinar satisabilidad para una expresi on que consiste de cl ausulas
Horn es lo siguiente:
(I) Inicializa T := y el conjunto S para contener las cl ausulas.
(II) Si hay una implicaci on

i
= (x
1
x
2
x
n
) y S
tal que (X(
i
) y) T pero y / T, haz que y sea verdadera por asignar T :=
T y.
(III) Si T cambi o, vuelve a repetir el paso II.
(IV) Cuando ya no haya cambios en T, verica para todas las cl ausulas en S que consis-
ten de puros literales negados,
i
= x
1
x
n
:
Si existe un literal x
i
tal que x
i
/ T, el resultado es que
i
es satisfactible.
Si no existe tal literal, el resultado es que
i
es no satisfactible y as tampoco
lo es.
(V) Si todas las cl ausulas negativas son satisfactibles, tambi en lo es.
Problema 4.5: CIRCUITSAT
46 CAP

ITULO 4. COMPLEJIDAD COMPUTACIONAL DE PROBLEMAS


Dado: un circuito booleano C
Pregunta: existe una asignaci on T : X(C) , tal que la sali-
da del circuito tenga el valor verdad?
Problema 4.6: CIRCUITVALUE
Dado: un circuito booleano C que no contenga variables
Pregunta: tiene el valor la salida del circuito?
CIRCUITSAT NP, pero CIRCUITVALUE P. Para CIRCUITVALUE, no es necesario
denir un T como X(C) = .
4.5.2. Problemas de grafos
Problema de alcance (REACHABILITY)
Un problema b asico de grafos es el problema de alcance :
Problema 4.7: REACHABILITY
Dado: un grafo G = (V, E) y dos v ertices v, u V
Pregunta: existe un camino de v a u?
Su problema complemento es obviamente
Problema 4.8: REACHABILITY Complement
Dado: un grafo G = (V, E) y dos v ertices v, u V
Pregunta: es verdad que no existe ning un camino de v a u?
Un algoritmo b asico para REACHABILITY es el algoritmo Floyd-Warshall que adem as
resuelve no solamente la existencia de los caminos pero en grafos ponderados encuentra
los caminos m as cortos. El algoritmo compara todos los caminos posibles entre todos los
pares de v ertices en un grafo de entrada. El algoritmo construye de una manera incre-
mental estimaciones a los caminos m as cortos entre dos v ertices hasta llegar a la soluci on
optima.
Etiquetamos los v ertices de G = (V, E) tal que V = 1, 2, . . . , n. Utilizamos como
subrutina cc(i, j, k) que construye el camino m as corto entre los v ertices i y j pasando
solamente por v ertices con etiqueta menor o igual a k. Para construir un camino de i a j
con solamente v ertices intermedios con menores o iguales a k +1, tenemos dos opciones:
la primera es que el camino m as corto con etiquetas menores o iguales a k + 1 utiliza
4.5. ALGUNOS PROBLEMAS FUNDAMENTALES 47
solamente los v ertices con etiquetas menores o iguales a k o que existe alg un camino que
primero va de i a k +1 y despu es de k +1 a j tal que la combinaci on de estos dos caminos
es m as corto que cualquier camino que solamente utiliza v ertices con etiquetas menores
a k + 1. Esta observaci on nos ofrece una formulaci on recursiva de cc():
cc(i, j, k) = mn cc(i, j, k 1), cc(i, k, k 1) +cc(k, j, k 1) , (4.12)
con la condici on inicial siendo para grafos ponderados que cc(i, j, 0) = w(i, j) donde
w(i, j) es el peso de la arista (i, j) E y para grafos no ponderados cc(i, j, 0) = 1
para cada arista de G = (V, E). En ambos casos, para los pares que no corresponden a
una arista, cc(i, j, 0) = . Los pesos tienen que ser no negativos para que funcione el
algoritmo.
Iterando esto para computar cc(i, j, k) primero con k = 1, despu es con k = 2, contin-
uando hasta k = n para cada par. Lo conveniente es que la informaci on de la iteraci on k
se puede reemplazar con la de la iteraci on k + 1. Entonces, el uso de memoria es lineal.
El tiempo de computaci on es O(n
3
) es un ejercicio f acil ver porqu e.
Ciclos y caminos de Hamilton
Los problemas de decidir si un grafo de entrada contiene un camino o un ciclo de Hamil-
ton son los siguientes:
Problema 4.9: HAMILTON PATH
Dado: un grafo G = (V, E)
Pregunta: existe un camino C en G tal que C visite cada v ertice ex-
actamente una vez?
Problema 4.10: HAMILTON CYCLE
Dado: un grafo G = (V, E)
Pregunta: existe un ciclo C en G tal que C visite cada v ertice exac-
tamente una vez?
Un problema de optimizaci on basada en el problema de decisi on HAMILTON CYCLE es
el problema del viajante (de comercio) (ingl es: travelling salesman problem) TSP es una
versi on en un grafo ponderado: habr a que encontrar un ciclo de Hamilton con costo mni-
mo, donde el costo es la suma de los pesos de las aristas incluidas en el ciclo.
La problema de decisi on que corresponde a la versi on ponderada es TSPD:
Problema 4.11: TSPD
48 CAP

ITULO 4. COMPLEJIDAD COMPUTACIONAL DE PROBLEMAS


Dado: un grafo ponderado G = (V, E) con pesos en las aristas y
un constante c
Pregunta: existe un ciclo C en G tal que C visite cada v ertice exac-
tamente una vez y que la suma de los pesos de las aristas de
C sea menor o igual a c?
Camarilla y conjunto independiente
El problema de camarilla (CLIQUE) trata de la existencia de subgrafos completos, o sea,
conjuntos de v ertices C V tales que v, u C aplica que v, u E:
Problema 4.12: CLIQUE
Dado: grafo no dirigido G = (V, E) y un entero k > 0
Pregunta: existe un subgrafo completo inducido por el conjunto C
V tal que [C[ = k?
Un problema muy relacionado es el problema de conjunto independiente (INDEPENDENT
SET) que es un conjunto I V tal que v, u I aplica que v, u / E:
Problema 4.13: INDEPENDENT SET
Dado: grafo no dirigido G = (V, E) y un entero k > 0
Pregunta: existe un subgrafo inducido por el conjunto I V tal que
[I[ = k y que no contenga arista ninguna.?
Una observaci on importante es que si C es una camarilla en G = (V, E), C es un conjunto
independiente en el grafo complemento

G.
Acoplamiento
Un acoplamiento (ingl es: matching) es un conjunto / E de aristas disjuntas no
adyacentes. Un v ertice v est a acoplado si / contiene una arista incidente a v. Si no
est a acoplado, el v ertice est a libre. La gura 4.1 muestra un ejemplo simple.
Un acoplamiento m aximo /
max
es uno que contiene el n umero m aximo posible de aris-
tas. No es necesariamente unico. Un acoplamiento maximal tiene la propiedad de todas
las aristas que no pertenecen a /est an adyacentes a por lo menos una arista en /. En-
tonces, si se a nade una arista a tal /, el conjunto que resulta ya no es un acoplamiento.
Todos los acoplamientos m aximos deben ser maximales, pero no todos los maximales
deben de ser m aximos.
4.5. ALGUNOS PROBLEMAS FUNDAMENTALES 49
Figura 4.1: Un acoplamiento de un grafo peque no: las aristas gruesas negras forman el
acoplamiento y los v ertices azules est an acoplados.
El n umero de acoplamiento de G = (V, E) es [/
max
[. El n umero de v ertices libres
(dado G y /) se llama el d ecit del acoplamiento en G. Un acoplamiento perfecto cubre
todos los v ertices del grafo. Cada acoplamiento perfecto es m aximo y maximal y tiene un
n umero de acoplamiento igual a
|n|
2
.
Para mejorar un acoplamiento existente, se utiliza el m etodo de caminos aumentantes. Un
camino alternante es un camino en G al cual sus aristas alternativamente pertenecen y no
pertenecen a /. Un camino aumentante / es un camino alternante de un v ertice libre v
a otro v ertice libre u.
Dado un camino aumentante /, podemos realizar un intercambio de las aristas de /
incluidas en /para las aristas de / no en /para construir un acoplamiento nuevo /

tal que [/

[ = [/[ + 1, donde
/

=
_
/ (/ /)
_

_
/ (/ /)
_
. (4.13)
Un acoplamiento / es m aximo si y s olo si no contiene ning un camino aumentante. La
gura 4.2 muestra un ejemplo del intercambio por un camino aumentante.
Figura 4.2: Un ejemplo del m etodo de camino aumentante para mejorar un acoplamiento.
En azul se muestra el acoplamiento actual. Se puede aumentar el tama no intercambiando
la pertenencia con la no pertenencia al acoplamiento de las aristas del camino aumentante
indicado.
El algoritmo H ungaro es un algoritmo de tiempo O(n
3
) que construye en base de la
matriz se adyacencia de un grafo de entrada G = (V, E) un subgrafo que contiene las
aristas de un acoplamiento m aximo Es un algoritmo iterativo para eliminar aristas que no
formar an parte del acoplamiento y se acredita a Harold Kuhn (1955).
50 CAP

ITULO 4. COMPLEJIDAD COMPUTACIONAL DE PROBLEMAS


Para problemas de acoplamiento, muy tpicamente el grafo de entrada es bipartito. En
acoplamientos de grafos ponderados, se considera la suma de los valores de las aristas en
/y no solamente el n umero de aristas incluidas en el acoplamiento.
Cubiertas
Una cubierta (ingl es: cover) es un subconjunto de v ertices (o aristas) que de una manera
cubre todas las aristas (resp. todos los v ertices).
Formalmente, una cubierta de aristas es un conjunto (
E
de aristas tal que para cada
v ertice v V , ( contiene una arista incidente a v. Similarmente, una cubierta de v ertices
es un conjunto (
V
de v ertices tal que para cada arista v, w, por lo menos uno de los
v ertices incidentes est a incluido en (
V
. La meta de las problemas relacionadas suele ser
encontrar un conjunto de cardinalidad mnima que cumpla con la denici on. La gura 4.3
tiene ejemplos de los dos tipos de cubiertas.
Figura 4.3: Ejemplos de cubiertas: los v ertices verdes cubren todas las aristas y las aristas
amarillas cubren todos los v ertices.
Para un acoplamiento m aximo /y una cubierta de aristas mnima (
E
, aplica siempre que
[(
E
[ [/[. Adem as, dado un / m aximo, se puede f acilmente construir una cubierta
(
E
optima. Un problema de decisi on relacionado es el siguiente:
Problema 4.14: VERTEX COVER
Dado: un grafo G = (V, E) no dirigido y un entero k > 0
Pregunta: existe un conjunto de v ertices C V con [C[ k tal que
v, u E, o v C o u C?
Existe una conexi on fuerte entre conjuntos independientes y camarillas y cubiertas de
v ertices : Un conjunto I V de un grafo G = (V, E) es un conjunto independiente si
y s olo si I es una camarilla en el grafo complemento de G. Adem as, I es un conjunto
independiente en G si y s olo si V I es una cubierta de v ertices G.
Flujos
Para problemas de ujos, tpicamente se considera grafos ponderados (y posiblemente di-
rigidos). Adem as se ja dos v ertices especiales: un v ertice fuente s y un v ertice sumidero
4.5. ALGUNOS PROBLEMAS FUNDAMENTALES 51
t. El grafo necesita ser conexo en un sentido especial: v V , existe un camino (dirigido
en en caso de grafos dirigidos) del fuente s al sumidero t que pasa por el v ertice v. V ertices
que no cumplan con este requisito pueden ser eliminados en un paso de preprocesamiento
para preparar una instancia de un problema de ujos.
En el grafo de entrada ponderado, los valores de las aristas se llaman capacidades
c(v, w) 0. Para generalizar la denici on de capacidad a ser una funci on sobre todos
los pares de v ertices c : V V R, se dene: v, w / E c(v, w) = 0. La gura 4.4
muestra un ejemplo de un grafo que puede ser una instancia de un problema sobre ujos.
1
2
3
3
2
3
2
1
3
2
2
2
3
4
1
1
5
4
2
3
3
1
2
4
6
3
1
4
3
Sumidero
Fuente
1
2
Figura 4.4: Una instancia de ejemplo para problemas de ujos: los v ertices grises son el
fuente (a la izquierda) y el sumidero (a la derecha). Se muestra la capacidad de cada arista.
Un ujo positivo es una funci on f : V V R que satisface dos restricciones: la
restricci on de capacidad:
u, v V : 0 f(u, v) c(u, v) (4.14)
y la restricci on de conservaci on de ujo: el ujo que entra es igual al ujo que sale,
u V s, t :

vV
f(v, u) =

vV
f(u, v). (4.15)
Cortes
Un corte C V de G es una partici on del conjunto de v ertices V en dos conjuntos: C y
V C. En el caso especial de cortar un grafo de ujo, se exige que s C y t / C. La
capacidad de un corte C en un grafo no ponderado es el n umero de las aristas que cruzan
de C a V C,
[v, u E [ v C, w / C[ . (4.16)
Para un grafo ponderado la capacidad del corte es la suma de los pesos de las aristas que
cruzan de C a V C,

vC
w/ C
c(v, w). (4.17)
La gura 4.5 muestra una instancia de un problema de ujos con cuatro cortes y sus
capacidades.
52 CAP

ITULO 4. COMPLEJIDAD COMPUTACIONAL DE PROBLEMAS


1
3
3
2
3
2
1
3
2
2
2
3
4
1
1
5
4
2
3
3
1
2
4
6
3
1
4
3
5
14
2
19
15
1
2
Figura 4.5: Un ejemplo de un grafo que es una instancia de un problema de ujos. Se
muestra cuatro cortes con sus capacidades respectivas.
Un corte mnimo de G = (V, E) es un corte cuya capacidad es mnima entre todos los
cortes de G. El problema de encontrar el corte mnimo tiene soluci on polinomial. Adem as,
la capacidad del corte mnimo entre dos v ertices s y t es igual al ujo m aximo entre s y
t. Cuando establecido un ujo en el grafo, la cantidad de ujo que cruza un corte es igual
a cada corte del grafo.
En la mayora de las aplicaciones de cortes de grafos, los tama nos de los dos lados del
corte, [C[ y [V C[ no suelen ser arbitrarios. El problema de la m axima bisecci on es el
siguiente:
Problema 4.15: MAX BISECTION
Dado: un grafo G = (V, E) (tal que n es par) y un entero k > 0
Pregunta: existe un corte C en G con capacidad mayor o igual a k tal
que [C[ = [V C[?
Coloreo
Problema 4.16: k-COLORING
Dado: un grafo no dirigido G = (V, E) y un entero k > 0
Pregunta: existe una asignaci on de colores a los v ertices de V tal que
ning un par de v ertices v, u V tal que v, u E tenga el
mismo color?
Captulo 5
Clases de complejidad
Es posible denir diferentes tipos de clases de complejidad computacional. Los requisitos
para denir una clase son
(I) jar un modelo de computaci on (es decir, qu e tipo de m aquina Turing se utiliza),
(II) la modalidad de computaci on: determinista, no determinista, etc etera,
(III) el recurso el uso del cual se controla por la denici on: tiempo, espacio, etc etera,,
(IV) la cota que se impone al recurso (es decir, una funci on f correcta de complejidad).
Una funci on f : N N es una funci on correcta de complejidad si es no decreciente y
existe una m aquina Turing M
f
de k cintas con entrada y salida tal que con toda entrada
x aplica que M
f
(x) =
f(|x|)
, donde es un smbolo casi-blanco, y adem as M
f
para
despu es de O([x[ + f([x[)) pasos de computaci on y utiliza O(f([x[)) espacio en adici on
a su entrada. Algunos ejemplos de funciones de complejidad son
c,

n, n, log n, log
2
n, nlog n, n
2
, n
3
+ 3n, 2
n
, n!, (5.1)
donde n es el par ametro de la funci on, f(n), y c es un constante. Dada dos funciones
correctas de complejidad f y g, tambi en f + g, f g y 2
f
son funciones correctas.
Formalmente, una clase de complejidad es el conjunto de todos los lenguajes decididos
por alguna m aquina Turing M del tipo I que opera en el modo de operaci on de II tal que
para todo entrada x, M necesita al m aximo f([x[) unidades del recurso denido en III,
donde f es la funci on de IV.
Dada una funci on correcta de complejidad f, obtenemos las clases siguientes:
_

_
tiempo
_
determinista TIME(f)
no determinista NTIME(f)
espacio
_
determinista SPACE(f)
no determinista NSPACE(f)
(5.2)
53
54 CAP

ITULO 5. CLASES DE COMPLEJIDAD


Cuadro 5.1: La jerarqua de complejidad computacional con ejemplos: arriba est an las
tareas m as f aciles y abajo las m as difciles.
Tiempo Clase Ejemplo
Problemas con algoritmos ecientes
O(1) P si un n umero es par o impar
O(n) P b usqueda de un elemento entre n elementos
O(nlog n) P ordenaci on de n elementos
O(n
3
) P multiplicaci on de matrices
O
_
n
k
_
P programaci on lineal
Problemas difciles
O(n
2
2
n
) NP-completo satisabilidad
Para deniciones m as amplias, podemos utilizar una familia de funciones f cambiando
un par ametro k 0, k Z: las clases m as importantes as obtenidas son
Denici on de la clase Nombre
TIME
_
n
k
_
=

j>0
TIME(n
j
) = P
NTIME
_
n
k
_
=

j>0
NTIME(n
j
) = NP
SPACE
_
n
k
_
=

j>0
SPACE(n
j
) = PSPACE
NSPACE
_
n
k
_
=

j>0
NSPACE(n
j
) = NPSPACE
TIME
_
2
n
k
_
=

j>0
TIME
_
2
n
j
_
= EXP.
(5.3)
Otras clases que se encuentra frecuentemente son L = SPACE(log(n)) y NL =
NSPACE(log(n))
Para cada clase de complejidad C, existe una clase coC que es la clase de los comple-
mentos,
_

L [ L C
_
. (5.4)
Todas las clases deterministas de tiempo y espacio son cerradas bajo el complemento. Es
decir, la operaci on de tomar el complemento de un lenguaje L C resulta en un lenguaje
L

=

L tal que tambi en L

C. Por ejemplo, P = coP. Lo unico que hay que hacer


para mostrar esto es intercambiar los estados s y no en las m aquinas Turing que
corresponden.
Se puede mostrar tambi en que las clases de espacio no deterministas est an cerradas bajo
complemento, pero es una pregunta abierta si tambi en aplica para clases no deterministas
de tiempo.
5.1. JER

ARQUIAS DE COMPLEJIDAD 55
5.1. Jer arquias de complejidad
Si permitimos m as tiempo a una m aquina Turing M, logramos que M puede tratar de
tareas m as complejas. Para una funci on correcta de complejidad f(n) n, denimos un
lenguaje nuevo:
H
f
= M
b
; x [ M acepta a x despu es de no m as de f([x[) pasos (5.5)
El lenguaje H
f
es una versi on cortada de H, el lenguaje de HALTING.
Se puede mostrar que H
f
TIME((f(n))
3
) con una m aquina Turing U
f
de cuatro
cintas que est a compuesta de la m aquina universal U, un simulador de m aquinas de cintas
m ultiples con una sola cinta, una m aquina de aumento de rapidez lineal y la m aquina M
f
que computa la vara de medir del largo f(n), donde n = [x[ es el largo de la entrada x.
La operaci on de la m aquina U
f
es la siguiente:
(I) M
f
computa la vara de medir
f(|x|)
para M en la cuarta cinta.
(II) La descripci on binaria de M, M
b
est a copiada a la tercera cinta.
(III) La segunda cinta est a inicializada para codicar el estado inicial s.
(IV) La primera cinta est a inicializada para contener la entrada x.
(V) U
f
simula con una sola cinta a M.
(VI) Despu es de cada paso de M simulado, U
f
avanza la vara de medir por una posici on.
(VII) Si U
f
descubre que M acepta a x en f([x[) pasos, U
f
acepta su entrada.
(VIII) Si se acaba la vara de medir sin que M acepte a x, U
f
rechaza su entrada.
Cada paso de la simulaci on necesita O(f(n)
2
) tiempo, por lo cual con los f([x[) pasos
simulados al m aximo, llegamos a tiempo de ejecuci on total O(f(n)
3
) para U
f
.
Tambi en se puede mostrar que H
f
, TIME
_
f(
n
2
)
_
. Para comprobar esto, suponga
que existe una m aquina Turing M que decide a H
f
en tiempo f(
n
2
). Consideramos otra
m aquina D que dice no cuando M(M
b
; M
b
) = s y en otros casos D dice s. Con
la entrada M
b
, D necesita
f(
2[M
b
[ + 1
2
) = f([M
b
[) (5.6)
pasos. Si D(D
b
) = s, tenemos que M(D
b
; D
b
) = no, y entonces D; D , H
f
. En
este caso, D no puede aceptar la entrada D
b
dentro de f([D
b
[) pasos, que signica que
D(D
b
) = no, que es una contradicci on.
Entonces D(D
b
) ,= s. Esto implica que D(D
b
) = no y M(D
b
; D
b
) = s, por lo
cual D
b
; D
b
H
f
y D acepta la entrada D
b
en no m as que f([D
b
[) pasos. Esto quiere
decir que D(D
b
) = s, que es otra contradicci on y nos da el resultado deseado.
Utilizando estos dos resultados, podemos llegar a probar al teorema siguiente:
56 CAP

ITULO 5. CLASES DE COMPLEJIDAD


Teorema 5.7. Si f(n) n es una funci on correcta de complejidad, entonces la clase
TIME(f(n)) est a estrictamente contenida en TIME((f(2n + 1))
3
).
Es bastante evidente que
TIME(f(n)) TIME
_
(f(2n + 1))
3
_
(5.7)
como f es no decreciente. Ya sabemos que
H
f(2n+1)
TIME
_
(f(2n + 1))
3
_
(5.8)
y que
H
f(2n+1)
, TIME
_
f
_

2n + 1
2

__
= TIME(f(n)) . (5.9)
Este resultado implica tambi en que P TIME(2
n
) EXP por n
k
= O(2
n
) y por el
resultado anterior que nos da
TIME(2
n
) TIME
_
(2
2n+1
)
3
_
TIME
_
2
n
2
_
EXP. (5.10)
Teorema 5.8. Si f(n) n es una funci on correcta de complejidad, entonces aplica que
SPACE(f(n)) SPACE(f(n) log f(n)).
Es muy importante el requisito que f sea una funci on correcta de complejidad. Por ejemp-
lo, existe una funci on no correcta f : Z
+
Z
+
tal que TIME(f(n)) = TIME
_
2
f(n)
_
.
El truco es denir f tal que ninguna m aquina Turing M con entrada x, [x[ = n, para de-
spu es de k pasos tal que f(n) k 2
f(n)
.
Relaciones entre clases
Sea f(n) una funci on de complejidad correcta. Naturalmente SPACE(f(n))
NSPACE(f(n)) y TIME(f(n)) NTIME(f(n)) por el hecho simple que una
m aquina Turing determinista es t ecnicamente tambi en una NTM, con buenas adivinan-
zas. Un resultado menos obvio es el siguiente:
Teorema 5.9. NTIME(f(n)) SPACE(f(n)).
La demostraci on se construye por simular todas las opciones: dado un lenguaje L
NTIME(f(n)), existe una m aquina Turing precisa no determinista M que decide L en
tiempo f(n). Sea d el grado de no determinismo de M; cada computaci on de M es una
sucesi on de selecciones no deterministas. El largo de la sucesi on es f(n) y cada elemento
se puede representar por un entero [0, d 1].
Construyamos una m aquina M

para simular a M, considerando cada sucesi on de se-


lecciones posibles a su turno. Como M

simula las acciones de M, si con una sucesi on


M para con s, M

tambi en para con s. Si ninguna sucesi on acepta, M

rechaza su
entrada.
5.1. JER

ARQUIAS DE COMPLEJIDAD 57
Aunque el n umero de simulaciones es exponencial, el espacio que necesitamos es sola-
mente f(n) como lo hacemos una por una. El estado y todo lo anotado durante la sim-
ulaci on de una sucesi on puede ser borrado cuando empieza la simulaci on de la sucesi on
siguiente. Adem as, como f(n) es una funci on correcta de complejidad, la primera se-
cuencia se puede generar en espacio f(n).
La demostraci on del teorema siguiente se encuentra en el libro de texto de Papadimitriou
[15]:
Teorema 5.10. NSPACE(f(n)) TIME
_
c
log n+f(n)
_
.
Una secuencia del teorema es que
L NL P NP PSPACE EXP. (5.11)
La pregunta interesante con ese corolario es donde aplica A B en vez de A B,
es decir, entre que clases podemos probar que existe una diferencia: algunos elementos
pertenecen a una pero no a la otra. Con los resultados ya establecidos, tenemos L
PSPACE por
L = SPACE(log(n)) SPACE(log(n) log(log(n)))
SPACE(n
2
) PSPACE.
(5.12)
Es com unmente aceptado que las inclusiones inmediatas en ecuaci on 5.11 sean todos de
tipo A B, pero todava no se ha establecido tal resultado. Lo que s se ha establecido
que por lo menos una de las inclusiones entre L y PSPACE es de ese tipo, y tambi en
que por lo menos una entre P y EXP es de ese tipo. El problema es que no se sabe cu al.
Espacio y no determinismo
De los resultados de la secci on anterior tenemos que
NSPACE(f(n)) TIME
_
c
log n+f(n)
_
SPACE
_
c
log n+f(n)
_
, (5.13)
pero existen resultados a un m as estrictas: m aquinas no deterministas con lmites de espa-
cio se puede simular con m aquinas deterministas con espacio cuadr atico. El resultado se
basa en REACHABILITY.
Teorema 5.11. (Teorema de Savitch) REACHABILITY SPACE
_
log
2
n
_
.
La demostraci on del teorema est a en el libro de texto de Papadimitriou [15]. Se llega a
probar que para toda funci on correcta f(n) log n, aplica que
NSPACE(f(n)) SPACE
_
(f(n))
2
_
. (5.14)
Adem as, se demostraci on que PSPACE = NPSPACE. Entonces m aquinas no deter-
ministas con respeto a espacio son menos poderosos que las m aquinas no deterministas
con respeto a tiempo; todava no se sabe si P = NPo no.
58 CAP

ITULO 5. CLASES DE COMPLEJIDAD


5.2. Reducciones
Una clase de complejidad es una colecci on innita de lenguajes. Por ejemplo, la clase
NP contiene problemas como SAT, HORNSAT, REACHABILITY, CLIQUE, etc etera. No
todas las problemas en la misma clase parecen igualmente difciles. Un m etodo para es-
tablecer un ordenamiento de problemas por dicultad es la construcci on de reducciones:
un problema A es por lo menos tan difcil como otro problema B si existe una reducci on
del problema B al problema A.
Un problema B reduce al problema A si existe una transformaci on R que para toda en-
trada x del problema B produce una entrada equivalente y de A tal que y = R(x). La
entrada y de A es equivalente a la entrada x de B si la respuesta (s o no) al problema
A con la entrada y es la misma que la del problema B con la entrada x,
x B si y s olo si R(x) A. (5.15)
Entonces, para resolver el problema B con la entrada x, habr a que construir R(x) y re-
solver el problema A para descubrir la respuesta que aplica para los dos problemas con
sus entradas respectivas. Es decir, si contamos con un algoritmo para el problema A y un
algoritmo para construir R(x), la combinaci on nos da un algoritmo para el problema B.
Entonces, si R(x) es f acilmente construida, parece razonable que A es por lo menos
tan difcil como B. Para poder establecer resultados formales, hay que clasicar las re-
ducciones seg un los recursos computacionales utilizados por sus transformaciones. Las
reducciones Cook permiten que R(x) sea computada por una m aquina Turing polinomi-
al, mientras una reducci on Karp es una reducci on con una funci on de transformaci on de
tiempo polinomial y las reducciones de espacio logartmico son la clase de reducciones
que utilizamos en este curso: un lenguaje L es reducible a un lenguaje L

, denotado por
L
L
L

, si y s olo si existe una funci on R de cadenas a cadenas que est a computada por
una m aquina Turing determinista en espacio O(log n) tal que para toda entrada x
x L si y s olo si R(x) L

. (5.16)
La funci on R se llama una reducci on de L a L

.
Teorema 5.12. Si R es una reducci on computada por una m aquina Turing determinista
M, para toda entrada x, M para despu es de un n umero polinomial de pasos.
La demostraci on sigue las ideas siguientes: denota el largo de la entrada x con [x[ =
n. Como M utiliza O(log n) espacio, el n umero de conguraciones posibles de M es
O
_
nc
log n
_
. El hecho que M es determinista y para con toda entrada, no es posible que se
repita ninguna conguraci on. Entonces, M para despu es de
c

nc
log n
= c

nn
log c
= O
_
n
k
_
(5.17)
pasos de computaci on con alg un valor de k. Adem as, como la cinta de salida de M, que
al nal contiene R(x), est a computada en tiempo polinomial, el largo de R(x), [R(x)[, es
necesariamente polinomial en n = [x[.
5.2. REDUCCIONES 59
Ejemplos de reducciones
Si queremos mostrar que un problema A no tenga soluci on, tenemos que mostrar que si
existe un algoritmo para A, necesariamente tiene que existir un algoritmo para HALTING.
La t ecnica para mostrar tal cosa es por construir una reducci on del problema HALTING al
problema A. Una reducci on de B a Aes una transformaci on de la entrada I
B
del problema
B a una entrada I
A
= t(I
B
) para A tal que
I
B
B I
A
A (5.18)
y que exista una m aquina Turing T tal que t(I
B
) = T(I
B
).
Entonces, para mostrar que A no tiene soluci on, se transforma la entrada M
b
; x de HALT-
ING a una entrada t(M
b
; x) de A tal que M
b
; x H si y s olo si t(M
b
; x) A. Algunos
ejemplos de lenguajes no recursivos son
(I) M
b
[ M para con cada entrada
(II) M
b
; x [ y : M(x) = y
(III) M
b
; x [ para computar M(x) se usa todos los estados de M
(IV) M
b
; x; y [ M(x) = y
Para el primero, la idea de la reducci on es la siguiente: dada la entrada M
b
; x, se construye
la siguiente m aquina M

(y) =
_
M(x), si x = y,
alto en otro caso.
(5.19)
para la cual aplica que
M
b
; x H M para con x M

para con toda entrada M

A. (5.20)
Ahora veremos ejemplos de reducciones entre dos problemas: de un problema B a otro
problema A. En cada caso, se presenta una reducci on R del lenguaje L
B
del problema B
al lenguaje L
A
del problema A tal que para cada cadena x del alfabeto de B
(I) x L
B
si y s olo si R(x) L
A
y
(II) se puede computar R(x) en espacio O(log n).
Como un ejemplo, hacemos ahora una reducci on de HAMILTON PATH a SAT. Para
mostrar que SAT es por lo menos tan difcil que HAMILTON PATH, hay que establecer
una reducci on R de HAMILTON PATH a SAT: para un grafo G = (V, E), el resultado
R(G) es una conjunci on de cl ausulas (o sea, una expresi on booleana en CNF) tal que G
es un camino de Hamilton si y s olo si R(G) es satisfactible.
60 CAP

ITULO 5. CLASES DE COMPLEJIDAD


La construcci on es la siguiente y no es nada obvia sin conocer los trucos tpicos del
dise no de reducciones. Etiquetamos los n v ertices de G = (V, E) con los enteros: V =
1, 2, . . . , n. Representamos cada par de v ertices con una variable booleana x
ij
donde
i V y j [1, n].
Asignamos a la variable x
ij
el valor si y s olo si el v ertice n umero i en el camino C
construido en HAMILTON PATH es el v ertice j. Entonces, son en total n
2
variables, como
el largo del camino es necesariamente n. Las cl ausulas necesarias son las siguientes:
(I) Cada v ertice necesita estar incluido en el camino C:
j V : x
1j
x
nj
. (5.21)
(II) Cada v ertice solamente puede estar incluida una sola vez en el camino C:
i, k V, j [1, n], i ,= k : x
ij
x
kj
. (5.22)
(III) En cada posici on del camino C hay alg un v ertice:
i V : x
i1
x
in
. (5.23)
(IV) Ning un par de v ertices puede ocupar la misma posici on en el camino C:
i V, j, k [1, n], j ,= k : x
ij
x
ik
. (5.24)
(V) El camino tiene que seguir las aristas del grafo: un v ertice solamente puede seguir
otro v ertice en el camino C si esos v ertices est an conectados por una arista en
G = (V, E):
(i, j) / E, k [1, n 1] : x
ki
x
(k+1)j
. (5.25)
Ahora hay que mostrar que si R(G) tiene una asignaci on T que satisface a R(G), este
corresponde al camino C del problema HAMILTON PATH:
Por las cl ausulas I y II existe un s olo v ertice i tal que T(x
ij
) = .
Por las cl ausulas III y IV existe una sola posici on j tal que T(x
ij
) = .
Entonces, T representa una a permutaci on (1), . . . , (n) de los v ertices tal que
(i) = j si y s olo si T(x
ij
) = .
Por las cl ausulas V, aplica que (k), (k + 1) E para todo k [1, n 1].
Entonces, las aristas que corresponden a la secuencia ((1), . . . , (n)) de visitas a
los v ertices es un camino de Hamilton.
5.2. REDUCCIONES 61
Tambi en hay que establecer que si ((1), . . . , (n)) es una secuencia de visitas a los
v ertices del grafo G = (V, E) que corresponde a un camino de Hamilton, denido por la
permutaci on , necesariamente est a satisfecha la expresi on R(G) por una asignaci on T
tal que
T(x
ij
) =
_
si (i) = j,
en otro caso.
(5.26)
Adem as, queda mostrar que la computaci on de R(G) ocupa O(log n) espacio. Dada G
como la entrada de una m aquina Turing M, M construye a R(G) de la manera siguiente:
primero, se imprime las cl ausulas de las primeras cuatro clases uno por uno a trav es de
tres contadores i, j y k. La representaci on binaria de cada contador con el rango [1, n] es
posible en log n espacio. Est a parte no depende de la estructura del grafo, solamente de
su n umero de v ertices.
Adem as, M genera las cl ausulas V por considerar cada par (i, j) en su turno: M verica
si (i, j) E, y si no lo es, se a nade para todo k [1, n 1] la cl ausula x
ki
x
(k+1)j
.
Aqu espacio adicional aparte de la entrada misma es solamente necesario para los conta-
dores i, j y k.
En total, el espacio ocupado simultaneamente es al m aximo 3 log n, por lo cual la com-
putaci on de R(G) es posible en espacio O(log n).
Como otro ejemplo, hacemos una reducci on de REACHABILITY a CIRCUITVALUE: Para
un grafo G, el resultado R(G) es un circuito tal que la salida del circuito R(G) es si y
s olo si existe un camino del v ertice 1 al v ertice n en G = (V, E). Las puertas de R(G)
son de dos formas:
(I) g
ijk
donde 1 i, j n y 0 k n y
(II) h
ijk
donde 1 i, j, k n.
La puerta g
ijk
debera funcionar tal que tenga el valor si y s olo si existe un camino en
G del v ertice i al v ertice j sin pasar por ning un v ertice con etiqueta mayor a k. La puerta
h
ijk
debera funcionar tal que tenga el valor si y s olo si existe un camino en G del
v ertice i al v ertice j sin usar ning un v ertice intermedio mayor a k pero s utilizando k. La
estructura del circuito R(G) es tal que
Para k = 0, la puerta g
ijk
es una entrada en R(G).
La puerta g
ij0
es una puerta tipo si i = j o i, j E y en otro caso una puerta
tipo .
Para k = 1, 2, . . . , n, las conexiones entre las puertas en R(G) son las siguientes:
Cada h
ijk
es una puerta tipo con dos entradas: la salida de g
ik(k1)
y la salida
de g
kj(k1)
.
62 CAP

ITULO 5. CLASES DE COMPLEJIDAD


Cada g
ijk
es una puerta tipo con dos entradas: la salida de g
ij(k1)
y la salida
de h
ijk
.
La puerta g
1nn
es la salida del circuito R(G).
El circuito R(G) es no cclico y libre de variables. Llegamos a una asignaci on correcta
de valores a h
ijk
y g
ijk
por inducci on en k = 0, 1, . . . , n. El caso b asico k = 0 aplica por
denici on. Para k > 0, el circuito asigna
h
ijk
= g
ik(k1)
g
kj(k1)
. (5.27)
Nuestro hip otesis de inducci on es que h
ijk
sea si y s olo si haya un camino del v ertice
i al v ertice k y adem as un camino del v ertice k al v ertice j sin usar v ertices intermedios
con etiquetas mayores a k 1, lo que aplica si y s olo si haya un camino del v ertice i al
v ertice j que no utiliza ning un v ertice intermedio mayor a k pero s pasa por el mismo
v ertice k.
Para k > 0, el circuito asigna por denici on g
ijk
= g
ij(k1)
h
ijk
. Por el hip otesis, g
ijk
es
si y s olo si existe un camino del v ertice i al v ertice j sin usar ning un v ertice con etiqueta
mayor a k 1 o si existe un camino entre los v ertices que no utilice ning un v ertice con
etiqueta mayor a k pero pasando por k mismo. Entonces, tiene el valor solamente en
el caso que existe una camino del v ertice i al v ertice j sin pasar por ning un v ertice con
etiqueta mayor a k.
Para comprobar que es correcta la reducci on, hacemos el an alisis siguiente, por cu al re-
sulta que el circuito R(G) de hecho implementa el algoritmo Floyd-Warshall para el prob-
lema de alcance. La salida del circuito R(G) es si y s olo si g
1nn
es , lo que aplica si
y s olo si existe un camino de 1 a n en G sin v ertices intermedios con etiquetas mayores a
n (que ni siquiera existen) lo que implica que existe un camino de 1 a n en G. Dado dos
v ertices v, u V para el problema REACHABILITY, lo unico es etiquetar v = 1 y u = n
y la reducci on est a completa.
Entonces, lo unico que necesitamos son tres contadores para computar el circuito R(G):
se puede hacer esto en O(log n) espacio. Una observaci on importante es que R(G) es un
circuito mon otono: no contiene ninguna puerta tipo .
Cada circuito C sin variables de puede convertir a un circuito mon otono: la idea es utilizar
las leyes De Morgan
(a b) (a) (b)
(a b) (a) (b)
(5.28)
para empujar todas las negaciones hasta las puertas de entrada. Como cada puerta de
entrada es de tipo o de tipo en la ausencia de variables, aplicamos = y
= y ya no hay puertas de negaci on.
Un circuito mon otono solamente puede computar funciones booleanas mon otonas: si el
valor de una se sus entradas cambia de a , el valor de la funci on no puede cambiar de
a .
5.2. REDUCCIONES 63
Continuamos con los ejemplos de reducciones con una reducci on de CIRCUITSAT a
SAT: Dado un circuito booleano C, habr a que construir una expresi on booleana R(C)
en CNF tal que C es satisfactible si y sol o si R(C) lo es.
La expresi on R(C) usar a todas las variables x
i
de C y incorpora una variable adicional
y
j
para cada puerta de C. Las cl ausulas son las siguientes:
(I) Si la puerta n umero j es una puerta tipo variable con la variable x
i
, las dos variables
y
j
y x
i
en R(C) tienen que tener el mismo valor, y
i
x; en CNF contendr a las dos
cl ausulas
(y
j
x
i
) y (y
j
x
i
). (5.29)
(II) Si la puerta j es una puerta tipo , habr a que poner la cl ausula (y
j
).
(III) Si la puerta j es una puerta tipo , habr a que poner la cl ausula (y
j
).
(IV) Si la puerta j es una puerta tipo y su puerta de entrada es la puerta h, habr a que
asegurar que y
j
tiene el valor si y s olo si y
h
tiene el valor , y
j
y
h
; en
CNF contendr a las dos cl ausulas
(y
j
y
h
) y (y
j
y
h
). (5.30)
(V) Si la puerta j es una puerta tipo con las puertas de entrada h y k, habr a que
asegurar que y
j
(y
h
y
k
); en CNF contendr a las tres cl ausulas
(y
j
y
h
), (y
j
y
k
) y (y
j
y
h
y
k
). (5.31)
(VI) Si la puerta j es una puerta tipo con las puertas de entrada h y k, habr a que
asegurar que y
j
(y
h
y
k
); en CNF contendr a las tres cl ausulas
(y
j
y
h
y
k
), (y
j
y
k
) y (y
j
y
h
). (5.32)
(VII) Si la puerta j es una puerta de salida, habr a que poner la cl ausula (y
j
).
Es relativamente directa la demostraci on de que sea correcto.
Nuestra ultima reducci on de la secci on es de CIRCUITVALUE a CIRCUITSAT; de hecho,
CIRCUITVALUE es un caso especial de CIRCUITSAT. Todas las entradas de CIRCUIT-
VALUE son tambi en entradas validas de CIRCUITSAT. Adem as, para las instancias de
CIRCUITVALUE, las soluciones de CIRCUITVALUE y CIRCUITSAT coinciden. Entonces,
CIRCUITSAT es una generalizaci on de CIRCUITVALUE. La reducci on es trivial: la funci on
de identidad I(x) = x de CIRCUITVALUE a CIRCUITSAT.
64 CAP

ITULO 5. CLASES DE COMPLEJIDAD


Reducciones compuestas
En la secci on anterior, establecemos una sucesi on de reducciones,
REACHABILITY
L
CIRCUITVALUE
L
CIRCUITSAT
L
SAT. (5.33)
Una pregunta interesante es si se puede componer reducciones, o sea, si la relaci on
L
es
transitiva. Por ejemplo, aplica que REACHABILITY
L
SAT?
Teorema 5.13. Si R es una reducci on del lenguaje L a lenguaje L

y R

es una reducci on
del lenguaje L

al lenguaje L

, la composici on R R

es una reducci on de L a L

.
Por denici on de reducciones, aplica que
x L R(x) L

(R(x)) L

. (5.34)
Lo que hay que mostrar es que es posible computar R

(R(x)) en espacio O(log n), [x[ =


n.
Tomamos las dos m aquinas Turing M
R
y M
R
. Construyamos una m aquina Turing M
para la composici on R R

. Necesitamos cuidar no guardar el resultado intermedio de


M
R
porque eso puede ser m as largo que log n, por lo cual no se puede guardar sin romper
el requisito de espacio logartmico.
La m aquina Turing M necesita simular a M
R
con la entrada R(x) por recordar la posici on
del cursor i en la cinta de entrada de M
R
. La cinta de entrada de M
R
es la cinta de salida
de M
R
. Guardando solamente el ndice i en binaria y el smbolo actualmente ledo, pero
no toda la cinta, podemos asegurar usar no m as que O(log n) espacio.
Inicialmente i = 1 y por denici on de las m aquinas Turing, el primer smbolo escaneado
es .
Cuando M
R
mueve a la derecha, M corre a M
R
para generar el smbolo de salida de esa
posici on y incrementa i := i + 1.
Si M
R
mueve a la izquierda, M asigna i := i 1 y vuelve a correr a M
R
con x desde el
comienzo, contando los smbolos de salida y parando al generar la posici on i de la salida.
El espacio necesario para tal seguimiento de la salida de M
R
con la entrada x es O(log n):
estamos guardando un ndice binario de una cadena del largo [R(x)[ = O
_
n
k
_
.
Como las ambas m aquinas M
R
(con la entrada x) y M
R
(con la entrada R(x)) operan en
espacio O(log n), as tambi en M necesita O(log n) espacio, [x[ = n.
5.3. Problemas completos
La relaci on transitiva y reexiva de reducciones
L
nos ofrece un orden de problemas.
De inter es especial son los problemas que son elementos maximales de tal orden de com-
plejidad.
5.3. PROBLEMAS COMPLETOS 65
Sea C una clase de complejidad computacional y L C un lenguaje. El lenguaje L es
C-completo si para todo L

C aplica que L


L
L.
En palabras: un lenguaje L es completo en su clase C si cada otro lenguaje L

C se
puede recudir a L.
Teorema 5.14. HALTING es completo para lenguajes recursivamente numerables.
La demostraci on es f acil: sea M una m aquina Turing que acepta L. Entonces
x L M(x) = s M
L
(x) ,= M
L
; x H. (5.35)
Un lenguaje L es C-duro (tambi en se dice: C-difcil) si se puede reducir cada lenguaje
L

C a L, pero no se sabe si es v alido que L C.


Todas las clases principales como P, NP, PSPACE y NLtienen problemas completos
naturales. Se utiliza los problemas completos para caracterizar una clase de complejidad.
Se puede aprovechar los resultados de completitud para derivar resultados de complejidad
negativos: un problema completo L C es el menos probable de todos los problemas de
su clase para pertenecer a una clase m as d ebil C

C.
Si resulta que L C

, aplica C

= C si C

est a cerrada bajo reducciones. Una clase


C

est a cerrada bajo reducciones si aplica que siempre cuando L es reducible a L

y
L

, tambi en L C

. Las clases P, NP, coNP, L, NL, PSPACE y EXP todas


est an cerradas bajo reducciones. Entonces, si uno pudiera mostrar que un problema NP-
completo pertenece a la clase P, la implicaci on sera que P = NP.
Entonces, habr a que establecer cu ales problemas son completos para cu ales clases. Lo
m as difcil es establecer el primero: hay que capturar la esencia del modo de c omputo y
la cota del recurso de la clase en cuesti on en la forma de un problema. El m etodo de hacer
esto se llama el m etodo de tabla. En esta secci on lo aplicamos para las clases P y NP.
Sea M = (K, , , s) una m aquina Turing de tiempo polinomial que computa un lenguaje
Lbasado en . La computaci on que ejecuta M con la entrada x se puede representar como
si fuera una tabla de c omputo T de tama no [x[
k
[x[
k
, donde [x[
k
es la cota de uso de
tiempo de M.
Cada la de la tabla representa un paso de computaci on: desde el primer paso 0 hasta el
ultimo [x[
k1
. Cada columna es una cadena del mismo largo tal que el elemento T
i,j
tiene
el smbolo contenido en la posici on j de la cinta de M despu es de i pasos de computaci on
de M. Para continuar, hay que hacer algunas suposiciones sobre M:
M cuenta con una sola cinta.
M para con toda entrada x despu es de un m aximo de [x[
k
2 pasos de c omputo,
con el valor de k elegido tal que se garantiza esto para cualquier [x[ 2.
Las cadenas en la tabla todos tienen el mismo largo [x[
k
, con cada posici on que
falta un smbolo llenada con un .
66 CAP

ITULO 5. CLASES DE COMPLEJIDAD


Si en el paso i, el estado de M es q y el cursor est a escaneando el smbolo j que es
, el elemento T
i,j
no es , sino
q
, salvo que para los estados s y no, por los
cuales el elemento es s o no respectivamente.
Al comienzo el cursor no est a en , sino en el primer smbolo de la entrada.
El cursor nunca visita al smbolo extremo al la izquierda de la cinta; est a se logra
por acoplar dos movimientos si M visitara ese .
El primer smbolo de cada la es siempre , nunca
q
.
Si M para antes de llegar a [x[
k
pasos, o sea, T
i,j
s, no para alg un i < [x[
k
1
y j, todas las las despu es ser an id enticas.
Se dice que la tabla T es aceptante si y s olo si T
|x|
k
1,j
= s para alg un j. Adem as, M
acepta a su entrada x si y s olo si la tabla de computaci on de M con x es aceptante.
Ahora utilizamos el m etodo para establecer que cualquier computaci on determinista de
tiempo polinomial se puede capturar en el problema de determinaci on del valor de un
circuito booleano:
Teorema 5.15. CIRCUITVALUE es P-completo.
Ya sabemos que CIRCUITVALUE P. Para establecer que sea completo, basta con de-
mostrar que para todo lenguaje L P, existe una reducci on R de L a CIRCUITVALUE.
Para la entrada x, el resultado R(x) ser a un circuito libre de variables tal que x L si y
s olo si el valor de R(x) es .
Considera una m aquina Turing M que decide a L en tiempo n
k
y su tabla de computaci on
T. Cuando i = 0 o j = 0 o j = [x[
k
1, conocemos el valor de T
i,j
a priori. Todos
los otros elementos de T dependen unicamente de los valores de las posiciones T
i1,ji
,
T
i1,j
y T
i1,j+1
. La idea es codicar este relaci on de las celdas de la tabla en un circuito
booleano. Primero se codica T en representaci on binaria. Despu es se utiliza el hecho
que cada funci on booleana se puede representar como un circuito booleano. Se llega a un
circuito C que depende de M y no de x. Este circuito se copia ([x[
k
1)([x[
k
2) veces,
un circuito por cada entrada de la tabla T que no est a en la primera la o las columnas
extremas. Habr a que establecer que sea correcta la reducci on y que la construcci on de
R(x) es posible en espacio logartmico. Los detalles de la demostraci on est an en el libro
de texto de Papadimitriou [15].
Como consecuencias del resultado, se puede establecer que el problema de valores de
circuitos mon otonos es tambi en P-completo y tambi en que HORNSAT es P-completo.
Tambi en resulta que computaci on no determinista en tiempo polinomial se puede capturar
en el problema de satisabilidad de circuitos:
Teorema 5.16. CIRCUITSAT es NP-completo.
5.3. PROBLEMAS COMPLETOS 67
Ya sabemos que CIRCUITSAT NP. Sea L un lenguaje en la clase NP. Dise namos una
reducci on R que para cada cadena x construye un circuito booleano R(x) tal que x L
si y s olo si R(x) es satisfactible. Sea M una m aquina Turing no determinista con una sola
cinta que decide a L en tiempo n
k
.
Empezamos por estandardizar las selecciones hechas por M: se asume que M tiene exac-
tamente dos alternativas
1
,
2
en cada paso de computaci on. Si en realidad hubieran
m as, se puede a nadir estados adicionales para dividir las opciones en un arbol binario. Si
en realidad hubiera un paso determinista, se asigna
1
=
2
.
Entonces, una secuencia c de elecciones no deterministas se puede representar en forma
binaria donde
1
= 0 y
2
= 1:
c = (c
0
, c
1
, . . . , c
|x|
k
2
) 0, 1
|x|
k
1
. (5.36)
Si jamos la secuencia elegida c, la computaci on hecha por M es efectivamente determin-
ista. Denimos ahora la tabla de computaci on T(M, x, c) que corresponde a la m aquina
Turing M, una entrada x y una secuencia ja de elecciones c.
En la codicaci on binaria de T(M, x, c), la primera la y las columnas extremas resul-
tan jas como en el caso anterior. Los otros elementos T
i,j
dependen de los elementos
T
i1,j1
, T
i1,j
y T
i1,j+1
, y adicionalmente de la elecci on c
i1
hecha en el paso anterior.
Existe un circuito booleano C con 3m + 1 entradas y m salidas que compute la codi-
caci on binaria de T
i,j
dado como entradas los cuatro datos T
i1,j1
, T
i1,j
, T
i1,j+1
y c
i1
en representaci on binaria.
El circuito R(x) ser a como en el caso determinista, salvo que la parte para c que ser a in-
corporada. Como C tiene tama no constante que no depende de [x[, el circuito R(x) puede
ser computada en espacio logartmico. Adem as, el circuito R(x) es satisfactible si y s olo
si existe una secuencia de elecciones c tal que la tabla de computaci on es aceptante si y
s olo si x L.
Entonces hemos llegado a probar es resultado. Una consecuencia de mucha importancia
es el teorema de Cook:
Teorema 5.17. (Teorema de Cook) SAT es NP-completo.
La demostraci on, ahora que conocemos el resultado de CIRCUITSAT, es simple: sea L
NP. Entonces, existe una reducci on de L a CIRCUITSAT, como CIRCUITSAT es NP-
completo. Adem as, como CIRCUITSAT tiene una reducci on a SAT, se puede reducir tam-
bi en de L a SAT por la composici on de reducciones. Como SAT NP, tenemos que
SAT es NP-completo.
5.3.1. Problemas NP-completos
La clase NP contiene numerosos problemas de importancia p actica. Tpicamente el prob-
lema tiene que ver con la construcci on o existencia de un objeto matem atico que satisface
68 CAP

ITULO 5. CLASES DE COMPLEJIDAD


ciertas especicaciones. La versi on de la construcci on misma es un problema de opti-
mizaci on, donde la mejor construcci on posible es la soluci on deseada. En la versi on de
decisi on, que es la versi on que pertenece a la clase NP, la pregunta es si existe por lo
menos una conguraci on que cumpla con los requisitos del problema. El libro de Garey
y Johnson [7] es la referencia cl asica de los problemas NP-completos.
Se puede decir que la mayora de los problemas interesantes de computaci on en el mundo
real pertenecen a la clase NP. La aplicaci on cotidiana de la teora de complejidad com-
putacional es el estudio sobre las clases a cuales un dado problema pertenece: solamente
a NP o tambi en a P, o quiz as a ninguna.
La herramienta b asica para esta tarea es construir una demostraci on que el problema de
inter es sea NP-completo, porque este implicara que el problema es entre los menos prob-
ables de pertenecer en la clase P. Nota que si alg un problema NP-completo perteneciera
a NP, aplicara NP = P.
Si se sube a un nivel sucientemente general, muchos problemas resultan NP-completos.
En muchos casos es importante identicar cu ales requisitos exactamente causan que el
problema resulte NP-completo versus polinomial. Una t ecnica b asica es estudiar el con-
junto de instancias producidas por una reducci on utilizada en la demostraci on de ser NP-
completo para capturar otro problema NP-completo.
El proceso de dise nar una demostraci on de NP-completitud para un problema Q es en
general el siguiente:
(I) Jugar con instancias peque nas de Q para desarrollar unos gadgets u otros compo-
nentes b asicos para usar en la demostraci on.
(II) Buscar por problemas que ya tengan demostraci on de ser NP-completos que po-
dran servir para la reducci on necesaria.
(III) Construir un reducci on R de un problema P conocido y NP-completo al problema
Q.
(IV) Probar que con la entrada R(x), si la soluci on de Q es s que este implica que la
soluci on de P con x tambi en es siempre s.
(V) Probar que con la entrada x, si la soluci on de P es s que este implica que la
soluci on de Q con R(x) tambi en es s.
En la construcci on tpicamente se busca por representar las elecciones hechas, la con-
sistencia y restricciones. Lo difcil es c omo expresar la naturaleza del problema P en
t erminos de Q.
Cuando ya est a establecido que un problema de inter es es NP-completo, normalmente se
dirige el esfuerzo de investigaci on a
estudiar casos especiales,
5.3. PROBLEMAS COMPLETOS 69
algoritmos de aproximaci on,
an alisis asint otica del caso promedio,
algoritmos aleatorizados,
algoritmos exponenciales para instancias peque nas o
m etodos heursticos de b usqueda local.
5.3.2. Caracterizaci on por relaciones: certicados
Una relaci on 1

se puede decidir en tiempo polinomial si y s olo si existe


una m aquina Turing determinista que decide el lenguaje x; y [ (x, y) 1 en tiempo
polinomial. Una relaci on 1est a polinomialmente balanceada si
_
(x, y) 1
_
(k 1 tal que [y[ [x[
k
). (5.37)
Sea L

un lenguaje.
Aplica que L NP si y s olo si existe una polinomialmente balanceada
relaci on 1 que se puede decidir en tiempo polinomial tal que
L = x

[ (x, y) 1para alg un y

. (5.38)
Para entender porqu e est a denici on es v alida, suponga que existe tal relaci on 1. En-
tonces L est a decidida por una m aquina Turing no determinista que con la entrada x
adivina un valor y con largo m aximo [x[
k
y utiliza la m aquina para 1 para decidir en
tiempo polinomial si aplica (x, y) 1.
Habr a que razonar la equivalencia l ogica tambi en en la otra direcci on: suponga que L
NP. Esto implica que existe una m aquina Turing no determinista N que decide a L en
tiempo [x[
k
para alg un valor de k.
Denimos la relaci on 1 en la manera siguiente: (x, y) 1 si y s olo si y es una codi-
caci on de una computaci on de N que acepta la entrada x. Esta 1 est a polinomialmente
balanceada, como cada computaci on de N tiene cota polinomial, y adem as se puede de-
cidir 1 en tiempo polinomial, como se puede vericar en tiempo polinomial si o no y es
una codicaci on de una computaci on que acepta a x en N. Como N decide a L, tenemos
L = x [ (x, y) R para alg un y , (5.39)
exactamente como queramos.
Un problema A pertenece a la clase NP si cada instancia con la respuesta s del proble-
ma Atiene por lo menos un certicado conciso y, tambi en llamado un testigo polinomial.
En los problemas tpicos que tratan de la existencia de un objeto matem atico que cumple
con ciertos criterios, el objeto mismo sirve como un certicado tpicamente el objeto
70 CAP

ITULO 5. CLASES DE COMPLEJIDAD


tiene un tama no no muy grande en comparaci on con la entrada. Por ejemplo, si se trata
se encontrar un cierto subgrafo, el subgrafo tiene tama no no mayor al tama no del grafo
de entrada. Los requisitos tambi en suelen sucientemente simples para poder vericar en
tiempo polinomial que un dado objeto realmente corresponde a los criterios denidos.
5.4. Complejidad de algunas variaciones de SAT
5.4.1. Problemas kSAT
El lenguaje kSAT, donde k 1 es un entero, es el conjunto de expresiones booleanas
SAT (en CNF) en las cuales cada cl ausula contiene exactamente k literales.
Teorema 5.18. 3SAT es NP-completo.
Claramente 3SAT NP por ser un caso especial de SAT y sabemos que SAT NP.
Ya hemos mostrado que CIRCUITSAT es NP-completo y adem as una reducci on de CIR-
CUITSAT a SAT est a construida. Ahora vamos a considerar las cl ausulas producidas en
esa reducci on: todas tienen tres literales o menos! Como las cl ausulas son disyunciones,
podemos aumentar cada cl ausula de uno o dos literales a tener tres simplemente por
copiar literales. Entonces, tenemos una reducci on de CIRCUITSAT a 3SAT.
A veces es posible aplicar transformaciones que eliminen algunas propiedades de un
lenguaje NP-completo tal que el hecho que est a NP-completo no est a afectado.
Teorema 5.19. 3SAT es NP-completo a un cuando solamente se permite que cada variable
aparezca por m aximo tres veces en la expresi on 3SAT y adem as que cada literal
aparezca por m aximo dos veces en .
La demostraci on es una reducci on donde cada instancia 3SATest a transformada a
eliminar las propiedades no permitidas. Considera una variable x que aparece k > 3 veces
en . Introducimos variables nuevas x
1
, . . . , x
k
y reemplazamos la primera ocurrencia de
x en por x
1
, la segunda por x
2
, etc etera. Para asegurar que las variables nuevas tengan
todas el mismo valor, a nademos las cl ausulas siguientes en :
(x
1
x
2
), (x
2
x
3
), . . . , (x
k
x
1
). (5.40)
Denota por

la expresi on que resulta cuando cada ocurrencia extra de una variable en


ha sido procesada de esta manera. Resulta que

ya cumple con las propiedades deseadas


y que es satisfactible si y s olo si es satisfactible.
Para problemas kSAT, la frontera entre problemas polinomiales y problemas NP-
completos est a entre 2SATy 3SAT. Para cada instancia de 2SAT, existe un algoritmo
polinomial basado en el problema REACHABILITY en un grafo G(). Las variables x
de y sus negaciones x forman el conjunto de v ertices de G(). Una arista conecta
5.4. COMPLEJIDAD DE ALGUNAS VARIACIONES DE SAT 71
dos v ertices x
i
y x
j
si y s olo si existe una cl ausula x
i
x
j
o x
j
x
i
en . Es decir, si
x
i
, x
j
E, tambi en x
j
, x
i
E.
La demostraci on resulta del hecho que no es satisfactible si y s olo si existe una variable
x tal que existen caminos de x a x y viceversa en G(). Entonces, sabemos que 2SAT es
polinomial. Adem as, resulta que 2SAT NL (habr a que recordar que NL P).
Como NL est a cerrada bajo el complemento, podemos mostrar que 2SAT Complement
NL. La existencia del camino de no satisabilidad del resultado anterior puede ser
vericada en espacio logartmico por computaci on no determinista por adivinar una
variable x y el camino entre x y x.
El problema MAX2SAT es una generalizaci on de 2SAT:
Problema 5.17: MAX2SAT
Dado: una expresi on booleana en CNF con no m as que dos lit-
erales por cl ausula y un entero k
Pregunta: existe una asignaciones de valores T que satisfecha por lo
menos k cl ausulas de ?
Se puede probar que MAX2SAT es NP-completo.
5.4.2. SAT de no todos iguales (NAESAT)
El lenguaje NAESAT 3SAT contiene las expresiones booleanas para las cuales existe
una asignaci on de valores T tal que en ninguna cl ausula de , todas las literales tengan el
mismo valor o .
Teorema 5.20. NAESAT es NP-completo.
Ya sabemos que CIRCUITSAT es NP-completo y vimos una reducci on R de CIRCUIT-
SAT a SAT: para todo circuito C, tenemos que C CIRCUITSAT si y s olo si R(C) SAT.
Primero aumentamos todas las clausulas de la reducci on a contener exactamente tres
literales por a nadir uno o dos duplicados de un literal z donde hace falta. Vamos a
mostrar que para la expresi on booleana R
z
(C) en CNF de tipo 3SAT aplica que R
z
(C)
NAESAT C CIRCUITSAT.
En la direcci on (), si una asignaci on de valores T satisface a la expresi on original R(C)
en el sentido de NAESAT, tambi en la asignaci on complementaria

T lo satisface por la
condici on NAESAT: en una de las dos asignaciones asigna al literal z, por lo cual todas
las cl ausulas originales est an satisfechas en esta asignaci on. Entonces, por la reducci on
de CIRCUITSAT a SAT, existe una asignaci on que satisface el circuito.
En la direcci on (), si C es satisfactible, existe una asignaci on de valores T que satisface
a R
z
(C). Entonces extendemos T para R
z
(C) por asignar T(z) = . En ninguna cl ausula
72 CAP

ITULO 5. CLASES DE COMPLEJIDAD


de R
z
(C) es permitido que todos los literales tengan el valor (y tampoco que todos ten-
gan el valor ). Cada cl ausula que corresponde a una puerta tipo , , o variable tena
originalmente dos literales o menos, por lo cual contienen z y T(z) = . Sin embargo,
est an satisfechas por T, por lo cual alg un literal es necesariamente asignado el valor en
T para cada cl ausula.
Los unicos casos de preocupaci on son puertas de tipo y . En el caso de , las cl ausulas
tienen la forma
(g h z), (g h

z), (g h h

), (5.41)
donde las primeras dos tienen z con su valor . En la tercera, no todas las tres pueden
tener el valor porque as no es posible satisfacer a las dos primeras. El caso de es
parecido.
5.5. Complejidad de problemas de grafos
En esta secci on, consideramos solamente grafos no dirigidos.
Teorema 5.21. INDEPENDENT SET es NP-completo.
Para demostrar el teorema, necesitamos un gadget: el tri angulo. Si el grafo de entrada
contiene un tri angulo, es decir, una camarilla de tres v ertices, solamente uno de los tres
participantes del tri angulo puede ser considerado para formar un conjunto independiente,
porque en un conjunto independiente, ning un par de v ertices puede compartir una arista.
Vamos a restringir la clase de grafos que permitimos: solamente consideramos grafos los
v ertices de cuales se puede dividir en tri angulos disjuntos. Es decir, cada v ertice del grafo
solamente puede tomar parte en un tri angulo (por lo de disjunto) y cada v ertice tiene que
ser parte de un tri angulo (por lo de haber sido dividido). Denotamos el n umero de tales
tri angulos por t.
Por construcci on, obviamente en ese tipo de grafo ning un conjunto independiente puede
tener cardinalidad mayor a t. Adem as, un conjunto independiente de cardinalidad t existe
solamente si las otras aristas del grafo permiten elegir un v ertice de cada tri angulo sin que
tengan aristas en com un los v ertices elegidos. Nuestra reducci on R ser a de 3SAT a INDE-
PENDENT SET: para cada cl ausula de una instancia de 3SAT, generamos un tri angulo
en el grafo G = R(). Sean a
i
, b
i
y c
i
las tres literales de una cl ausula C
i
. Entonces,
habr an v ertices v
ai
, v
bi
y v
ci
en el grafo G y adem as las tres aristas v
ai
, v
bi
, v
ai
, v
ci
y
v
bi
, v
ci
que forman el tri angulo de los tres v ertices de la cl ausula C
i
.
Adem as, hay que conectar las cl ausulas que comparten variables. Un v ertice v
i
que cor-
responde a un literal de la cl ausula C
i
y otro v ertice v
j
que corresponde a un literal de la
cl ausula C
j
, donde i ,= j, est an conectadas por una arista si y s olo si los literales a cuales
corresponden los v ertices v
i
y v
j
son de la misma variable, pero el literal es positivo en
C
i
y negativo en C
j
. Como un ejemplo, se puede construir un grafo que corresponde a
= (x
1
x
2
x
3
) (x
1
, = x
2
x
3
) (x
1
x
2
x
3
). (5.42)
5.5. COMPLEJIDAD DE PROBLEMAS DE GRAFOS 73
Con el grafo Gas construido y la cota k que es la cardinalidad del conjunto independiente
en el problema INDEPENDENT SET siendo k = t, tenemos denida nuestra reducci on.
Habr a que mostrar que es correcta la reducci on: existe un conjunto independiente I V
en el grafo G = R() tal que [I[ = k y tiene k cl ausulas si y s olo si es satisfactible.
Suponga que tal conjunto I existe. Como tiene k cl ausulas y [i[ = k, por construc-
ci on I necesariamente contiene un v ertice de cada uno de los k tri angulos. El conjunto
I no puede contener ning un par de v ertices que corresponda una ocurrencia positiva de
un variable x y una ocurrencia negativa x de la misma variable. Entonces, I dene una
asignaci on de valores T! Si un v ertice v pertenece a I y v corresponde a una ocurren-
cia positiva de la variable x, aplica que T(x) = . Si el v ertice v I corresponde a
una ocurrencia negativa x, aplica que T(x) = . Cada par de literales contradictorios
est a conectado en G por una arista, y entonces la asignaci on T as denida es consis-
tente. Por ultimo, como I contiene un v ertice de cada tri angulo, y cada tri angulo es una
cl ausula, cada cl ausula tiene exactamente un literal con el valor , porque necesariamente
T(x) = o T(x) = que implica que T(x) = para la variable x el v ertice de cual
est a incluido en el conjunto independiente I.
En la otra direcci on, utilizamos el mismo truco: si es satisfactible, dada la asignaci on T
que la satisface, identicamos cuales literales tienen el valor en T. Elegimos de cada
cl ausula un literal con el valor . Los v ertices que corresponden a estos literales forman
el conjunto I. Son uno por cl ausula, y entonces [I[ = k si tiene k cl ausulas. Adem as,
por construcci on, los v ertices as elegidos no est an conectados por ninguna arista, porque
solamente elegimos uno por tri angulo y las aristas fuera de los tri angulos est an entre
literales contradictorios.
Por Teorema 5.19, podemos hacer esta construcci on solamente suponiendo que cada lit-
eral ocurre por m aximo dos veces. En consecuencia, el grafo que resulta tiene grado
m aximo cuatro:
Teorema 5.22. INDEPENDENT SET es NP-completo para grafos de grado m aximo cuatro.
Tambi en aplica que INDEPENDENT SET es NP-completo para grafos planos, pero la de-
mostraci on se deja como ejercicio.
Por las conexiones conocidas entre INDEPENDENT SET, CLIQUE y VERTEX COVER,
llegamos a reducciones triviales que demostraci onn lo siguiente:
Teorema 5.23. CLIQUE y VERTEX COVER son NP-completos.
5.5.1. El problema de ujo m aximo
Dado un grafo dirigido con capacidades en las aristas y un ujo no- optimo, se puede
aumentar el ujo que cruza un corte desde el lado de s al lado de t o alternativamente
por disminuir el ujo desde el lado de t al lado de s. Este nos ofrece un algoritmo para
descubrir el ujo m aximo. Para empezar, podemos elegir el ujo cero, donde el ujo por
74 CAP

ITULO 5. CLASES DE COMPLEJIDAD


cada arista es cero no rompe con ninguna restricci on, por lo cual es un ujo factible,
aunque no optimo.
Para aumentar el ujo, buscamos un camino aumentante que en este caso es un camino
C de s a t en el cual de puede viajar por las aristas seg un su direcci on o en contra.
Las aristas v, w incluidas ser an tales que si se viaja en la direcci on original, aplica que
f(v, w) < c(v, w), pero si se viaja en contra, f(v, w) > 0. Denimos una funci on auxiliar
(v, w) =
_
c(v, w) f(v, w), si v, w E,
f(v, w), si w, v E,
(5.43)
y sea = mn
C
(v, w). El ujo se aumenta por a nadir en todos los ujos que van
seg un la direcci on de las aristas en el camino C y restar de todos los ujos que van en
contra en C. Por la manera en que elegimos a , no rompemos ninguna restricci on, ni de
capacidades ni de balance. Este procedimiento se itera hasta que ya no existan caminos
aumentantes. Cuando ya no existe camino aumentante ninguno, el ujo es maximal.
La eciencia del m etodo presentado depende de c omo se construye los caminos aumen-
tantes. La mayor eciencia se logra por elegir siempre el camino aumentante de largo
mnimo; el algoritmo que resulta es polinomial, O(nm
2
) = O(n
5
). Es posible que hayan
m as de un camino de largo mnimo aplic andolos todos al mismo paso resulta en un
algoritmo de complejidad asint otica O(n
3
).
Primero construyamos un grafo residual que captura las posibilidades de mejoramiento
que tenemos. El grafo residual G
f
= (V, E
f
) del grafo G = (V, E) con respeto a un ujo
f tiene
_
v, w E [
_
(f(v, w) < c(v, w)) (f(w, v) > 0)
__
. (5.44)
La capacidad de aumento de la arista v, w E
f
se dene como
c

(v, w) =
_
c(v, w) f(v, w) si v, w E,
f(w, v) si w, v E.
(5.45)
Para un ejemplo de un grafo residual, ver la gura 5.1.
Cada camino simple entre s y t en el grafo residual G
f
es un camino aumentante de G.
El valor de es igual al capacidad de aumento mnimo del camino. Se podra resolver el
problema de ujo m aximo por empezar con el ujo cero, iterar la construcci on de G
f
y
la incorporaci on de un camino aumentante hasta que ya no haya caminos en G
f
de s a t.
Sea Ael conjunto de v ertices que en el ultimo grafo residual G
f
se puede alcanzar desde s.
Entonces, por construcci on en el grafo original G, cada arista que cruza el corte (A, V A)
desde A al otro lado tiene ujo igual a su capacidad y cada arista que va en contra sobre
el corte tiene ujo cero. Es decir, la capacidad del corte es igual al ujo actual.
Para elegir los caminos aumentantes m as cortos en el grafo residual, utilizamos b usqueda
en anchura desde s. En subgrafo formado por los caminos cortos en G
f
se llama la red de
capas (ingl es: layered network) y la denotamos con G

f
. Su construcci on es la siguiente:
se asigna a cada v ertice un valor de capa que es su distancia desde s. Solamente v ertices
con distancias nitas est an incluidas. Una arista v, w de G
f
se incluye en G

f
solamente
5.5. COMPLEJIDAD DE PROBLEMAS DE GRAFOS 75
2/4
3/3
0/4
5/5
s
3/3
3/7
5/5
3/7
3/6
t
5
4
3
4
3
3
3
2
2
5
3
3
4
s t
Figura 5.1: En ejemplo de un grafo con ujo y su grafo residual.
si el valor de capa de w es el valor de capa de v m as uno. La complejidad asint otica de la
construcci on de G

f
es O(m).
En el grafo G

f
, cada camino de s a t tiene el mismo largo. El mejor aumento sera igual
al ujo m aximo en G

f
, pero en el peor caso es igual en complejidad al problema original.
Entonces construyamos una aproximaci on: denimos el ujo mayor en G

f
como un ujo
que ya no se puede aumentar con caminos que solamente utilizan aristas que avanzan
haca t.
Denimos como el ujo posible de un v ertice es el mnimo de la suma de las capacidades
de las aristas que entran y de la suma de las capacidades de las aristas que salen:
v
f
= mn
_
_
_

{u,v}G

f
c

(u, v),

{v,w}G

f
c

(v, w)
_
_
_
. (5.46)
Primero sacamos de G

f
todos los v ertices con ujo posible cero y cada arista adyacente a
estos v ertices. Despu es identicamos el v ertice v con ujo posible mnimo. Empujamos
una cantidad de ujo igual al ujo posible de v desde v haca t. Despu es retiramos ujo
a v de sus aristas entrantes por construir caminos desde s a v hasta que se satisface la
demanda de ujo que sale de v a t. Ahora actualizamos las capacidades de las aristas
afectadas y memorizamos el ujo generado y el camino que toma.
Computamos de nuevo los ujos posibles y eliminamos de nuevo v ertices con ujo posi-
ble cero juntos con sus aristas adyacentes. Si s y t quedaron fuera, el ujo construido es
76 CAP

ITULO 5. CLASES DE COMPLEJIDAD


el ujo mayor en G

f
. Si todava est an, repetimos el proceso de elegir el mnimo y empu-
jar y retirar ujo. Iteramos as, sumando los ujos generados hasta que s y t ya no est en
conectados en G

f
.
La construcci on de una red de capas G

f
toma tiempo O(n
2
) La distancia entre s y t
est a en el peor caso O(n). Cada iteraci on de construcci on de una red de capas G

f
utiliza
caminos m as largos que el anterior, por lo cual la construcci on se repite O(n) veces. Las
operaciones de empujar y retirar ujo son ambas de complejidad asint otica O(n) y de
ejecutan en total O(n) veces. Entonces, el algoritmo del ujo mayor tiene complejidad
asint otica O(n
3
).
5.5.2. El problema de corte mnimo
El problema de corte mnimo es igual al problema del ujo m aximo: se resuelve por -
jar un v ertice s cualquiera y despu es resolver el ujo m aximo entre s y todos los otros
v ertices. El valor mnimo de los ujos m aximos corresponde al corte mnimo del grafo en-
tero. Entonces, como existen algoritmos polinomiales para el problema de ujo m aximo,
y solamente repetimos n 1 veces su ejecuci on, el problema del corte mnimo pertenece
a la clase P.
Sin embargo, el problema de decisi on siguiente es mucho m as difcil:
Problema 5.18: MAXCUT
Dado: un grafo G = (V, E) no dirigido y no ponderado y un entero
k
Pregunta: existe un corte en G con capacidad igual o mayor a k?
Teorema 5.24. MAXCUT es NP-completo.
Hacemos la demostraci on para multigrafos con una reducci on desde NAESAT. Nota que
un grafo simple es un caso especial de multigrafos.
Para una conjunci on de cl ausulas = C
1
. . . C
r
, construimos un grafo G = (V, E) tal
que G tiene capacidad de corte 5r si y s olo si es satisfactible en el sentido de NAESAT.
Los v ertices del grafo ser an los literales x
1
, . . . , x
n
, x
1
, . . . , x
n
donde x
1
, . . . , x
n
son
las variables de . Para cada cl ausula , incluimos las aristas del tri angulo entre los
v ertices que representan a , y . Si la cl ausula tiene solamente dos literales, ponemos
dos aristas entre los v ertices que corresponden; de hecho, mejor convertir cada cl ausula a
uno con tres literales por repetir un literal seg un necesidad. Entonces tenemos en total 3r
ocurrencias de variables.
Adem as, incluyemos n
i
copias de la arista x
i
, x
i
donde n
i
es el n umero total de ocur-
rencias de los literales x
i
y x
i
en .
5.5. COMPLEJIDAD DE PROBLEMAS DE GRAFOS 77
Para comprobar que sea correcta la construcci on, suponga que existe un corte (S, V S)
con capacidad 5m o mayor.
Si un literal que corresponde al v ertice v
i
participa en n
i
cl ausulas, v
i
tiene al m aximo
2n
i
aristas a otros v ertices adem as de las n
i
aristas a su negaci on. Se supone que una
variable y su negaci on no aparecen en la misma clausula porque as la cl ausula sera una
tautologa. Entonces, los dos v ertices representando a x
i
y x
i
tienen en total al m aximo
2n
i
aristas a v ertices que representan a otros literales.
Si estuvieran cada variable y su negaci on las dos en el mismo lado, su contribuci on a
la capacidad del corte sera por m aximo 2n
i
. Si cambiamos al otro lado el v ertice con
menos aristas externas, la contribuci on al tama no de corte del par no puede disminuir
(las aristas n
i
entre los dos v ertices cruzaran el corte despu es del cambio). Entonces
podemos asumir que caen en lados distintos del corte.
Sea S el conjunto de literales asignadas , por lo cual V S contiene los literales que
tienen asignado el valor . Como ahora cada variable y su negaci on est an el lados difer-
entes, contribuyen una arista por ocurrencia en , es decir, en total 3r aristas. Para lograr
que sea mayor o igual a 5m la capacidad del corte, habr a que ser 2r aristas que son aristas
de los tri angulos representando a las cl ausulas cruzando el corte. Entonces, cada tri angu-
lo tiene que estar separado: dos v ertices en un lado y uno al otro. As cada uno de los r
tri angulos necesariamente contribuye dos aristas. Adem as, como por lo menos un v ertice
de cada cl ausula pertenece en el conjunto de literales asignados a y por lo menos un
v ertice de cada cl ausula pertenece al conjunto de literales asignados a , la asignaci on
satisface a en el sentido de NAESAT.
En la otra direcci on es f acil: dada una asignaci on T a en el sentido de NAESAT, podemos
agrupar los v ertices a darnos un corte con capacidad mayor o igual a 5r.
Antes denimos un problema de bisecci on m axima (MAX BISECTION). Una pregunta
interestante es si MAX BISECTION es m as f acil que MAXCUT?
Teorema 5.25. MAX BISECTION es NP-completo.
La reducci on es de MAXCUT a MAX BISECTION por modicar la entrada: a nadimos n
v ertices no conectados a G. Ahora cada corte de Gse puede balancear a ser una bisecci on
por organizar los v ertices no conectados apropiadamente a los dos lados. Entonces, el
grafo original tiene un corte (S, V S) de tama no k o mayor si y s olo si el grafo modicado
tiene un corte de tama no k o mayor con [S[ = [V S[.
El problema de minimizaci on correspondiente, o sea, MINCUT con el requisito de ser una
bisecci on, tambi en es NP-completo, aunque ya sabemos que MINCUT P:
Problema 5.19: MIN BISECTION
Dado: un grafo no dirigido y un entero k
Pregunta: existe una bisecci on con cardinalidad menor o igual a k?
78 CAP

ITULO 5. CLASES DE COMPLEJIDAD


=
Figura 5.2: Los gadgets de la reducci on de 3SAT a HAMILTON PATH: a la izquierda, el
gadget de elecci on, en el centro, el gadget de consistencia y a la derecha, el gadget de
restricci on.
Teorema 5.26. MIN BISECTION es NP-completo.
La demostraci on es una reducci on de MAX BISECTION: la instancia es un grafo G =
(V, E) con un n umero par de v ertices n = 2c. Ese grafo tiene una bisecci on de tama no k
o m as si y s olo si el grafo complemento

G tiene una bisecci on de tama no c
2
k o menos.
5.5.3. Caminos y ciclos de Hamilton
Teorema 5.27. HAMILTON PATH es NP-completo.
La reducci on es de 3SAT a HAMILTON PATH: dada una expresi on en CNF con las
variables x
1
, . . . , x
n
y cl ausulas C
1
, . . . , C
m
tal que cada cl ausula contiene tres literales,
un grafo G() est a construida tal que G() contiene un camino de Hamilton si y s olo si
es satisfactible. Se necesita tres tipos de gadgets (ver gura 5.2:
gadgets de elecci on que eligen la asignaci on a las variables x
i
,
gadgets de consistencia que verican que todas las ocurrencias de x
i
tengan el
mismo valor asignado y que todas las ocurrencias de x
i
tengan el valor opuesto,
gadgets de restricci on que garantizan que cada cl ausula sea satisfecha.
Los gadgets de elecci on de las variables se conecta en serie. Cada cl ausula tiene un gadget
de restricci on. Las conexiones entre los gadgets de restricci on y elecci on llevan un gadget
de consistencia conectando los gadgets de restricci on a la arista de verdad de x
i
si el
literal es positivo y a la arista de falso de x
i
si el literal es negativo.
Adicionalmente se a nade aristas para conectar todos los tri angulos, el ultimo v ertice de la
cadena de los gadgets de elecci on y un v ertice adicional v tal que formen una camarilla
estos 3n +2 v ertices. Otro v ertice auxiliar w est a a nadido y conectado con una arista a v.
La idea de la construcci on es que un lado de un gadget de restricci on est a recorrida por
5.5. COMPLEJIDAD DE PROBLEMAS DE GRAFOS 79
el camino de Hamilton si y s olo si el literal a cual corresponde es falso. En consecuencia,
por lo menos un literal de cada cl ausula es verdad porque en el otro caso todo el tri angulo
ser a recorrido. El camino empezar a en el primer v ertice de la cadena de los gadgets de
elecci on y termina en el v ertice w. Se omite las detalles de vericar que est e funcional la
reducci on, dej andolas como un ejercicio.
Como una consecuencia, obtenemos un resultado sobre el problema del viajante:
Teorema 5.28. TSPD es NP-completo.
La reducci on ser a de HAMILTON PATH a TSPD: dado un grafo G = (V, E) con n v ertices,
hay que construir una matriz de distancias d
ij
y decidir un presupuesto B tal que existe
un ciclo de largo menor o igual a B si y s olo si G contiene un camino de Hamilton (nota:
no un ciclo, sino un camino). Etiquetamos los v ertices V = 1, 2, . . . , n y asignamos
simplemente
d
ij
=
_
1, si i, j E,
2, en otro caso.
(5.47)
El presupuesto ser a B = n + 1. Nota que as el grafo ponderado que es la instancia de
TSPD es completo.
Ahora, si existe un ciclo de largo menor o igual a n + 1, este camino utiliza al m aximo
un par de v ertices con d
ij
= 2, por lo cual utiliza por m aximo un elemento que no cor-
responde a una arista del grafo original G. Entonces, si quitamos esta conexi on del ciclo,
nos queda un camino que tambi en existe en G y visita a cada v ertice. Este es exactamente
un camino de Hamilton.
En la otra direcci on: si G contiene un camino de Hamilton, basamos el ciclo de TSPD es
ese camino y a nadimos una conexi on entre los puntos nales. Esta conexi on es costo
m aximo dos, por lo cual cumplimos con el presupuesto n+1, porque el costo del camino
es n 1 (todos los pares son aristas en G) y la conexi on adicional tiene costo menor o
igual a dos.
5.5.4. Coloreo
El coloreo de grafos con dos colores es f acil (pertenece a P), pero con tres colores ya es
difcil:
Teorema 5.29. 3COLORING es NP-completo.
La reducci on ser a de NAESAT a 3COLORING. De una conjunci on de cl ausulas = C
1

. . . C
m
con variables x
1
, . . . , x
n
, construyamos un grafo G() tal que se puede colorear
G() con tres colores, denotados 0, 1, 2 si y s olo si existe una asignaci on de valores
que satisface a en el sentido NAESAT.
Los gadgets para las variables son unos de elecci on en forma de tri angulo tal que los
v ertices del tri angulo son v, x
i
y x
i
el v ertice v participa en todos los gadgets de
80 CAP

ITULO 5. CLASES DE COMPLEJIDAD


elecci on. Para cada cl ausula, ponemos tambi en un tri angulo con los v ertices [C
i1
, C
i2
, C
i3
]
donde adem as cada C
ij
est a conectado al v ertice del literal n umero j de la cl ausula C
i
.
Vericando la reducci on en la direcci on : supone que el v ertice v tenga color 2.
Entonces ninguno de los v ertices de las variables puede tener el color dos, sino que uno
o cero. Interpretamos sus colores como una asignaci on de valores: uno es verdad y cero
es falso. Si todos los literales de alguna cl ausula son verdad o todos falso, ser a imposible
colorear a [C
i1
, C
i2
, C
i3
]. Entonces, los colores satisfacen a en el sentido de NAESAT.
En la direcci on : supone que es satisfactible por una asignaci on T en el sentido
NAESAT. Entonces podemos extraer el coloreo de G() de T de la manera siguiente: v
tiene color dos. Si T(x
i
) = , el color de x
i
es uno y de x
i
es cero. En el caso contrario,
los colores se asigna viceversa. De cada [C
i1
, C
i2
, C
i3
], dos literales con valores opuestos
ser an coloreados con uno y cero y el tercer v ertice con el color dos.
5.5.5. Conjuntos y n umeros
El problema de 3MATCHING es el siguiente:
Problema 5.20: 3MATCHING
Dado: tres conjuntos A, B y C, cada uno con n elementos y una
relaci on ternaria T AB C
Pregunta: existe un conjunto de n triples (a, b, c) en T que no com-
parten ning un componente entre cualesquiera dos triples?
Teorema 5.30. 3MATCHING es NP-completo.
La reducci on es de 3SATy est a presentado en el libro de texto de Papadimitriou [15]. La
cantidad de problemas NP-completos de conjuntos es muy grande y uno de ellos sirve
para dar una reducci on que muestra que programaci on entera es NP-completo, mientras
programaci on lineal pertenece a P.
5.6. Algoritmos pseudo-polinomiales
Tambi en el famoso problema de la mochila (KNAPSACK, ingl es: knapsack) es NP-
completo, lo que se muestra por un problema de conjuntos (cubierto exacto, ingl es: exact
cover). Es un problema cl asico de optimizaci on combinatoria donde la instancia es una
lista de N diferentes artculos
i
y cada objeto tiene una utilidad (
i
) y un peso
(
i
). La pregunta es qu e conjunto M de artculo debera uno elegir para tener un
valor total por lo menos k si tiene una mochila que solamente soporta peso hasta un cierto
5.7. PROBLEMAS FUERTEMENTE NP-COMPLETOS 81
lmite superior . Entonces, con la restricci on

M
() (5.48)
se aspira maximizar la utilidad total

M
() k. (5.49)
Cada instancia del problema de la mochila se puede resolver en tiempo O(N ), aunque
el problema es NP-completo. Denimos variables auxiliares V (w, i) que es el valor total
m aximo posible seleccionando algunos entre los primeros i artculos tal que su peso total
es exactamente w. Cada uno de los V (w, i) con w = 1, . . . , y i = 1, . . . , N se puede
calcular a trav es de la ecuaci on recursiva siguiente:
V (w, i + 1) = m axV (w, i), v
i+1
+ V (w w
i+1
, i) (5.50)
donde V (w, 0) = 0 para todo w y V (w, i) = si w 0. Entonces, podemos calcular
en tiempo constante un valor de V (w, i) conociendo algunos otros y en total son N ele-
mentos. Este algoritmo tiene tiempo de ejecuci on O(N ). La respuesta de la problema
de decisi on es s unicamente en el caso que alg un valor V (w, i) sea mayor o igual a k.
Entonces, c omo puede ser esto un problema NP-completo? Para pertenecer a P, nece-
sitara tener un algoritmo polinomial en el tama no de la instancia, que es m as como
Nlog y as menor que el par ametro obtenido N (tomando en cuenta que = 2
log
).
Tal algoritmos donde la cota de tiempo de ejecuci on es polinomial en los enteros de la
entrada y no sus logaritmos se llama un algoritmo pseudo-polinomial.
5.7. Problemas fuertemente NP-completos
Un problema es fuertemente NP-completo si permanece NP-completo incluso en el caso
que toda instancia de tama no n est a restringida a contener enteros de tama no m aximo
p(n) para alg un polinomial p. Un problema fuertemente NP-completo no puede tener
algoritmos pseudo-polinomiales salvo que si aplica que P sea igual a NP. Los problemas
SAT, MAXCUT, TSPD y HAMILTON PATH, por ejemplo, son fuertemente NP-completos,
pero KNAPSACK no lo es.
82 CAP

ITULO 5. CLASES DE COMPLEJIDAD


Captulo 6
Estructuras de datos
Un paso tpico en el dise no de un algoritmo es la elecci on de una estructura de datos
apropiada para el problema. En esta secci on revisamos algunas estructuras que se uti-
liza en construir algoritmos ecientes para problemas de decisi on y problemas de opti-
mizaci on.
6.1. Arreglos
Un arreglo es una estructura capaz de guardar en un orden jo n elementos. Los ndices
de las posiciones pueden empezar de cero
a[] = [a
0
, a
1
, a
2
, . . . , a
n1
] (6.1)
o alternativamente de uno
b[] = [b
1
, b
2
, . . . , b
n1
, b
n
]. (6.2)
Hay que cuidar que se use las ndices consistentemente. Se reere com unmente al ele-
mento con ndice k como a[k] en vez de a
k
. El tiempo de acceso del elemento en posici on
k en un arreglo es O(1).
Por defecto, se asume con los elementos guardados en un arreglo no est en ordenados
por ning un criterio. La complejidad de identicar si un arreglo no ordenado a[] contiene
un cierto elemento x es O(n), como habr a que comprar cada elemento a[k] con x y el
algoritmo termina al encontrar igualdad. Si el elemento no est a en el arreglo, tenemos el
peor caso de exactamente n comparaciones.
Arreglos sirven bien para situaciones donde el n umero de elementos que se necesita es
conocido y no muy variable. Si el tama no no est a jo ni conocido, com unmente hay que
ajustar el tama no por reservar en la memoria otro arreglo del tama no deseado y copiar los
contenidos del arreglo actual al nuevo.
83
84 CAP

ITULO 6. ESTRUCTURAS DE DATOS


Figura 6.1: El peor caso de la b usqueda binaria: el elemento pivote es a[k] tal que k =
n
2
.
Estamos buscando para el elemento peque no x en un arreglo que no lo contiene, x < a[i]
para todo i. La parte dibujada en gris est a rechazada en cada iteraci on.
6.1.1. B usqueda binaria
Si el arreglo est a ordenado en un orden conocido, un algoritmo mejor para encontrar
un elemento igual a x es la b usqueda binaria: comparar x con el elemento a[k] donde
k =
n
2
(o alternativamente k =
n
2
, depende de si los ndices comienzan de cero o
uno). El elemento a[k] se llama el elemento pivote. Si a[k] = x, tuvimos suerte y la
b usqueda ya termin o. Las otras opciones son:
(I) Si a[k] < x y el arreglo est a en orden creciente, habr a que buscar entre los elemen-
tos a[k + 1] y el ultimo elemento.
(II) Si a[k] > x y el arreglo est a en orden creciente, habr a que buscar entre el primer
elemento y el elemento a[k 1].
(III) Si a[k] < x y el arreglo est a en orden decreciente, habr a que buscar entre el primer
elemento y el elemento a[k 1].
(IV) Si a[k] > x y el arreglo est a en orden decreciente, habr a que buscar entre los
elementos a[k + 1] y el ultimo elemento.
Entonces, si i es el primer ndice del area donde buscar y j es el ultimo ndice del
area, repetimos el mismo procedimiento de elecci on de k y comparaci on con un arreglo
a
(1)
= [a
i
, a
i+1
, . . . , a
j1
, a
j
]. El resto del arreglo nunca ser a procesado, que nos ofrece un
ahorro. De esta manera, si el arreglo siempre se divide en dos partes de aproximadamente
el mismo tama no, la iteraci on termina cuando la parte consiste de un s olo elemento. El
peor caso es que el elemento est e en la primera o la ultima posici on del arreglo. La gura
6.1 muestra un ejemplo del peor caso.
Para contar cu antas divisiones tiene el peor caso, tomamos en cuenta que el tama no de la
parte que queda para buscar tiene al m aximo
n
2
elementos. Sabemos que al ultimo nivel
el tama no de la parte es uno. Considerando estas observaciones, llegamos ya con pura in-
tuici on el hecho que en el peor caso habr a log
2
(n) divisiones. Cada divisi on contiene una
6.1. ARREGLOS 85
comparaci on de x con un a[k] y la asignaci on del nuevo ndice inferior y el nuevo ndice
superior. Entonces son 3 log
2
(n) operaciones y la complejidad asint otica es O(log(n)).
6.1.2. Ordenaci on de arreglos
Algoritmo de burbuja (bubble sort)
Hay varios algoritmos para ordenar los elementos de un arreglo. Uno de los m as b asicos
y menos ecientes es el algoritmo de burbuja (ingl es: bubble sort):
(I) Inicia una variable contadora a cero: c := 0.
(II) Comenzando desde el primer elemento, comp aralo con el siguiente.
(III) Si su orden est a correcto con respeto a la ordenaci on deseada, d ejalos as.
(IV) Si no est an en orden, con la ayuda de una variable auxiliar t, intercambia sus valores
y incrementa a la contadora, c := c + 1.
(V) Avanza a comparar el segundo con el tercero, repitiendo el mismo procesamiento,
hasta llegar al nal del arreglo.
(VI) Si al nal, c ,= 0, asigna c := 0 y comienza de nuevo.
(VII) Si al nal c = 0, el arreglo est a en la orden deseada.
En cada paso un elemento encuentra su lugar correcto, por lo cu al el n umero m aximo de
iteraciones de hacer es n.
El peor caso es que el orden de los elementos es exactamente lo contrario a lo deseado: por
ejemplo, para ordenar n elementos en orden creciente a orden decreciente, necesitamos
repetir el acceso al arreglo entero n veces (ve ejemplo en gura 6.2. En cada iteraci on, se
hace n1 comparaciones y en el peor caso cada uno llega a un intercambio de posiciones.
La complejidad asint otica del algoritmo es O(n
2
).
Ordenaci on por selecci on (selection sort)
Dado un arreglo de n elementos, podemos ordenar sus elementos en el orden creciente
con el siguiente procedimiento:
(I) Asigna i := primer ndice del arreglo a[].
(II) Busca entre i y el n del arreglo el elemento menor.
(III) Denote el ndice del mejor elemento por k y guarda su valor en una variable auxiliar
t := a[k].
86 CAP

ITULO 6. ESTRUCTURAS DE DATOS


(IV) Intercambia los valores de a[i] y a[k]: a[k] := a[i], a[i] := t.
(V) Incrementa el ndice de posici on actual: i := i + 1.
(VI) Itera hasta que i est e en el n del arreglo.
Para ordenar en orden decreciente, habr a que siempre buscar el elemento mayor entre i
y el n del arreglo. Este algoritmo se llama ordenaci on por selecci on (ingl es: selection
sort).
En el peor caso, cuando los valores del arreglo est an en orden reverso a lo deseado, la
primera iteraci on tiene n 1 comparaciones, la segunda tiene n 2, etc etera, hasta que
el ultimo solamente tiene una. En total, hay
1 + 2 + . . . + n 2 + n 1 =
n1

j=1
j =
n1

j=0
j =
n(n 1)
2
(6.3)
por ecuaci on 1.35. Entonces, la complejidad asint otica es O(n
2
), pero en pr actica, ahor-
ramos varias operaciones en comparaci on con la ordenaci on por burbuja.
Ordenaci on por fusi on (mergesort)
Es una operaci on O(n) combinar dos listas ordenadas en una sola lista ordenada bajo
el mismo criterio. Por ejemplo, si la entrada son dos listas A y B de n umeros enteros
ordenaros del menor a mayor, la lista combinada se crea por leer el primer elemento de
A y el primer elemento de B, a nadir el mnimo de estos dos en la lista nueva C y re-
emplazar en la variable auxiliar por leer el siguiente elemento de su lista de origen. En
este idea se basa el algoritmo siguiente de ordenaci on.
La ordenaci on por fusi on (ingl es: mergesort) funciona por divisiones parecidas a las de la
b usqueda binaria. El arreglo est a dividido a dos partes del mismo tama no (m as o menos
un elemento): la primera parte tiene largo
n
2
y la segunda tiene largo n
n
2
. Ambos
subarreglos est an divididos de nuevo hasta que contengan k elementos, k 1 n. Al
llegar al nivel donde la lista tiene k elementos, se utiliza otro algoritmo de sortearlo, por
ejemplo uno de los dos ya presentados. Opcionalmente se podra jar k = 1.
Las dos subarreglos b

[] y b
r
[] as ordenados est an combinados con uso de memoria aux-
iliar: se forma un arreglo b[] por elegir elementos del comienzo de los dos arreglos orde-
nados:
(I) Asigna i

:= 0, i
r
:= 0 y i := 0
(II) Si b

[i

] < b
r
[i
r
], asigna b[i] := b

[i

] y despu es actualiza los ndices relacionados:


i

:= i

+ 1 y i := i + 1.
(III) Si b

[i

] b
r
[i
r
], asigna b[i] := b
r
[i
r
] y despu es actualiza los ndices relacionados:
i
r
:= i
r
+ 1 y i := i + 1.
6.1. ARREGLOS 87
(IV) Cuando i

o i
r
pasa afuera de su subarreglo, copia todo lo que queda del otro arreglo
al nal de b[].
(V) Mientras todava quedan elementos en los dos subarreglos, repite la elecci on del
elemento menor a guardar en b[].
Ordenaci on r apida (quicksort)
La idea de la ordenaci on r apida es tambi en dividir el arreglo, pero no necesariamente en
partes de tama no igual. Se elige un elemento pivote a[k] seg un alg un criterio (existen
varias opciones como elegirlo), y divide el arreglo de entrada a[] en dos partes: una parte
donde todos los elementos son menores a a[k] y otra parte donde son mayores o iguales
a a[k] por escanear todo el arreglo una vez. Esto se puede implementar con dos ndices
moviendo el el arreglo, uno del comienzo y otro del nal. El ndice del comienzo busca
por el primer elemento con un valor mayor o igual al pivote, mientras el ndice de atr as
mueve en contra buscando por el primer elemento menor al pivote. Al encontrar elementos
tales antes de cruzar un ndice contra el otro, se intercambia los dos valores y continua
avanzando de las mismas posiciones de los dos ndices. Al cruzar, se ha llegado a la
posici on donde cortar el arreglo a las dos partes.
Se repite el mismo procedimiento con cada uno de las dos partes. As nivel por nivel
resultan ordenadas los subarreglos, y por el procesamiento hecha ya en los niveles ante-
riores, todo el arreglo resulta ordenado. El an alisis de quicksort est a presentado como un
ejemplo del an alisis amortizada en secci on 7.3.1.
88 CAP

ITULO 6. ESTRUCTURAS DE DATOS


1 2 3 4 5 6 7 8 9
2 1 3 4 5 6 7 8 9
2 3 1 4 5 6 7 8 9
2 3 4 1 5 6 7 8 9
2 3 4 5 1 6 7 8 9
2 3 4 5 6 1 7 8 9
2 3 4 5 6 7 1 8 9
2 3 4 5 6 7 8 1 9
2 3 4 5 6 7 8 9 1
3 2 4 5 6 7 8 9 1
3 4 2 5 6 7 8 9 1
3 4 5 2 6 7 8 9 1
3 4 5 6 2 7 8 9 1
3 4 5 6 7 2 8 9 1
3 4 5 6 7 8 2 9 1
3 4 5 6 7 8 9 2 1
3 4 5 6 7 8 9 2 1
4 3 5 6 7 8 9 2 1
4 5 3 6 7 8 9 2 1
4 5 6 3 7 8 9 2 1
4 5 6 7 3 8 9 2 1
4 5 6 7 8 3 9 2 1
4 5 6 7 8 9 3 2 1
4 5 6 7 8 9 3 2 1
.
.
.
7 8 9 6 5 4 3 2 1
8 7 9 6 5 4 3 2 1
8 9 7 6 5 4 3 2 1
.
.
.
8 9 7 6 5 4 3 2 1
9 8 7 6 5 4 3 2 1
.
.
.
Figura 6.2: El peor caso de ordenaci on con el algoritmo burbuja: los elementos est an al
comienzo en orden creciente y el orden deseado es decreciente. La posici on del proce-
samiento est a marcada con letra negrita y por cada cambio, hay una lnea nueva. Las
iteraciones est an separadas por lneas horizontales.
6.2. LISTAS 89
6.2. Listas
Listas son estructuras un poco m as avanzadas que puros arreglos, como tpicamente per-
miten ajustes de su capacidad.
Una lista enlazada (ingl es: linked list) consiste de elementos que todos contengan adem as
de su dato, un puntero al elemento siguiente. Si el orden de los elementos no est a acti-
vamente mantenido, es f acil agregar un elemento en la lista: crear el elemento nuevo,
inicializar su puntero del siguiente elemento a nulo, y hacer que el puntero del siguiente
del ultimo elemento actualmente en la lista apunte al elemento nuevo. Para acceder la lista,
hay que mantener un puntero al primer elemento. Si tambi en se mantiene un puntero al
ultimo elemento, a nadir elementos cuesta O(1) unidades de tiempo, mientras solamente
utilizando un puntero al comienzo, se necesita tiempo O(n), donde n es el n umero de
elementos en la lista.
Si uno quiere mantener el orden mientras realizando inserciones y eliminaciones, hay que
primero ubicar el elemento anterior al punto de operaci on en la lista:
para insertar un elemento nuevo v inmediatamente despu es del elemento u actual-
mente en la lista, hay que ajustar los punteros tal que el puntero del siguiente v.sig
de v tenga el valor de u.sig, despu es de que se cambia el valor de u.sig a puntar a
v;
para eliminar un elemento v, el elemento anterior siendo u, primero hay que asignar
u.sig := v.sig y despu es simplemente eliminar v, a que ya no hay referencia de la
lista.
Una lista doblemente enlazada tiene adem as en cada elemento un enlace al elemento an-
terior. Su mantenimiento es un poco m as laborioso por tener que actualizar m as punteros
por operaci on, pero hay aplicaciones en las cuales su ecacia es mejor.
Con listas, ganamos tama no din amico, pero b usquedas y consultas de elementos ahora
tienen costo O(n) mientras con arreglos tenemos acceso en tiempo O(1) y tama no rgi-
do.
6.2.1. Pilas
Una pila (ingl es: stack) es una lista especial donde todas las operaciones est an con el
primer elemento de la lista: se a nade al frente y remueve del frente. Su funci on es f acil de
entender pensando en una pila de papeles en un escritorio donde siempre se toma el papel
de encima para procesar y cada documento nuevo se coloca encima de los anteriores.
Una pila es bastante f acilmente implementada como una lista enlazada manteniendo un
puntero p al primer elemento. Al a nadir un elemento nuevo v, primero se asigna v.sig := p
y despu es p := v.
90 CAP

ITULO 6. ESTRUCTURAS DE DATOS


6.2.2. Colas
Una cola (ingl es: queue) es una estructura donde los elementos nuevos llegan al nal,
pero el procesamiento se hace desde el primer elemento. Tambi en colas est an f acilmente
implementadas como listas enlazadas, manteniendo un puntero al comienzo de la cola y
otro al nal.
6.2.3. Ordenaci on de listas
Ordenaci on por inserci on
Para ordenar una lista L = [
1
,
2
, . . . ,
n
] en orden creciente, necesitamos una subrutina
insertar(L, i, x) que busca desde el comienzo la posici on i en la lista L por un
elemento
j
x haca la primera posici on, tal que j i. Al encontrar tal elemento,
el elemento x estar a insertada en la posici on justo despu es del elemento
j
. Si no se
encuentra un elemento as, se inserta x al comienzo de la lista.
El procedimiento de la ordenaci on empieza con el primer elemento de la lista y progresa
con una variable indicadora de posici on i hasta el ultimo elemento. Para cada elemento,
quitamos
i
de la lista y llamamos la subrutina insertar(L, i, x) para volver a guardar-
lo.
6.3.

ARBOLES 91
6.3.

Arboles
Un arbol de n v ertices etiquetados 1, 2, . . . , n se puede guardar en un arreglo a[] de n
posiciones, donde el valor de a[i] es la etiqueta del v ertice padre del v ertice i. Otra opci on
es guardar en cada elemento un puntero al v ertice padre (y posiblemente del padre una
estructura de punteros a sus hijos).

Arboles son estructuras muy utiles para servir como ndices de bases de datos, o m as
simplemente, grupos de datos que habr a que ordenar.

Arboles permiten realizar e-
cientemente operaciones como inserciones, eliminaciones y b usquedas de los elementos
guardados. El unico requisito es que exista un orden sobre el espacio de las claves de
los elementos que se maneja, tal como el orden alfab etico o orden creciente num erico,
etc etera. Cada elemento consiste de una clave (no necesariamente unico) y un dato el
arbol de ndice se ordena por las claves y se puede buscar por el dato asociado a una cierta
clave.
6.3.1.

Arboles binarios

Arboles binarios son una clase de arbol en uso muy com un. En un arbol binario, cada
v ertice que no es una hoja tiene al m aximo dos v ertices hijos: su hijo izquierdo y su hijo
derecho. Para un ejemplo, ve la gura 6.3. Si ning un v ertice tiene solamente un hijo, se
dice que el arbol est a lleno.
ramo derecho de la raz
hijo derecho
la raz
hijo izquierdo
Figura 6.3: Un ejemplo de un arbol binario.
Su uso como ndices es relativamente f acil tambi en para bases de datos muy grandes,
como diferentes ramos y partes del arbol se puede guardar en diferentes p aginas de la
memoria fsica de la computadora. La gura 6.4 contiene un ejemplo, adaptado de Knuth
[11].
El problema con arboles binarios es que su forma depende del orden de inserci on de los
elementos y en el peor caso puede reducir a casi una lista (ver la gura 6.5).
92 CAP

ITULO 6. ESTRUCTURAS DE DATOS


Figura 6.4: Un ejemplo de c omo dividir un arbol de ndice en varias p aginas de memoria:
las lneas agrupan juntos sub arboles del mismo tama no.
Un arbol balanceado con n = 8 y profundidad tres.
El peor caso de falta de balance para n = 8 tiene profundidad seis.
Figura 6.5: Un arbol binario de peor caso versus un arbol binario de forma optima, ambos
con ocho v ertices hojas.
6.3.2.

Arboles AVL

Arboles AVL (de Adelson-Velskii y Landis [2]) son arboles binarios que aseguran com-
plejidad asint otica O(log n) para las operaciones b asicas de ndices.
La variaci on de arboles AVL que estudiamos ac a guarda toda la informaci on en sus hojas
y utiliza los v ertices internos para informaci on utilizado al realizar las operaciones del
ndice. Los v ertices que no son hojas ahora se llaman v ertices de ruteo . El orden del arbol
es tal que todas las hojas en el ramo del hijo izquierdo contienen claves menores que el
valor del v ertice de ruteo y todas las hojas en el ramo del hijo derecho contienen claves
mayores o iguales que el valor del v ertice de ruteo mismo.
Por el uso de v ertices de ruteo, los arboles que resultan son arboles llenos. Utilizamos en
los ejemplos enteros positivos como las claves. Para buscar la hoja con clave i, se empieza
del raz del arbol y progresa recursivamente al hijo izquierdo si el valor del raz es mayor
a i y al hijo derecho si el valor es menor o igual a i. Cuando la b usqueda llega a una hoja,
se eval ua si el valor de la hoja es i o no. Si no es i, el arbol no contiene la clave i en
ninguna parte. El pseudoc odigo de la b usqueda est a en el cuadro 6.1.
El arbol est a balanceado si el largo m aximo es k, el largo mnimo tiene que ser mayor o
6.3.

ARBOLES 93
Cuadro 6.1: Pseudoc odigo del procedimiento de b usqueda en un arbol binario ordenado
con los datos en las hojas.
procedimiento ubicar(int clave, nodo actual) : hoja
si (actual es una hoja)
devuelve hoja ;
en otro caso
si (actual.clave clave)
ubicar(clave, actual.derecho);
en otro caso
ubicar(clave, actual.izquierdo);

igual a k 1. En este caso, el n umero de hojas del arbol n es


2
k
n < 2
k+1
. (6.4)
La condici on que utilizamos para decidir si o no un dado arbol esta balanceado se llama
la condici on de balance AVL [2]; tambi en existen otras condiciones. Para formular la
condici on, hay que denir la altura de un v ertice:
/(v) =
_
1, si v es una hoja
m ax/(izq(t)), /(der(t)) + 1, si v es de ruteo.
(6.5)
La altura de un ramo de un v ertice v, es decir, un sub arbol la raz de cual es v es la altura
de v. La altura del arbol entero es la altura de su raz. Un arbol balanceado se puede
caracterizar como un arbol con raz v
r
con /(v
r
) = O(log n). La condici on de balance
AVL es que v V
[/(izq(v)) /(der(v))[ 1. (6.6)
Para derivar unas cotas sobre la forma del arbol, denimos adem as la profundidad de cada
v ertice del arbol:
T(v) =
_
0, si v es la raz,
T(v.T) + 1, en otro caso.
(6.7)
La profundidad del arbol entero es simplemente m ax
v
T(v). Aplica que T = /1.
Denotamos por n el numero de v ertices en total y por 1el numero de hojas del arbol. Para
todo n = 2k, tenemos 1 = 2n1 y T = log
2
n. Para ubicar a una clave a profundidad d
toma exactamente d pasos en el arbol, es decir, tiempo O(d). Entonces, para cada arbol
perfectamente balanceado de 1 hojas, se puede localizar una clave en tiempo
O(T) = O(log
2
1) = O(log
2
n) . (6.8)
94 CAP

ITULO 6. ESTRUCTURAS DE DATOS


Para un arbol balanceado, la diferencia en el largo de los caminos es un constante, de he-
cho uno, por lo cual tambi en para esos arboles aplica que su tiempo de acceso a cualquier
clave es O(log
2
n).
La condici on de balance AVL implica que para un v ertice de ruteo v
r
con /(v
r
) = a es
necesario que
o ambos de sus hijos tengan altura a 1
o un hijo tiene altura a 1 y el otro altura a 2.
El n umero de v ertices de ruteo en el ramo de una hoja es cero. El tama no del ramo con
raz en v se puede expresar en t erminos de los tama nos de los ramos de sus hijos: el
n umero de v ertices de ruteo 1
v
en el ramo de v es la suma del n umero de v ertices de
ruteo en el ramo de su hijo izquierdo 1
w
con el n umero de v ertices de ruteo en el ramo
de su hijo derecho 1
u
m as uno por el v ertice de ruteo v mismo.
Utilizamos esta relaci on para escribir una ecuaci on recursiva para llegar a una cota su-
perior de la altura de un arbol: sea la altura del hijo izquierdo w exactamente a 1 y la
altura del otro hijo vu la otra opci on a 2. Denotamos por 1(a) el n umero de v ertices
de ruteo en un ramo con raz un v en altura a. Nota que suponemos que el arbol est a en
balance no perfecto en esta parte: w tiene altura a 1 mientras u tiene altura a 2. La
ecuaci on recursiva es
1
v
= 1
w
+1
u
+ 1
1(a) = 1(a 1) +1(a 2) + 1
1 +1(a) = 1 +1(a 1) +1(a 2) + 1
_
1 +1(a)
_
=
_
1 +1(a 1)
_
+
_
1 + 1(a 2)
_
T(a) = T(a 1) +T(a 2).
(6.9)
La sustituci on que hicimos era 1 + 1(k) = T(k). Hemos llegado a la denici on de la
sucesi on de Fibonacci, donde el elemento en posici on k se llama el k- ecimo n umero de
Fibonacci:
T
k
=
_
_
_
0, si k = 0
1, si k = 1
T
k1
+T
k2
, para k > 1.
(6.10)
A los n umeros de Fibonacci aplica que
T(a) >

a

5
1 (6.11)
donde =
1+

5
2
es la tasa dorada. Las condiciones iniciales son los siguientes: 1(0) = 0
porque no hay v ertices de ruteo en ramos de las hojas y 1(1) = 1 porque el v ertice de
ruteo mismo es el unico en su ramo si sus ambos hijos son hojas.
Entonces la ecuaci on recursiva aplica para 1(k) donde k 2. La sustituci on 1 +1(k) =
T(k) tampoco aplica desde el comienzo, como
T(0) = 0 < 1(0) + 1 = 0 + 1 = 1
T(1) = 1 < 1(1) + 1 = 1 + 1 = 2.
(6.12)
6.3.

ARBOLES 95
a
b
c
a
Figura 6.6: La inserci on de un elemento nuevo con la clave b tal que b < a resulta en la
creaci on de un v ertice de ruteo nuevo c, hijos del cual ser an los v ertices hojas de a y b.
Sin embargo, los valores 1 y 2 tambi en aparecen en la sucesi on de Fibonacci:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, . . . (6.13)
son T(2) y T(3)! Entonces, podemos escribir para cada k que 1(k) = T(k +2) +1.
Esto nos da
1(a) = T(a + 2) 1 >

a+2

5
2
1(a) 2 =

a+2

5
log

(1(a) + 2) = log

a+2

5
_
log

(1(a) + 2) = a + 2 log

5)
a 1,440 log(1(a) + 2) 0,328.
(6.14)
Ya sabemos que n > 1(/) porque 1 > 0 siempre hay hojas si el arbol no est a com-
pletamente vaco. Entonces aplica que siguiente:
Teorema 6.31. Para cada arbol que cumple con la condici on de balance AVL, /
1,440 log(n + 2) 0,328.
Para insertar un elemento nuevo al arbol de ndice, primero hay que buscar la ubicaci on
de la clave del elemento. Llegando a la hoja v
h
donde debera estar la clave, hay que crear
un v ertice de ruteo v
r
nuevo. La hoja v
h
va a ser uno de los hijos del v ertice de ruteo y el
otro hijo ser a un v ertice nuevo v
n
creado para el elemento que est a insertado. El elemento
menor de v
h
y v
n
ser a el hijo izquierdo y el mayor el hijo derecho. El valor del v ertice
de ruteo v
r
as creado ser a igual al valor de su hijo derecho. La gura 6.6 muestra un
ejemplo.
Para eliminar un elemento del arbol, hay que primero ubicar su posici on y despu es elim-
inar adem as de la hoja su v ertice de ruteo v
r
y mover el otro v ertice hijo del v ertice de
ruteo v
h
a la posici on que ocup o v
r
. La gura 6.7 muestra un ejemplo.
Las operaciones de insertar y eliminar claves modican la forma del arbol. La garanta
de tiempo de acceso O(log n) est a solamente v alida a arboles balanceados. Un arbol
est a perfectamente balanceado si su estructura es optima con respeto al largo del camino
de la raz a cada hoja: todas las hojas est an en el mismo nivel, es decir, el largo m aximo de
96 CAP

ITULO 6. ESTRUCTURAS DE DATOS


b c
c a
Figura 6.7: Al eliminar una hoja con clave b, tambi en su padre, el v ertice de ruteo con el
valor a est a eliminado.
Rotaci on simple izquierda Rotaci on simple derecha
Rotaci on doble izquiera-derecha
Rotaci on doble derecha-izquierda
t u
v u t
v
B B
A
A
A A
t
t
B
B
u v
u
v
A
u
t
v
w
A
v
t
w
u
B1 B2
B1 B2
t
B B
w
w
A1 A2
A1 A2
v u
u
t v
Figura 6.8: Cuatro rotaciones b asicas de arboles binarios para restablecer balance de las
alturas de los ramos.
tal camino es igual al largo mnimo de tal camino sobre todas las hojas. Esto es solamente
posible cuando el n umero de hojas es 2
k
para k Z
+
, en que caso el largo de todos los
caminos desde la raz hasta las hojas es exactamente k.
Necesitamos operaciones para recuperar la forma balanceada despu es de inserciones y
eliminaciones de elementos, aunque no cada operaci on causa una falta de balance en el
arbol. Estas operaciones se llaman rotaciones . Las cuatro variaciones b asicas de rota-
ciones est an presentadas en la gura 6.8.
La rotaci on adecuada est a elegida seg un las alturas de los ramos que est an fuera de bal-
ance, es decir, tienen diferencia de altura mayor o igual a dos. Si se balancea despu es de
cada inserci on y eliminaci on siempre y cuando es necesario, la diferencia ser a siempre
exactamente dos: denotamos los hijos que est an fuera de balance del v ertice t por u y v,
con la notaci on de la gura 6.8 para los ramos: la direcci on de la diferencia juntos con
6.3.

ARBOLES 97
propiedades de los ramos determinan cu al rotaci on ser a implementada en v
_

_
/(u) /(v) + 2 :
_

_
/(A) /(B)
rotaci on simple a la derecha,
/(A) < /(w)
rotaci on doble izquierda-derecha,
/(u) /(v) 2 :
_

_
/(A) /(B)
rotaci on simple a la izquierda,
/(B) < /(w)
rotaci on doble derecha-izquierda.
(6.15)
Con esas rotaciones, ninguna operaci on va a aumentar la altura de un ramo, pero la puede
reducir por una unidad. La manera tpica de encontrar el punto de rotaci on t es regresar
haca la raz despu es de haber operado con una hoja para vericar si todos los v ertices
en camino todava cumplan con la condici on de balance. La complejidad asint otica de
buscar una hoja toma O(log n) tiempo, la operaci on en la hoja tiempo constante O(1),
la vuelta haca la raz otros O(log n) pasos, y cada rotaci on un tiempo constante O(1).
Si al ejecutar una rotaci on, la altura de t cambia, habr a que continuar haca la raz porque
otras faltas de balance pueden t ecnicamente haber resultado. Si no hay cambio en la altura
de t, no hay necesidad de continuar m as arriba en el arbol.
6.3.3.

Arboles rojo-negro
Otro tipo de arboles binarias son los arboles rojo-negro (ingl es: red-black tree) . Las
reglas para mantener orden de las claves es las mismas. Tambi en ofrecen tiempo de acceso
y actualizaci on O(log n) y se balancea por rotaciones. En vez de la condici on AVL, se
identica v ertices fuera de balance por asignar colores a los v ertices. Un arbol rojo-negro
cumple las siguientes propiedades:
(I) Cada v ertice tiene exactamente uno de los dos colores: rojo y negro.
(II) La raz es negro.
(III) Cada hoja es negro.
(IV) Si un v ertice es rojo, sus ambos hijos son negros.
(V) Para cada v ertice v, todos los caminos de v a sus descendientes contienen el mismo
n umero de nodos negros.
Entonces, la estructura de un v ertice contiene adem as de su clave y los punteros al padre
y los dos hijos, un color. Aplica para los arboles rojo-negro que su altura es O(log n) y
que la expresi on exacta tiene cota superior 2 log
2
(n + 1).
Los arboles rojo-negro se balancea con rotaciones simples (ver gura 6.9. Al insertar
hojas nuevas, adem as de las rotaciones para restaurar balance, puede hacer falta recolorear
98 CAP

ITULO 6. ESTRUCTURAS DE DATOS


Rotaci on a la izq.
Rotaci on a la der. w
w
A
B C A
C
B
v
v
Figura 6.9: Las dos rotaciones de los arboles rojo-negro son operaciones inversas una para
la otra.
algunos v ertices en el camino desde la hoja nueva hasta la raz. Las posibles violaciones
son de dos tipos: v ertices de ruteo rojos que llegan a tener un hijo rojo por las rotaciones y
la raz siendo un v ertice rojo por rotaciones. Es una idea buena implementar las rotaciones
y los cambios de color en una sola subrutina que se invoca despu es de cada inserci on para
manejar los cambios ecientemente. Tambi en las operaciones de eliminaci on necesitan
su propia subrutina para las rotaciones y recoloreo, aunque es un poco m as complicado
que el caso de inserci on.
6.3.4.

Arboles B
Los arboles B (ingl es: B-tree) son a

Aboles balanceados no binarios. Todos los v ertices


contienen datos y el n umero por datos por v ertice puede ser mayor a uno. Si un v ertice
internal contiene k claves a
1
, a
2
, . . . , a
k
, tiene necesariamente k + 1 hijos que contienen
las claves en los intervalos [a
1
, a
2
], [a
2
, a
3
], . . . , [a
k1
, a
k
].
Cada v ertice contiene la informaci on siguiente:
1. su n umero de claves k
2. las k claves en orden no decreciente
3. un valor binario que indica si o no el v ertice es una hoja
4. si no es una hoja, k + 1 punteros a sus hijos c
1
, c
2
, . . . , c
k+1
Aplica para las d claves b
1
, . . . , b
d
en el ramo del hijo c
i
que a
i
b
j
a
i+1
para cada
j [1, d]. Todas las hojas del arbol tienen la misma profundidad y la profundidad es ex-
actamente la altura del arbol. Adem as, se impone cotas superiores e inferiores al n umero
de claves que un v ertice puede contener:
6.3.

ARBOLES 99
(I) Cada v ertice salvo que la raz debe contener por lo menos t 1 claves.
(II) Cada v ertice puede contener al m aximo 2t 1 claves.
En consecuencia, cada v ertice que no es hoja tiene por lo menos t hijos y al m aximo 2t
hijos. Un v ertice es lleno si contiene el n umero m aximo permitido de claves.
En los arboles B aplica para la altura a del arbol que (omitimos la demostraci on) para
t 2,
a log
t
n + 1
2
. (6.16)
B usqueda de una clave en un arbol B no diferencia mucho de la operaci on de b usqueda
en arboles binarios, el unico cambio siendo que habr a que elegir entre varias alternativas
en cada v ertice intermedio.
Para insertar, primero buscamos la posici on en d onde insertar la clave nueva. Si el v ertice
donde deberamos realizar la inserci on todava no est a lleno, insertamos la clave y estamos
listos. Si el v ertice es lleno, habr a que identicar su clave mediana y dividir el v ertice en
dos partes. La mediana misma mover a al v ertice padre para marcar la divisi on, pero esto
puede causar que el padre tambi en tendr a que dividirse. Las divisiones pueden continuar
recursivamente hasta la raz.
Como tambi en impusimos una cota inferior al n umero de claves, al eliminar una clave
podemos causar que un v ertice sea demasiado vaco. Entonces, al eliminar claves, los
v ertices chupan claves de reemplazo de sus hojas o de su padre. La operaci on que
resulta se divide en varios casos posibles.
Los arboles multicaminos (ingl es: B+ trees) tienen adem as punteros extras entre v ertices
que son hermanos para ofrecer m as posibilidades simples para mover claves al buscar,
insertar y eliminar claves.
6.3.5.

Arboles biselados
Los arboles biselados (ingl es: splay tree) son arboles binarios que ofrecen en tiempo
O(log n) cualquiera de las operaciones siguientes: b usqueda, inserci on y eliminaci on de
una clave, igual como la uni on y divisi on de arboles. En un arbol biselado cada v ertice
contiene a una clave y las claves en el ramo izquierdo son menores que la clave del v ertice
mismo, mientras a la derecha est an las claves mayores. Las claves son unicas. Los arboles
biselados no est an balanceados, si no por suerte las operaciones no cuidan ni restauran
balance.
En este caso, no hay ning un dato asociado a una clave, por lo cual una b usqueda por la
clave tiene simplemente salidas s (en el caso que la clave est a presente en el arbol)
y no (en el caso que la clave no est a incluido). Para aplicar una uni on, todas las claves
de uno de los dos arboles tienen que ser menores a la clave mnima del otro. La divisi on
divide a un arbol a dos arboles tal que todas las claves de uno de los arboles que resultan
100 CAP

ITULO 6. ESTRUCTURAS DE DATOS


+ +
splay(+, A)
Figura 6.10: La uni on de dos arboles biselados.
son menores o iguales a una clave dada como par ametro y las mayores est an en el otro
arbol.
La operaci on b asica utilizada para implementar todas estas operaciones es splay(, A):
lo que hace splay es convertir el arbol A a tal forma que el v ertice con clave es la raz,
si presente, y en la ausencia de en A, la raz ser a
m ax k A [ > k (6.17)
si A contiene claves menores a y mn k A en otro caso. El orden de las claves
despu es de la operaci on cumple el mismo requisito de orden de las claves.
Las operaciones est an implementadas de la manera siguiente utilizando splay:
b usqueda de en A: ejecuta splay(, A). Si la raz en el resultado es , la salida
es s, en otro caso no.
uni on de A
1
con A
2
: se supone que las claves de A
1
son todos menores que la clave
mnima de A
2
. Ejecutamos splay(, A
1
) para lograr que la raz de A
1
modicado
es su clave m axima y todos los otros v ertices est an en el ramo izquierdo. Hacemos
que A
2
sea el ramo derecho. (Ver gura 6.10.)
divisi on de A con la clave : ejecutamos splay(, A). Los dos arboles resultantes
ser an tal que A
1
contiene solamente el ramo derecho de la raz y A
2
el resto del A
modicado.
eliminaci on de de A: divide A con la clave . Si resulta que es la raz, qutalo y
ejecuta la uni on de los dos ramos sin . Si no es la raz, solamente vuelve a juntar
A
1
como el ramo derecho de A
2
.
inserci on de en A: ejecuta la divisi on de A con . Si ya es la raz, solamente
vuelve a juntar A
1
como el ramo derecho de A
2
. Si no lo es, crea un v ertice raz
nuevo con la clave y haz A
2
su ramo derecho y A
1
su ramo izquierdo.
Lo que queda entender es c omo implementar el m etodo splay mismo. Comenzamos co-
mo cualquier b usqueda en un arbol binario ordenado desde la raz utilizando el hecho que
las claves peque nas est an a la izquierda y las grandes a la derecha en comparaci on con
la clave del v ertice actual. Al terminar la b usqueda en un v ertice v, empezamos rotaciones
6.3.

ARBOLES 101
simples para mover v haca la raz sin mezclar el orden de las claves (ver las rotaciones
simples en la gura 6.8). Las rotaciones se elige seg un las relaciones entre un v ertice v y
su padre y abuelo.
Si v tiene padre pero no tiene abuelo, elegimos una rotaci on simple derecha de la gura
6.8). Este es el caso de la ultima operaci on con cual v llega al ser la raz.
Si v tiene un padre u y un abuelo w los dos, hay varios casos. En el caso que v y u los dos
son hijos derechos, elegimos una rotaci on doble derecha-derecha (ilustrada en la gura
6.11), y si son ambos hijos izquierdos, una rotaci on doble izquierda-izquierda que es la
misma pero por espejo. En el caso que otro de v y u es un hijo izquierdo y el otro
derecho, elegimos una de las rotaciones dobles de la 6.8.
rotate(y)
rotate(x)
x
A B
y
C
z
D
D C
y
B
x
z
A
Figura 6.11: Una rotaci on doble derecha-derecha.
102 CAP

ITULO 6. ESTRUCTURAS DE DATOS


B
k
B
k
B
k+1
Figura 6.12: La denici on recursiva de un arbol bin omico B
k+1
en t erminos de dos copias
de B
k
. La raz de B
k+1
es el v ertice gris.
6.4. Montculos
Un montculo (ingl es: heap) es una estructura compuesta por arboles. Existen muchas
variaciones de montculos. La implementaci on tpica de un montculo se basa de arboles,
mientras arboles se puede guardar en arreglos. Entonces, las implementaciones se basan
en arreglos o el uso de elementos enlazados.
6.4.1. Montculos bin omicos
Un montculo bin omico se dene de una manera recursiva. Un arbol bin omico de un
v ertice es B
0
y el unico v ertice es la raz. El arbol B
k+1
contiene dos copias de B
k
tales
que la raz de una copia es la raz de B
k+1
y la raz de la otra copia es un hijo directo de
esta raz (ver gura 6.12). Algunas consecuencias de esta denici on son que
1. El arbol B
k
contiene 2
k
v ertices.
2. La altura de B
k
es k.
3. La raz de B
k
tiene k hijos directos B
k1
, B
k2
, . . . , B
1
, B
0
.
Las claves est an guardadas en un arbol bin omico seg un el orden de montculo: la clave
del v ertice padre es menor que la clave de su hijo. Cada v ertice contiene una clave. Un
montculo bin omico es un conjunto de arboles bin omicos tal que no hay duplicados de los
B
k
. Si el n umero de claves para guardar es n, tomamos la representaci on binaria de n,
n = b
k
b
k1
. . . b
2
b
1
b
0
, (6.18)
donde los b
i
son los bits y k es el n umero mnimo de bits requeridos para representar n.
Si b
i
= 1, en el montculo est a presente un arbol bin omico B
i
, y si b
i
= 0, ese tama no de
arbol no forma parte del montculo. Por denici on, el largo del n umero binario es log
2
n,
o sea O(log n). Por seguir el orden de montculo en cada arbol, se puede encontrar la
clave mnima del montculo en tiempo O(log [n). La gura 6.13 muestra un ejemplo de
un montculo bin omico compuesto por cinco arboles.
6.4. MONT

ICULOS 103
Figura 6.13: Un ejemplo de un montculo bin omico, compuesto por cinco arboles bin omi-
cos.
Cada v ertice del montculo tiene guardado adem as de su propia clave, su grado (en este
contexto: el n umero de hijos que tiene) y tres punteros: a su padre, a su hermano y a su
hijo directo. La operaci on de encadenaci on forma de dos arboles B
n
un arbol B
n+1
tal
que el arbol B
n
con clave mayor a su raz ser a un ramo del otro arbol B
n
. Esta operaci on
se realiza en tiempo O(1).
Para unir dos montculos bin omicos, hay que recorrer las listas de races de los dos
montculos simultaneamente. Al encontrar dos arboles del mismo tama no B
i
, se los junta
a un arbol B
i+1
. Si uno de los montculos ya cuenta con un B
i+1
se los junta recursiva-
mente. Si hay dos, uno queda en el montculo nal como un arbol independiente mientras
en otro se une con el recien creado. Esta operaci on necesita O(log n) tiempo.
Entonces, para insertar un elemento, creamos un B
0
en tiempo O(1) y lo juntamos en el
montculo en tiempo O(log n), dando una complejidad total de O(log n) para la inser-
ci on.
Para eliminar el elemento mnimo, lo buscamos en tiempo O(log n), le quitamos y
creamos otro montculo de sus hijos en tiempo O(log n). Unimos los dos montculos
en tiempo O(log n). Entonces el tiempo total para esta operaci on es tambi en O(log n).
Para disminuir el valor de una clave, levantamos el v ertice correspondiente m as cerca de
la raz para no violar el orden del montculo en tiempo O(log n).
Para eliminar un elemento cualquiera, primero disminuimos su valor a en tiempo
O(log n) y despu es quitamos el mnimo en tiempo O(log n).
6.4.2. Montculos de Fibonacci
Un montculo de Fibonacci es una colecci on de arboles (no bin omicos) que respetan el
orden de montculo con las claves. Cada v ertice contiene, adem as de su clave, punteros
a su padre, sus dos hermanos (a la izquierda y a la derecha), el grado y un marcador. El
marcador del v ertice v tiene el valor uno si el v ertice v ha perdido un hijo despu es de la
ultima vez que volvi o a ser un hijo de otro v ertice el v ertice v mismo. Las races est an
en una cadena a trav es de los punteros a los hermanos, formando una lista doblemente
enlazada. La lista se completa por hacer que el ultimo v ertice sea el hermano izquierdo
del primero.
104 CAP

ITULO 6. ESTRUCTURAS DE DATOS


De nuevo, por el orden de montculo y el manejo del n umero de arboles, el elemento
mnimo se encuentra en tiempo O(1). Para insertar un elemento, se crea un arbol con un
s olo v ertice con marcador en cero (en tiempo O(1)). La uni on de dos listas de races se
logra simplemente por modicar los punteros de hermanos para lograr que sean una lista
despu es de la otra (en tiempo O(1) son cuatro punteros que ser an modicados).
Para eliminar el elemento mnimo, simplemente se lo quita de la lista de races y adjun-
tando la lista de los hijos del v ertice eliminado en el montculo como si estuviera otro
montculo. Despu es de la eliminaci on, se repite una operaci on de compresi on hasta que
las races tengan grados unicos. Aqu la dicultad viene de encontrar ecientemente las
races con grados iguales para juntarlos. Se logra por construir un arreglo auxiliar mien-
tras recorriendo la lista de races: el arreglo tiene el tama no de grados posibles y se guarda
en el elemento i una raz encontrado con grado i. Si el elemento ya est a ocupado, se junta
los dos arboles y libera el elemento del arreglo. Esto claramente hay que aplicar recur-
sivamente. Es importante notar que despu es de haber compresionado la lista de races,
el n umero de races es O(log n) porque todas las races tienen una cantidad diferente de
hijos y ninguna raz puede tener m as que O(log n) hijos.
Para disminuir el valor de una clave, hay dos opciones: si est a en una raz, es trivial
(solamente modicando su valor). En el otro caso, habr a que quitar el v ertice v con la
clave de la lista de hermanos y convertirlo a una raz nueva. Si el padre w de v llevaba
el valor uno en su marcador, tambi en se quita w y lo convierte en una raz nueva. En el
otro caso, se marca el v ertice w (por poner el valor uno en el marcador). Lo de convertir
v ertices en races habr a que hacer recursivamente hasta llegar a un padre con el valor de
marcador en cero.
En un montculo bin omico, el n umero de hijos por v ertice es al m aximo O(log n) donde
n es la cantidad total de v ertices en el montculo. En el peor caso, los v ertices forman un
s olo arbol, donde la raz tiene muchos hijos y no hay muchos otros v ertices.
Denotamos por B
k
el arbol bin omico mnimo donde la raz tenga k hijos. Los hijos son
B
0
, . . . , B
k1
y B
i
tiene i hijos. Aplica que
[B
k
[ = 1 +
k1

i=0
[B
i
[ = 2
k
. (6.19)
Entonces, log
2
[B
k
[ = log
2
2
k
= k log
2
2 = k, que nos da el resultado deseado de
O(log n).
Mostramos de la misma manera que en un montculo Fibonacci un v ertice tiene al m aximo
O(log n) hijos. En el peor caso, todos los v ertices est an en un s olo arbol y una cantidad
m axima de los v ertices son hijos directos de la raz. Lo unico que hay que establecer
es que los ramos de los hijos de la raz tienen que ser grandes. As establecemos que
solamente unos pocos v ertices (en comparaci on con el n umero total n) pueden ser hijos
de la raz.
Sea h 0 y F
h
un arbol de un montculo Fibonacci donde la raz v tiene h hijos, pero
donde la cantidad de otros v ertices es mnima. Al momento de juntar el hijo H
i
, ambos
6.4. MONT

ICULOS 105
v ertices v y H
i
tuvieron exactamente i 1 hijos. Despu es de esto, para que tenga la
cantidad mnima de hijos, H
i
ha necesariamente perdido un hijo; si hubiera perdido m as
que uno, H
i
habra sido movido a la lista raz. Entonces, H
i
tiene i 2 hijos y cada uno
de ellos tiene la cantidad mnima posible de hijos. Entonces, H
i
es la raz de un F
i2
.
Entonces, los hijos de un F
r
son las races de F
0
, F
1
, . . . , F
r2
y adem as un hijo tipo hoja
que no tiene hijos. En total, la cantidad total de v ertices es
[F
r
[ =
_
1, si r = 0, (solamente la raz)
2 +

r2
i=0
[F
i
[, si r > 0, la raz, la hoja y los ramos.
(6.20)
Abrimos la recursi on:
[F
0
[ = 1
[F
1
[ = 2
[F
2
[ = 2 +[F
0
[ = [F
1
[ +[F
0
[
[F
3
[ = 2 +[F
0
[ +[F
1
[ = [F
2
[ +[F
1
[
[F
4
[ = 2 +[F
0
[ +[F
1
[ +[F
2
[ = [F
3
[ +[F
2
[
.
.
.
[F
r
[ = [F
r1
[ +[F
r2
[ .
(6.21)
Resulta que el n umero de v ertices en F
r
es el n umero de Fibonacci T(r + 2) (denido
en la ecuaci on 6.10 en p agina 94). Utilizamos de nuevo la cota inferior de ecuaci on 6.11:
[F
r
[ = T(r + 2)
_
1 +

5
2
_
r+1
. (6.22)
Con las propiedades de logaritmo, llegamos a log n = log F
r
(r +1) log C donde C es
alg un constante, por lo cual tenemos r = O(log n).
106 CAP

ITULO 6. ESTRUCTURAS DE DATOS


6.5. Grafos
Para guardar un grafo de n v ertices etiquetados 1, 2, 3, . . . , n, se puede guardar la matriz
de adyacencia solamente es eciente si el grafo es muy denso, porque la matriz ocupa n
2
elementos y si m es mucho menor que n
2
, la mayora del espacio reservado tiene el valor
cero. Para ahorrar espacio, se puede utilizar listas de adyacencia. Se necesita un arreglo
a[], cada elemento de cu al es una lista de largo din amico. La lista de a[i] contiene las
etiquetas de cada uno de los vecinos del v ertice i. El tama no de la estructura de listas de
adyacencia es O(n + m) O(m) = O(n
2
). Esto es muy parecido al implementar un
grafo como una estructura enlazada, con punteros a todos los vecinos de cada v ertice.
6.5.1. B usqueda y recorrido en grafos
Los algoritmos de procesamiento de grafos com unmente utilizan colas. Los dos ejemplos
m as fundamentales son los algoritmos de b usqueda y recorrido. El recorrido de un grafo
(o un arbol) es el proceso de aplicaci on de un m etodo sistem atico para visitar cada v ertice
del grafo (o arbol). Un algoritmo de b usqueda es un m etodo sistem atico para recorrer un
grafo de entrada G = (V, E) con el prop osito de encontrar un v ertice del G que tenga una
cierta propiedad.
Algortmicamente cada algoritmo de b usqueda realiza un recorrido en el caso que visita
todos los v ertices sin encontrar soluci on. Entonces, el mismo pseudoc odigo sirve para los
dos usos con modicaciones muy peque nas. Los usos tpicos de algoritmos de recorrido
incluyen
la construcci on de caminos
la computaci on distancias
la detecci on de ciclos
la identicaci on de los componentes conexos
B usqueda en profundidad (DFS)
Dado G y un v ertice inicial v V , el procedimiento general es el siguiente (/ es una
pila):
1. crea una pila vaca /
2. asigna u := v
3. marca u visitado
4. a nade cada v ertice no marcado en (v) al comienzo de /
6.5. GRAFOS 107
5. quita del comienzo de / todos los v ertices marcados
6. si / est a vaca, termina
7. asigna u := el primer v ertice en /
8. quita el primer v ertice de /
9. continua de paso (3)
El algoritmo DFS puede progresar en varias maneras; el orden de visitas depende de c omo
se elige a cu al vecino se va. Algunas aristas encontradas apuntan a v ertices ya visitados.
Tambi en se puede formular DFS como un algoritmo recursivo: dado un v ertice de inicio,
el grafo G = (V, E) y un conjunto / de v ertices ya visitados (inicialmente / := ), basta
con denir
dfs(v, G, /)
/ := / v
para todo w (v) / :
dfs(w, G, /).

(6.23)
Si el algoritmo DFS se utiliza para realizar alg un procesamiento en los v ertices, con la
implementaci on recursiva se puede f acilmente variar en qu e momento realizar la visita:
las opciones son visitar antes o despu es de llamar la subrutina dfs para los vecinos. El
orden de visitas a los v ertices si la visita se realiza antes de la llamada recursiva se llama
el preorden y el orden de visitas en el caso de visitar despu es se llama postorden.
En las dos implementaciones, la complejidad asint otica de DFS es O(n + m): cada arista
est a procesada por m aximo una vez de ida y otra de vuelta. Cada v ertice solamente
se procesa una vez, porque los v ertices ya marcados no ser an revisitados.
DFS produce una clasicaci on en las aristas v, w del grafo: las aristas de arbol son las
aristas por las cuales progresa el procedimiento, es decir, en la formulaci on recursiva, w
fue visitado por una llamada de v o vice versa. Estas aristas forman un arbol cubriente
del componente conexo del v ertice de inicio. Depende de la manera en que se ordena los
vecinos que habr a que visitar cu ales aristan ser an aristas de arbol. Un v ertice v es el padre
(directo o inmediato) de otro v ertice w si v lanz o la llamada recursiva para visitar a w.
Si v es el padre de w, w es hijo de v. Cada v ertice, salvo que el v ertice de inicio, que
se llama la raz del arbol, tiene un v ertice padre unico. El n umero de hijos que tiene un
v ertice puede variar.
Un v ertice v es un antepasado de otro v ertice w si existe una sucesi on de v ertices v =
u
1
, u
2
, . . . , u
k
= w tal que u
i
es el padre de u
i+1
. En ese caso, w es un descendiente de
v. Si k = 2, o sea, v es el padre directo de w, v es el antepasado inmediato de w y w es
un descendiente inmediato de v. La raz es un antepasado de todos los otros v ertices. Los
v ertices sin descendientes son hojas.
Las aristas que no son aristas de abrol se clasica en tres clases:
108 CAP

ITULO 6. ESTRUCTURAS DE DATOS


(I) una arista procedente conectan un antepasado a un descendiente no inmediato,
(II) una arista retrocedente conecta un descendiente a un antepasado no inmediato,
(III) una arista transversa conecta un v ertice a otro tal que no son ni antepasados ni
descendientes uno al otro est an de diferentes ramos del arbol.
Nota que aristas procedentes y aristas retrocedentes son la misma clase en un grafo no
dirigido.
El nivel de un v ertice v tiene la siguiente denici on recursiva:
nivel(v) =
_
0, si v es la raz,
nivel(u) + 1, si u es el padre de v.
(6.24)
La denici on del altura es similar, pero en la otra direcci on:
altura(v) =
_
0, si v es una hoja,
m ax altura(u) + 1 , si u es un hijo de v.
(6.25)
El sub arbol de v es el arbol que es un subgrafo del arbol cubriente donde v es la raz; es
decir, solamente v ertices que son descendientes de v est an incluidos adem as de v mismo.
B usqueda en anchura
La b usqueda en anchura utiliza una cola /. Dado G y un v ertice inicial v V , el pro-
cedimiento general es el siguiente:
1. crea una cola vaca /
2. asigna u := v
3. marca u visitado
4. a nade cada v ertice no marcado en (v) al n de /
5. si / est a vaca, termina
6. asigna u := el primer v ertice en /
7. quita el primer v ertice de /
8. continua de paso (3)
Algunas aristas encontradas apuntan a v ertices ya visitados.
6.5. GRAFOS 109
6.5.2. Componentes conexos
Se puede utilizar la b usqueda en profundidad para determinar los componentes conex-
os de un grafo. Como ya denido en secci on 1.8, un grafo es conexo si cada v ertice
est a conectado a todos los v ertices por un camino. Por iniciar DFS en el v ertice v, el
conjunto de v ertices visitados por el recorrido corresponde al componente conexo de v,
porque el algoritmo efectivamente explora todos los caminos que pasan por v. Si el grafo
tiene v ertices que no pertenecen al componente de v, elegimos uno de esos v ertices u y
corremos DFS desde u. As encontramos el componente conexo que contiene a u. Iterando
as hasta que todos los v ertices han sido clasicados a un componente, se logra determinar
todos los componentes conexos.
El n umero de v ertices siendo n, repetimos DFS por m aximo O(n) veces y cada recorrido
toma tiempo O(n + m). Sin embargo, cada recorrido DFS ve valores menores de n y
m porque no vuelve a procesar nada ya marcado, y por deniciones, desde un compo-
nente conexo no hay ninguna arista a otro componente conexo. Entonces, efectivamente
procesamos cada v ertice y cada arista exactamente una vez. Considerando que
n O(m) O(n + m) O
_
n
2
_
, (6.26)
tenemos un algoritmo para identicar los componentes conexos en tiempo O(n
2
).
En un grafo conexo, podemos clasicar las aristas seg un un recorrido DFS: asignamos
al v ertice inicial la etiqueta uno. Siempre al visitar a un v ertice por la primera vez, le
asignamos una etiqueta num erica uno mayor que la ultima etiqueta asignada. As todos
los v ertices llegan a tener etiquetas unicas en [1, n]. Llamamos la etiqueta as obtenida el
n umero de inicio del v ertice y lo denotamos por I(v).
Asignamos otra etiqueta a cada v ertice tal que la asignaci on ocurre cuando todos los
vecinos han sido recurridos, empezando de 1. As el v ertice de inicio tendr a la etiqueta n.
Estas etiquetas se llaman n umeros de nal de los v ertices y son denotados por F(v).
Las I(v) denen el orden previo (ingl es: preorder) del recorrido y las F(v) el orden
posterior (ingl es: postorder). Una arista v, u es
una arista de arbol si y s olo si el recorrido lleg o a u directamente desde v,
una arista retrocedente si y s olo si (I(u) > I(v)) (F(u) < F(v)),
una arista transversa si y s olo si (I(u) > I(v)) (F(u) > F(v)), y
una arista procedente si y s olo si en el recorrido v es un antepasado de u.
De nuevo hay que tomar en cuanta que en grafos no dirigidos, las aristas retrocedentes
son tambi en procedentes y vice versa.
110 CAP

ITULO 6. ESTRUCTURAS DE DATOS


Componentes doblemente conexos
Un grafo no dirigido es k-conexo si de cada v ertice hay por lo menos k caminos distintos
a cada otro v ertice. El requisito de ser distinto puede ser de parte de los v ertices tal que
no pueden pasar por los mismos v ertices ningunos de los k caminos (ingl es: vertex con-
nectivity) o de las aristas tal que no pueden compartir ninguna arista los caminos (ingl es:
edge connectivity).
En el sentido de v ertices distintos, aplica que la intersecci on de dos componentes distintos
que son ambos 2-conexos consiste por m aximo un v ertice. Tal v ertice se llama un v ertice
de articulaci on. Utilizamos esta denici on para llegar a un algoritmo para encontrar los
componentes 2-conexos de un grafo no dirigido.
Sea v un v ertice de articulaci on y tengamos un bosque de extensi on del grafo (o sea, un
arbol cubriente de cada componente conexo el mismo DFS que identica los com-
ponentes conexos simples genera tal arbol). Si v es la raz de un arbol cubriente, tiene
necesariamente por lo menos dos hijos, porque por denici on de los v ertices de articu-
laci on, un recorrido no puede pasar de alg un componente a otro sin pasar por v.
Si v no es la raz, por lo menos un ramo de v contiene un componente doblemente conexo
(o sea, 2-conexo). De tal ramo no es posible tener una arista retrocedente a ning un an-
tepasado.
Hacemos un recorrido y marcamos para cada v ertice que tan cerca de la raz se puede
llegar solamente por las aristas de arbol y las aristas retrocedentes:
R(v) = mn
_
_
I(v)
_

_
I(u) [
u es un antepasado de v
v o un descendiente suyo tiene arista con u
_
_
(6.27)
Un v ertice v que no es la raz es un v ertice de articulaci on si y s olo si tiene un hijo u tal
que R(u) I(v). Una denici on recursiva de R(v) es
R(v) = mn
_

I(v) R(u) [ u es un hijo de v


I(u) [ v, u es una arista retrocedente
_
. (6.28)
De hecho, podemos incorporar en el DFS original la calculaci on de los R(v) de todos los
v ertices.
Para facilitar la implementaci on, se puede guardad aristas en una pila T al procesarlos.
Cuando el algoritmo est a de vuelta y encuentra un componente doblemente conexo,
las aristas del componente est an encima de la pila y se puede quitarlas con facilidad. El
procedimiento de inicializaci on ser a
inicio := 0;
T := ;
para todo v V ;
I(v) := 0;
para todo v V ;
6.5. GRAFOS 111
Figura 6.14: Un grafo dirigido peque no con dos componentes fuertemente conexos.
si I(v) = 0
doblemente-conexo(v)
y el procedimiento recursivo que realiza el algoritmo
procedimiento doblemente-conexo(v)
inicio := inicio +1;
I(v) := inicio;
R(v) := I(v)
para cada v, u E
si I(u) = 0
a nade v, u en T;
padre(u) := v;
doblemente-conexo(u);
si R(u) I(v)
elimina aristas de T hasta e inclusa v, v

;
R(v) := mnR(v), R(u);
en otro caso si u ,= padre(v);
R(v) := mnR(v), I(u)
El algoritmo visita cada v ertice y recorre cada arista. El tiempo de procesamiento de un
v ertice o una arista es constante, O(1). Entonces la complejidad del algoritmo completo
es O(n + m).
Componentes fuertemente conexos
Un grafo dirigido est a fuertemente conexo si de cada uno de sus v ertices existe un camino
dirigido a cada otro v ertice. Sus componentes fuertemente conexos son los subgrafos max-
imales fuertemente conexos. La gura 6.14 muestra un ejemplo.
Los componentes fuertemente conexos de G = (V, E) determinan una partici on de los
v ertices de G a las clases de equivalencia seg un la relaci on de clausura reexiva y tran-
sitiva de la relaci on de aristas E. Las aristas entre los componentes fuertemente conexos
112 CAP

ITULO 6. ESTRUCTURAS DE DATOS


determinan una orden parcial en el conjunto de componentes. Ese orden parcial se puede
aumentar a un orden lineal por un algoritmo de ordenaci on topol ogica .
Cuando uno realiza un recorrido en profundidad, los v ertices de un componente conexo
se quedan en el mismo ramo del arbol cubriente. El v ertice que queda como la raz del
ramo se dice la raz del componente. La meta de ordenaci on topol ogica es encontrar las
races de los componentes seg un el orden de sus n umeros F(v). Al llegar a una raz v
i
,
su componente est a formado por los v ertices que fueron visitados en el ramo de v
i
pero
no fueron clasicados a ninguna raz anterior v
1
, . . . , v
i1
. Esto se puede implementar
f acilmente con una pila auxiliar T, empujando los v ertices en la pila en el orden del
DFS y al llegar a una raz, quit andolos del encima de la pila hasta llegar a la raz misma.
As nada m as el componente est a eliminado de la pila.
Lo que queda es saber identicar las races. Si el grafo contiene solamente aristas de arbol,
cada v ertice forma su propio componente. Las aristas procedentes no tienen ning un efecto
en los componentes. Para que una v ertice pueda pertenecer en el mismo componente con
otro v ertice, tienen que ser conectados por un camino que contiene aristas retrocedentes
o transversas (ver gura 6.15).
Figura 6.15: Situaciones en las cuales dos v ertices (en gris) pueden pertenecer en el mismo
componente fuertemente conexo; las aristas azules son retrocedentes y las aristas verdes
transversas. Las aristas de arbol est an dibujados en negro y otros v ertices (del mismo
componente) en blanco.
Para buscar las races, utilizamos un arreglo auxiliar /(v) para guadrar un n umero para
c ada v ertice encontrado (ver gura 6.16 para una ilustraci on):
/(v) = mn
_
_
_
I(v)
_
_
_
I(v

) [
w que es descendente de v tal que

w, u es retrocedente o transversa
la raz del componente de u es un antepasado de v
_
_
_
_
_
_
(6.29)
Entonces, si /(v) = I(v), sabemos que v es una raz de un componente. Para todo otro
v ertice aplica que /(v) < I(v), porque /(v) contiene el valor del I(v) de un v ertice
anteriormente recorrido por una arista retrocedente o transversa o alternativamente un
valor de /(v) est a pasado a v por un descendiente. Tambi en podemos formular /(v) en
6.6. TABLAS DE DISPERSI

ON DIN

AMICAS 113
w
u
v
Figura 6.16: La situaci on de la ecuaci on 6.29. La raz del componente est a dibujado en
gris y la echa no continua es un camino, no necesariamente una arista directa.
forma recursiva:
/(v) = mn I(v)
/(u) [ u es hijo de v
I(u) [ v, u es retrocedente o transversa
la raz del componente de u es un antepasado de v .
(6.30)
Durante la ejecuci on el algoritmo, en la pila auxiliar T habr a v ertices los componentes de
los cuales no han sido determinados todava. Para facilitar el procesamiento, mantenemos
un arreglo de indicadores: guardado(v) = verdadero si v est a en la pila auxiliar
y falso en otro caso. As podemos determinar en el momento de procesar una arista
retrocedente o transversa v, u si la raz de u es un antepasado de v. Si lo es, u est a en
el mismo componente con v y los dos v ertices v y la raz est an todava en la pila. El
algoritmo en pseudo-c odigo est a en el cuadro 6.2
En el algoritmo del cuadro 6.2, cada v ertice entra la pila T una vez y sale de la pila una
vez. Adicionamente hay que procesar cada arista. La computaci on por v ertice o arista es
de tiempo constante. Entonces tenemos un algoritmo con tiempo de ejecuci on O(n + m).
6.6. Tablas de dispersi on din amicas
Una tabla de dispersi on (ingl es: hash table) son estructuras de datos que asocien claves
con valores. Por ejemplo, se podra implementar una gua telef onica por guardar los
n umeros (los valores) bajo los nombres (las claves). La idea es reservar primero espa-
cio en la memoria de la computadora y despu es alocarlo a la informaci on insertada, de
tal manera que siempre ser a r apido obtener la informaci on que corresponde a una clave
dada.
114 CAP

ITULO 6. ESTRUCTURAS DE DATOS


Una funci on de dispersi on (tambi en: una funci on hash) es una funci on del conjunto de
claves posibles a las direcciones de memoria. Su implementaci on tpica es por arreglos
unidimensionales, aunque existen tambi en variantes multidimensionales.
El tiempo de acceso promedio es constante por dise no: hay que computar la funci on hash
y buscar en la posici on indicada por la funci on. En el caso que la posici on indicada ya
est a ocupada, se puede por ejemplo asignar el elemento al espacio libre siguiente, en cual
caso el proceso de b usqueda cambia un poco: para ver si est a o no una clave, hay que ir a
la posici on dada por la funci on hash y avancar desde all a hasta la clave o en su ausencia
hasta llegar a un espacio no usado.
Cuando toda la memoria reservada ya est a siendo utilizada (o alternativamente cuando el
porcentaje utilizado supera una cota pre-establecida), hay que reservar m as. Tpicamente
se reserva una area de tama no doble de lo anterior. Primero se copia todas las claves
existentes con sus valores en la area nueva, despu es de que se puede empezar a a nadir
claves nuevas. Entonces, casi todas las operaciones de inserci on son f aciles (de tiempo
constante), pero el caso peor es (n) para una inserci on y (n
2
) para un total de n
inserciones.
6.7. Colas de prioridad
Una cola de prioridad es una estructura para guardar elementos con claves asociadas tal
que el valor de la clave representa la prioridad del elemento. El menor valor corresponde
a la prioridad m as urgente.
La operaciones de colas de prioridad de adjunto est an enfocadas a lograr f acilmente
averiguar el elemento mnimo guardado (en el sentido de los valores de las claves), o
sea, el elemento m as importante. Este implica que es necesario que tengan un orden los
elementos procesados por la cola de prioridad. Las operaciones son
1. insertar un elemento,
2. consultar el elemento mnimo,
3. retirar el elemento mnimo,
4. reducir el valor de un elemento,
5. juntar dos colas.
Tambi en es posible utilizar el mismo dato como la clave en las aplicaciones donde so-
lamente es de inter es tener acceso al elemento mnimo pero el concepto de prioridad no
aplica. Las colas de prioridad se puede implementar con montculos.
6.7. COLAS DE PRIORIDAD 115
Cuadro 6.2: Un algoritmo basado en DFS para determinar los componentes fuertemente
conexos de un grafo dirigido. Se asume acceso global al grafo y las estructuras auxiliares.
procedimiento fuerteconexo(v);
a := a + 1;
I(v) := a;
/(v) := I(v);
empuja v en T;
guardado[v] := verdadero ;
para todo v, u E haz
si I(u) = 0
fuerteconexo(u);
/(v) := mn/(v), /(u);
en otro caso
si (I(u) < I(v) guardado(u) = verdadero )
/(v) := mn/(v), I(u);
si /(v) = I(v)
quita de T los elementos hasta e incluso v,
guardado(w) := falso ;
imprime w como parte del componente de v;
procedimiento main(V, E)
a := 0;
I(v) := 0;
T := ;
para todo v V haz
I(v) := 0;
guardado(v) := falso
para todo v V
si I(v) = 0
fuerteconexo(v)
116 CAP

ITULO 6. ESTRUCTURAS DE DATOS


6.8. Conjuntos
6.8.1. Estructuras unir-encontrar
Una estructura unir-encontrar (ingl es: union-nd) sirve para manejar un grupo C de con-
juntos distintos de elementos tales que cada elemento tiene un nombre unico. Sus opera-
ciones b asicas son
form(i, S) que forma un conjunto S = y lo a nade en C: C := C S; no
est a permitido que el elemento i pertenezca a ning un otro conjunto de la estructura,
find(i) que devuelva el conjunto S C de la estructura donde i S y reporta un
error si i no est a incluido en ning un conjunto guardado,
union(S, T, U) que junta los dos conjuntos S C y T C en un s olo conjunto
U = S T y actualiza C := (C S, T) U; recuerda que por denici on
S T = .
No es realmente necesario asignar nombres a los conjuntos, porque cada elemento
pertenece a un s olo conjunto en C. Entonces, se puede denir las operaciones tambi en
en la manera siguiente:
form(i): C := C ,
find(i): devuelva la lista de elementos que est en en el mismo conjunto con i,
union(i, j): une el conjunto en el cual pertenece i con el conjunto en el cual
pertenece j.
6.8.2. Implementaci on de un conjunto en forma de un arbol
Otra opci on de manejar conjuntos es a trav es de arboles: cada elemento est a representada
por un v ertice hoja del arbol. El v ertice padre de unas hojas representa el conjunto de los
elementos representadas por sus v ertices hijos. Un subconjunto es un v ertice intermedio,
el padre de cual es su superconjunto. El conjunto de todos los elementos es su propio
padre. La estructura de los punteros padre est a mostrada en el ejemplo de la gura 6.17
La operaci on de crear un arbol nuevo es f acil: crear el primer v ertice v. Marcamos su
clave ( unica) con c. Hay que asignar que sea su propio padre: T(c) := c. Esto toma
tiempo constante O(1).
La operaci on de b usqueda del conjunto a cual pertenece una clave c, habr a que recorrir el
arbol (o sea, el arreglo) desde le v ertice con la clave deseada:
6.8. CONJUNTOS 117
9 11
1
5 2
3 4 7
8
6
10
12
Figura 6.17: Un ejemplo de los punteros padre de una arbol con n claves posibles para
poder guardar su estructura en un arreglo de tama no n.
p := c;
mientras T(p) ,= p
p := T(p);
devuelve p;
En el peor caso, el arrego se ha degenerado a una lista, por lo cual tenemos complejidad
asint otica O(n).
Para juntar dos conjuntos, basta con hacer que la raz de una (con clave c
1
) sea un hijo de
la raz de la otra (con clave c
2
): T(c
1
) := c
2
. Esta operaci on necesita tiempo O(1).
Podemos considerar la complejidad de una sucesi on de operaciones. Por ejemplo, si
creamos n conjuntos, entre cuales ejecutamos por m aximo n 1 operaciones de unir
dos conjuntos y no m as de dos b usquedas de conjuntos por cada uni on, el tiempo total es
(n + n 1 + 2(n 1)n) = (n
2
).
Si aseguramos que el juntar dos arboles, el arbol de menor tama no ser a hecho hijo del otro,
se puede demostrar que la altura del arbol que resulta es O(log n), por lo cual podemos
asegurar que la operaci on de b usqueda del conjunto toma tiempo O(log n) y la secuencia
analizada sera de complejidad asint otica O(nlog n), que ya es mejor. Lo unico que hay
que hacer es guardar en un arreglo auxiliar el tama no de cada conjunto y actualizarlo al
unir conjuntos y al generar un nuevo conjunto.
A un mejor sera guardar informaci on sobre la altura de cada arbol, la altura siendo un
n umero menor o igual al tama no. La ventaja de la complejidad asint otica queda igual,
pero solamente necesitamos O(log log n) bits para guardar la altura.
Hay diferentes opciones para modicar los caminos cuando uno realiza una b usqueda de
conjunto en la estructura.
Condensaci on del camino: traer los v ertices intermedios a la raz
118 CAP

ITULO 6. ESTRUCTURAS DE DATOS


p := c;
mientras T(p) ,= p
p := T(p);
q := i;
mientras T(q) ,= q
r := T(q); T(q) := p;
q := r
devuelve p;
Divisi on del camino: mover v ertices intermediados a otra parte
p := c;
mientras T(T(p)) ,= T(p)
q := T(p);
T(p) := T(T(p));
p := q
devuelve y;
Cortar el camino a su mitad: saltando a abuelos
p := c;
mientras T(T(p)) ,= T(p)
T(p) := T(T(p));
y := T(p)
devuelve T(p);
Captulo 7
An alisis de algoritmos
7.1. Algoritmos simples
Para analizar desde un pseudoc odigo la complejidad, tpicamente se aplica las reglas sigu-
ientes:
Asignaci on de variables simples toman tiempo O(1).
Escribir una salida simple toma tiempo O(1).
Leer una entrada simple toma tiempo O(1).
Si las complejidades de una sucesi on de instrucciones I
1
, I
2
, . . . , I
k
donde k no de-
pende del tama no de la instancia, son respectivamente f
1
, f
2
, . . . , f
k
, la complejidad
total de la sucesi on es
O(f
1
+ f
2
+ . . . + f
k
) = O(maxf
1
, . . . , f
k
) . (7.1)
La complejidad de una cl ausula de condici on (si ) es la suma del tiempo de evaluar
la condici on y la complejidad de la alternativa ejecutada.
La complejidad de una repetici on (mientras , para , . . .) es O(k(f
t
+ f
o
)), donde
k es el n umero de veces que se repite, f
t
es la complejidad de evaluar la condici on
de terminar y f
o
la complejidad de la sucesi on de operaciones de las cuales consiste
una repetici on.
La complejidad de tiempo de una llamada de subrutina es la suma del tiempo de
calcular sus par ametros, el tiempo de asignaci on de los par ametros y el tiempo de
ejecuci on de las instrucci ones.
Operaciones aritm eticas y asignaciones que procesan arreglos o conjuntos tienen
complejidad lineal en el tama no del arreglo o conjunto.
119
120 CAP

ITULO 7. AN

ALISIS DE ALGORITMOS
7.2. Complejidad de algoritmos recursivos
La complejidad de programas recursivos tpicamente involucra la soluci on de una
ecuaci on diferencial. El m etodo m as simple es adivinar una soluci on y vericar si est a bi-
en la adivinanza. Como un ejemplo, tomamos la ecuaci on siguiente
T(n)
_
c, si n = 1
g
_
T(n/2), n
_
, si n > 1
(7.2)
y adivinamos que la soluci on sea, en forma general, T(n) f(a
1
, . . . , a
j
, n), donde
a
1
, . . . , a
j
son par ametros de la funci on f. Para mostrar que para algunos valores de los
par ametros a
1
, . . . , a
j
aplica para todo n que la soluci on sea la adivinada, tenemos que
demostrar que
c f(a
1
, . . . , a
j
, 1) (7.3)
y tambi en que
g
_
f
_
a
1
, . . . , a
j
,
n
2
_
, n
_
f(a
1
, . . . , a
j
, n), si n > 1. (7.4)
Esto se logra por inducci on. Hay que mostrar que T(k) f(a
1
, . . . , a
j
, k) para 1 k <
n. Cuando est a establecido, resulta que
T(n) g
_
T
_
n
2
_
, n
_
g
_
f
_
a
1
, . . . , a
j
,
n
2
_
, n
_
f(a
1
, . . . , a
j
, n), si n > 1.
(7.5)
Otra opcion es aplicar la ecuaci on recursiva de una manera iterativa. Por ejemplo, con la
ecuaci on diferencial
_
T(1) = c
1
,
T(n) 2T
_
n
2
_
+ c
2
n.
(7.6)
obtenemos por aplicaci on repetida
T(n) 2T
_
n
2
_
+ c
2
n 2
_
2T(n/4) +
c
2
n
2
_
+ c
2
n
= 4T(n/4) + 2c
2
n 4 (2T(n/8) + c
2
n/4) + 2c
2
n
= 8T(n/8) + 3c
2
n.
(7.7)
Observando la forma en que abre la ecuaci on, podemos adivinar que por lo general aplica
T(n) 2
i
T
_
n
2
i
_
+ ic
2
n para todo i. (7.8)
Si asumimos que n = 2
k
, la recursi on acaba cuando i = k. En ese momento tenemos
T
_
n
2
k
_
= T(1), o sea
T(n) 2
k
T(1) + kc
2
n. (7.9)
De la condici on 2
k
= n sabemos que k = log n. Entonces, con T(1) c
1
obtenemos
T(n) c
1
n + c
2
nlog n (7.10)
o sea T(n) O(nlog n).
7.2. COMPLEJIDAD DE ALGORITMOS RECURSIVOS 121
7.2.1. Soluci on general de una clase com un
En forma m as general, tomamos la ecuaci on siguiente
_
T(1) = 1
T(n) = a(n/b) + d(n),
(7.11)
donde a y b son constantes y d : Z
+
R
+
. Para simplicar la situaci on, se supone
que n = b
k
por alg un k 0 (o sea k = log b). La soluci on necesariamente tiene la
representaci on siguiente:
T(n) = a
k
..
parte homog enica
+
k1

j=0
a
j
d(b
kj
)
. .
parte heterog enica
. (7.12)
En el caso que d(n) 0, no habr a parte heterog enica. La demostraci on es por descom-
posici on:
T(n) = aT
_
n
b
_
+ d(n)
= a
_
aT
_
n
b
2
_
+ d
_
n
b
_
_
+ d(n)
= a
2
T
_
n
b
2
_
+ ad
_
n
b
_
+ d(n)
.
.
.
= a
k
T
_
n
b
k
_
+ a
k1
d
_
n
b
k1
_
+ . . . + d(n)
= a
k
T(1) +
k1

j=0
a
j
d(b
kj
)
= a
k
+
k1

j=0
a
j
d(b
kj
).
(7.13)
Para la parte homog enica a
k
aplica que a
k
= a
log
b
n
= n
log
b
a
. En el an alisis de ordenaci on
por fusi on tenemos a = b = 2, en cual caso a
k
= n (dejamos el an alisis mismo de
ordenaci on por fusi on como ejercicio).
En algunos casos la soluci on es m as simple: si d es multiplicativa, o sea d(xy) =
d(x)d(y), aplica que d(b
kj
) = (d(b))
kj
que nos permite reformular la parte het-
erog enica:
k1

j=0
a
j
d(b)
kj
= d(b)
k
k1

j=0
_
a
d(b)
_
j
= d(b)
k
_
a
d(b)
_
k
1
a
d(b)
1
=
a
k
d(b)
k
a
d(b)
1
. (7.14)
Entonces, cuando d es multiplicativo, tenemos
T(n) =
_
_
_
O
_
n
log
b
a
_
, si a > d(b)
O
_
n
log
b
d(b)
_
, si a < d(b)
O
_
n
log
b
d(b)
log
b
n
_
, si a = d(b).
(7.15)
122 CAP

ITULO 7. AN

ALISIS DE ALGORITMOS
En especial, si a < d(b) y d(n) = n

, tenemos T(n) O(n

). Si en vez a = d(b) y
d(n) = n

, tenemos T(n) O(n

log
b
n). Esto se demuestra por el siguiente an alisis.
Sea a > d(b). La parte heterog enica es entonces
a
k
d(b)
k
a
d(b)
1
O
_
a
k
_
, (7.16)
por lo cual T(n) O
_
a
k
_
= O
_
n
log
b
a
_
, porque a
k
= a
log
b
n
= n
log
b
a
. En este caso la
parte homog enica y la parte heterog enica son practicamente iguales.
En el caso que a < d(b), la parte heterog enica es O
_
d(b)
k
_
y T(n) O
_
d(b)
k
_
=
O
_
n
log
b
d(b)
_
, porque d(b)
k
= d(b)
log
b
n
= n
log
b
d(b)
.
Si a = d(b), tenemos para la parte heterog enica que
k1

j=0
a
j
d(b)
kj
= d(b)
k
k1

j=0
_
a
d(b)
_
j
= d(b)
k
k1

j=0
1
j
= d(b)
k
k, (7.17)
por lo cual T(n) O
_
d(b)
k
k
_
= O
_
n
log
b
d(b)
log
b
n
_
.
Por ejemplo, si T(1) = 1 y T(n) = 4T
_
n
2
_
+ n, tenemos T(n) O(n
2
). Si tenemos
T(1) = 1 con T(n) = 4T
_
n
2
_
+ n
2
, llegamos a T(n) O(n
2
log n). Mientras con
T(1) = 1 y T(n) = 4T
_
n
2
_
+ n
3
, resulta que T(n) O(n
3
).
En todos estos ejemplos a = 4 y b = 2, por lo cual la parte homog enica es para todos
a
log
b
n
= n
log
b
a
= n
2
.
Incluso se puede estimar la parte heterog enica en algunos casos donde d no es multiplica-
tiva. Por ejemplo, en
_
T(1) = 1
T(n) = 3T
_
n
2
_
+ 2n
1,5
(7.18)
d(n) = 2n
1,5
no es multiplicativa, mientras n
1,5
s ola lo es. Usamos la notaci on U(n) =
T(n)
2
para todo n. Entonces
U(1) =
1
2
U(n) =
T(n)
2
=
3T
_
n
2
_
2
+ n
1,5
= 3U
_
n
2
_
+ n
1,5
.
(7.19)
Si tuvieramos que U(1) = 1, tendramos una parte homog enica 3
log n
= n
log 3
. En el caso
U(1) =
1
2
tendramos
1
2
n
log 3
.
En la parte heterog enica, el valor de U(1) no tiene ning un efecto, por lo cual en el caso
a = 3 y b = 2 con d(b) = b
1,5
2, 82 aplica que d(b) < a. Entonces la parte heterog enica
es O
_
n
log 3
_
.
En consecuencia, tenemos que U(n) O
_
n
log 3
_
, y porque T(n) = 2 U(n), tambi en
T(n) O
_
n
log 3
_
.
7.2. COMPLEJIDAD DE ALGORITMOS RECURSIVOS 123
Como otro ejemplo, analizamos la ecuaci on
T(1) = 1
T(n) = 2T
_
n
2
_
+ nlog n
(7.20)
donde la parte homog enica es a
k
= 2
log n
= n
log 2
= n. d(n) = nlog n no es multiplicati-
va, por lo cual habr a que estimar directamente la parte heterog enica:
k1

j=0
a
j
d(b
kj
) =
k1

i=0
2
j
2
kj
log 2
kj
= 2
k
k1

j=0
k j
= 2
k
(k + (k 1) + (k 2) + . . . + 1)
= 2
k
k(k+1)
2
= 2
k1
k(k + 1).
(7.21)
Vamos a asignar k = log n:
2
k1
k(k + 1) = 2
log n1
log n(log n + 1)
= 2
log(
n
2
)
(log
2
n + log n)
=
n
2
(log
2
n + log n),
(7.22)
o sea, la parte heterog enica es O
_
nlog
2
n
_
.
7.2.2. M etodo de expansi on
El m etodo de expansi on facilita la computaci on involucrada en abrir una ecuaci on recur-
siva. Como un ejemplo, veremos la ecuacion siguiente:
_
R(1) = 1
R(n) = 2 R(n 1) + n, donde n 2.
(7.23)
Por descomponer la ecuaci on obtenemos
R(n) = 2R(n 1) + n
= 2(2R(n 2) + n 1) + n
= 4R(n 2) + 3 n 2
= 4(2R(n 3) + n 2) + 3 n 2
= 8R(n 3) + 7 n 10
= . . .
(7.24)
La expansi on se realiza de la manera siguiente:
R(n) = 2R(n 1) + n [ 1
R(n 1) = 2R(n 2) + (n 1) [ 2
R(n 2) = 2R(n 3) + (n 2) [ 4
.
.
.
R(n i) = 2R(n i 1) + (n i) [ 2
i
.
.
.
R(n (n 2)) = 2R(1) + 2 [ 2
n2
(7.25)
124 CAP

ITULO 7. AN

ALISIS DE ALGORITMOS
Ahora multiplicamos por los coecientes del lado izquiera y sumamos para obtener el
resultado:
R(n) = 2
n1
R(1) + n + 2(n 1) + 4(n 2) + . . . + 2
n2
2
= n + 2(n 1) + 4(n 2) + . . . + 2
n2
2 + 2
n1
=
n1

i=0
2
i
(n i)
= 2
0
+ . . . + 2
0
. .
n veces
+2
1
+ . . . + 2
1
. .
n1 veces
+2
2
+ . . . + 2
2
. .
n2 veces
+. . . + 2
n1
..
1 vez
=
n1

i=0
i

j=0
2
j
=
n1

i=0
(2
i+1
1) =
n1

i=0
2
i+1

n1

i=0
1
= 2
n+1
2 n.
(7.26)
7.2.3. Transformaciones
Para simplicar la soluci on, podemos hacer una asignaci on cambiando el dominio o el
rango del mapeo T. Por ejemplo, con
T(0) = 1
T(1) = 2
. . .
T(n) = T(n 1)T(n 2), si n 2
(7.27)
podemos asignar U(n) = log T(n). Esto nos deja con
U(0) = 0
U(1) = 1
. . .
U(n) = U(n 1) + U(n 2), si n 2.
(7.28)
Hemos llegado a tener U(n) = F
n
, o sea, el n esimo n umero de Fibonacci . Entonces
T(n) = 2
Fn
.
Otro ejemplo es
_
T(1) = 1
T(n) = 3T(n/2) + n, si n = 2
k
> 1.
(7.29)
donde con la asignaci on U(n) = T(2
n
) llegamos a
_
_
_
U(0) = 1
U(n) = T(2
n
) = 3T(2
n1
) + 2
n
= 3U(n 1) + 2
n
, si n 1.
(7.30)
7.3. AN

ALISIS DE COMPLEJIDAD PROMEDIO 125
Abriendo esta denici on, obtenemos
U(n) = 3U(n 1) + 2
n
[ 1
U(n 1) = 3U(n 2) + 2
n1
[ 3
U(n 2) = 3U(n 3) + 2
n2
[ 9
.
.
.
U(1) = 3U(0) + 2 [ 3
n1
(7.31)
y entonces
U(n) = 3
n
+
n1

i=0
3
i
2
ni
= 3
n
+ 2
n
n1

i=0
_
3
2
_
i
= 3
n
+ 2
n
_
3
2
_
n
1
1
2
= 3
n
+ 2
n+1

_
3
2
_
n
2
n+1
= 3
n
+ 2 3
n
2
n+1
= 3
n+1
2
n+1
= 3 2
nlog 3
2
n
2.
(7.32)
De la condici on U(n) = T(2
n
) derivamos que T(n) U(log n), o sea,
T(n) = U(log n) = 3 2
log nlog 3
2
log n
2 = 3n
log 3
2. (7.33)
7.3. An alisis de complejidad promedio
En muchos casos, la cota superior de la an alisis asint otica del caso peor da una idea bas-
tante pesimista de la situaci on puede ser que son muy escasas las instancias de peor
caso, mientras una gran mayora de las instancias tiene tiempo de ejecuci on mucho mejor.
Si uno conoce la distribuci on de probabilidad de las instancias (de un caso pr actico), se
puede analizar la complejidad promedio de un algoritmo. En los casos donde no hay in-
formaci on a priori de las probabilidades, se asume que cada instancia es equiprobable (es
decir, la instancia est a seleccionada del espacio de todas las instancias posibles uniforme-
mente al azar).
Tpicamente el an alisis de complejidad promedio es m as desaante que el an alisis
asint otica del por caso. En la secci on siguiente ver emos el an alisis amortizada que re-
sulta m as f acil para muchos casos de procesamiento de estructuras de datos.
7.3.1. Ordenaci on r apida
En esta secci on, como un ejemplo de an alisis de complejidad promedio, analizamos el
algoritmo de ordenaci on r apida (ingl es: quicksort; presentado en la secci on 6.1.2). Su
peor caso es O(n
2
) para n elementos, pero resulta que en la pr actica suele ser el m etodo
m as r apido. El an alisis de complejidad promedia da a ordenaci on r apida la complejidad
O(nlog n), que implica que el caso peor no es muy com un.
Cada vez que dividimos una cola o un arreglo, usamos tiempo (() n) y un espacio
auxiliar de tama no O(1). Para unir dos colas (de tama nos n
1
y n
2
) en uno, se necesita por
126 CAP

ITULO 7. AN

ALISIS DE ALGORITMOS
m aximo el tiempo O(n
1
+ n
2
); en la implementaci on que usa un arreglo, unir las partes
explicitamente no ser a necesario.
Suponemos que la subrutina de elecci on del pivote toma O(n) tiempo para n elemen-
tos, el tiempo total de ejecuci on del algoritmo de ordenaci on r apida est a capturado en la
ecuaci on recursiva siguiente:
T(n) =
_
O(1) , si n 1,
T(p) + T(n p) + (n) , si n > 1,
(7.34)
donde p es el tama no de la una de las dos partes de la divisi on (y n p el tama no de
la otra parte). El peor caso corresponde a la situaci on donde p = 1 en cada divisi on del
algoritmo.
T
peor
(n) =
_
(1) , si n 1,
T
peor
(n 1) + (n) , en otro caso,
(7.35)
La soluci on de la ecuaci on del peor caso es T
peor
(n) = (n
2
). Para analizar el caso
promedio, hacemos las siguientes suposiciones:
1. Los n elementos son 1, 2, . . . , n (o en t erminos m as generales, todos los elemen-
tos son distintos).
2. La permutaci on en la cual aparecen los elementos est a elegida entre los n! posibles
permutaciones uniformemente al azar.
3. El ultimo elemento est a siempre elegido como el pivote; esto de logra en en tiempo
O(1) O(n).
4. Las operaciones de dividir y unir las partes usan al m aximo tiempo cn, donde c es
un constante.
5. La complejidad del caso donde n 1 usa d pasos de computaci on.
La complejidad del algoritmo ahora depende de la elecci on del pivote, que en turno de-
termina exactamente los tama nos de las dos partes:
T(n)
_

_
T(0) + T(n) + cn, si el pivote es 1
T(1) + T(n 1) + cn, si el pivote es 2
T(2) + T(n 2) + cn, si el pivote es 3
.
.
.
.
.
.
T(n 2) + T(2) + cn, si el pivote es n 1
T(n 1) + T(1) + cn, si el pivote es n.
(7.36)
Considerando el conjunto de las n! permutaciones de los elementos, cada caso ocurre
(n 1)! veces (se ja el ultimo elemento y considera las permutaciones de los otros
elementos). Entonces, la complejidad del caso promedio se puede caracterizar con la
ecuaci on diferencial:
7.3. AN

ALISIS DE COMPLEJIDAD PROMEDIO 127
T(n) =
_

_
d, n = 1,
(n1)!
n!
_
T(0) + T(n) + cn +
n1

i=1
(T(i) + T(n i) + cn)
_
, n > 1,
=
1
n
_
T(0 + T(n) + cn +
n1

i=1
_
T(i) + T(n i) + cn
_
_
=
1
n
_
T(0 + T(n + cn +
n1

i=1
_
T(i) + T(n i) + cn
_
_
=
1
n
_
T(0 + T(n) + cn + (n 1)cn + 2
n1

i=1
T(i)
_

d
n
+ Cn + cn +
2
n
n1

i=1
T(i)
(d + C + c)n +
2
n
n1

i=1
T(i).
(7.37)
La sumaci on est a simplifacada por la observaci on que tiene adem as de cn dos ocurrencias
de cada T(i). El pen ultimo paso con viene del hecho que ya sabemos del an alisis de
peor caso que T(n) Cn
2
para alg un constante C. Adem as sabemos que T(1) = d. Para
simplicar, reemplazamos el constante d + C + c = D para obtener la ecuaci on
T(n) Dn +
2
n
n1

i=1
T(i) (7.38)
y intentamos solucionarla con la adivinanza T(n) nlog n, donde es un constante
sucientemente grande. La demostrac on es por inducci on: para n = 2, aplica la ecuaci on
siempre y cuando D +
d
2
. Para el caso n > 2, asumimos que para todo i < n aplica
128 CAP

ITULO 7. AN

ALISIS DE ALGORITMOS
que T(i) i log i. Para el caso de valores pares de n, tenemos
T(n) Dn +
2
n
n1

i=1
i log i = Dn +
2
n
_
_
n
2

i=1
(i log i) +
n1

i=
n
2
+1
(i log i)
_
_
= Dn +
2
n
_
_
n
2

i=1
(i log i) +
n
2
1

i=1
(
n
2
+ i) log
_
n
2
+ i
_
_
_
= Dn +
2
n
+
_
_
n
2

i=1
i(log n 1) +
n
2
1

i=1
(
n
2
+ i) log n
_
_
= Dn +
2
n
_
_
(log n 1)
n
2

i=1
i + log n
_
_
n
2
_
n
2
1
_
+
n
2
1

i=1
i
_
_
_
_
Dn +
2
n
_
(log n 1)
_
n
2

1 +
n
2
2
_
+ log n
_
n
2
4

n
2
+ (
n
2
1)
1 +
n
2
1
2
__
= Dn +
2
n
_
log n
_
n
2
8
+
n
4
_

n
2
8

n
4
+ log n
_
n
2
4

n
2
+
n
2
8

n
4
__
= Dn +
_
log n(n 1)
n
4

1
2
_
Dn + nlog n
n
4
nlog n, si 4D,
(7.39)
porque para todo i aplican
log i log
n
2
= log n 1
log
_
n
2
+ i
_
log(n 1) log n
(7.40)
con logaritmos de base dos y por aplicar la suma de sucesi on aritm etica. Para valores
impares de n, el an alisis es muy parecido. Estas calculaciones verican la adivinanza
T(n) = nlog n.
7.4. An alisis de complejidad amortizada
La idea en el an alisis de complejidad amortizada es denir una sucesi on de n opera-
ciones y estimar una cota superior para su tiempo de ejecuci on. Esta cota superior est a di-
vidido por el n umero de operaciones n para obtener la complejidad amortizada (ingl es:
amortized complexity) de una operaci on. No es necesario que las operaciones de la suce-
si on sean iguales ni del mismo tipo. La motivaci on de complejidad amortizada es poder
pron osticar con mayor exactitud el tiempo de ejecuci on del uso del algoritmo en el
mundo real: si uno tpicamente quiere realizar ciertos tipos de cosas, cu anto tiempo
toma?
Para formalizar el concepto, sea D
0
el estado inicial de una estructura de datos. En cada
momento, se aplica una operaci on O en la estructura. Despu es de i operaciones, el estado
de la estructura ser a D
i
. Denotamos la sucesi on de operaciones como O
1
, . . . , O
n
. El
7.4. AN

ALISIS DE COMPLEJIDAD AMORTIZADA 129
costo computacional de operaci on O
i
puede ser muy distinto del costo de otra operaci on
O
j
. La idea es sumar los costos y pensar en t erminos de costo promedio. Para que tenga
sentido ese tipo de an alisis, la sucesi on de operaciones estudiada tiene que ser la peor
posible si no lo es, no hay guaranta ninguna que se pueda generalizar el an alisis para
sucesiones m as largas.
7.4.1. Arreglos din amicos
Como un ejemplo, evaluamos la complejidad de operar un arreglo din amico: se duplica el
tama no siempre cuando hace falta a nadir un elemento (y se corta el tama no a mitad cuan-
do se ha liberado tres cuartas partes del espacio). Evaluamos la sucesi on de 2
k
inserciones
en tal arreglo. Al realizar la primera inserci on, se crea un arreglo de un elemento. Con la
segunda, se duplica el tama no para lograr a guardar el segundo elemento. En pr actica,
esto signica que se reserva un arreglo nuevo del tama no doble en otra parte y mueve
cada clave que ya estaba guadrara en el arreglo al espacio nuevo. Con la tercera inserci on,
se crea espacio para dos elementos m as, etc etera.
Entonces, con la sucesi on de operaciones denida, vamos a tener que multiplicar el
tama no del arreglo k veces y las otras 2
k
k inserciones van a ser baratas. La com-
plejidad de una inserci on barata es O(1). Cuando el tama no del arreglo es n, el costo
de duplicar su tama no es O(n). Entonces, la complejidad de una inserci on cara es
O(1) + O(n) O(n) y para la inserci on difcil n umero i, el tama no va a ser 2
i
. En-
tonces la suma de la complejidad de las k inserciones difciles es
O
_
k

i=1
2
i
_
= O
_
2
k+1
_
. (7.41)
La complejidad total de los 2
k
k operaciones f aciles es O
_
2
k
k
_
O
_
2
k
_
porque
cada una es de tiempo constante. Entonces, la complejidad de la sucesi on completa de 2
k
inserciones es O
_
2
k+1
+ 2
k
_
O
_
3 2
k
_
. Dividimos este por el n umero de operaciones
2
k
para obtener la complejidad amortizada por operaci on:
O
_
3 2
k
2
k
_
= O(3) O(1) . (7.42)
Entonces, si hacemos n operaciones y cada uno tiene complejidad amortizada constante,
cada sucesi on de puras inserciones tiene complejidad amortizada lineal, O(n).
Para poder incluir las eliminaciones en el an alisis, hay que cambiar la t ecnica de an ali-
sis. Utilizamos el m etodo de potenciales, tambi en conocido como el m etodo de cuentas
bancarias), donde se divide el costo de operaciones caras entre operaciones m as baratas.
Supone que al comienzo nos han asignado una cierta cantidad M de pesos. Cada op-
eraci on b asica de tiempo constante O(1) cuesta un peso. Vamos a realizar n operaciones.
El costo planeado de una operaci on O
i
es p
i
=
M
n
pesos. Si una operaci on no necesi-
ta todos sus
M
n
pesos asignados, los ahorramos en una cuenta bancaria com un. Si una
130 CAP

ITULO 7. AN

ALISIS DE ALGORITMOS
operaci on necesita m as que
M
n
pesos, la operaci on puede retirar fondos adicionales de
la cuenta bancaria. Si en la cuenta no hay balance, la operaci on los toma prestados del
banco. Todo el pr estamo habr a que pagar con lo que ahorran operaciones que siguen. De-
notamos el balance de la cuenta despu es de la operaci on n umero i, o sea, en el estado D
i
,
con
i
este balance tambi en se llama la potencial de la estructura. La meta es poder
mostrar que la estructura siempre contiene la potencial suciente para poder pagar la
operaciones que vienen.
Sea r
i
el costo real de la operaci on O
i
. El costo amortizado de la operaci on O
i
es
a
i
= t
i
+
i

i1
. .
pesos ahorrados
(7.43)
El costo amortizado total de las n operaciones es
A =
n

i=1
a
i
=
n

i=1
(r
i
+
i

i1
)
=
n

i=1
r
i
+
n

i=1
(
i

i1
)
=
n

i=1
r
i
+
n

0
,
(7.44)
por lo cual el costo real total es
R =
n

i=1
r
1
=
0

n
+
n

i=1
a
i
. (7.45)
Para poder realizar el an alisis, hay que asignar los costos planeados p
i
, despu es de que se
intenta denir una funci on de balance
i
: N R tal que el costo amortizado de cada
operaci on es menor o igual al costo planeado:
a
i
= r
i
+
i

i1
p
i
. (7.46)
As tambi en aplicara
n

i=1
r
i

0

n
+
n

i=1
p
i
. (7.47)
La transacci on con el banco (ahorro o pr estamo) de la operaci on O
i
es de p
i
r
i
pesos.
Tpicamente queremos que
i
0 para cada estado D
i
. Si esto aplica, tenemos que
n

i=1
r
i

0
+
n

i=1
p
i
. (7.48)
Com unmente adem as tenemos que
0
= 0, en cual caso la suma de los costos planeados
es una cota superior a la suma de los costos reales. Entonces, si uno elige costos planea-
dos demasiado grandes, la cota ser a cruda y oja y la estimaci on de la complejidad no
7.4. AN

ALISIS DE COMPLEJIDAD AMORTIZADA 131
es exacta, mientras haber elegido un valor demasiado peque no de los costos planeados,
resulta imposible encontrar una funci on de balance apropiada.
Regresamos por ahora al caso de puras inserciones a un arreglo din amico. Hay que ase-
gurar que el precio de una inserci on cara se pueda pagar con lo que han ahorrado las
inserciones baratas anteriores. Suponemos que el tiempo de una inserci on f acil sea t
1
y
el tiempo de mover una clave al espacio nuevo (de tama no doble) sea t
2
. Entonces, si
antes de la inserci on cara, la estructura contiene n claves, el precio real total de la inser-
ci on cara es t
1
+ nt
2
. Vamos a denir una funci on de balance tal que su valor inicial es
cero y tambi en su valor despu es de hacer duplicado el tama no es cero. En cualquier otro
momento, ser a
i
> 0. La meta es llegar al mismo resultado del m etodo anterior, o sea

n
i=1
r
i
= O(n) para tener complejidad amortizada O(1) por operaci on.
Vamos a intentar el an alisis con p
i
= t
1
+ 2t
2
: habr a que poder pagar el costo de a nadir
la clave nueva (t
1
) y preparar para mover la clave misma despu es a un arreglo nuevo de
tama no doble (t
2
) adem as de preparar mover todas las claves anteriores (uno por elemen-
to, el otro t
2
). Queremos cumplir con ecuaci on 7.46: para todo i, necesitamos que
a
i
= r
i
+
i

i1
p
i
= t
1
+ 2t
2
. (7.49)
Denotamos por c
i
el n umero de claves guardados en el arreglo en el estado D
i
. Claramente
c
i
= c
i1
+ 1. Intentamos con la funci on

i
= 2t
2
c
i
t
2
e
i
, (7.50)
donde e
i
es el espacio total del arreglo despu es de la operaci on O
i
. Para inserciones
f aciles, aplica e
i
= e
i1
, mientras con las difciles aplica e
i
= 2e
i1
= 2c
i1
.
El caso de una inserci on f acil ser a entonces
a
i
= t
1
+ (2t
2
(c
i1
+ 1) t
2
e
i1
) (2t
2
c
i1
t
2
e
i1
)
= t
1
+ 2t
2
= p
i
.
(7.51)
Entonces el costo amortizado es igual al costo planeado. Para las inserciones difciles,
tenemos
a
i
= (t
1
+ t
2
c
i1
) + (2t
2
(c
i1
+ 1) t
2
2c
i1
)
(2t
2
c
i1
t
2
c
i1
)
= t
1
+ 2t
2
= p
i
,
(7.52)
que tambi en cumple con lo que queramos: tenemos que a
i
= t
1
+ 2t
2
para todo i. En-
tonces cada operaci on tiene costo amortizado O(1) y el costo real de una serie de n
operaciones es O(n).
Ahora podemos considerar eliminaciones: si un arreglo de tama no e
i
contiene solamente
c
i

1
4
e
i
claves, su tama no ser a cortado a la mitad: e
i+1
=
1
2
e
i
. El costo de la reduc-
ci on del tama no es t
2
c
i
, porque habr a que mover cada clave. Marcamos el precio de una
eliminaci on simple (que no causa un ajuste de tama no) con t
3
.
Vamos a cubrir el gasto del reducci on por cobrar por eliminaciones que ocurren cuando
el arreglo cuenta con menos que
e
i
2
claves guardadas en el estado D
i
. Entonces, por cada
132 CAP

ITULO 7. AN

ALISIS DE ALGORITMOS
eliminaci on de ese tipo, ahorramos t
2
pesos. Al momento de reducir el tama no, hemos
ahorrado (
e
i
4
1) pesos (nota que e
i
solamente cambia cuando duplicamos o reducimos,
no en operaciones baratas). Cuando guardamos claves a las posiciones de la ultima cuarta
parte de la estructura, usamos los pesos ahorrados y no ahorramos n ada m as. Elegimos
ahora una funci on de balance denido por partes:

i
=
_
2t
2
c
i
t
2
e
i
, si c
i

e
i
2
,
e
1
2
t
2
t
2
c
i
, si c
i
<
e
i
2
.
(7.53)
Analizamos primero el caso de inserciones: Para el caso c
i
>
e
i
2
, no cambia nada a la
situaci on anterior: a
i
= t
1
+ 2t
2
. Para el otro caso c
i
<
e
i
2
, tenemos
a
i
= r
i
+
i

i1
= t
1
+
_
t
2
e
i
2
t
2
c
i
_

_
t
2
e
i1
2
t
2
c
i1
_
= t
1
t
2
,
(7.54)
porque para estas inserciones, siempre tenemos e
i
= e
i1
(nunca causan que se duplique
el espacio). Para las inserciones especiales que ocurren justo cuando cambia la deni-
ci on de la funci on de balance (o sea, el caso donde c
i
=
e
i
2
), obtenemos
a
i
= r
i
+
i

i1
= t
1
+ 2t
2
c
i
t
2
e
i

t
2
e
i1
2
+ t
2
c
i1
= t
1
+ 2t
2
c
i
2t
2
c
i
t
2
c
i
+ t
2
(c
i
1)
= t
1
t
2
.
(7.55)
Para las eliminaciones, empezamos con el caso de eliminaciones f aciles sin ahorro, o sea
c
i

e
i
2
:
a
i
= r
i
+
i

i1
= t
3
+ (2t
2
c
i
t
2
e
i
) (2t
2
c
i1
t
2
e
i1
)
= t
3
+ 2t
2
(c
i1
1) 2t
2
c
i1
= t
3
2t
2
.
(7.56)
Para el caso de c
i
=
e
i
2
1 al cambio de denici on de obtenemos
a
i
= r
i
+
i

i1
= t
3
+
_
t
2
e
i
2
t
2
e
i
_
(2t
2
e
i1
t
2
e
i
)
= t
3
+
3t
2
e
i
2
t
2
(e
i1
1) 2t
2
c
i1
= t
3
+ 3t
2
c
i1
t
2
e
i1
+ t
2
2t
2
c
i1
= t
3
+ t
2
.
(7.57)
Para las eliminaciones con ahorro, o sea cuando c
i
<
e
1
2
1 cuando c
i1

e
i
4
+1, tenemos
a
i
= r
i
+
i

i1
= t
3
+
_
t
2
e
i
1
2
t
2
c
i
_

_
t
2
e
i1
2
t
2
c
i1
_
= t
3
t
2
(c
i1
1) + t
2
c
i1
= t
3
+ t
2
.
(7.58)
7.4. AN

ALISIS DE COMPLEJIDAD AMORTIZADA 133
Para el ultimo caso, el eliminaci on, c
i1
=
e
i1
4
, obtenemos
a
i
= r
i
+
i

i1
= t
3
+
_
t
2
c
i

t
2
e
i
2
_

_
t
2
e
i1
2
t
2
c
i1
_
= t
3
+
t
2
e
i1
4

t
2
e
i1
2
+ t
2
c
i1
= t
3

t
2
e
i1
4
+
t
2
e
i1
4
= t
3
.
(7.59)
Entonces en todos los casos llegamos a tener una complejidad amortizada constante O(1)
por operaci on, por lo cual la complejidad de cualquier combinaci on de n inserciones y/o
eliminaciones, la complejidad amortizada total es O(n).
La regla general de poder lograr la meta de siempre poder pagar las operaciones que
quedan de hacer es asegurar que se mantenga un invariante de costo (ingl es: credit in-
variant) durante toda la sucesi on. El invariante del ejemplo de arreglos din amicos consiste
de las siguientes reglas:
1. Si c
i
=
e
i
2
, el balance
i
es cero.
2. Si (
e
i
4
c
i
<
e
i
2
), el balance
i
es igual a la cantidad de celdas libres en las
posiciones de la segunda cuarta parte del arreglo.
3. Si c
i
>
e
i
2
, el balance
i
es igual a dos veces la cantidad de claves guardados en las
posiciones de la segunda mitad del arreglo.
7.4.2.

Arboles biselados
El siguiente ejemplo del an alisis amortizado son los arboles biselados. Denotamos la can-
tidad de claves guardadas en el arbol por n y el n umero de operaciones realizados al arbol
con m. Queremos mostrar que la complejidad amortizada de cualquier sucesi on de m op-
eraciones es O(mlog n). Marcamos con R(v) el ramo la raz de cual es el v ertice v y con
[R(v)[ el n umero de v ertices en el ramo (incluyendo a v). Denimos
(v) = log [R(v)[. (7.60)
Sea r la raz del arbol completo. El costo planeado de las operaciones ser a
p
i
= O(log n) = O(log [R(r)[) = O((r)) . (7.61)
Cada operaci on de un arbol adaptivo (ver secci on 6.3.5) constituye de un n umero con-
stante de operaciones splay y un n umero constante de operaciones simples, basta con
establecer que la complejidad amortizada de una operaci on splay es O((r)).
Pensamos en este caso que cada v ertice del arbol tiene una cuenta propia, pero el balance
est a en uso de todos. Mantenemos el siguiente invariante de costo: cada v ertice v siempre
tiene por lo menos (v) pesos en su propia cuenta.
134 CAP

ITULO 7. AN

ALISIS DE ALGORITMOS
Teorema 7.32. Cada operaci on splay(v, A) requiere al m aximo (3 ((A) (v)) + 1)
unidades de costo para su aplicaci on y la actualizaci on del invariante de costo.
La demostraci on del teorema es la siguiente: la operaci on splay consiste de una sucesi on
de rotaciones (ver gura 6.8).
En el caso que el v ertice u que contiene la llave de inter es tenga un padre t, pero no un
abuelo, hace falta una rotaci on simple derecha. Aplica que
despu es
(u) =
antes
(t) y que

despu es
(t)
despu es
(u). Para mantener el invariante, necesitamos pesos:

despu es
(u) +
despu es
(t) (
antes
(u) +
antes
t)) =
despu es
(t)
antes
(u))

despu es
(u)
antes
(u).
(7.62)
El peso que sobra se gasta en las operaciones de tiempo constante y cantidad constante
por operaci on splay (comparaciones, actualizaciones de punteros, etc etera).
En el segundo caso, u tiene adem as del padre t un abuelo t

. Hay que hacer dos rota-


ciones derechas primero para mover t al lugar del abuelo, empujando el abuelo abajo
a la derecha y despu es para mover u mismo al lugar nuevo del padre. El costo total de
mantener el invariante es
T =
despu es
(u) +
despu es
(t) +
despu es
(t

)
antes
(u)
antes
(t)
antes
(t

). (7.63)
Por la estructura de la rotaci on aplica que

despu es
(u) =
antes
(t

), (7.64)
por lo cual
T =
despu es
(t) +
despu es
(t

)
antes
(u)
antes
(t)
= (
despu es
(t)
antes
(u)) + (
despu es
(t

)
antes
(t))
(
despu es
(u)
antes
(u)) + (
despu es
(u)
antes
(u))
= 2 (
despu es
(u)
antes
(u)) .
(7.65)
Si logramos tener
despu es
(u) >
antes
(u), nos queda por lo menos un peso para ejecutar la
operaci on. Hay que analizar el caso que
despu es
(x) =
antex
(x).
Necesitamos asegurarnos que T 0, o sea, no nos cuesta nada mantener el invariante
v alido. Mostramos que

despu es
(u) =
antes
(u) (7.66)
es una suposici on que llega a una contradicci on con

despu es
(u) +
despu es
(t) +
despu es
(t

)
antes
(u) +
antes
(t) +
antes
(t

). (7.67)
Las ecuaciones 7.66 y 7.64 dan que

antes
(t

) =
despu es
(u) =
antes
(u) (7.68)
lo que implica

antes
(u) =
antes
(t) =
antes
(t

) (7.69)
7.4. AN

ALISIS DE COMPLEJIDAD AMORTIZADA 135
porque t est a en el camino desde u a t

antes de la operaci on, por denici on de . Entonces

despu es
(u) +
despu es
(t) +
despu es
(t

) 3
antes
(t

) = 3
despu es
(u) (7.70)
y adem as

despu es
(t) +
despu es
(t

) 2
despu es
(u). (7.71)
Por la estructura de la rotaci on, tenemos

despu es
(t)
despu es
(u) y
despu es
(t

)
despu es
(u), (7.72)
que en combinaci on con ecuaci on 7.71 da

despu es
(u) =
despu es
(t) =
despu es
(t

). (7.73)
Ahora, por ecuaci on 7.64 llegamos a

antes
(u) =
antes
(t) =
antes
(t

) =
despu es
(u) =
despu es
(t) =
despu es
(u). (7.74)
Sea q
1
el tama no de R(u) antes de la operaci on y q
2
el tama no de R(t

) despu es de la
operaci on. Por denici on de tenemos

antes
(u) = log q
1

despu es
(t

) = log q
2

despu es
(u) = log(q
1
+ q
2
+ 1)
(7.75)
que juntos con la condici on combinada de

antes
(u) =
despu es
(u) =
despu es
(t

) (7.76)
llegamos a tener
log q
1
= log(q
1
+ q
2
+ 1) = log q
1
. (7.77)
Si q
1
q
2
, esto signica que
log(q
1
+ q
2
+ 1) log 2q
1
= log q
1
+ 1 > log q
1
, (7.78)
que es una contradicci on con
antes
(u) =
despu es
(u).
Habr a que analizar el caso q
1
> q
2
igualmente tambi en llega a una contradicci on.
Entonces,
despu es
(u) =
antes
(u), por lo cual T < 0.
El tercer caso de splay es una rotaci on doble izquierda-derecha y omitimos sus detalles.
En resumen: al insertar un elemento el el arbol, hay que asignarle O(log n) pesos. Al
unir dos arboles, se asigna a la raz nueva O(log n) pesos. Cada operaci on puede gas-
tar O(log n) pesos en ejecutar las operaciones splay y el mantenimiento del invari-
ante de costo y las operaciones adicionales que se logra en tiempo O(1). Entonces, cada
operaci on tiene costo amortizado O(log n), por lo cual la complejidad amortizada de
cualquier sucesi on de m operaciones en un arbol biselado es O(mlog n).
136 CAP

ITULO 7. AN

ALISIS DE ALGORITMOS
7.4.3. Montculos de Fibonacci
Para los montculos de Fibonacci (de secci on 6.4.2 utilizamos el siguiente invariante de
costo: cada raz tiene un peso y cada v ertice marcado tiene dos pesos. Los costos planead-
os de inserci on, decrementaci on del valor de clase y unir dos montculos son un peso por
operaci on, mientras la eliminaci on del mnimo tiene costo planeado de O(log n) pesos.
Demostramos que con estos costos uno puede realizar las operaciones mientras mante-
niendo el invariante de costo propuesto.
Al insertar una clave, lo unico que se hace es crear una raz nueva con la clave nueva y un
peso. Esto toma tiempo constante O(1). Para disminuir el valor de una clave existente,
movemos el v ertice con la clave a la lista de races en tiempo O(1) junto con un peso.
Si el padre est a marcado, su movimiento a la lista de razes se paga por el peso extra
que tiene el v ertice marcado tambi en se le quita la marca por la operaci on, por lo cual
no sufre el invariante. El otro peso el v ertice padre lleva consigo. Si hay que marcar el
abuelo, hay que a nadirle dos pesos al abuelo. El tiempo total es constante, O(1).
Para unir dos montculos, solamente unimos las listas de races. Por la contracci on de
las listas que se realiza al eliminar el mnimo, el costo de esta operaci on es O(1). Esta
operaci on no causa ning un cambio en el invariante. Hay que tomar en cuenta que estamos
pensando que las listas de races est an implementadas como listas enlazadas, por lo cual
no hay que copiar nada, solamente actualizar unos punteros.
Para eliminar el mnimo, la operaci on en s toma tiempo O(1). Adem as depositamos
un peso en cada hijo directo del v ertice eliminado. Para recorrer y contraer la lista de
races, gastamos los pesos de las races mismas. Despu es depositamos de nuevo un peso
en cada raz. Son O(log n) races, por lo cual la complejidad amortizada de la operaci on
es O(log n).
Hay que recordar que la manera de eliminar un elemento cualquiera es por primero
disminuir su valor a y despu es quitando el mnimo. Esto toma tiempo O(1) +
O(log n) O(log n). Con estos valores, completamos en cuadro 7.1 los costos de op-
eraciones en algunas estructuras de datos.
7.4. AN

ALISIS DE COMPLEJIDAD AMORTIZADA 137
Cuadro 7.1: Complejidad (asint otica o amortizada) de algunas operaciones b asicas en
diferentes estructuras de datos: listas (L), arboles balanceados (A), montculos (M),
montculos binomiales (B) y montculos de Fibonacci (F). Las complejidades amortizadas
llevan un asterisco (

).
Operaci on L A M B F
Inserci on (n) O(log n) O(log n) O(log n) O(1)
Ubicar mnimo O(1) O(1) O(1) O(log n) O(1)
Eliminar mnimo O(1) O(log n) O(log n) O(log n) O(log n)

Eliminaci on O(1) O(log n) O(log n) O(log n) O(log n)

Disminuir clave (n) O(log n) O(log n) O(log n) O(1)

Unir dos (n) (n) (n) O(log n) O(1)
138 CAP

ITULO 7. AN

ALISIS DE ALGORITMOS
Captulo 8
T ecnicas de dise no de algoritmos
La meta al dise nar un algoritmo es encontrar una manera eciente a llegar a la soluci on
deseada. En este captulo presentamos algunas t ecnicas comunes del dise no de algoritmos
que aplican a muchos tipos de problemas. El dise no empieza por buscar un punto de vista
adecuado al problema: muchos problemas tienen transformaciones (como las reducciones
del an alisis de clases complejidad en la secci on 5.2) que permiten pensar en el problema
en t erminos de otro problema, mientras en optimizaci on, los problemas tienen problemas
duales que tienen la misma soluci on pero pueden resultar m as f aciles de resolver.
Muchos problemas se puede dividir en subproblemas tales que la soluci on del problema
entero estar a compuesta por las soluciones de sus partes y las partes pueden ser solu-
cionados (completamente o relativamente) independientemente. La composici on de tal
algoritmo puede ser iterativo (por ejemplo los algoritmos de lnea de barrer de la secci on
8.1) o recursivo (por ejemplo los algoritmos de dividir y conquistar de la secci on 8.2). Hay
casos donde los mismos subproblemas ocurren varias veces y es importante evitar tener
que resolverlos varias veces; los algoritmos que logran esto cuentan con programaci on
din amica (de la secci on 8.4).
La idea de los algoritmos de aumentaci on es la formaci on de una soluci on optima por
mejoramiento de una soluci on factible. En algunos casos es mejor hacer cualquier au-
mento, aunque no sea el mejor ni localmente, en vez de considerar todas las alternativas
para poder despu es elegir vorazmente o con otra heurstica una de ellas. En general, al-
goritmos heursticos pueden llegar al optimo (global) en algunos casos, mientras en otros
casos terminan en una soluci on factible que no es la optima, pero ninguna de las opera-
ciones de aumento utilizados logra mejorarla. Este tipo de soluci on se llama un optimo
local.
8.1. Algoritmos de lnea de barrer
Los algoritmos de lnea de barrer (ingl es: sweep line o scan line) dividen el problema en
partes que se puede procesar en secuencia. Son particularmente com unes para los prob-
139
140 CAP

ITULO 8. T

ECNICAS DE DISE

NO DE ALGORITMOS
Figura 8.1: Una instancia del problema de intersecciones de segmentos.
lemas de geometra computacional, donde se procesa objetos geom etricos como puntos,
lneas, polgonos, etc etera. La instancia del problema est a compuesta por la informaci on
de la ubicaci on de los objetos en un espacio denido.
Para el caso que es espacio sea un plano, se puede imaginar que una lnea mueva en el
plano, cruzando la parte relevante del espacio donde se ubican los objetos. El movimiento
de la lnea sigue uno de los ejes u otra lnea ja y la lnea se para en puntos relevantes al
problema. Los puntos de parada se guarda en un montculo. La inicializaci on del montcu-
lo y su actualizaci on son asuntos importantes en el dise no del algoritmo. Tambi en se
puede aprovechar de otras estructuras de datos auxiliares, por ejemplo para guardar infor-
maci on sobre cu ales objetos est an actualmente bajo de la lnea. Entre dos paradas de la
lnea, los papeles relativos de los objetos pueden cambiar, pero los factores esenciales de
la soluci on del problema no deben cambiar de una parada a otra. Si el espacio tiene una
sola dimensi on, en vez de una lnea basta con usar un punto. Para dimensiones mayores
n, se barre con un hiperplano de dimensi on n 1.
Problema 8.21: Intersecciones de segmentos
Dado: n segmentos de lneas en plano de dos dimensiones
Pregunta: cu ales son los puntos de intersecci on entre todos los seg-
mentos?
El algoritmo ingenuo procesa cada uno de los n(n 1) = (n
2
) pares de segmentos
s
i
S y s
j
S tal que i ,= j y computa su intersecci on. En el peor caso, esto es el
comportamiento optimo: si todos los segmentos se intersectan, habr a que calcular todas
las intersecciones en cualquier caso y solamente imprimir la lista de las instrucciones ya
toma (n
2
) tiempo. Para un ejemplo, vea la gura 8.1.
Sin embargo, en una instancia promedia o tpica, el n umero de puntos de intersecci on
k es mucho menor que n(n 1). El algoritmo mejor imaginable tuviera complejidad
8.1. ALGORITMOS DE L

INEA DE BARRER 141


Figura 8.2: Los puntos de inicio y n de la instancia de la gura 8.1 y la direcci on de
procedimiento del algoritmo de lnea de barrer.
asint otica O(n + k), porque se necesita tiempo O(n) para leer la entrada y tiempo O(k)
para imprimir la salida. Aqu presentamos un algoritmo de lnea de barrer que corre en
tiempo O((n + k) log n).
Los puntos de parada ser an todos los puntos donde empieza o termina un segmento y
adem as los puntos de intersecci on. Son n puntos de comienzo, n puntos nales y k inter-
secciones. La lnea de barrer mover a en perpendicular al eje x, o sea, en paralelo al eje
y. Se guardar a los puntos de parada en un montculo. Las actualizaciones necesarias del
montculo tomar an O(log n) tiempo cada una.
Entre dos puntos de parada, por denici on no hay ninguna intersecci on, y adem as, el
subconjunto de segmentos cuales quedan bajo de la lnea de barrer, o sea, los segmentos
que intersectan con la lnea de barrer mientras mueva de un punto de parada al siguiente
no cambia. Adem as, el orden de los puntos de intersecci on en comparaci on a cualquier
de los dos ejes est a jo.
Entonces, guardamos en un arbol binario balanceado los segmentos que quedan actual-
mente bajo de la lnea de barrer. El arbol nos da acceso en tiempo O(log n). Se insertar an
seg un el orden de la coordenada y del punto de intersecci on del segmento con la lnea de
barrer y se actualizar a el orden en las siguientes situaciones:
(I) cuando comienza un segmento, se inserta el segmento en el lugar adecuado en el
arbol binario,
(II) cuando termina un segmento, se saca el segmento del arbol, y
(III) cuando se intersectan dos segmentos, el segmento que antes estaba arriba se cam-
bia por abajo y viceversa en este ultimo caso tambi en se imprime el punto de
intersecci on encontrada a la salida.
142 CAP

ITULO 8. T

ECNICAS DE DISE

NO DE ALGORITMOS
Por el hecho que el orden est a seg un la coordenada y, al momento de llegar a la inter-
secci on de dos segmentos s
i
y s
j
, necesariamente son vecinos en el arbol por lo menos
justo antes de llegar al punto de intersecci on. Ser vecinos quiere decir que son v ertices
hoja del arbol que est an uno al lado del otro en el nivel bajo. Entonces, al haber actual-
izado la estructura, lo unico que tenemos que hacer es calcular las puntos de intersecci on
de los vecinos actuales y a nadirles en la cola de puntos de parada. El n umero m aximo
de puntos de parada nuevos encontrados al haber hecho una parada es dos. El cuadro 8.1
muestra el agoritmo en pseudoc odigo.
La construcci on del montculo al comienzo toma O(n) tiempo. En cada punto preproce-
sado se realiza una inserci on o un retiro de un elemento de un arbol binario balanceado.
Son en total 2n de tales operaciones. Juntas necesitan O(nlog n) tiempo. Se a nade al
m aximo dos elementos al montculo por cada inserci on y al m aximo un elemento por ca-
da retiro hecho. Cada operaci on necesita O(log n) tiempo y son O(n) operaciones. Hasta
ahora todo necesita O(nlog n) tiempo.
En los puntos de intersecci on se intercambian posiciones dos segmentos. Esto se puede
implementar con dos retiros seguidos por dos inserciones al arbol, de costo O(log n)
cada uno. Adem as se inserta al m aximo dos puntos al montculo, de costo O(log n) por
inserci on. En total son k intersecciones, por lo cual se necesita O(k log n) tiempo. El
tiempo total es entonces
O(nlog n) +O(k log n) = O((n + k) log n) . (8.1)
8.2. Dividir y conquistar
El m etodo dividir y conquistar divide un problema grande en varios subproblemas tal
que cada subproblema tiene la misma pregunta que el problema original, solamente con
una instancia de entrada m as simple. Despu es se soluciona todos los subproblemas de
una manera recursiva. Las soluciones a los subproblemas est an combinadas a formar una
soluci on del problema entero. Para las instancias del tama no mnimo, es decir, las que ya
no se divide recursivamente, se utiliza alg un procedimiento de soluci on simple. La idea
es que el tama no mnimo sea constante y su soluci on lineal en su tama no por lo cual la
soluci on de tal instancia tambi en es posible en tiempo constante desde el punto de vista
del m etodo de soluci on del problema entero.
Para que sea eciente el m etodo para el problema entero, adem as de tener un algoritmo
de tiempo constante para las instancias peque nas b asicas, es importante que el costo com-
putacional de dividir un problema a subproblemas sea bajo y tambi en que la computaci on
de juntar las soluciones de los subproblemas sea eciente. Las divisiones a subproblemas
genera un arbol abstracto, la altura de cual determina el n umero de niveles de divisi on.
Para lograr un arbol abstracto balanceado, normalmente es deseable dividir un problema
a subproblemas de m as o menos el mismo tama no en vez de dividir a unos muy grandes
y otros muy peque nos. Un buen ejemplo del m etodo dividir y conquistar es ordenamiento
por fusi on que tiene complejidad asint otica O(nlog n).
8.2. DIVIDIR Y CONQUISTAR 143
Cuadro 8.1: Un algoritmo de lnea de barrer para encontrar los puntos de intersecci on de
un conjunto S de n segmentos en R
2
.
M := un montculo vaco
para todo s
i
S,
s
i
=
_
(x
1
, y
1
), (x
2
, y
2
)
_
tal que x
1
x
2
insertar en M el dato [(x
1
, y
1
), C, i, ]
insertar en M el dato [(x
2
, y
2
), F, i, ]
B := un arbol binario balanceado vaco
mientras M no est a vaco
(x, y) := el elemento mnimo de M
remueve (x, y) de M
si (x, y) es de tipo C como comienzo
insertar s
i
a B ordenado seg un la clave y
si el vecino izquiero de s
i
en B est a denido y es s

computar la intersecci on (x

, y

) de s
i
y s

si x

> x
insertar en M el dato [(x

, y

), I, , i]
si el vecino derecho de s
i
en B est a denido y es s
r
computar la intersecci on (x

, y

) de s
i
y s
r
si x

> x
insertar en M el dato [(x

, y

), I, i, r]
si (x, y) es de tipo F como nal
s

:= el segmento a la izquierda de s
i
en B
s
r
:= el segmento a la derecha de s
i
en B
remueve s
i
de B
si est an denidos ambos s

y s
r
,
computar la intersecci on (x

, y

) de s

y s
r
si x

> x
insertar en M el dato [(x

, y

), I, , r]
si (x, y) es de tipo intersecci on
i := el primer ndice denido en el dato
j := el segundo ndice denido en el dato
intercambia las posiciones de s
i
y s
j
en B
si el nuevo vecino izquiero de s
j
en B est a denido y est a s

computar la intersecci on (x

, y

) de s
j
y s

si x

> x
insertar en M el dato [(x

, y

), I, j, ]
si el nuevo vecino derecho de s
i
en B est a denido y est a s
r
computar la intersecci on (x

, y

) de s
i
y s
r
si x

> x
insertar en M el dato [(x

, y

), I, i, r]
imprimir (x, y)
144 CAP

ITULO 8. T

ECNICAS DE DISE

NO DE ALGORITMOS
Figura 8.3: Una instancia del problema de cubierta convexa de un conjunto de puntos en
el plano.
8.2.1. Cubierta convexa
Como otro ejemplo del m etodo dividir y conquistar, ver emos la computaci on de la cu-
bierta convexa de un conjunto de puntos en R
2
. La cubierta convexa es la regi on convexa
mnima que contiene todos los puntos del conjunto. Una regi on es convexa si todos los
puntos de un segmento de lnea que conecta dos puntos incluidos en la regi on, tambi en
est an incluidos en la misma regi on. Una instancia de ejemplo se muestra en la gura 8.3.
La idea del algoritmo es dividir iterativamente el conjunto de puntos en dos subconjuntos
de aproximadamente el mismo tama no, calcular la cubierta de cada parte y despu es jun-
tar las soluciones de los subproblemas iterativamente a una cubierta convexa de todo el
conjunto. Es bastante simple dividir el conjunto en dos partes tales que uno est e completa-
mente a la izquierda del otro por ordenarlos seg un su coordenada x (en tiempo O(nlog n)
para n puntos).
La cubierta de un s olo punto es el punto mismo. Para juntar dos cubiertas, el caso donde
una est a completamente a la izquierda de la otra es f acil: basta con buscar dos segmen-
tos de puente que tocan en cada cubierta pero no corten ninguna (ver gura 8.4). Tales
puentes se encuentra por examinar en orden los puntos de las dos cubiertas, asegurando
que la lnea innita denida por el segmento entre los dos puntos elegidos no corta ningu-
na de las dos cubiertas. Tambi en hay que asegurar que las dos puentes no corten uno al
otro.
Un orden posible para evaluar pares de puntos como candidatos de puentes es empezar
del par donde uno de los puntos maximiza la coordinada y en otro maximiza (o minimiza)
la coordinada x. Hay que dise nar c omo avanzar en elegir nuevos pares utilizando alguna
heurstica que observa cu ales de las dos cubiertas est an cortadas por el candidato actual.
Lo importante es que cada punto est a visitado por m aximo una vez al buscar uno de los
dos puentes.
8.2. DIVIDIR Y CONQUISTAR 145
Figura 8.4: Dos puentes (en rojo) que juntan las soluciones de dos subproblemas de
cubierta convexa a la soluci on del problema completo.
La complejidad de tal algoritmo se caracteriza por la siguiente ecuaci on:
S(n) =
_
O(1) , si n = 1,
2S(
n
2
) +O(n) , en otro caso
(8.2)
y su soluci on es O(nlog n).
Multiplicaci on de matrices
Otro ejemplo del m etodo de dividir y conquistar es el algoritmo de Strassen para multi-
plicar dos matrices. Sean A = (a
ij
) y B = (b
ij
) matrices de dimensi on nn. El algoritmo
ingenuo para su multiplicaci on est a basada en la formula AB = C = (c
ij
) donde
c
ij
=
n

k=1
a
ik
b
kj
. (8.3)
La computaci on de cada c
ij
toma tiempo n (n multiplicaciones y n 1 sumaciones)
y son exactamente n
2
elementos, por lo cual la complejidad asint otica del algoritmo in-
genuo es (n
3
). El otro algoritmo tiene la siguiente idea; sea n = k
2
para alg un entero
positivo k. Si k = 1, utilizamos el m etodo ingenuo. En otro caso, divimos las matrices de
entrada en cuatro partes:
_
A
11
A
12
A
21
A
22
_ _
B
11
B
12
B
21
B
22
_
(8.4)
tal que cada parte tiene dimensi on
n
2

n
2
. Para estas partes, calculamos sus multiplica-
ciones
A
11
B
11
, A
12
B
21
, A
11
B
12
, A
12
B
22
,
A
21
B
11
, A
22
B
21
, A
21
B
12
, A
22
B
22
(8.5)
146 CAP

ITULO 8. T

ECNICAS DE DISE

NO DE ALGORITMOS
y sumamos para obtener partes de la matriz C:
C
11
= A
11
B
11
+ A
12
B
21
C
12
= A
11
B
12
+ A
12
B
22
C
21
= A
21
B
11
+ A
22
B
21
C
22
= A
21
B
12
+ A
22
B
22
(8.6)
tal que
C =
_
C
11
C
12
C
21
C
22
_
(8.7)
que es exactamente e n producto AB.
Para analizar el algoritmo, marcamos con a el n umero de multiplicaciones hechas y con
b el n umero de sumaciones. La complejidad de tiempo total es
T(n)
_
a + b, si k = 1
aT(
n
2
) + b (
n
2
)
2
, para k > 1.
(8.8)
La solucionamos por abrirla:
T(2) = a + b
xT(4) = a
2
+ ab + b
_
4
2
_
2
T(8) = a
3
+ a
2
b + ab
_
4
2
_
2
+ b
_
8
2
_
2
.
.
.
T(2

) = a

+ b
1

i=0
_
2
i
2
_
2
a
i
= a

+ b
1

i=0
2
22i
4
a
i
= a

+ b
2
2
4
1

i=0
_
a
4
_
i
= a

+ b
2
2
4
_
a
4
_

1
a
4
1
. .
>1,si a>4
a

+ ba

= O
_
a

_
= O
_
a
log n
_
= O
_
2
log alog n
_
= O
_
n
log a
_
.
En el algoritmo anterior tenemos a = 8, por lo cual T(n) = O(n
3
) y no hay ahorro ase-
gurado. El truco del algoritmo de Strassen es lograr a tener a = 7 y as lograr complejidad
8.3. PODAR-BUSCAR 147
asint otica O
_
n
log 7
_
O(n
2,81
):
S
1
= (A
12
A
22
) (B
21
+ B
22
)
S
2
= (A
11
+ A
22
) (B
11
+ B
22
)
S
3
= (A
11
A
21
) (B
11
+ B
12
)
S
4
= (A
11
+ A
12
) B
22
S
5
= A
11
(B
12
B
22
)
S
6
= A
22
(B
21
B
11
)
S
7
= (A
21
+ A
22
) B
11
tal que
C
11
= S
1
+ S
2
S
4
+ S
6
C
12
= S
4
+ S
5
C
21
= S
6
+ S
7
C
22
= S
2
S
3
+ S
5
S
7
,
8.3. Podar-buscar
El m etodo podar-buscar (ingl es: prune and search) es parecido a dividir-conquistar, con
la diferencia que despu es de dividir, el algoritmo ignora la otra mitad por saber que la
soluci on completa se encuentra por solamente procesar en la otra parte. Una consecuencia
buena es que tampoco hay que unir soluciones de subproblemas.
Como un ejemplo, analizamos la b usqueda entre n claves de la clave en posici on i en
orden decreciente de los datos. Para i =
n
2
, lo que se busca es el mediana del conjunto.
Un algoritmo ingenuo cuadr atico sera buscar el mnimo y eliminarlo i veces, llegando a
la complejidad asint otica (i n). Por aplicar un algoritmo de ordenaci on de un arreglo,
llegamos a la complejidad asnt otica (nlog n).
Un m etodo podar-buscar parecido al ordenaci on r apida llega a complejidad mejor: elegi-
mos un elemento pivote p y divimos los elementos en dos conjuntos: A donde las claves
son menores a p y B donde son mayores o iguales. Continuamos de una manera recursiva
solamente con uno de los dos conjuntos A y B: lo que contiene al elemento i esimo en
orden decreciente. Para saber d onde continuar, solamente hay que comprar i con [A[ y
[B[.
El truco en este algoritmo es en la elecci on del elemento pivote as que la divisi on sea
buena: queremos asegurar que exista un constante q tal que
1
2
q < 1 tal que el conjunto
mayor de A y B contiene nq elementos. As podramos llegar a la complejidad
T(n) = T(qn) + (n)
cn

i=0
q
i
=
cn
1 q
= O(n) .
148 CAP

ITULO 8. T

ECNICAS DE DISE

NO DE ALGORITMOS
El m etodo de elecci on del pivote puede ser por ejemplo el siguiente:
1. Divide los elementos en grupos de cinco (o menos en el ultimo grupo).
2. Denota el n umero de grupos por k =
n
5
.
3. Ordena en tiempo O(5) O(1) cada grupo.
4. Elige la mediana de cada grupo.
5. Entre las k medianas, elige su mediana p utilizando este mismo algoritmo recursi-
vamente.
6. El elemento p ser a el pivote.
De esta manera podemos asegurar que por lo menos
n
10
medianas son mayores a p y
para cada mediana mayor a p hay dos elementos mayores m as en su grupo, por lo cual el
n umero m aximo de elementos menores a p son
3
n
10
<
3
4
n para n 20. (8.9)
Tambi en sabemos que el n umero de elementos mayores a p es por m aximo
3
4
n para n
20, por lo cual aplica que
n
4
p
3n
4
para n 20. (8.10)
El pseudoc odigo del algoritmo est a en el cuadro 8.2.
Para analizar la complejidad asint otica T(n) del algoritmo desarrollado, hacemos las sigu-
ientes observaciones sobre el cuadro 8.2:
[M[ =
n
5
(8.11)
por lo cual la llamada recursiva pivote(
|M|
2
, M) toma tiempo T(
n
5
) por m aximo.
Tambi en sabemos que
m ax[A[ , [B[
3n
4
, (8.12)
por lo cual la llamada recursiva del ultimo paso toma al m aximo tiempo T(
3n
4
). Entonces,
para alg un constante c tenemos que
T(n) =
_
c, si n < 20
T(
n
5
+ T(
3n
4
) + cn, si n 20.
(8.13)
Con inducci on llegamos bastante f acilmente a T(n) 20cn.
8.4. PROGRAMACI

ON DIN

AMICA 149
Cuadro 8.2: Un algoritmo para elegir un pivote que divide un conjunto tal que ninguna de
las dos partes es tiene menos que una cuarta parte de los elementos.
procedimiento pivote(i Z, D R)
si [D[ < 20
ordenar(D);
devuelve D[i]
en otro caso
Dividir D en [D[ /5 grupos de cinco elementos
Ordena cada grupo de cinco elementos;
M := las medianes de los grupos de cinco;
p pivote([M[ /2, M);
Dividir D a A y B tal que
a A si a < p;
b B si b p;
si [A[ i devuelve pivote(i, A)
en otro caso devuelve pivote(i [A[ , [B[)
8.4. Programaci on din amica
En programaci on din amica, uno empieza a construir la soluci on desde las soluciones de
los subproblemas m as peque nos, guardando las soluciones en una forma sistem atica para
construir soluciones a problemas mayores. Tpicamente las soluciones parciales est an
guardadas en un arreglo para evitar a tener que solucionar un subprobelma igual m as
tarde el la ejecuci on del algoritmo. Su utilidad est a en problemas donde la soluci on del
problema completo contiene las soluciones de los subproblemas una situaci on que
ocurre en algunos problemas de optimizaci on.
Un ejemplo b asico es el c omputo de los coecientes bin omicos con ecuaci on 1.9 (en
p agina 2). Si uno lo aplica de la manera dividir y conquistar, es necesario volver a calcular
varias veces algunos coecientes peque nos, llegando a la complejidad asint otica

__
n
k
__
=
_
2
n

n
_
, (8.14)
aunque guardando las soluciones parciales (o sea, cada coeciente ya calculado), lleg-
amos a la complejidad O(nk) (de tiempo la de espacio crece). El arreglo del algorit-
mo de programaci on din amica para los coecientes bin omicos resulta ser el tri angulo de
150 CAP

ITULO 8. T

ECNICAS DE DISE

NO DE ALGORITMOS
Pascal:
k
n
0 1 2 3 4 5 6 7 8 9 10 . . .
0 1
1 1 1
2 1 2 1
3 1 3 3 1
4 1 4 6 4 1
5 1 5 10 10 5 1
6 1 6 15 20 15 6 1
7 1 7 21 35 35 21 7 1
8 1 8 28 56 70 56 28 8 1
9 1 9 36 84 126 126 84 36 9 1
10 1 10 45 120 210 252 210 120 45 10 1
.
.
.
.
.
.
(8.15)
8.4.1. Triangulaci on optima de un polgono convexo
Nuestra segundo ejemplo de programaci on din amica es el siguiente problema:
Problema 8.22: Polgono convexo
Dado: Un polgono convexo de n lados en formato de la lista de los
n + 1 puntos nales de sus lados en la direcci on del reloj.
Pregunta: Cu al divisi on del polgono a tri angulos da la suma mnima
de los largos de los lados de los tri angulos?
Si el n umero de los puntos es n+1, cada uno de los n lados del polgono tiene n opciones
de asignaci on a tri angulos, incluyendo un tri angulo degenerado que consiste en el lado
s olo (ver gura 8.6). Alguno de estos tri angulos necesariamente pertenece a la triangu-
laci on optima. El resto de la tarea es triangular el area o las areas que quedan afuera del
tri angulo elegida.
Entonces, uno podra resolver el problema por examinar cada triangulaci on de cada lado,
empezando del lado entre el primero y el segundo punto, y continuando recursivamente
para los otros lados del polgono. Denimos como el precio de cada tri angulo degen-
erado cero y suponemos que estamos triangulizando el polgono parcial denido por los
puntos i 1, i, . . . , j 1, j. El precio de la triangulaci on optima es
T[i, j] =
_
0, si i = j
mn
ikj1
T[i, k] + T[k + 1, j] + w(i 1, k, j) , i ,= j
(8.16)
donde w(i 1, k, j) es el costo del tri angulo denido por los tres puntos i 1, k y j.
8.4. PROGRAMACI

ON DIN

AMICA 151
Figura 8.5: Una instancia de triangulaci on de un polgono convexo con una soluci on
factible (aunque su optimalidad depende de cu al funci on objetivo est a utilizada la
de la formulaci on presentada u otra. Los puntos est an dibujados como crculos negros,
mientras el polgono est a dibujado en lnea negra y los tri angulos en colores variados.
Lo primero del algoritmo es guardar en la tabla de los T[i, j] el valor cero para todo T[i, i],
i = 1, . . . , n. La tabla se completa diagonal por diagonal hasta llegar al elemento T[1, n]
que ser a el costo de la triangulaci on optima de todo el polgono. Habr a que recordar cu ales
w(i 1, k, j) fueron utilizados para saber de cu ales tri angulos consiste la triangulaci on.
El tiempo de c omputo por elemento de la tabla es (n) y son (n
2
) elementos en total,
por lo cual el algoritmo corre en tiempo (n
3
).
152 CAP

ITULO 8. T

ECNICAS DE DISE

NO DE ALGORITMOS
Figura 8.6: Las opciones de n tri angulos los cuales puede pertenecer un lado del polgono
en una triangulaci on optima.
Captulo 9
Optimizaci on combinatoria
En optimizaci on combinatoria, la manera ingenua de solucionar problemas es hacer una
lista completa de todas las soluciones factibles y evaluar la funci on objetivo para cada
una, eligiendo al nal la soluci on cual dio el mejor valor. La complejidad de ese tipo de
soluci on es por lo menos ([F[) donde F es el conjunto de soluciones factibles. Desafor-
tunadamente el n umero de soluciones factibles suele ser algo como (2
n
), por lo cual
el algoritmo ingenuo tiene complejidad asint otica exponencial. Si uno tiene un m etodo
eciente para generar en una manera ordenada soluciones factibles y r apidamente decidir
s o no procesarlos (en el sentido de podar-buscar), no es imposible utilizar un algoritmo
exponencial.
Otra opci on es buscar por soluciones aproximadas, o sea, soluciones cerca de ser opti-
ma sin necesariamente serlo (ver captulo 10). Una manera de aproximaci on es utilizar
m etodos heursticos, donde uno aplica una regla simple para elegir candidatos. Si uno
siempre elije el candidatos que desde el punto de vista de evaluaci on local se ve el mejor,
la heurstica es voraz (tambi en se dice glotona).
Muchos problemas de optimizaci on combinatoria consisten de una parte de construcci on
de cualquier soluci on factible, que tiene la misma complejidad que el problema de de-
cisi on de la existencia de una soluci on factible. No es posible que sea m as f acil solucionar
el problema de optimizaci on que el problema de decisi on a cual est a basado.
Formalmente, para mostrar que un problema de optimizaci on es difcil, lo transformamos
en un problema de decisi on y demostramos que el problema de decisi on es NP-completo
(o ma as difcil). El forma normal de la transformaci on es la siguiente (para problemas
de minimizaci on la extensi on a problemas de maximizaci on es f acil):
Problema 9.23: OPT DEC
Dado: Una instancia x de un problema de optimizaci on y un costo
c.
Pregunta: Existe una soluci on i o
x
con costo menor o igual a c?
153
154 CAP

ITULO 9. OPTIMIZACI

ON COMBINATORIA
En un sentido, si el problema de decisi on es NP-completo, el problema de optimizaci on es
NP-duro, porque si tenemos un algoritmo para el problema de optimizaci on, podemos con
uan reducci on trivial decidir el problema de decisi on, y como problemas de optimizaci on
por denici on no pertenecen a NP (NP siendo una clase de problemas de decisi on), en
vez de ser NP-completos, son NP-duros.
De los libros de texto sobre optimizaci on combinatoria cabe mencionar el libro de Pa-
padimitriou y Steiglitz [16].
9.1.

Arbol cubriente mnimo
Estudiamos algunos algoritmos de encontrar un arbol cubriente mnimo en grafos pon-
derados no dirigidos. Para construir un arbol cubriente cualquiera o sea, una soluci on
factible podemos empezar de cualquier v ertice, elegir una arista, y continuar al vecino
indicado, asegurando al a nadir aristas que nunca regresamos a un v ertice ya visitado con
anterioridad. En este problema, logramos a encontrar la soluci on optima con una heursti-
ca voraz: siempre elige la arista con menor peso para a nadir en el arbol que est a bajo
construcci on.
En el algoritmo de Prim , empezamos por incluir en el arbol la arista de peso mnimo
y marcando los puntos nales de esta arista. En cada paso, se elige entre los vecinos de
los v ertices marcados el v ertice que se puede a nadir con el menor peso entre los can-
didatos. En una implementaci on simple, se guarda el costo de a nadir un v ertice en un
arreglo auxiliar c[v] y asignamos c[v] = para los que no son vecinos de v ertices ya
marcados. Para saber cuales v ertices fueron visitados, se necesita una estructura de datos.
Con montculos normales se obtiene complejidad de O(mlog n) y con montculos de
Fibonacci complejidad de O(m + nlog n).
Otra posibilidad es empezar a a nadir aristas, de la menos pesada a la m as pesada, cuidando
a no formar ciclos por marcar v ertices al haberlos tocado con una arista. El algoritmo
termina cuando todos los v ertices est an en el mismo arbol, por lo cual una estructura tipo
unir-encontrar resulta muy util. Este m etodo se conoce como el algoritmo de Kruskal y su
complejidad es O(mlog m) +O(m ( unir-encontrar )) = O(mlog m) = O(mlog n).
9.2. Ramicar-acotar
En los algoritmos de optimizaci on combinatoria que evaluan propiedades de varios y
posiblemente todos los candidatos de soluci on, es esencial saber guiar la b usqueda de
la soluci on y evitar evaluar candidatos malos. Un ejemplo de ese tipo de t ecnica es el
m etodo podar-buscar (de la secci on 8.3). Algoritmos que avancen siempre en el candidato
localmente optimo se llaman voraces (por ejemplo los algoritmos de construcci on de
arboles cubriente de peso mnimo de la secci on 9.1).
Un m etodo de este tipo es el algoritmo vuelta atr as (ingl es: backtracking). Su idea es
9.2. RAMIFICAR-ACOTAR 155
aumentar una soluci on parcial utilizando candidatos de aumento. En cuanto una soluci on
est a encontrada, el algoritmo vuelve a examinar un ramo de aumento donde no todos los
candidatos han sido examinados todava. Cuando uno utiliza cotas para decidir cu ales
ramos dejar sin explorar, la t ecnica se llama ramicar-acotar (ingl es: branch and bound).
Es recomendable utilizar m etodos tipo ramicar-acotar solamente en casos donde uno no
conoce un algoritmo eciente y no basta con una soluci on aproximada. Los ramos de
la computaci on consisten de soluciones factibles distintas y la subrutina para encontrar
una cota (superior para maximizaci on y inferior para minimizaci on) debera ser r apida.
Normalmente el recorrido del arbol de soluciones factibles se hace en profundidad
cada hoja del arbol corresponde a una soluci on factible, mientras los v ertices internos son
las operaciones de aumento que construyen las soluciones factibles. El algoritmo tiene
que recordar el mejor resultado visto para poder eliminar ramos que por el valor de su
cota no pueden contener soluciones mejores a la ya conocida.
9.2.1. Problema de viajante
En la versi on de optimizaci on del problema de viajante (TSP), uno busca por el ciclo
de menor costo/peso en un grafo ponderado. En el caso general, podemos pensar que el
grafo sea no dirigido y completo. Utilizamos un m etodo tipo ramicar-acotar para buscar
la soluci on optima. El arbol de soluciones consiste en decicir para cada uno de los
_
n
2
_
aristas del grafo s o no est a incluida en el ciclo. Para el largo /(R) de cualquier ruta R
aplica que
/(R) =
1
2
n

i=1
(/(v
i1
, v
i
) +/(v
i
, v
i+1
)) , (9.1)
donde los v ertices de la ruta han sido numerados seg un su orden de visita en la ruta tal
que el primer v ertice tiene dos n umeros v
1
y v
n+1
y el ultimo se conoce como v
n
y v
0
para
dar continuidad a la ecuaci on. Adem as sabemos que para cualquier ruta R el costo de la
arista incidente a cada v ertice es por lo menos el costo de la arista m as barata incidente a
ese v ertice, por lo cual para la ruta m as corta R
mn
aplica que
/(R
mn
)
1
2

vV
suma de los largos de las dos aristas m as baratas incidentes a v. (9.2)
Suponemos que el orden de procesamiento de las aristas es jo. Al procesar la arista
v, w, el paso ramicar es el siguiente:
1. Si al excluir v, w resultara que uno de los v ertices v o w tenga menos que dos
aristas incidentes para la ruta, ignoramos el ramo de excluirla.
2. Si al incluir v, w resultara que uno de los v ertices v o w tenga m as que dos aristas
incidentes para la ruta, ignoramos el ramo de inclusi on.
3. Si al incluir v, w se generara un ciclo en la ruta actua sin haber incluido todos
los v ertices todava, ignoramos el ramo de inclusi on.
156 CAP

ITULO 9. OPTIMIZACI

ON COMBINATORIA
Despu es de haber eliminado o includo aristas as, computamos un nuevo valor de R
mn
para las elecciones hechas y lo utilizamos como la cota inferior. Si ya conocemos una
soluci on mejor a la cota as obtenida para el ramo, ignoramos el ramo.
Al cerrar un ramo, regresamos por el arbol (de la manera DFS) al nivel anterior que todava
tiene ramos sin considerar. Cuando ya no queda ninguno, el algoritmo termina.
Captulo 10
Algoritmos de aproximaci on
En situaciones donde todos los algoritmos conocidos son lentos, vale la pena considerar
la posilibidad de usar una soluci on aproximada, o sea, una soluci on que tiene un valor
de la funci on objetivo cerca del valor optimo, pero no necesariamente el optimo mismo.
Depende del area de aplicaci on s o no se puede hacer esto ecientemente. En muchos
casos es posible llegar a una soluci on aproximada muy r apidamente mientras encontrar
la soluci on optima puede ser imposiblemente lento. Un algoritmo de aproximaci on puede
ser determinista o no determinista en segundo caso ser a atentido el el captulo 11. Si
el algoritmo de aproximaci on no es determinista y ejecuta muy r apidamente, es com un
ejecutarlo varias veces y elegir el mejor de las soluciones aproximadas as producidas.
Un algoritmo de aproximaci on bien dise nado cuenta con un an alisis formal que muestra
que la diferencia entre su soluci on y la soluci on optima es de un factor constante. Este
factor constante se llama el factor de aproximaci on y es menor a uno para problemas de
maximizaci on y mayor a uno para problemas de minimizaci on. Depende de la aplicaci on
qu e tan cerca debera ser la soluci on aproximada a la soluci on optima. El valor extremo
de ese factor sobre el conjunto de todas las instancias del problema (el mnimo para prob-
lemas de maximizaci on y el m aximo para los de minimizaci on) se llama la tasa o ndice
de aproximaci on (ingl es: approximation ratio). Un algoritmo de aproximaci on tiene tasa
constante si el valor de la soluci on encontrada es por m aximo un m ultiple constante del
valor optimo.
Tambi en habr a que mostrar formalmente que el algoritmo de aproximaci on tiene comple-
jidad polinomial (o polinomial con alta probabilidad en el caso no determinista). Si existe
un m etodo sistem atico para aproximar la soluci on a factores arbitrarios, ese m etodo se
llama una esquema de aproximaci on (de tiempo polinomial) (ingl es: (polynomial-time)
approximation scheme). En el caso de tiempo polinomial se utiliza la abreviaci on PTAS.
Un libro de texto recomendable sobre algoritmos de aproximaci on es lo de Vazirani [17].
157
158 CAP

ITULO 10. ALGORITMOS DE APROXIMACI



ON
10.1. Ejemplos
En problema de la mochila (ingl es: knapsack) es un problema cl asico de optimizaci on
combinatoria:
Problema 10.24: Knapsack
Dado: una lista de N diferentes artculos
i
donde cada ob-
jecto tiene una utilidad (
i
) y un peso (
i
) y una mochila
que soporta peso hasta un cierto lmite
Pregunta: c omo elegir un conjunto de artculos M con la re-
stricci on

M
()
tal que
m ax
M
_

M
()
_
,
o sea, la utilidad total es m axima?
Para solucionar este problema atrav es de programaci on entera asignamos para cada
artculo
i
una variable binaria x
i
tal que
x
i
=
_
1, si M,
0, si / M.
(10.1)
La funci on objetivo es la suma de utilidades y su coeciente es (
i
):
f(x) = m ax
x
_
N

i=1
(
i
) x
i
_
. (10.2)
Una restricci on limita la suma de pesos tal que b
1
= y a
N+1,i
= (
i
)):
N

i=1
a
N+1,i
x
i
. (10.3)
En una versi on generalizada del problema de la mochila, tenemos una cierta cantidad
c
i
del artculo
i
disponible. Entonces las variables ya no son binaria, sino enteras en
general, y aplican restricciones para cada variable x
i
que representa la inclusi on de un
cierto tipo de artculo en M:
(x
i
Z) (0 x
i
c
i
). (10.4)
10.1. EJEMPLOS 159
La funci on objetivo y la restricci on de peso total se formula igual como en el caso de 01
del problema original. Una versi on aun m as general no tiene lmite superior:
(x
i
Z) (x
i
0). (10.5)
En el problema de empaquetear a cajas (ingl es: bin packing) tenemos un conjunto nito
de objetos =
1
,
2
. . . ,
N
, cada uno con un tama no denido t(
i
) R. Los
objetos habr a que empaquetear en cajas de tama no jo T tal que
T m axt(
i
) [
i
(10.6)
y queremos encontrar un orden de empaquetear que minimiza el n umero de cajas uti-
lizadas. Este problema es NP-completo.
Un algoritmo de aproximaci on simple y r apido empieza por ordenar las cajas en una -
la. Procesamos los objetos en orden. Primero intentamos poner el objecto actualmente
procesado en la primera caja de la la. Si cabe, lo ponemos all, y si no, intentamos
en la siguiente caja. Iterando as obtenemos alguna asignaci on de objetos a cajas. De-
notamos con OPT() el n umero de cajas que contienen por lo menos un objeto en la
asignaci on optima. Se puede mostrar que el algoritmo de aproximaci on simple utiliza al
m aximo
17
10
OPT() + 2 cajas. Esto signica que nunca alejamos a m as de 70 por ciento
de la soluci on optima. Podemos mejorar a un por ordenar los objetos tal que intentamos
primero el m as grande y despu es el segundo m as grande, en cual caso se puede mostrar
que llegamos a utilizar al m aximo
11
9
OPT()+4 cajas, que nos da una distancia m axima
de unos 22 por ciento del optimo.
Si tomamos una versi on del problema del viajante donde los pesos un grafo completo
ponderado son distancias entre los v ertices d(v, w) que cumplen con la desigualdad de
tri angulo
d(v, u) d(v, w) + d(w, u), (10.7)
que tambi en es un problema NP-completo. El algoritmo siguiente encuentra en tiempo
polinomial una soluci on aproximada, o sea, imprime una lista de v ertices que dene un
orden de visitas que efectivamente ja la ruta R:
1. Construye un arbol cubriente mnimo en tiempo O(mlog n).
2. Elige un v ertice de inicio cualquiera v.
3. Recorre el arbol con DFS en tiempo O(m+ n) e imprime cada v ertice a la primera
visita (o sea, en preorden).
4. Imprime v en tiempo O(1).
El DFS recorre cada arista del arbol dos veces; podemos pensar en el recorrido como una
ruta larga R

que visita cada v ertice por lo menos una vez, pero varias v ertices m as de una
vez. Por cortar de la ruta larga R

cualquier visita a un v ertice que ya ha sido visitado,


160 CAP

ITULO 10. ALGORITMOS DE APROXIMACI



ON
logramos el efecto de imprimir los v ertices en preorder. Por la desigualdad de tri angulo,
sabemos que la ruta R no puede ser m as cara que la ruta larga R

. El costo total de R

es
dos veces el costo del arbol cubriente mnimo.
Para lograr a comparar el resultado con el optimo, hay que analizar el optimo en t erminos
de arboles cubrientes: si eliminamos cualquier arista de la ruta optima R
OPT
, obtenemos
un arbol cubriente. El peso de este arbol es por lo menos el mismo que el peso de un
arbol cubriente mnimo C. Entonces, si marcamos el costo de la ruta R con c(R), hemos
mostrado que necesariamente
c(R) c(R

) = 2C 2c(R
OPT
). (10.8)
10.2. B usqueda local
Cuando hemos obtenido una soluci on heurstica y aproximada de manera cualquiera a
un problema de optimizaci on, podemos intentar mejorarla por b usqueda local donde uno
aplica operaciones peque nas y r apidamente realizadas para causar cambios peque nos en
la soluci on as que la soluci on mantiene factible y puede ser que mejora. Libros buenos
de b usqueda local incluyen el libro de de Aarts y Lenstra [1] y el libro de Hoos y St utzle
[9]. Las tres variaciones tpicas para guiar una b usqueda local son
1. b usqueda voraz (ingl es: greedy local search; hill-climbing),
2. b usqueda tabu (ingl es: tabu search), y
3. recocido simulado (ingl es: simulated annealing).
10.2.1. Deniciones b asicas
En esta secci on, resumimos las deniciones utilizadas en el libro de texto editado por
Aarts y Lenstra [1]. Un problema combinatorial se dene por un conjunto especco de
instancias que son objetos combinatoriales y de la tarea de minimizar o maximizar.
Una instancia de un problema combinatorial es un par (o, f) donde o es un conjunto
de soluciones factibles y f : o R es una funci on objetivo. Sin p erdida de general-
idad, consideramos solamente problemas de minimizaci on, ya que uno puede convertir
cualquier problema de maximizaci on a una problema de minimizaci on por minimizar f
en vez de maximizar f.
La tarea relacionada a la instancia del problema es encontrar una soluci on globalmente
optima i

o tal que f(i

f(i) para todo i o. Denotamos por f

= f(i

) el costo
de la soluci on optima y por o

el conjunto de soluciones globalmente optimas.


Tpicamente, uno cuenta con una representaci on compacta del conjunto de las soluciones
factibles y un algoritmo polinomial para vericar si i o y (posiblemente otro algoritmo
polinomial) para calcular el valor f(i) para cualquier i o.
10.2. B

USQUEDA LOCAL 161
Una funci on de vecindario es un mapeo : o 2
S
que dene para cada i o un
conjunto de vecinos (i) o tal que los vecinos de una soluci on i son en alg un sentido
cercanos a i.
Una b usqueda local voraz empieza con una soluci on inicial arbitraria y mueve iterativa-
mente siempre al vecino con menor costo hasta que ya no exista tal vecino. Cada soluci on
que no tiene ning un vecino con menor costo es un optimo local. Se dice que la funci on
es exacta para (o, f) si el conjunto de soluciones localmente optimas es igual al conjunto
de soluciones globalmente optimas. Por ejemplo, el vecindario del algoritmo Simplex es
exacto y Simplex es una b usqueda local voraz.
Una opci on que evita tener que evaluar el costo de todos los vecinos en cada paso es
agarrar el primer vecino que ofrece una mejora. Igualmente, si no existe tal vecino, la
soluci on actual es una optimo local.
Vecindarios tpicos est an construidos por intercambiar elementos de las instancias com-
binatoriales (por ejemplo la presencia y ausencia de un elemento o las posiciones de dos
elementos).
10.2.2. Ejemplo: 2-opt
En esta secci on veremos un ejemplo de las operaciones de modicaci on: la la elecci on
de pares, abreviada com unmente como 2-opt, aplicada en el problema del viajante en un
grafo ponderado no dirigido G = (V, E); denotamos el costo de una arista v, w por
c(v, w) > 0. Elegimos (al azar) dos aristas de la ruta R, sean s, t y u, v. Marcamos
el segmento de la ruta entre t y u por A y el otro segmento entre v y s por B tal que
A = [tr
1
r
2
. . . r
k
u]
B = [vw
1
w
2
. . . w

s]
R = [tr
1
r
2
. . . r
k
uvw
1
w
2
. . . w

st]
(10.9)
Si el grafo G tambi en contiene las aristas v, t y s, u, evaluamos si
c(s, t) + c(u, v) > c(s, u) + c(v, t). (10.10)
En el caso que esto es verdad, podemos llegar a un costo total menor por reemplazar las
aristas originales s, t y u, v en la ruta R por las aristas m as baratas v, t y s, u,
creando una ruta nueva R

con costo total menor tal que


R

= [tr
1
r
2
. . . r
k
usw

w
1
. . . w
2
w
1
vt]. (10.11)
La gura 10.1 ilustra el intercambio realizado.
10.2.3. Complejidad de b usqueda local
Consideramos ahora el problema siguiente:
162 CAP

ITULO 10. ALGORITMOS DE APROXIMACI



ON
...
.
.
.
Figura 10.1: Una modicaci on 2-opt para el problema del viajante: la ruta original R
est a marcada por las echas azules y la ruta m as econ omica R

por las echas verdes; las


aristas eliminadas est an en gris y las a nadidas en lnea negro descontnua. Los cuatro ver-
tices que son puntos nales de las aristas involucradas est an dibujados en mayor tama no
que los otros v ertices.
Problema 10.25: LOCAL OPT
Dado: Una instancia (o, f) y una soluci on factible i o.
Pregunta: Es i localmente optima (por contraejemplo)?
Entonces, si i no es localmente optima, habr a que presentar un vecino suyo con menor
costo como un contraejemplo. La clase PLS fue dise nado para capturar la complejidad
de b usqueda local. Un problema de b usqueda local L pertenece a PLS si existen tres
algoritmos de tiempo polinomial A
L
, B
L
y C
L
tales que.
(I) Dada una palabra x del lenguaje 0, 1

, A
L
determina si x es una representaci on
binaria de una instancia (o
x
, f
x
) de L, y si lo es, produce alguna soluci on factible
i
0
o
x
.
(II) Dada una instancia x (en su representaci on binaria) y un i (en representaci on bina-
ria), el algoritmo B
L
determina si i o
x
, y si lo es, calcula el costo f
x
(i).
(III) Dada una instancia x = (o
x
, f
x
,
x
) y una soluci on i, el algoritmo C
L
determina si i
es un optimo local, y si no lo es, produce un vecino i
x
con costo (estrictamente)
mejor al costo de i.
Podemos denir versiones de b usqueda de las clases P y NP. La clase NP
S
consiste de
relaciones 1 0, 1

0, 1

tal que para una relaci on 1,


1. si (x, y) 1, [y[ = O(() g([x[) donde g es un polinomio (polinomialmente acota-
da), y
10.2. B

USQUEDA LOCAL 163
2. existe un algoritmo polinomial que determina si un dado par (x, y) pertenece a 1
(polinomialmente reconocida).
Si adem as existe un algoritmo polinomial que decide a 1 (o sea, dado x, produce un
(x, y) 1 si tal par existe y reporta no en otro caso), la relaci on pertenece a la clase
P
S
. Aplica que P
S
= NP
S
si y s olo si P= NP. Adem as, se puede demostrar que
P
S
PLS NP
S
, (10.12)
aunque no se sabe si son subconjuntos propios. Parece improbable que sean iguales P
S
y
PLS y hay fuertes indicaciones (aunque no demostraci on formal) que PLS no coindica
con NP
S
.
Tambi en han denido reducciones para la clase PLS y encontrado problemas completos,
como por ejemplo TSP y MAXCUT.
164 CAP

ITULO 10. ALGORITMOS DE APROXIMACI



ON
Captulo 11
Algoritmos aleatorizados
Algoritmos aleatorizados son algoritmos que incorporan adem as de instrucciones deter-
ministas algunas elecciones al azar. Adem as del dise no de algoritmos aleatorizados, prob-
abilidades tambi en juegan un papel importante en an alisis del caso promedio (secci on
7.3).
Un ejemplo simple de un algoritmo aleatorio sera una versi on de la ordenaci on r apida
donde el elemento pivote est a elegido uniformemente al azar entre los elementos para
ordenar.
En esta secci on esperamos que el lector tenga conocimientos b asicos de probabilidad
buenos libros de texto sobre probabilidad incluyen el libro de Milton y Arnold [12]. Seg un
nuestra notaci on, X y Y son variables aleatorias, x y y son algunas valores que pueden
tomar estas variables, Pr [X = x] es la probabilidad que X tenga el valor x, E[X] es la
esperanza (matem atica) (tambi

A c _n: valor esperado)


E[X] =

x
xPr [X = x] , (11.1)
donde la sumaci on extiende por todo x en el rango de X, y Var [X] la varianza
Var [X] = E
_
(X E[X])
2

= E
_
X
2

(E[X])
2
. (11.2)
Al dise nar un algoritmo que haga elecciones al azar, el an alisis del comportamiento
del algoritmo necesariamente involucra calculaciones de probabilidades para determinar
propiedades tales como
Con qu e probabilidad el algoritmo da el resultado correcto?
Qu e es la esperanza del n umero de los pasos de computaci on necesarios para su
ejecuci on?
(En el caso de algoritmos de aproximaci on aleatorizadas:) Qu e es la deviaci on
esperada de la soluci on optima?
165
166 CAP

ITULO 11. ALGORITMOS ALEATORIZADOS


Una observaci on interesante aqu es que estamos utilizando una denici on m as exible
de algoritmo: un algoritmo aleatorizado tiene permiso para dar una salida incorrecta,
mientras al denir algoritmos (deterministas) exigimos que siempre termine su ejecuci on
y que el resultado sea el deseado. Sin embargo, no todos los algoritmos aleatorizados dan
resultados incorrectos el caso ideal sera que un resultado incorrecto sea imposible o
que ocurra con probabilidad muy peque na.
Algoritmos con una probabilidad no cero de fallar (y probabilidad no cero de dar el resul-
tado correcto) se llaman algoritmos Monte Carlo. Un algoritmo de decisi on tipo Monte
Carlo tiene error bilateral si la probabilidad de error es no cero para los ambos casos:
con la respuesta si y con la respuesta no. Tal algoritmo tiene error unilateral si siem-
pre contesta correctamente en uno de los dos casos pero tiene probabilidad no cero de
equivocarse en el otro.
Un algoritmo que siempre da el resultado correcto se dice un algoritmo Las Vegas. En tal
algoritmo, la parte aleatoria est a limitada al tiempo de ejecuci on del algoritmo, mientras
los algoritmos Monte Carlo tienen hasta sus salidas aleatorias.
Si tenemos un algoritmo Monte Carlo con probabilidad de error 0 < p < 1, lo podemos
convertir a un algoritmo Monte Carlo con probabilidad de error arbitrariamente peque na
0 < q p simplemente por repetir ejecuciones independientes del algoritmo original k
veces tal que p
k
q.
Cada algoritmo Monte Carlo que sabe distinguir entre haberse equivocado se puede con-
vertir a un algoritmo Las Vegas por repertilo hasta obtener exito este tiene obviamente
efectos en su tiempo de ejecuci on. Tambi en si tenemos un algoritmo r apido para vericar
si una dada soluci on es correcta (cf. los certicados concisos de los problemas NP),
podemos convertir un algoritmo Monte Carlo a un algoritmo Las Vegas por repetirlo.
Resumimos ahora algunos resultados de la teora de probabilidad que pueden resultar
utiles al contestar las preguntas mencionadas. El libro de texto de Mitzenmacher y Upfal
[13] contiene varios ejemplos concretos de su uso, igual como el libro de Motwani y
Raghavan [14].
Desigualdad de Jensen Si f es una funci on convexa, E[f(X)] f(E[X]).
Desigualdad de Markov Sea X una variable aleatoria no negativa. Para todo > 0,
Pr [X ]
1
E[X].
Desigualdad de Chebyshev Para todo > 0, Pr [[X E[X][ ]
2
Var [X].
Cotas de Chernoff Para > 0, para todo t > 0 aplica que Pr [X ] e
t
E
_
e
tX

y para todo t < 0 aplica que Pr [X ] e


t
E
_
e
tX

.
El m etodo probabilista Sea X una variable aleatoria denida en el espacio de probabil-
idad o tal que E[X] = . Entonces Pr [X ] > 0 y Pr [X ] > 0.
El m etodo del momentum segundo Sea X una variable aleatoria entera. Entonces
Pr [X = 0] (E[X])
2
Var [X].
11.1. COMPLEJIDAD COMPUTACIONAL 167
11.1. Complejidad computacional
La clase RP (tiempo polinomial aleatorizado, ingl es: randomized polynomial time) es la
clase de todos los lenguajes L que cuenten con un algoritmo aleatorizado A con tiempo
de ejecuci on polinomial del peor caso tal que para cada entrada x

x L = Pr [A(x) = s] p,
x / L = Pr [A(x) = s] = 0,
(11.3)
donde p > 0 (com unmente se dene p = 0,5, pero la elecci on del valor de p es de verdad
arbitraria). El algoritmo A es entonces un algoritmo Monte Carlo con error unilateral.
La clase coRP es la clase con error unilateral en el caso x / L pero sin error con
las entradas x L. La existencia de un algoritmo Las Vegas polinomial muestra que un
lenguaje pertenece a las clases RPy coRPlas dos. De hecho, esta clase de lenguajes con
algoritmos Las Vegas polinomiales se denota por ZPP (tiempo polinomial aleatorizado
cero-error, ingl es: zero-error probabilistic polynomial time):
ZPP = RP coRP. (11.4)
Una clase m as d ebil es la PP (tiempo polinomial aleatorizada, ingl es: probabilistic poly-
nomial time) que consiste de los lenguajes L para las cuales existe un algoritmo aleator-
izado A con tiempo de ejecuci on de peor caso polinomial y para todo x

aplica
que
x L = Pr [A(x) = s] >
1
2
,
x / L = Pr [A(x) = s] <
1
2
.
(11.5)
Por ejecutar A varias veces, podemos reducir la probabilidad de error, pero no podemos
garantizar que un n umero peque no de repeticiones basta para mejorar signicativamente
la situaci on.
Una versi on m as estricta de PP se llama BPP (tiempo polinomial aleatorizado, ingl es:
bounded-error probabilistic polynomial time) que es la clase de los lenguajes L para las
cuales existe un algoritmo aleatorizado A con tiempo de ejecuci on de peor caso polino-
mial y para todo x

aplica que
x L = Pr [A(x) = s]
3
4
,
x / L = Pr [A(x) = s]
1
4
.
(11.6)
Para esta clase se puede demostrar que la probabilidad de error se puede bajar a 2
n
con
p(n) iteraciones donde p() es un polinomio.
Problemas abiertos interesantes incluyen por ejemplo si BPP es un subclase de NP. Para
m as informaci on sobre las clases de complejidad aleatorizada, recomendamos el libro de
Papadimitriou [15] y el libro de Motwani y Raghavan [14].
168 CAP

ITULO 11. ALGORITMOS ALEATORIZADOS


11.2. Problema de corte mnimo
Como un ejemplo, veremos un algoritmo aleatorizado para el problema MINCUT. Ahora
vamos a considerar multigrafos, o sea, permitimos que entre un par de v ertices exista
m as que una arista en el grafo de entrada G. Considerando que un grafo simple es un
caso especial de un multigrafo, el resultado del algoritmo que presentamos aplica igual a
grafos simples.
Estamos buscando un corte (ver secci on 4.5.2) C V de G, o sea, una partici on (C, V
C). La capacidad del corte es el n umero de aristas que lo crucen. Todo lo que mostramos
aplicara tambi en para grafos (simples o multigrafos) ponderados con pesos no negativos.
Para que sea interesante el problema, habr a que suponer que la entrada G sea conexo
(vericado por ejemplo por DFS en tiempo polinomial) con varios componentes, el
corte mnimo con capacidad cero se obtiene por agrupar algunos componentes en C y los
dem as en V C.
El problema MINCUT se puede resolver por un algoritmo que compute el ujo m aximo
del grafo de entrada. Eso, aunque es polinomial, suele ser algo lento en la pr actica. El
mejor algoritmo determinista conocido para el ujo m aximo tiene complejidad asint otica
O(nmlog(n
2
/m)) y habra que repetirlo n(n 1) veces para considerar todos los pares
de fuente-sumidero en la forma m as simple.
Sin embargo, se puede demostrar que basta con (n 1) repeticiones, pero en cualquier
caso, todo esto signica que para resolver el problema de corte mnimo, tenemos un algo-
ritmo determinista de tiempo (n
2
m). Con unos trucos m as se puede mejorar la situaci on
as que la complejidad de MINCUT queda tambi en en O(nmlog(n
2
/m)). Para grafos
densos, m O(n
2
), que hace esa complejidad todava bastante lento.
En esta secci on desarrollamos un algoritmo aleatorizado que resuelve a MINCUT m as
r apidamente, en tiempo O
_
n
2
(log n)
O(1)
_
.
La operaci on b asica del algoritmo ser a la contracci on de una arista. Al contraer la arista
u, v reemplazamos los dos v ertices u u v por un v ertice nuevo w. La arista contrada
desaparece, y para toda arista s, u tal que s / u, v, movemos la arista a apuntar a w
por reemplazarla por s, w. Igualmente reemplazamos aristas s, u por aristas s, w
para todo s / u, v. La gura 11.1 muestra un ejemplo.
Si contraemos un conjunto F E, el resultado no depende del orden de contracci on.
Despu es de las contracciones, los v ertices que quedan representan subgrafos conexos del
grafo original. Empezando con el grafo de entraga G, si elegimos iterativamente al azar
entre las aristas presentes una para contracci on hasta que quedan s olo dos v ertices, el
n umero de aristas en el multigrafo nal entre esos dos v ertices corresponde a un corte de
G.
Con una estructura unir-encontrar, podemos f acilmente mantener informaci on sobre los
subgrafos representados. Al contraer la arista u, v, el nombre del conjunto combinado
en la estructura ser a w y sus miembros son u u w; originalmente cada v ertice tiene su
propio conjunto. Entonces, podemos imprimir los conjuntos C y V C que corresponden
11.2. PROBLEMA DE CORTE M

INIMO 169
Figura 11.1: La arista gruesa roja en el grafo original (un fragmento mostrado a la izquier-
da) est a contraida as que sus puntos nales (los v ertices amarillos) est an reemplazados
por un s olo v ertice (rojo en el frangmento modicado a la derecha) y las aristas entrantes
de los v ertices eliminados est an redirigidas al v ertice de reemplazo.
a los dos v ertices que quedan en la ultima iteraci on.
La elecci on uniforme de una arista para contraer se puede lograr en tiempo lineal O(n).
En cada iteraci on eliminamos un v ertice, por lo cual el algoritmo de contracci on tiene
complejidad cuadr atica en n.
Lo que queda mostrar es que el corte as producido sea el mnimo con una probabili-
dad no cero. As por repetir el algoritmo, podramos aumentar la probabilidad de haber
encontrado el corte mnimo. Las siguientes observaciones nos ayudan:
Si la capacidad del corte mnimo es k, ning un v ertice puede tener grado menor a k.
El n umero de aristas satisface m
1
2
nk si la capacidad del corte mnimo es k.
La capacidad del corte mnimo en G despu es de la contracci on de una arista es
mayor o igual a la capacidad del corte mnimo en G.
Fijamos un corte mnimo de G = (V, E) con las aristas F E siendo las aristas que
cruzan de C a V C. Denotamos [F[ = k.
Suponemos que estamos en la iteraci on i del algoritmo de contracci on y que ninguna
arista en F ha sido contraida todava. Quedan n
i
= n i + 1 aristas en el grafo actual
G
i
. Por la tercera observaci on, el conjunto de aristas F todava dene un corte mnimo
en el grafo actual G
i
y los v ertices de los dos lados del corte denido por las aristas en F
corresponden a los conjuntos C y V C, aunque (posiblemente) en forma contraida.
El grafo G
i
tiene, por la segunda observaci on, por lo menos
1
2
n
i
k aristas, por lo cual la
probabilidad que la siguiente iteraci on contraiga una de las aristas de F es menor o igual
170 CAP

ITULO 11. ALGORITMOS ALEATORIZADOS


a 2n
i
1
. As podemos acotar la probabilidad p que ninguna arista de F sea contraida
durante la ejecuci on del algoritmo:
p
n2

i=1
(1 2(n i + 1)
1
)
=
_
n
2
_
1
=
2
n(n1)
.
(11.7)
Hemos establecido que un corte mnimo especdo de G corresponde al resultado del
algoritmo de contracci on con probabilidad p (n
2
). Como cada grafo tiene por lo
menos un corte mnimo, la probabilidad de exito del algoritmo es por lo menos (n
2
).
Si repetimos el algoritmo, digamos O(n
2
log n) veces ya da raz on de esperar que el corte
de capacidad mnima encontrado sea el corte mnimo del grafo de entreda.
Para hacer que el algoritmo Monte Carlo resultante sea m as r apida, hay que aumentar
la probabilidad de que un corte mnimo pase por el algoritmo sin ser contraido. Una
posibilidad de mejora est a basada en la observaci on que la probabilidad de contraer una
arista del corte mnimo crece haca el nal del algoritmo. Si en vez de contraer hasta
que queden dos v ertices, contraemos primero hasta aproximadamente n/

2 v ertices y
despu es hacemos dos llamadas recursivas independientes del mismo algoritmo con el
grafo G
i
que nos queda, un an alisis detallado muestra que llegamos a la complejidad
O
_
n
2
(log n)
O(1)
_
. La mayora de los detalles de la demostraci on est an explicados en el
libro de Motwani y Raghavan [14].
Captulo 12
Transiciones de fase
En este captulo, estudiamos un fen omeno interesante de complejidad en algunos proble-
mas. Al generar instancias del problema aleatoriamente seg un alg un conjunto de par amet-
ros, en algunas ocaciones se ha observado que ciertas combinaciones de los par ametros
de generaci on causan que instancias del mismo tama no tienen un tiempo de ejecuci on
promedio mucho m as largo de lo que uno obtiene con otras combinaciones. Ese pico
en el tiempo de ejecuci on con una cierta combinaci on de par ametros se conoce como una
transici on de fase. Este captulo est a basada en el libro de Hartmann y Weigt [8].
12.1. Modelo de Ising
Un vidrio de espn (ingl es: spin glass) es un material magn etico. Los atomos del material
pueden acoplarse aleatoriamente de la manera ferromagn etica o altenativamente de la
manera antiferromagn etica.
En ferromagnetismo, todos los momentos magn eticos de los partculos de la materia se
alignan en la misma direcci on y sentido. En falta de presencia de un campo magn etico
intenso, las alineaciones pueden est ar aleatorias, pero al someter el material a tal campo
magn etico, los atomos gradualmente se alinean. Tal organizaci on permanece vigente por
algo de tiempo a un despu es de haber eliminado el campo magn etico que lo caus o.
En antiferromagnetismo, los atomos se alinean en la misma direcci on pero sentido inverso
as que un atomo tiene el sentido opuesto al sentido de sus vecinos. En la presencia de un
campo magn etico muy intenso, se puede causar que se piera algo del antiferromagnetismo
y que los atomos se alinean seg un el campo. Los dos tipos de magnetismo se pierde en
temperaturas altas.
Dos atomos con interacci on ferromagn atica llegan a su estado de energa mnima cuando
tienen el mismo sentido, mientras dos atomos con interacci on antiferromagn etica llegan
a su estado de energa mnima al tener sentidos opuestos.
El modelo matem atico de Ising representa las interacciones como aristas y los atomos
171
172 CAP

ITULO 12. TRANSICIONES DE FASE


como v ertices
i
. Cada v ertice puede tener uno de dos valores,

i
= 1, 1 (12.1)
que representan los dos posibles sentidos de alineaci on. Denotamos el sistema por G =
(V, E).
Una funci on J
ij
da la fuerza de la interacci on entre los v ertices i y j (cero si no hay
interacci on) y un valor no cero implica la presencia de una arista en E. En una interacci on
ferromagn etica entre i y j, J
ij
> 0, mientras interacciones antiferromagn eticas tienen
J
ij
< 0.
Se usa el t ermino frustraci on a referir a situaciones donde las combinaciones de interac-
ciones que no permiten a todo los part uculos llegar a su estado de energa mnima (ver
gura 12.1 para un ejemplo).
Figura 12.1: Un sistema de tres atomos (representados por los v ertices) con dos inter-
acciones ferromagn eticas (aristas azules) y una interacci on antiferromagn etica (aristas
rojas) que no puede alcanzar estado de energa mnima. En cada una de las ocho posi-
bles conguraciones de los sentidos (marcados con y ), por lo menos una interacci on
est a en conicto (marcado con una zeta sobre la arista).
La funci on hamiltoniana se dene como
H(G) =

{i,j}E
J
ij

j
. (12.2)
Es una medida de energa total del sistema G. Pensamos en J
ij
como algo jo, mientras
los valores de
i
pueden cambiar seg un la temperatura ambiental. En temperatura T = 0,
el sistema alcanza su energa mnima. Las conguraciones que tienen energa mnima se
llaman estados fundamentales (ingl es: ground state).
En temperaturas bajas el sistema queda organizado para minimizar conictos de inter-
acciones. Al subir la temperatura del sistema, en un cierto valor crtico T
c
de repente se
pierde la organizaci on global.
Cuando ambos tipos de interacciones est an presentes, hasta determinar el valor mnimo
alcanzable para la funci on hamiltoniana se complica. Tpicamente, en los casos estudia-
dos, las aristas forman una reja regular para dos dimensiones, el problema de encontrar
12.2. PROBLEMA DEL VIAJANTE (TSPD) 173
un estado fundamental es polinomial, pero en tres dimensiones, es exponencial. Tambi en
has estudiado sistemas tipo Ising en grafos aleatorios uniformes.
12.2. Problema del viajante (TSPD)
Generamos instancias para el TSPD, o sea, la variaci on de decisi on del problema de vi-
ajante, por colocar n v ertices (o sea, ciudades) aleatoriamente en un plano cuadr atico de
supercie A; denotamos las coordenadas de v ertice i por x
i
y y
i
. Los costos de las aristas
ser an las distancias euclidianas de los puntos de los v ertices:
dist (i, j) =
_
(x
1
x
j
)
2
(y
i
y
j
)
2
. (12.3)
La pregunta es si la instancia contiene un ciclo hamiltoniano de costo total menor o igual
a un presupuesto D. Entonces, para crear una instancia del problema, hay que elegir los
valores n, Ay D. La probabilidad de encontrar un ciclo hamiltoniano de largo D depende
obviamente de una manera inversa del supercie elegido A y del n umero de v ertices.
Denimos un largo escalado
=
D

An
(12.4)
y estudiamos la probabilidad p que exista en una instancia as generada un ciclo hamilto-
niano de largo con diferentes valores de n y un valor jo A. Con diferentes valores de n,
uno observa que con peque nos valores de (menores a 0,5), p 0, mientras para valores
grandes de (mayores a uno), p 1. Las curvas de p versus suben r apidamente desde
cero hasta uno cerca del valor = 0,78 [18], independientemente del n umero de v ertices.
Al estudiar el tiempo de ejecuci on de un cierto algoritmo tipo ramicar-acotar para TSPD,
los tiempos mayores ocurren con instancias que tienen valores de cerca de 0,78.
12.3. Grafos aleatorios uniformes
En esta secci on estudiamos comportamiento de grafos aleatorios, un ejemplo cl asico de
transiciones de fase de cierto tipo. Seguimos por mayor parte el libro de texto de Bollobas
[3], aunque no lo alcanzamos en el nivel formalidad.
12.3.1. Familias y propiedades
Una familia ( de grafos incluye todos los grafos que cumplen con la denici on de la
familia. La denici on est a tpicamente compuesta por par ametros que controlen el tama no
de la familia. Por ejemplo, todos los grafos con k v ertices forman una familia y todos los
grafos k-regulares otra familia (y su intersecci on no es vaca).
174 CAP

ITULO 12. TRANSICIONES DE FASE


Una propiedad de grafos de la familia ( es un subconjunto cerrado T (. Cuando
grafo T, se dice que el grafo G tiene la propiedad T. Lo que signica ser cerra-
do es que al tener dos grafos G T y G

(, si aplica que G y G

sea isomorfos,
necesariamente G

T tambi en.
Una propiedad T es monotona si de G T y G es subgrafo de G

, implica que G

T.
Un ejemplo de tal propiedad sera el grafo contiene un tri angulo o el grafo contiene
un camino de largo k por a nadir aristas o v ertices al grafo, no es posible hacer desa-
parecer estas propiedades.
Una propiedad es convexa si el hecho que G

es subgrafo de G y G

es subgrafo de G

tales que G

, G T, implica que tambi en G

T.
Decimos que casi cada grafo G = (V, E) de la familia (
n
la denici on de cual depende
de n = [V [ tiene T si para G (
lm
n
Pr [G T] = 1. (12.5)
12.3.2. Modelos de generaci on
Para generar un grafo aleatorio uniforme (simple, no dirigido), hay dos modelos b asicos:
en el modelo de Gilbert, se ja n y una probabilidad p. Para generar un grafo G = (V, E),
asignamos V = 1, 2, . . . , n y generamos E de la manera siguiente: considera a la vez
cada uno de los
_
n
2
_
pares de v ertices distintos u y v e incluye la arista u, v independi-
entemente al azar con probabilidad p. Con este modelo, conodido como el modelo G
n,p
,
tenemos
E[m] = p
_
n
2
_
(12.6)
E[deg (u)] = p(n 1). (12.7)
La otra opci on fue estudiada en detalle por Erd os y R enyi [5, 6]: jar los dos n y m y
elegir uniformemente al azar uno de los posibles conjuntos de m aristas. El n umero de
posibles maneras de elegir las aristas entre v ertices distintos es
__
n
2
_
m
_
, (12.8)
aunque en realidad los automorsmos reducen el n umero de grafos distintos que se pueda
generar. El segundo modelo se conoce como G
n,m
.
Una tercera opci on para generar grafos uniformes dado un conjunto de n v ertices V =
1, 2, . . . , n, es denir un proceso (estoc astico) como una sucesi on (G
t
)
N
0
donde t rep-
resenta el tiempo discreto que toma valores t = 0, 1, . . . , N tal que
(I) cada G
t
es un grafo en el conjunto V , es decir G
t
= (V, E
t
) lo que cambia
durante el proceso es el conjunto de las aristas;
12.3. GRAFOS ALEATORIOS UNIFORMES 175
(II) G
t
tiene t aristas para cada valor de t, o sea, [E
t
[ = t;
(III) G
t1
es un subgrafo de G
t
, empezando de G
0
y terminando en G
N
: E
0
E
1

. . . E
N
; y
(IV) N =
_
n
2
_
.
Podemos denir un mapeo entre el espacio de todos los procesos posibles en el momento
t = m y los grafos G
n,m
, por lo cual los grafos G
n,m
son todos posibles resultados
intermedios de todos los procesos posibles que cumplan con la denici on.
12.3.3. Comportamiento repentino
Suponemos que T sea una propiedad monotona de grafos. Observamos el proceso de gen-
eraci on (G
t
)
N
0
y checamos en cada instante t si o no G
t
tiene la propiedad T. Llamamos
el momento cuando G
t
T el tiempo de llegada (ingl es: hitting time) del proceso a la
propiedad,
= (n) = mn
t0
G
t
T . (12.9)
Nota que por ser monotona T, G
t
T para todo t y que puede variar entre
diferentes instancias del proceso con un valor n jo.
Podemos denir una funci on umbral para la propiedad T en t erminos del valor de n
utilizado al denir el proceso: U(n) es la funci on umbral de T si aplica que
Pr
_
U(n)f(n)
1
< (n) < U(n)f(n)

1 (12.10)
con cualquier funci on f(n) . En t erminos vagos, la funci on umbral es el tiempo
crtico antes de que es poco probable que G
t
tenga T y despu es de que es muy probable
que la tenga. Se ha mostrado, ya desde el trabajo de Er os y R enyi, que varias propiedades
monotonas aparecen muy de repente en tales procesos: casi ning un G
t
los tiene antes de
un cierto momento y casi todos G
t
lo tienen despu es de ese momento, sobre el conjunto
de todos los N! procesos posibles.
12.3.4. Aparici on de un componente gigante
Continuamos con los procesos (G
t
)
N
0
y estudiamos el tama no de los componentes conex-
os de G
t
. Por denici on, en G
0
cada v ertice est a aislado y G
N
es el grafo completo de n
vertices, K
n
. Denimos T como la propiedad que el grafo sea conexo. En alg un momen-
to,

_
n 1,
_
n 1
2
_
+ 1
_
, (12.11)
el grafo llega a tener la propiedad T por la primera vez. La cota inferior viene del caso
mejor: las primeras n 1 aristas forman un arbol de expansi on. El cota superior es el
176 CAP

ITULO 12. TRANSICIONES DE FASE


peor caso: uno de los n v ertices permanece aislado as que todas las aristas a nadidas caen
entre los dem as hasta que ellos ya formen una camarilla de n1 v ertices, despu es de que
ya necesariamente se conecta el grafo al a nadir la arista siguiente.
En vez de estudiar exactamente el momento cuando todo el grafo ya sea conexo, resumi-
mos algunos resultados sobre la cantidad de aristas necesarias para que el grafo tenga un
componente conexo grande. Fijamos un valor m con la ayuda de un par ametro constante
c tal que
m = cn, (12.12)
donde c [0,
(n1)]
2
. El resultado interesante sobre los tama nos de los componentes es
que con c <
1
2
, el tama no del mayor componente conexo en un G
t
cuando t = m es de
orden logartmico en n, pero para c >
1
2
que es todava un valor muy peque no un
G
t
cuando t = m tiene un componente conexo de aproximadamente n v ertices donde
> 0 unicamente depende del valor de c y el resto de los v ertices pertecen a componentes
mucho menores.
Interpretando el valor de c llegamos a notar que est a relacionado con el grado promedio
de los v ertices:

vV
deg (v)
n
=
2m
n
=
2cn
n
2c. (12.13)
Entonces, cuando el grado promedio del grafo llega a aproximadamente uno (o sea c
1
2
),
aparece un componente gigante en el G
t
.
12.4. Cubierta de v ertices (VERTEX COVER)
Tambi en en el problema de cubierta de v ertices se encuentra una transici on de fase con un
algoritmo ramicar-acotar, usando como el modelo de generaci on el G
n,p
tal que p = c/n.
De la ecuaci on 12.7, tenemos que el grado promedio k de un v ertice en tal grafo es
k = p(n 1) = c
n 1
n
c, (12.14)
y podemos hablar del par ametro c como en grado promedio (para grandes valores de n).
Estudiando la probabilidad q de la existencia de una cubierta con una cierta candidad x
de v ertices cuando se ja c, de nuevo se encuentra que para valores bajos de x, q es bajo,
mientras para valores grandes de x, q es alto, y la subida ocurre de una manera repentina
en un cierto valor de x sin importar el valor de n.
Bibliografa
[1] Emile Aarts and Jan Karel Lenstra. Local Search in Combinatorial Optimization.
John Wiley & Sons, Inc., Chichester, UK, 1997.
[2] G. M. Adelson-Velskii and E. M. Landis. An algorithm for the organization of
information. Soviet Mathematics Doklady, 3:12591263, 1962.
[3] B ela Bollob as. Random Graphs. Number 73 in Cambridge Studies in Advanced
Mathematics. Cambridge University Press, Cambridge, UK, second edition, 2001.
[4] Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein.
Introduction to Algorithms. McGraw-Hill Book Co., Boston, MA, USA, second
edition, 2001.
[5] P al Erd os and Alfr ed R enyi. On random graphs i. In Selected Papers of Alfr ed
R enyi, volume 2, pages 308315. Akad emiai Kiad o, Budapest, Hungary, 1976. First
publication in Publ. Math. Debrecen 1959.
[6] P al Erd os and Alfr ed R enyi. On the evolution of random graphs. In Selected Papers
of Alfr ed R enyi, volume 2, pages 482525. Akad emiai Kiad o, Budapest, Hungary,
1976. First publication in MTA Mat. Kut. Int. K ozl. 1960.
[7] Michael R. Garey and David S. Johnson. Computers and Intractability : A Guide to
the Theory of NP-Completeness. W. H. Freeman, San Francisco, CA, USA, 1979.
[8] Alexander K. Hartmann and Martin Weigt. Phase Transitions in Combinatorial
Optimization Problems : Basics, Algorithms and Statistical Mechanics. Wiley-VCH,
Weinheim, Germany, 2005.
[9] Holger H. Hoos and Thomas St utzle. Stochastic Local Search: Foundations and
Applications. Morgan Kaufmann, San Francisco, CA, USA, 2005.
[10] Jon Kleinberg and

Eva Tardos. Algorithm Design. Addison-Wesley / Pearson Edu-
cation, Inc., Boston, MA, USA, 2006.
[11] Donald E. Knuth. Sorting and Searching, volume 3 of The Art of Computer Pro-
gramming. Addison-Wesley, Reading, MA, USA, second edition, 1998.
177
178 BIBLIOGRAF

IA
[12] Janet Susan Milton and Jesse C. Arnold. Introduction to Probability and Statistics :
Principles and Applications for Engineering and the Computing Sciences. McGraw-
Hill, Singapore, third edition, 1995.
[13] Michael Mitzenmacher and Eli Upfal. Probability and Computing : Randomized
Algorithms and Probabilistic Analysis. Cambridge University Press, New York,
NY, USA, 2005.
[14] Rajeev Motwani and Prabhakar Raghavan. Randomized Algorithms. Cambridge
University Press, Cambridge, England, UK, 1995.
[15] Christos H. Papadimitriou. Computational Complexity. Addison Wesley, Reading,
MA, USA, 1994.
[16] Christos H. Papadimitriou and Kenneth Steiglitz. Combinatorial Optimization :
Algoritms and Complexity. Dover Publications, Inc., Mineola, NY, USA, 1998.
[17] Vijay V. Vazirani. Approximation Algorithms. Springer-Verlag GmbH, Berlin, Ger-
many, 2001.
[18] Ren e V. V. Vidal, editor. Applied Simulated Annealing. Lecture Notes in Economics
& Mathematical Systems. Springer-Verlag GmbH, Berlin / Heidelberg, Germany,
1993.
Listas de smbolos
Elementos y ordenamiento
a, b, . . . elementos
a = b el elemento a es igual al elemento b
a ,= b el elemento a no es igual al elemento b
a b el elemento a es approximadamente igual al elemento b
a < b el elemento a es menor al elemento b
a > b el elemento a es mayor al elemento b
a b el elemento a es menor o igual al elemento b
a b el elemento a es mayor o igual al elemento b
a b el elemento a es mucho menor al elemento b
a b el elemento a es mucho menor al elemento b
179
180 BIBLIOGRAF

IA
Conjuntos y conteo
A, B, . . . conjuntos
R el conjunto de los n umeros reales
Z el conjunto de los n umeros enteros
el conjunto vaci o
a
1
, a
2
, . . . , a
n
un conjunto de n elementos
a A el elemento a pertecene al conjunto A
a / A el elemento a no pertenece al conjunto A
[A[ la cardinalidad del conjunto A
a [ a A el conjunto de los elementos a que cumplen con la
propiedad que a A
A = B los conjuntos A y B contienen los mismos elementos
A ,= B los conjuntos Ay B no contienen todos los mismos elemen-
tos
A B el conjunto A es un subconjunto de B o igual a B
A B el conjunto A es un subconjunto propio de B
A B el conjunto A no es un subconjunto de B
A B la uni on de los conjuntos A y B
A B la intersecc on de los conjuntos A y B
n
_
i=1
A
i
la uni on de los n conjuntos A
1
, A
2
, . . . , A
n
n

i=1
A
i
la intersecci on de los n conjuntos A
1
, A
2
, . . . , A
n

A el conjunto que es complemento del conjunto A


A B la diferencia de los conjuntos A y B
(a, b) un par ordenado de elementos
A B el producto cartesiano de los conjuntos A y B
k! el factorial de k
_
n
k
_
el coeciente binomial
BIBLIOGRAF

IA 181
Mapeos y funciones
g : A B un mapeo del conjunto A al conjunto B, donde A es el do-
minio y B el rango
g(a) la imagen del elemento a A en el rango bajo el mapeo g
g
1
(b) la imagen inversa del elemento b B en el dominio bajo el
mapeo g
f(a) el valor asignado al elemento a por la funcci on f
[x[ el valor absoluto de x R
log
b
(x) el logaritmo a base b de x R, x > 0
f(n) = O(g(n)) [f(n)[ c [g(n)[ para alg un constante c y valores sucien-
temente grandes de n
f(n) = (g(n)) [f(n)[ [g(n)[ para alg un constante c y valores suciente-
mente grandes de n
f(n) = (g(n)) c

[g(n)[ [f(n)[ c [g(n)[ para algunos constantes c, c

y
valores sucientemente grandes de n
L ogica matem atica
a una proposici on l ogica
x
i
una variable booleana
verdadero
falso
T una asignaci on de valores
una expresi on booleana
T [= T satisface
[= es una tautologa
a la negaci on: no a
a b la disyunci on: a o b
a b la conjunci on: a y b
a b la implicaci on: si a, entonces b
a b la equivalencia: a si y s olo si b
a A cuenticaci on universal: para todo a A
a A cuanticaci on existencial: existe un a A
182 BIBLIOGRAF

IA
Grafos
V un conjunto de v ertices
E un conjunto de aristas
n el orden de un grafo
m el n umero de aristas de un grafo
G un grafo G = (V, E)
v, w, u, . . . v ertices
v, w una arista no dirigida entre los v ertices v y w
v, w una arista dirigida del v ertice v al v ertice w
(v) w el peso de la arista v, w o v, w
deg (v) el grado del v ertice v

deg (v) el grado de entrada del v ertice v

deg (v) el grado de salida del v ertice v


dist (v, w) la distancia del v ertice v al v ertice w
diam(G) el di ametro del grafo G
(G) la densidad del grafo G
K
k
el grafo completo de orden k
K
k,
el grafo bipartitio completo de conjuntos de v ertices de car-
dinalidades k y
Probabilidad
X, Y, Z, . . . variables aleatorias
x, y, z, . . . valores posibles de variables aleatorias
Pr [X = x] la probabilidad que X asume el valor x
Pr [X = x [ Y = y] la probabilidad condicional que X = x dado que Y = y
E[X] el valor esperado de X
Var [X] la varianza de X
Lista de abreviaciones
Ingl es Espa nol
BFS breadth-rst search b usqueda en anchura
CNF conjuntive normal form forma normal conjuntiva
DFS depth-rst search b usqueda en profundidad
DNF disjuntive normal form forma normal disyunctiva
NTM nondeterministic Turing machine m aquina Turing no determinstica
PTAS polynomial-time approximation
scheme
esquema de aproximaci on de tiempo
polinomial
RAM random access machine m aquina de acceso aleatorio
TSP travelling salesman problem problema del viajante
183
184 BIBLIOGRAF

IA
Minidiccionario espa nol-ingl es
acomplamiento matching
aleatorio random
algoritmo algorithm
an alisis asint otica asymptotic analysis
arbol tree
arbol binario binary tree
arbol cubriente spanning tree
arbol de expansi on spanning tree
arista edge
arreglo array
barrer sweep
biselado splay
b osque forest
bucle loop
burbuja bubble
b usqueda search
cadena string
capa layer
camarilla clique
camino path
ciclo cycle
clausura closure
clave key
cola queue
cota bound
complejidad complexity
conexo connected
conjunto set
cubierta cover
dirigido directed
estructura de datos data structure
enlazada linked
ujo ow
fuerza bruta brute-force
185
186 BIBLIOGRAF

IA
grafo graph
hashing dispersi on
hoja leaf
hijo child
intratable intractable
lista list
montculo heap
no dirigido undirected
orden posterior postorder
orden previo preorder
ordenaci on sorting
padre parent
patr on pattern
peor caso worst case
pila stack
podar prune
ponderado weighted
successi on series
raz root
ramicar-acotar branch and bound
ramo branch
recorrido traversal
red network
rojo-negro red-black
v ertice vertex
voraz greedy
vuelta atr as backtracking
unir-encontrar union-nd
Minidiccionario ingl es-espa nol
algorithm algoritmo
array arreglo
asymptotic analysis an alisis asint otica
backtracking vuelta atr as
binary tree arbol binario
bound cota
branch ramo
branch and bound ramicar-acotar
brute-force fuerza bruta
bubble burbuja
child hijo
clique camarilla
closure clausura
complexity complejidad
connected conexo
cover cubierta
cycle ciclo
data structure estructura de datos
directed dirigido
dispersi on hashing
edge arista
ow ujo
forest b osque
graph grafo
greedy voraz
heap montculo
intractable intratable
key clave
layer capa
leaf hoja
linked enlazada
list lista
loop bucle
matching acomplamiento
187
188 BIBLIOGRAF

IA
network red
parent padre
path camino
pattern patr on
postorder orden posterior
preorder orden previo
prune podar
queue cola
random aleatorio
red-black rojo-negro
root raz
search b usqueda
series successi on
set conjunto
sorting ordenaci on
spanning tree arbol cubriente
spanning tree arbol de expansi on
splay biselado
stack pila
string cadena
sweep barrer
traversal recorrido
tree arbol
undirected no dirigido
union-nd unir-encontrar
vertex v ertice
weighted ponderado
worst case peor caso

Indice de guras
1.1. Gr acas de la funci on exponencial f(x) = exp(x): a la izquierda, en
escala lineal, mientras a la derecha, el eje y tiene escala logartmica (ver
la secci on 1.4). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2. Las funciones logartmicas por tres valores tpicos de la base: b
2, e, 10, donde e 2, 718 es el n umero neperiano. . . . . . . . . . . . 7
1.3. Gr acas de las potencias de dos: a la izquierda, con ejes lineales hasta
x = 7, y a la derecha, con ejes de escala logartmica hasta x = 64. . . . . 15
2.1. Crecimiento de algunas funciones com unmente encontrados en el an alisis
de algoritmos. Nota que el ordenaci on seg un magnitud cambia al comien-
zo, pero para valores sucientemente grandes ya no hay cambios. . . . . . 29
4.1. Un acoplamiento de un grafo peque no: las aristas gruesas negras forman
el acoplamiento y los v ertices azules est an acoplados. . . . . . . . . . . . 49
4.2. Un ejemplo del m etodo de camino aumentante para mejorar un
acoplamiento. En azul se muestra el acoplamiento actual. Se puede au-
mentar el tama no intercambiando la pertenencia con la no pertenencia al
acoplamiento de las aristas del camino aumentante indicado. . . . . . . . 49
4.3. Ejemplos de cubiertas: los v ertices verdes cubren todas las aristas y las
aristas amarillas cubren todos los v ertices. . . . . . . . . . . . . . . . . . 50
4.4. Una instancia de ejemplo para problemas de ujos: los v ertices grises
son el fuente (a la izquierda) y el sumidero (a la derecha). Se muestra la
capacidad de cada arista. . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.5. Un ejemplo de un grafo que es una instancia de un problema de ujos. Se
muestra cuatro cortes con sus capacidades respectivas. . . . . . . . . . . 52
5.1. En ejemplo de un grafo con ujo y su grafo residual. . . . . . . . . . . . 75
5.2. Los gadgets de la reducci on de 3SAT a HAMILTON PATH: a la izquier-
da, el gadget de elecci on, en el centro, el gadget de consistencia y a la
derecha, el gadget de restricci on. . . . . . . . . . . . . . . . . . . . . . . 78
189
190

INDICE DE FIGURAS
6.1. El peor caso de la b usqueda binaria: el elemento pivote es a[k] tal que k =

n
2
. Estamos buscando para el elemento peque no x en un arreglo que no
lo contiene, x < a[i] para todo i. La parte dibujada en gris est a rechazada
en cada iteraci on. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
6.2. El peor caso de ordenaci on con el algoritmo burbuja: los elementos est an
al comienzo en orden creciente y el orden deseado es decreciente. La posi-
ci on del procesamiento est a marcada con letra negrita y por cada cambio,
hay una lnea nueva. Las iteraciones est an separadas por lneas horizontales. 88
6.3. Un ejemplo de un arbol binario. . . . . . . . . . . . . . . . . . . . . . . 91
6.4. Un ejemplo de c omo dividir un arbol de ndice en varias p aginas de
memoria: las lneas agrupan juntos sub arboles del mismo tama no. . . . . 92
6.5. Un arbol binario de peor caso versus un arbol binario de forma optima,
ambos con ocho v ertices hojas. . . . . . . . . . . . . . . . . . . . . . . . 92
6.6. La inserci on de un elemento nuevo con la clave b tal que b < a resulta en
la creaci on de un v ertice de ruteo nuevo c, hijos del cual ser an los v ertices
hojas de a y b. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
6.7. Al eliminar una hoja con clave b, tambi en su padre, el v ertice de ruteo con
el valor a est a eliminado. . . . . . . . . . . . . . . . . . . . . . . . . . . 96
6.8. Cuatro rotaciones b asicas de arboles binarios para restablecer balance de
las alturas de los ramos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
6.9. Las dos rotaciones de los arboles rojo-negro son operaciones inversas una
para la otra. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
6.10. La uni on de dos arboles biselados. . . . . . . . . . . . . . . . . . . . . . 100
6.11. Una rotaci on doble derecha-derecha. . . . . . . . . . . . . . . . . . . . . 101
6.12. La denici on recursiva de un arbol bin omico B
k+1
en t erminos de dos
copias de B
k
. La raz de B
k+1
es el v ertice gris. . . . . . . . . . . . . . . 102
6.13. Un ejemplo de un montculo bin omico, compuesto por cinco arboles
bin omicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.14. Un grafo dirigido peque no con dos componentes fuertemente conexos. . . 111
6.15. Situaciones en las cuales dos v ertices (en gris) pueden pertenecer en el
mismo componente fuertemente conexo; las aristas azules son retroce-
dentes y las aristas verdes transversas. Las aristas de arbol est an dibujados
en negro y otros v ertices (del mismo componente) en blanco. . . . . . . . 112
6.16. La situaci on de la ecuaci on 6.29. La raz del componente est a dibujado en
gris y la echa no continua es un camino, no necesariamente una arista
directa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.17. Un ejemplo de los punteros padre de una arbol con n claves posibles para
poder guardar su estructura en un arreglo de tama no n. . . . . . . . . . . 117

INDICE DE FIGURAS 191


8.1. Una instancia del problema de intersecciones de segmentos. . . . . . . . 140
8.2. Los puntos de inicio y n de la instancia de la gura 8.1 y la direcci on de
procedimiento del algoritmo de lnea de barrer. . . . . . . . . . . . . . . 141
8.3. Una instancia del problema de cubierta convexa de un conjunto de puntos
en el plano. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
8.4. Dos puentes (en rojo) que juntan las soluciones de dos subproblemas
de cubierta convexa a la soluci on del problema completo. . . . . . . . . 145
8.5. Una instancia de triangulaci on de un polgono convexo con una soluci on
factible (aunque su optimalidad depende de cu al funci on objetivo est a uti-
lizada la de la formulaci on presentada u otra. Los puntos est an dibu-
jados como crculos negros, mientras el polgono est a dibujado en lnea
negra y los tri angulos en colores variados. . . . . . . . . . . . . . . . . . 151
8.6. Las opciones de n tri angulos los cuales puede pertenecer un lado del
polgono en una triangulaci on optima. . . . . . . . . . . . . . . . . . . . 152
10.1. Una modicaci on 2-opt para el problema del viajante: la ruta original
R est a marcada por las echas azules y la ruta m as econ omica R

por
las echas verdes; las aristas eliminadas est an en gris y las a nadidas en
lnea negro descontnua. Los cuatro vertices que son puntos nales de las
aristas involucradas est an dibujados en mayor tama no que los otros v ertices.162
11.1. La arista gruesa roja en el grafo original (un fragmento mostrado a la
izquierda) est a contraida as que sus puntos nales (los v ertices amarillos)
est an reemplazados por un s olo v ertice (rojo en el frangmento modica-
do a la derecha) y las aristas entrantes de los v ertices eliminados est an
redirigidas al v ertice de reemplazo. . . . . . . . . . . . . . . . . . . . 169
12.1. Un sistema de tres atomos (representados por los v ertices) con dos in-
teracciones ferromagn eticas (aristas azules) y una interacci on antiferro-
magn etica (aristas rojas) que no puede alcanzar estado de energa mnima.
En cada una de las ocho posibles conguraciones de los sentidos (marca-
dos con y ), por lo menos una interacci on est a en conicto (marcado
con una zeta sobre la arista). . . . . . . . . . . . . . . . . . . . . . . . . 172
192

INDICE DE FIGURAS

Indice de cuadros
1.1. Algunas potencias del n umero dos, 2
k
= x . . . . . . . . . . . . . . . . . 16
2.1. En la tabla (originalmente de [10]) se muestra para diferentes valores de
n el tiempo de ejecuci on (en segundos (s), minutos (min), horas (h), das
(d) o a nos (a)) para un algoritmo necesita exactamente f(n) operaciones
b asicas del procesador para encontrar soluci on y el procesador es capaz de
ejecutar un mill on de instrucciones por segundo. Si el tiempo de ejecuci on
es mayor a 10
25
a nos, lo marcamos simplemente como , mientras los
menores a un segundo son 0. El redondeo con tiempos mayores a un
segundo est an redondeados a un segundo entero mayor si menos de un
minuto, al minuto entero mayor si menores a una hora, la hora entera
mayor si menores a un da, y el a no entero mayor si medidos en a nos. . . 30
3.1. Instrucciones de las m aquinas de acceso aleatorio (RAM). Aqu j es un
entero, r
j
es el contenido actual del registro R
j
, i
j
es el contenido del
registro de entrada I
j
. La notaci on x signica que puede ser reemplazado
por cualquier de los tres operadores j, j o = j x

es el resultado de tal
reemplazo. es el contador del programa que determina cual instrucci on
de se est a ejecutando. . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2. Una RAM para computar la funci on (x, y) = [x y[ para enteros ar-
bitrarios x, y. La entrada del ejemplo es I = (6, 10), o sea, x = 6 y
y = 10, lo que nos da como resultado (I) = 4. Las conguraciones para
el ejemplo se muestra a la derecha, mientras el programa general est a a la
izquierda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.1. La jerarqua de complejidad computacional con ejemplos: arriba est an las
tareas m as f aciles y abajo las m as difciles. . . . . . . . . . . . . . . . . . 54
6.1. Pseudoc odigo del procedimiento de b usqueda en un arbol binario orde-
nado con los datos en las hojas. . . . . . . . . . . . . . . . . . . . . . . . 93
193
194

INDICE DE CUADROS
6.2. Un algoritmo basado en DFS para determinar los componentes fuerte-
mente conexos de un grafo dirigido. Se asume acceso global al grafo y
las estructuras auxiliares. . . . . . . . . . . . . . . . . . . . . . . . . . . 115
7.1. Complejidad (asint otica o amortizada) de algunas operaciones b asicas
en diferentes estructuras de datos: listas (L), arboles balanceados (A),
montculos (M), montculos binomiales (B) y montculos de Fibonacci
(F). Las complejidades amortizadas llevan un asterisco (

). . . . . . . . . 137
8.1. Un algoritmo de lnea de barrer para encontrar los puntos de intersecci on
de un conjunto S de n segmentos en R
2
. . . . . . . . . . . . . . . . . . . 143
8.2. Un algoritmo para elegir un pivote que divide un conjunto tal que ninguna
de las dos partes es tiene menos que una cuarta parte de los elementos. . . 149

Indice alfab etico


arbol, 22
cubriente, 22
mnimo, 22
de expansi on, 22
atomo, 11
ndice, 91
de aproximaci on, 157
arbol, 91
B, 98
balanceado, 95
bin omico, 102
binario
balanecado, 141
biselado, 99
cubriente, 107
mnimo, 159
multicamino, 99
rojo-negro, 97
optimo
global, 139, 160
local, 139, 161
CLIQUE, 48
MINCUT, 168
NP-completo
fuertemente, 81
PLS, 162
INDEPENDENTSET, 48
3SAT, 70
3SAT, 72
acoplamiento, 48
d ecit, 49
m aximo, 48
maximal, 48
n umero de, 49
adyacencia, 20
lista de, 106
alcance, 46
algoritmo, 23, 24
aleatorizado, 24, 165
calidad, 25
de burbuja, 85
de Kruskal, 154
de lnea de barrer, 139
de Prim, 154
de Strassen, 145, 146
determinista, 24
eciente, 29
Floyd-Warshall, 46
H ungaro, 49
iterativo, 25
Las Vegas, 166
Monte Carlo, 166
recursivo, 25
voraz, 154
altura, 108
an alisis
asint otico, 28
complejidad
promedio, 125
antepasado, 107
antiferromagnetismo, 171
aproximaci on
de Stirling, 2, 7
arista, 19
de arbol, 107, 109
dirigida, 19
procedente, 108, 109
reexiva, 19
retrocedente, 108, 109
transversa, 108, 109
arreglo, 83
din amico, 129
195
196

INDICE ALFAB

ETICO
ordenaci on, 85
asignaci on
de verdad, 11
axioma, 10
b usqueda, 106
binaria, 84
en profundidad, 109
en anchura, 74, 108
en profundidad, 106
tabu, 160
b usquedas, 91
backtracking, 154
base, 17
bilateral, 166
bin packing, 159
binaria, 15
bipartito, 21
bisecci on
m axima, 52
bit, 15
biyectivo, 5
bosque, 22
BPP, 167
branch and bound, 155
bubble sort, 85
bucle, 19
burbuja, 85
byte, 15
camarilla, 22, 50
camino, 21, 106
alternante, 49
aumentante, 49, 74
disjunto, 22
largo, 21
simple, 21
capacidad
corte, 51
de arista, 51
cardinalidad, 1
caso
amortizado, 27
peor, 27
promedio, 27
cerrado, 174
bajo reducciones, 65
certicado conciso, 69
ciclo, 21, 106
cintas m ultiples, 36
circuito
mon otono, 62
circuito booleano, 14
CIRCUITSAT, 71
cl ausula
Horn, 45
clase
complejidad, 41
clase de complejidad, 53
clase de magnitud, 28
clausura
reexiva, 3
transitiva, 3
clave, 91, 113
clique, 22
CNF, 12
coeciente
binomio, 2
coeciente binomio, 2
cola, 90
de prioridad, 114
de adjunto, 114
coma
otante, 17
complejidad
amortizada, 27, 128
promedio, 125
complemento, 54
conjunto, 2
de un grafo, 19
lenguaje, 43
problema, 43
subconjunto, 2
completo, 65
componente
conexo, 106, 109
fuertements, 111
condici on
de balance AVL, 93

INDICE ALFAB

ETICO 197
conectividad, 22
conectivo, 11
conexo, 110
fuertemente, 111
conjunto, 1
independiente, 48, 72
vaco, 1
conservaci on
de ujo, 51
constante
de Napier, 5
contracci on, 168
convexo, 5, 174
corte, 51
capacidad de, 51
mnimo, 52, 168
costo
amortizado, 130
planeado, 129
real, 130
cota
inferior
asint otica, 28
superior
asint otica, 28
cover, 50
creciente, 6
credit invariant, 133
cuanticaci on
existencial, 14
universal, 14
cubierta, 50
convexa, 144
de aristas, 50
de v ertices, 50
d ecit, 49
decisi on, 23
denici on, 10
demostraci on, 10
densidad, 21
descendiente, 107
desigualdad de tri angulo, 159
DFS, 106
di ametro, 21
no denido, 22
difcil, 65
diferencia
de conjuntos, 2
distancia, 21, 106
distribuci on
probabilidad, 125
dividir y conquistar, 139, 142
DNF, 12
dominio, 4
duro, 65
elemento
pivote, 84
eliminaci on, 91
entrada, 24
equivalente, 58
epiyectivo, 4
equivalencia, 11
l ogica, 12
error
bilateral, 166
unilateral, 166
espn, 171
esperanza, 165
esquema
de aproximaci on, 157
estructura
unir-encontrar, 116
expresi on, 11
factible, 24
factor
de aproximaci on, 157
factorial, 2, 7
falso, 11
familia, 173
ferromagnetismo, 171
Fibonacci
montculo, 103
montculo, 136
n umero de, 124
n umero, 105
ujo
198

INDICE ALFAB

ETICO
conservaci on, 51
mayor, 75
posible, 75
positivo, 51
forma normal, 12
conjunctiva, 12
disyunctiva, 12
frustraci on, 172
fuente, 50
fuertemente
conexo, 111
funci on, 5
booleana, 13
convexa, 5
creciente, 6
de balance, 130
exponencial, 5
inyectiva, 6
magnitud, 28
multiplicativa, 121
parte entera, 18
piso, 17
techo, 18
funci on
de dispersi on, 114
booleana
mon otona, 62
correcta, 53
hamiltoniana, 172
hash, 114
umbral, 175
gadget, 72
gigabyte, 17
G
n,m
, 174
G
n,p
, 174
grado
de entrada, 20
de no determinismo, 37
de salida, 20
grafo, 19
acclico, 21
bipartito, 21
completo, 21
completo, 20
conexo, 22
fuertemente, 22
denso, 21
dirigido, 19
escaso, 21
etiquetado, 19
no conexo, 22
no reexivo, 19
plano, 19
ponderado, 19
regular, 20
residual, 74
simple, 19
hpergrafo, 19
HALTING, 43
hamiltoniano, 172, 173
hash table, 113
heap, 102
heurstica, 153
hexadecimal, 17
hijo, 107
hoja, 107
HORNSAT, 45
imagen, 4
inversa, 4
implicaci on, 11
implicaci on
cl ausula Horn, 45
inducci on matem atica, 10
inserci on, 91
instancia, 23
tama no, 26
instrucci on, 24
invariante
de costo, 133
inyectiva, 6
inyectivo, 4
isomorfo, 22
kilobyte, 17
knapsack, 80, 158
Kruskal, 154

INDICE ALFAB

ETICO 199
l ogica
booleana, 11
primer orden, 14
proposicional, 14
l ogicamente equivalente, 12
lnea de barrer, 139
largo, 21
Las Vegas, 166
layered network, 74
lema, 10
lenguaje, 33
completo, 65
difcil, 65
duro, 65
recursivamente numerable, 33
recursivo, 33
linked list, 89
lista
de adyacencia, 106
enlazada, 89
literal, 11
lleno, 91
logaritmo, 6, 29
natural, 6
neperiano, 6
m aquina
acceso aleatorio, 34
Turing, 31
no determinista, 37
universal, 38
m etodo
de cuentas bancarias, 129
de potenciales, 129
mantisa, 17
matching, 48
matriz
de adyacencia, 20
multiplicaci on, 145
MAX2SAT, 71
megabyte, 17
memoria
consumo, 27
mergesort, 86
mochila
problema de la, 80
mon otono, 62
monotono, 174
montculo, 102
bin omico, 102, 104
de Fibonacci, 103
montculo bin omico, 102
montculo
de Fibonacci, 136
Monte Carlo, 166
multigrafo, 19, 76
multiplicaci on
de matrices, 145
multiplicativo, 121
n-eada, 3
n umero
Fibonacci, 124
n umero
de Fibonacci, 105
de Fibonacci, 94
NAESAT, 71
nivel, 108
NP, 41
NTIME(f(n)), 41
O(f(n)), 28
octal, 17
operaci on
b asica, 26
optimizaci on, 23
orden
de montculo, 102
posterior, 109
previo, 109
ordenaci on
r apida, 125
ordenaci on
de arreglos, 85
por fusi on, 86
por inserci on, 90
por selecci on, 85
r apida, 87
topol ogica, 112
200

INDICE ALFAB

ETICO
ordenamiento
por fusi on, 142
P, 41
p agina, 91
padre, 107
palndromo, 25
par ordenado, 3
parte entera, 18
partici on, 51, 168
permutaci on, 4
peso
arista, 19
pila, 89
piso, 17
pivote, 84
plano, 19
podar-buscar, 147, 154
postorden, 107
postorder, 109
PP, 167
preorden, 107
preorder, 109
Prim, 154
problema, 23
combinatorial, 24, 160
complemento, 43
de alcance, 46
de decisi on, 23
de empaquetear a cajas, 159
de la mochila, 80, 158
de optimizaci on, 23
de viajante, 155
del viajante, 47, 161
intratable, 29
maximizaci on, 24
minimizaci on, 24
optimizaci on, 23
polinomial, 29
sin soluci on, 29, 43
proceso, 174
producto cartesiano, 3
programaci on
din amica, 139
entera, 80
lineal, 80
programaci on din amica, 149
propiedad, 174
convexa, 174
monotona, 174
prune and search, 147
pseudo-polinomial, 81
puntero, 89
punto
ja, 17
otante, 17
queue, 90
quicksort, 87, 125
raz, 107
RAM, 34
ramicar-acotar, 155
ramo, 108
rango, 4
abierto, 3
cerrado, 3
recorrido, 106
red de capas, 74
red-black tree, 97
redondeo, 18
reducci on, 58, 59
Cook, 58
espacio logartmico, 58
Karp, 58
reducible, 58
regi on
convexa, 144
registro, 34
relaci on
reexiva, 3
sim etrica, 3
transitiva, 3
relaci on
polinomialmente balanceada, 69
representaci on
punto
ja, 17
otante, 17

INDICE ALFAB

ETICO 201
restricci on
de capacidad, 51
rotaci on, 96
RP, 167
ruteo, 92
salida, 24
SAT, 44
satisfacer, 11
satisfactible, 12
satisabilidad, 44
scan line, 139
selection sort, 86
serie, 7
aritm etica, 8
geom etrica, 9
sobreyectivo, 4
soluci on
optima, 24
sorteo
topol ogico, 14
splay tree, 99
stack, 89
Stirling
aproximaci on, 2
Strassen, 145, 146
subconjunto, 2
cerrado, 174
subgrafo, 22
sucesi on
Fibonacci, 94
sumidero, 50
sweep line, 139
t ermino, 7
tabla
de dispersi on, 113
tasa
de aproximaci on, 157
dorada, 94
tautologa, 12
techo, 18
teoremas, 10
testigo polinomial, 69
tiempo
de llegada, 175
TIME(f(n)), 41
transici on
de fase, 171
travelling salesman problem, 47
tri angulo
de Pascal, 150
TSPD, 173
TSP, 47
TSP, 155
umbral, 175
unilateral, 166
union-nd, 116
unir-encontrar, 116
v ertice, 19
v ertice
acoplado, 48
de articulaci on, 110
de ruteo, 92
fuente, 50
libre, 48
sumidero, 50
valor esperado, 165
valor absoluto, 5
variable, 11
binaria, 15
varianza, 165
vecindario, 20, 161
exacto, 161
vecino, 20, 161
verdad, 11
vertex
vecino, 20
vidrio de espn, 171
voraz, 153, 154
vuelta atr as, 154
ZPP, 167