Complejidad computacional de problemas y el

an´ alisis y dise˜ no de algoritmos
Dra. Elisa Schaeffer
14 de abril de 2008
Prefacio
Estas notas fueron escritas para el curso de An´ alisis y Dise˜ no de Algoritmos
(MECBS5126) del Programa de Posgrado en Ingenier´ıa de Sistemas (PISIS) de la Facul-
tad de Ingenier´ıa 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 maestr´ıa llevarlo
a su propio riesgo. La mayor´ıa de los estudiantes de PISIS no son comp´ utologos, y a´ un
menos del campo de teor´ıa de computaci´ on, por lo cu´ al la presentaci´ on es simplificada 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 fin´ 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 fin´ 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 compu-
tacional 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 documento,
por lo cual le agradezco mucho.
Otras partes del documento est´ an prestadas y modificadas de trabajos anteriores m´ıos, 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 D´ıaz.
I
II
´
Indice general
1. Definiciones 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. Teor´ıa 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: certificados . . . . . . . . . . . . 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 flujo m´ aximo . . . . . . . . . . . . . . . . . . . . 73
5.5.2. El problema de corte m´ınimo . . . . . . . . . . . . . . . . . . . . 76
5.5.3. Caminos y ciclos de Hamilton . . . . . . . . . . . . . . . . . . . 77
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. Mont´ıculos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
6.4.1. Mont´ıculos bin´ omicos . . . . . . . . . . . . . . . . . . . . . . . 102
6.4.2. Mont´ıculos 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. Mont´ıculos de Fibonacci . . . . . . . . . . . . . . . . . . . . . . 136
8. T´ ecnicas de dise˜ no de algoritmos 139
8.1. Algoritmos de l´ınea 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 pol´ıgono convexo . . . . . . . . . . . 150
9. Optimizaci´ on combinatoria 153
9.1.
´
Arbol cubriente m´ınimo . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
9.2. Ramificar-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. Definiciones 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 m´ınimo . . . . . . . . . . . . . . . . . . . . . . . . . 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 s´ımbolos 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 figuras 189
VIII
´
INDICE GENERAL
Lista de cuadros 191
´
Indice alfab´ etico 195
Cap´ıtulo 1
Definiciones 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 definir para cada par de elementos si uno est´ a ma-
yor, menor o igual a otro seg´ un el orden definido.
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 A∪B. La intersecci´ on de dos conjuntos A y B se denota por A∩B
y contiene solamente los elementos que pertenecen a ambos conjuntos:
c ∈ (A∩ B) ⇔

(c ∈ A) ∧ (c ∈ B)

, (1.2)
donde ⇔significa 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[ ≤ m´ın ¦[A[ , [B[¦. El
conjunto vac´ıo 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 coeficiente binomio

n
k

=
n!
k!(n −k)!
, (1.5)
donde n! es el factorial. El factorial est´ a definido 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

2πk

k
e

k
≤ k ≤ 2

2πk

k
e

k
(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 coeficiente binomio permite una definici´ on recursiva:

n
k

=

n−1
k−1

+

n−1
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 reflexiva 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 reflexiva de la relaci´ on 1 en A es la relaci´ on m´ınima reflexiva 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 reflexiva 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 t´ıpicamente se escribe g(a) = b para significar
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 ∈ B∃a ∈ 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´ı ⇒
significa 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 s´ımbolo f refiere a la funci´ on misma, mientras f(x) refiere 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 define 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 figura 1.1 muestra su forma. Una
definici´ on alternativa es por l´ımite:
e
x
= l´ım
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 logarítmica
Figura 1.1: Gr´ aficas de la funci´ on exponencial f(x) = exp(x): a la izquierda, en escala
lineal, mientras a la derecha, el eje y tiene escala logar´ıtmica (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 define 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 define 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 figura 1.2, se
muestra las funciones para tres valores de base. T´ıpicamente se escribe ln x para log
e
x y
log x sin base normalmente se interpreta como log
10
, aunque en computaci´ on la interpre-
taci´ on log x = log
2
x es muy com´ un cuando x ∈ Z.
T´ıpicamente 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 simplificar 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 logar´ıtmicas por tres valores t´ıpicos 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 impl´ıcita 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 definir 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 finita y para todo i ∈ [0, ∞) en el otro caso.
La suma de una sucesi´ on infinita es infinita positiva ∞ si la diferencia d > 0 y infinita
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
=
n−1
¸
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
n−1
= x
n
−d,
x
n−2
= x
n−1
−d = (x
n
−d) −d = x
n
−2d,
x
n−3
= x
n−2
−d = (x
n
−2d) −d = x
n
−3d,
.
.
.
x
n−k
= x
n−k−1
−d = x
n
−(n −k)d,
x
1
= x
n−(n−1)
= 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 simplifica 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 infinita tiene un valor infinita el signo de cual depende de los signos
de x
1
y d. Cuando [d[ < 1, incluido las series infinitas tienen una suma finita:
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
definiciones donde se fija el sentido de alg´ un formalismo, notaci´ on o terminolog´ıa. La me-
ta es derivar de los axiomas y las definiciones, algunos teoremas, que son proposiciones
verdaderas. Cada teorema trata de una cierta propiedad de inter´ es. Los teoremas “auxilia-
res” que uno tiene que demostrar para llegar al resultado final deseado se llaman 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 verificar 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 s´ımbolo
⊤) o “falso” (se denota con el s´ımbolo ⊥). 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 s´ımbolos. 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 boo-
leanas, tambi´ en (φ
1
∨φ
2
), (φ
1
∧φ
2
) y φ
1
lo son. Por ejemplo, ((x
1
∨x
2
) ∧x
3
) es una
expresi´ on booleana pero ((x
1
∨x
2
)x
3
) no lo es. Para simplificar las expresiones, existen
las convenciones siguientes:
n
¸
i=1
ϕ
i
significa ϕ
1
∨ ∨ ϕ
n
n

i=1
ϕ
i
significa ϕ
1
∧ ∧ ϕ
n
φ
1
→ φ
2
significa φ
1
∨ φ
2
φ
1
↔ φ
2
significa (φ
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)
deber´ıa 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 finito 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 definici´ 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 tautolog´ıa 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 re-
glas para transformar una expresi´ on booleana a una de las dos formas normales son los
siguientes: primero eliminamos las notaciones auxiliares ↔y →y movemos las negacio-
nes a formar literales:
(I) Eliminar la notaci´ on auxiliar de ↔: La expresi´ on φ
1
↔ φ
2
es l´ ogicamente equi-
valente 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 s´ımbolo auxiliar ↔no permitido
en las formas normales.
(II) Eliminar la notaci´ on auxiliar de →: La expresi´ on φ
1
→ φ
2
es l´ ogicamente equi-
valente 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 s´ımbolo auxiliar → no permitido en las formas
normales.
(III) Mover negaciones donde las variables para formar literales: utiliza las siguien-
tes equivalencias l´ ogicas para cambiar la ubicaci´ on de los s´ımbolos 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 siguien-
tes 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 l´ınea en el proceso es l´ ogicamente equivalente con todas las versiones
anteriores por las equivalencias ya definidas; 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
¬
: ¦⊤, ⊥¦ → ¦⊤, ⊥¦ definida por
la ecuaci´ on 1.46. Los conectivos ∨, ∧, → y ↔ definen 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 c´ıclico. Un grafo
dirigido no c´ıclico 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 define el valor para cada puerta todas las entradas de la cual ya est´ an
definidos. Cada circuito booleano corresponde a una expresi´ on booleana φ. Los circuitos
pueden ser representaciones m´ as “compactas” que las expresiones, porque en la cons-
trucci´ on del circuito se puede “compartir” la definici´ on de un subcircuito, mientras en
las expresiones habr´ a que repetir las subexpresiones que aparecen en varias partes de la
expresi´ on.
1.7.2. L´ ogica proposicional
La l´ ogica de primer orden es una l´ ogica donde se cuantifica variables individuales. Ca-
da variable individual corresponde a una oraci´ on. Los s´ımbolos de cuantificaci´ on son la
cuantificador ∃ para la cuantificaci´ on existencial y la cuantificador ∀ para la cuantificaci´ on
universal.
La cuantificaci´ on existencial quiere decir que en un conjunto indicado existe por lo menos
una variable que cumpla con una cierta requisito, mientras la cuantificaci´ 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 cuantificar 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´ aficas de las potencias de dos: a la izquierda, con ejes lineales hasta x = 7,
y a la derecha, con ejes de escala logar´ıtmica 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 figure 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 m´ınima potencia
de dos mayor a x,
b = m´ın
k∈Z
¸
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 prefix 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 prefixes.
Representaci´ on de punto flotante
Para representar n´ umeros reales por computadora, hay que definir 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 flotante (tambi´ en conocido como coma flotante) 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 significativa de x mediante un exponente γ:
x = m b
γ
, (1.61)
donde m se llama la mantisa y contiene los d´ıgitos significativos de x – es com´ un norma-
lizar la mantisa tal que su parte entera consta de solamente la primera cifra significativa
de x. La mantisa t´ıpicamente tiene un tama˜ no m´ aximo limitado a una cierta cantidad fija
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 flotante
es la cantidad de memoria reservada para el exponente γ ∈ Z de la ecuaci´ on 1.61.
La otra opci´ on ser´ıa simplemente reservar una cierta cantidad de bytes para la represen-
taci´ on y fijar a posici´ on en la cual se supone que est´ e la coma decimal. La representaci´ on
de punto fija es mucho m´ as restrictiva con respeto al rango de valores posibles de guar-
dar. En comparaci´ on, el m´ etodo de punto flotante 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 define el n´ umero entero m´ aximo menor a x ∈ R:
⌊x⌋ = m´ax
y∈Z
¦y [ x ≤ y¦ . (1.62)
18 CAP
´
ITULO 1. DEFINICIONES MATEM
´
ATICAS Y COMPUTACIONALES
Por definici´ 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 verificaci´ on de que se deja como ejercicio.
La funci´ on techo ⌈x⌉ : R →Z define el n´ umero entero m´ınimo mayor a x ∈ R:
⌈x⌉ = m´ın
y∈Z
¦y [ x ≤ y¦ . (1.67)
Aplica por definici´ on que
x ≤ ⌈x⌉ < x + 1. (1.68)
Se deja como ejercicio verificar 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 flotante a un valor entero. Por ejemplo, en C se permite la construcci´ on si-
guiente
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 t´ıpico 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 amplificar 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 flotante de los valores 0,6 y 0,2, su divisi´ on resulta en el valor punto flotante
2,999999999999999555910790149937. Entonces, aplicar la funci´ on parte entera al valor
de la variable a resulta en el valor 2, aunque la respuesta correcta es 3.
1.8. Teor´ıa de grafos
Un grafo (tambi´ en se dice gr´ afica) 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 t´ıpicamente pares de v´ ertices, ¦u, v¦ ∈ E, o sea, las aristas definen una
relaci´ on entre el conjunto V con si mismo:
E ⊆ V V, (1.71)
pero tambi´ en se puede definir grafos donde el producto es entre m´ as de dos “copias” del
conjunto V , el cual caso se habla de h´ıpergrafos.
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 fin) de la
arista. Un bucle es una arista reflexiva, 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 reflexiva, el grafo
es no reflexivo.
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 identificados
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
construir otra matriz entera A

donde el elemento a

ij
≥ 0 contiene el n´ umero de aris-
tas 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 diri-
gidos, se define 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
fila de A.
Nota que siempre aplica
¸
v∈V
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 reflexivo, 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
m´ ax
=

n
2

=
n(n −1)
2
. (1.80)
Para K
n
, tenemos m = m
m´ ax
. La densidad δ (G) de un G se defina como
δ (G) =
m
m
m´ ax
=
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 m´ınimo 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
v∈V
w∈V
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 ac´ıclico. Un grafo no dirigido ac´ıclico 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 definido, y en consecuencia el di´ ametro
diam(G) del grafo tampoco es definido. 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 definida.
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 ac´ıclico. 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 m´ınimo es cualquier ´ arbol
donde la suma de los pesos de las aristas incluidas es m´ınima. Un grafo G no conexo es
un bosque si cada componente conexo de G es un ´ arbol.
Cap´ıtulo 2
Problemas y algoritmos
En este curso, veremos c´ omo analizar de complejidad de dos conceptos diferentes de
computaci´ on: problemas y algoritmos. Un problema es un conjunto (posiblemente infi-
nita) 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 vac´ıo).
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 configuraci´ 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 vac´ıo a una dada instancia. Si existen soluciones, la
respuesta a la pregunta del problema es “si”, y si el subconjunto es vac´ıo, 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 configu-
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 configuraciones son discretas, el problema es combinatorial.
La tarea es identificar cu´ al de las configuraciones 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 configuraci´ 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 gu´ıa telef´ onica?
¿C´ omo llegar de mi casa a m´ı oficina?
¿C´ omo determinar si un dado n´ umero es un n´ umero primo?
Para definir un algoritmo, hay que definir 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 eficien-
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 eficiencia.
La sucesi´ on S de instrucciones tiene que ser finita 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. Ser´ıa altamente
deseable que para todo ρ ∈ c, la ejecuci´ on de S terminar´ a despu´ es de un tiempo finito.
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 c´ıclica 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 hecho
universal que cada algoritmo recursivo puede ser convertido a un algoritmo iterativo (aun-
que no viceversa), aunque t´ıpicamente hace da˜ no a la eficiencia del algoritmo hacer tal
conversi´ on. Depende del problema cu´ al manera es m´ as eficiente: recursiva o iterativa.
Como ejemplo, veremos dos algoritmos para verificar si o no una dada palabra (una sola
palabra de puras letras; en espa˜ nol, t´ıpicamente ignorando los acutes de las letras) es un
pal´ındromo, o sea, que se lee igual hacia adelante que hacia atr´ as. Un ejemplo de tal
palabra es “reconocer”. Un algoritmo recursivo simplemente examinar´ıa 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 s´ımbolo o vac´ıo,
el algoritmo da la respuesta “s´ı”:
procedure rpal(palabra P = ℓ
1

2
. . . ℓ
n−1

n
)
if n ≤ 1
return true ;
if ℓ
1
= ℓ
2
return rpal(ℓ
2

3
. . . ℓ
n−2
ℓn −1);
else
return false
Una versi´ on iterativa examinar´ıa al mismo tiempo desde el inicio y desde el fin verificando
para cada letra si son iguales:
procedure ipal(palabra P = ℓ
1

2
. . . ℓ
n−1

n
)
i = 1;
j = n;
while i < j
if ℓ
i
= ℓ
j
return false ;
else
i := i + 1;
j := j −1;
return true ;
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 (ingl´ es:
random access machine) que no tiene l´ımite de memoria ni l´ımite de precisi´ on de repre-
sentaci´ 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 definir cu´ ales ope-
raciones se cualifican como operaciones b´ asicas. T´ıpicamente se considera b´ asicas los
siguientes tipos de operaciones:
(I) operaciones simples aritm´ eticas (+, −, , /, mod ),
(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 t´ıpicamente varias si no una cantidad infi-
nita de instancias. Para definir el tama˜ no de una dicha instancia, hay que fijar cu´ al ser´ a la
unidad b´ asica de tal c´ alculo. T´ıpicamente 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 final, 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 fijamos el tama˜ no de la instancia, todav´ıa hay variaciones en la cantidad de
tiempo requerido para la ejecuci´ on del algoritmo. Por ejemplo, es m´ as dif´ıcil 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 dif´ıcil de todas las instancias de
tama˜ no n. La ´ unica dificultad es identificar 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 dificultad 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
eficiencia 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 definir 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 cons-
tante de un cierto tipo. El caso peor de consumo de memoria es la cantidad de unidades de
28 CAP
´
ITULO 2. PROBLEMAS Y ALGORITMOS
memoria que el algoritmo tendr´ a que ocupar simultaneamente en el peor caso imaginable.
Se define 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, t´ıpicamente 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 definir clases de magnitudes, necesitamos las definiciones 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 suficientemente grandes
valores de n,
(II) f(n) ∈ Ω(g(n)) si ∃c > 0 tal que [f(x)[ ≥ c [g(x)[ para suficientemente grandes
valores de n,
(III) f(n) ∈ Θ(g(n)) si ∃c, c

> 0 tales que c [g(x)[ ≤ [f(x)[ ≤ c

[g(x)[ para
suficientemente grandes valores de n y
(IV) f(n) ∈ o(g(n)) si l´ım
n→∞
f(n)
g(n)
= 0.
El s´ımbolo ∈ se reemplaza frecuentemente con =. La funci´ on O(f(n)) es una cota
superior asint´ otica al tiempo de ejecuci´ on, mientras la Ω(f(n)) es una cota inferior
asint´ otica. La tercera definici´ on quiere decir que las dos funciones crecen asint´ oticamente
iguales. Las definiciones se generalizan para funciones de argumentos m´ ultiples.
Estas definiciones 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 definici´ on tambi´ en para
Θ(f(n)).
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)
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 suficientemente grandes ya no hay cambios.
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 definici´ on, podemos ignorar
coeficientes 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 logar´ıtmicas: 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 definici´ on de logaritmo). Utilizando la definici´ 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 eficiente 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 eficiente es un problema polinomial. Un problema es intratable
si no existe ning´ un algoritmo eficiente para resolverlo. Tambi´ en se dice que un problema
sin soluci´ on si no cuenta con algoritmo ninguno. El el siguiente cap´ıtulo 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), d´ıas (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 d´ıa, 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 ≈ ∞ ≈ ∞ ≈ ∞
Cap´ıtulo 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 eficiencia insignificante utilizando
una sola estructura de datos: una sucesi´ on de s´ımbolos escrita en una cinta (infinita) que
permite borrar y imprimir s´ımbolos. Formalmente, se define una m´ aquina Turing M =
(K, Σ, δ, s) por
(I) un conjunto finito de estados K,
(II) un conjunto finito de s´ımbolos Σ, que se llama el alfabeto de M que contiene dos
s´ımbolos espaciales ⊔, ⊲ ∈ Σ,
(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
s´ımbolo actualmente bajo el puntero es σ ∈ Σ, la funci´ on δ nos da
δ(q, σ) = (p, ρ, D), (3.2)
donde p es el estado nuevo, ρ es el s´ımbolo 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 s´ımbolo que es le´ıdo es siempre ⊔ (un s´ımbolo 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 le´ıdo 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 finita de s´ımbolos 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 define 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
s´ımbolos: Σ = ¦0, 1, ⊔, ⊲¦. La funci´ on de transici´ on δ se define 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 configuraci´ 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 s´ımbolo
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 s´ımbolo 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 s´ımbolo reemplazado por ρ y el primer s´ımbolo de u concatenado. Si u es vac´ıa,
se adjunta un ⊔ a w. Si u no es vac´ıa, u

es como u pero sin el primer s´ımbolo, y si u es
vac´ıa, u

tambi´ en la es.
3.1. M
´
AQUINAS TURING 33
Para la relaci´ on “rinde en k pasos”, definimos
(q, w, u)
M

k
(q

, w

, u

) (3.4)
si y s´ olo si existen configuraciones (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” definimos 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 reflexiva de
M
→.
Las m´ aquinas Turing son una representaci´ on bastante natural para resolver muchos pro-
blemas 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 corres-
ponden 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, re-
presentando tanto la entrada como la salida en formato de sucesiones con un alfabeto
adecuado.
T´ ecnicamente, cualquier “objeto matem´ atico finito” puede ser representado por una su-
cesi´ on finita con un alfabeto adecuado. Por lo general, n´ umeros siempre deber´ıan estar
representados 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 codificaci´ 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 s´ımbolos 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 significa 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 mo-
delado matem´ atico de algoritmos computacionales y su eficacia (en t´ erminos de tiempo
de ejecuci´ on) resultar´ a en un modelo de computaci´ on y costo de operaciones que es equi-
valente, 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 finita de instrucciones de tipo assembler, Π = (π
1
, π
2
, . . . , π
m
). La entrada
al programa est´ a guardada en un arreglo finito 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 configuraci´ 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 finito de pares registro-valor. La configuraci´ on inicial es (1, ∅). Se define 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 configuraciones para el ejemplo se muestra a la derecha, mientras
el programa general est´ a a la izquierda.
Programa Configuraci´ 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 configuraciones 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 modificada 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 finita 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 significativos 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 L(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(L(I)).
Con una RAM, se puede simular una m´ aquina Turing M con un alfabeto Σ =
¦σ
1
, . . . , σ
k
¦ con p´ erdida lineal de eficiencia. 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 definir 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 eficiencia 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 finitas 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 casos,
es m´ as f´ acil considerar m´ aquinas Turing de cintas m´ ultiples, aunque todas esas m´ aqui-
nas pueden ser simuladas por una m´ aquina Turing ordinaria. Las siete cintas sirven 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 s´ımbolo
“;”,
(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 ente-
ros en los registros. Entonces, simulaci´ on de Π con M requiere O(ℓf(n)
2
) pasos.
Todav´ıa 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 tie-
ne largo m´ aximo t +L
i
+b
j
donde j es el entero mayor referido a el cualquier instrucci´ 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 instruccio-
nes 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 aritm´ etica binaria),
y como el operando mayor tiene largo m´ aximo t −1 +L
I
+ b
j
, hemos establecido
1 +t −1 +L
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 real´ıstico de
computaci´ on, pero nos va a servir mucho para definir complejidad computacional. Se
puede simular cada m´ aquina Turing no determinista con una m´ aquina Turing determinista
con una p´ erdida exponencial de eficiencia. La pregunta interesante — y abierta — es si
es posible simularlas con p´ erdida solamente polinomial de eficiencia.
Una m´ aquina Turing no determinista es un cu´ adruple N = (K, Σ, ∆, s) donde la diferen-
cia 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 definici´ on de una configuraci´ 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-s´ımbolo en ∆.
38 CAP
´
ITULO 3. MODELOS DE COMPUTACI
´
ON
Se dice que una NTM N decide un lenguaje L si y s´ olo si para todo x ∈ Σ

aplica lo
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 definido, cada m´ aquina Turing es capaz de resolver un cierto problema.
Ahora definimos 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 s´ımbolos de alg´ un
alfabeto. Dada una m´ aquina Turing M = (K, Σ, δ, s), podemos codificarlo utilizando
n´ umeros enteros de la manera siguiente, donde ς = [Σ[ y k = [K[:
Σ = ¦1, 2, . . . , ς¦ ,
K = ¦ς + 1, ς + 2, . . . , ς + k¦ ,
d´ onde s = ς + 1 y finalmente
¦←, →, −, “alto”, “s´ı”, “no”¦ = ¦ς + k + 1, ς + k + 2, . . . , ς + k + 6¦ .
(3.14)
Ahora, para lograr un alfabeto finito, codificamos todo esto con las representaciones bina-
rias y el s´ımbolo “;”: 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 codificaci´ 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 configuraci´ 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 definir 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
Cap´ıtulo 4
Complejidad computacional de
problemas
4.1. Clases de complejidad de tiempo
Empezamos a definir clases de complejidad computacional a trav´ es de las m´ aquinas Tu-
ring deterministas y no deterministas:
Definici´ 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).
Definici´ 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).
Definici´ 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)
Definici´ on 4.4. El conjunto NP contiene todos los lenguajes decididos por m´ aquinas Tu-
ring 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 fijada 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 definir
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
)


k−1
¸
i=2
[w
i
u
i
[ ≤ f([x[),
(4.5)
donde [w
i
u
i
[ es el largo (en cantidad de s´ımbolos) 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 modificar un poco la m´ aquina Turing universal U. La
m´ aquina modificada U

es tal que cada estado de alto de U est´ a reemplazada con “s´ı”.
Entonces, si M
b
; x ∈ H, por definici´ 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´ aqui-
na 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 numera-
bles 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 satisfiabilidad (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 siguien-
te:
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 satisfiabilidad 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, verifica 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
definir 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) = m´ın ¦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, conti-
nuando 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 Gtal que C visite cada v´ ertice exac-
tamente 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 m´ıni-
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 figura 4.1 muestra un ejemplo simple.
Un acoplamiento m´ aximo ´
m´ ax
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 [´
m´ ax
[. El n´ umero de v´ ertices libres
(dado G y ´) se llama el d´ eficit 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
figura 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 t´ıpicamente 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 m´ınima que cumpla con la definici´ on. La figura 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 m´ınima (
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 flujos, t´ıpicamente se considera grafos ponderados (y posiblemente
dirigidos). Adem´ as se fija dos v´ ertices especiales: un v´ ertice fuente s y un v´ ertice sumi-
dero t. El grafo necesita ser conexo en un sentido especial: ∀v ∈ V , existe un camino
4.5. ALGUNOS PROBLEMAS FUNDAMENTALES 51
(dirigido en en caso de grafos dirigidos) del fuente s al sumidero t que pasa por el v´ erti-
ce 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 flujos.
En el grafo de entrada ponderado, los valores de las aristas se llaman capacidades
c(v, w) ≤ 0. Para generalizar la definici´ on de capacidad a ser una funci´ on sobre todos
los pares de v´ ertices c : V V →R, se define: ¦v, w¦ / ∈ E ⇒ c(v, w) = 0. La figura 4.4
muestra un ejemplo de un grafo que puede ser una instancia de un problema sobre flujos.
2
5
4
2
3
3
1
2
4
6
3
1
4
3
Sumidero
Fuente
1
1
2
3
3
2
3
2
1
3
2
2
2
3
4
1
1
Figura 4.4: Una instancia de ejemplo para problemas de flujos: los v´ ertices grises son el
fuente (a la izquierda) y el sumidero (a la derecha). Se muestra la capacidad de cada arista.
Un flujo 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 flujo: el flujo que entra es igual al flujo que sale,
∀u ∈ V ` ¦s, t¦ :
¸
v∈V
f(v, u) =
¸
v∈V
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 flujo, 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,
¸
v∈C
w/ ∈C
c(v, w). (4.17)
La figura 4.5 muestra una instancia de un problema de flujos 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 flujos. Se
muestra cuatro cortes con sus capacidades respectivas.
Un corte m´ınimo de G = (V, E) es un corte cuya capacidad es m´ınima entre todos los
cortes de G. El problema de encontrar el corte m´ınimo tiene soluci´ on polinomial. Adem´ as,
la capacidad del corte m´ınimo entre dos v´ ertices s y t es igual al flujo m´ aximo entre s y
t. Cuando establecido un flujo en el grafo, la cantidad de flujo que cruza un corte es igual
a cada corte del grafo.
En la mayor´ıa 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?
Cap´ıtulo 5
Clases de complejidad
Es posible definir diferentes tipos de clases de complejidad computacional. Los requisitos
para definir una clase son
(I) fijar 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 definici´ 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 s´ımbolo “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 definido 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 jerarqu´ıa de complejidad computacional con ejemplos: arriba est´ an las
tareas m´ as f´ aciles y abajo las m´ as dif´ıciles.
Tiempo Clase Ejemplo
Problemas con algoritmos eficientes
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 dif´ıciles
O(n
2
2
n
) NP-completo satisfiabilidad
Para definiciones 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
Definici´ 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, definimos 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 codificar 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 significa 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
ejemplo, existe una funci´ on no correcta f : Z
+
→ Z
+
tal que TIME(f(n)) =
TIME

2
f(n)

. El truco es definir f tal que ninguna m´ aquina Turing M con entrada
x, [x[ = n, para despu´ 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
5.1. JER
´
ARQUIAS DE COMPLEJIDAD 57
M para con “s´ı”, M

tambi´ en para con “s´ı”. Si ninguna sucesi´ on acepta, M

rechaza su
entrada.
Aunque el n´ umero de simulaciones es exponencial, el espacio que necesitamos es so-
lamente f(n) como lo hacemos una por una. El estado y todo lo anotado durante la
simulaci´ on de una sucesi´ on puede ser borrado cuando empieza la simulaci´ on de la su-
cesi´ on siguiente. Adem´ as, como f(n) es una funci´ on correcta de complejidad, la primera
secuencia 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 todav´ıa 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 l´ımites 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; todav´ıa 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 infinita 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 dif´ıciles. Un m´ etodo para es-
tablecer un ordenamiento de problemas por dificultad es la construcci´ on de reducciones:
un problema A es por lo menos tan dif´ıcil 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 dif´ıcil como B. Para poder establecer resultados formales, hay que clasificar 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 polinomial,
mientras una reducci´ on Karp es una reducci´ on con una funci´ on de transformaci´ on de
tiempo polinomial y las reducciones de espacio logar´ıtmico 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 configuraciones 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 configuraci´ 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 final 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 HAL-
TING 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

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 mos-
trar que SAT es por lo menos tan dif´ıcil 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 t´ıpicos 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, definido 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 verifica
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 compu-
taci´ 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
deber´ıa 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
deber´ıa 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(k−1)
y la salida
de g
kj(k−1)
.
62 CAP
´
ITULO 5. CLASES DE COMPLEJIDAD
• Cada g
ijk
es una puerta tipo ∨ con dos entradas: la salida de g
ij(k−1)
y la salida
de h
ijk
.
La puerta g
1nn
es la salida del circuito R(G).
El circuito R(G) es no c´ıclico 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
definici´ on. Para k > 0, el circuito asigna
h
ijk
= g
ik(k−1)
∧ g
kj(k−1)
. (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 definici´ on g
ijk
= g
ij(k−1)
∨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 pro-
blema 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 definici´ on de reducciones, aplica que
x ∈ L ⇔ R(x) ∈ L

⇔ R

(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 logar´ıtmico.
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 s´ımbolo actualmente le´ıdo, pero
no toda la cinta, podemos asegurar usar no m´ as que O(log n) espacio.
Inicialmente i = 1 y por definici´ on de las m´ aquinas Turing, el primer s´ımbolo escaneado
es ⊲.
Cuando M
R
′ mueve a la derecha, M corre a M
R
para generar el s´ımbolo 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 s´ımbolos 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 reflexiva 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-dif´ıcil) 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

∈ C

, 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 ser´ıa que P = NP.
Entonces, habr´ a que establecer cu´ ales problemas son completos para cu´ ales clases. Lo
m´ as dif´ıcil 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 fila de la tabla representa un paso de computaci´ on: desde el primer paso 0 hasta el
´ ultimo [x[
k−1
. Cada columna es una cadena del mismo largo tal que el elemento T
i,j
tiene
el s´ımbolo 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 s´ımbolo 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 s´ımbolo 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 s´ımbolo de la entrada.
El cursor nunca visita al s´ımbolo ⊲ extremo al la izquierda de la cinta; est´ a se logra
por acoplar dos movimientos si M visitar´ıa ese ⊲.
El primer s´ımbolo de cada fila 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 filas 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
i−1,j−i
,
T
i−1,j
y T
i−1,j+1
. La idea es codificar este relaci´ on de las celdas de la tabla en un circuito
booleano. Primero se codifica 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 fila 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 logar´ıtmico. 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 satisfiabilidad 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 fijamos la secuencia elegida c, la computaci´ on hecha por M es efectivamente determi-
nista. Definimos ahora la tabla de computaci´ on T(M, x, c) que corresponde a la m´ aquina
Turing M, una entrada x y una secuencia fija de elecciones c.
En la codificaci´ on binaria de T(M, x, c), la primera fila y las columnas extremas resul-
tan fijas como en el caso anterior. Los otros elementos T
i,j
dependen de los elementos
T
i−1,j−1
, T
i−1,j
y T
i−1,j+1
, y adicionalmente de la elecci´ on c
i−1
hecha en el paso anterior.
Existe un circuito booleano C con 3m+ 1 entradas y m salidas que compute la codifica-
ci´ on binaria de T
i,j
dado como entradas los cuatro datos T
i−1,j−1
, T
i−1,j
, T
i−1,j+1
y c
i−1
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 logar´ıtmico. 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. T´ıpicamente el pro-
blema tiene que ver con la construcci´ on o existencia de un objeto matem´ atico que sa-
tisface ciertas especificaciones. La versi´ on de la construcci´ on misma es un problema de
68 CAP
´
ITULO 5. CLASES DE COMPLEJIDAD
optimizaci´ 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 configuraci´ 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 mayor´ıa de los problemas interesantes de computaci´ on en el mun-
do real pertenecen a la clase NP. La aplicaci´ on “cotidiana” de la teor´ıa de complejidad
computacional es el estudio sobre las clases a cuales un dado problema pertenece: sola-
mente 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 implicar´ıa que el problema es entre los menos pro-
bables de pertenecer en la clase P. Nota que si alg´ un problema NP-completo perteneciera
a NP, aplicar´ıa NP = P.
Si se sube a un nivel suficientemente general, muchos problemas resultan NP-completos.
En muchos casos es importante identificar 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
podr´ıan 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 t´ıpicamente se busca por representar las elecciones hechas, la con-
sistencia y restricciones. Lo dif´ıcil 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,
algoritmos de aproximaci´ on,
5.3. PROBLEMAS COMPLETOS 69
an´ alisis asint´ otica del caso promedio,
algoritmos aleatorizados,
algoritmos exponenciales para instancias peque˜ nas o
m´ etodos heur´ısticos de b´ usqueda local.
5.3.2. Caracterizaci´ on por relaciones: certificados
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 definici´ 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.
Definimos la relaci´ on 1 en la manera siguiente: (x, y) ∈ 1 si y s´ olo si y es una codifi-
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 verificar en tiempo polinomial si o no y es
una codificaci´ 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 quer´ıamos.
Un problema A pertenece a la clase NP si cada instancia con la respuesta “s´ı” del proble-
ma Atiene por lo menos un certificado conciso y, tambi´ en llamado un testigo polinomial.
En los problemas t´ıpicos que tratan de la existencia de un objeto matem´ atico que cumple
con ciertos criterios, el objeto mismo sirve como un certificado — t´ıpicamente el objeto
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 suficientemente simples para poder verificar en
tiempo polinomial que un dado objeto realmente corresponde a los criterios definidos.
70 CAP
´
ITULO 5. CLASES DE COMPLEJIDAD
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 CIRCUIT-
SAT 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, po-
demos “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 len-
guaje 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 dos v´ erti-
ces 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 satisfiabilidad” del resultado anterior puede ser
5.4. COMPLEJIDAD DE ALGUNAS VARIACIONES DE SAT 71
verificada en espacio logar´ıtmico 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 lite-
rales 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 li-
terales por a˜ nadir uno o dos duplicados de un literal z donde hace falta. Vamos a mos-
trar 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
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 ten´ıa
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)
72 CAP
´
ITULO 5. CLASES DE COMPLEJIDAD
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 corres-
ponde 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)
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 definida 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 construcci´ on I
necesariamente contiene un v´ ertice de cada uno de los k tri´ angulos. El conjunto I no pue-
de contener ning´ un par de v´ ertices que corresponda una ocurrencia positiva de un variable
5.5. COMPLEJIDAD DE PROBLEMAS DE GRAFOS 73
x y una ocurrencia negativa x de la misma variable. Entonces, ¡I define una asignaci´ on
de valores T! Si un v´ ertice v pertenece a I y v corresponde a una ocurrencia positiva de la
variable x, aplica que T(x) = ⊤. Si el v´ ertice v ∈ I corresponde a una ocurrencia nega-
tiva 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´ı definida es consistente. 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, identificamos 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 li-
teral 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 flujo m´ aximo
Dado un grafo dirigido con capacidades en las aristas y un flujo no-´ optimo, se puede
aumentar el flujo que cruza un corte desde el lado de s al lado de t o alternativamente
por disminuir el flujo desde el lado de t al lado de s. Este nos ofrece un algoritmo para
descubrir el flujo m´ aximo. Para empezar, podemos elegir el flujo cero, donde el flujo por
cada arista es cero — no rompe con ninguna restricci´ on, por lo cual es un flujo factible,
aunque no ´ optimo.
Para aumentar el flujo, 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. Definimos 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)
74 CAP
´
ITULO 5. CLASES DE COMPLEJIDAD
t
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
Figura 5.1: En ejemplo de un grafo con flujo y su grafo residual.
y sea δ = m´ın
C
δ(v, w). El flujo se aumenta por a˜ nadir δ en todos los flujos que van
seg´ un la direcci´ on de las aristas en el camino C y restar δ de todos los flujos 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 flujo es maximal.
La eficiencia del m´ etodo presentado depende de c´ omo se construye los caminos aumen-
tantes. La mayor eficiencia se logra por elegir siempre el camino aumentante de largo
m´ınimo; el algoritmo que resulta es polinomial, O(nm
2
) = O(n
5
). Es posible que ha-
yan m´ as de un camino de largo m´ınimo — 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 flujo
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 define 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 figura 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 m´ınimo del camino. Se podr´ıa resolver el
5.5. COMPLEJIDAD DE PROBLEMAS DE GRAFOS 75
problema de flujo m´ aximo por empezar con el flujo 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 flujo igual a su capacidad y cada arista que va en contra sobre
el corte tiene flujo cero. Es decir, la capacidad del corte es igual al flujo 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 finitas est´ an incluidas. Una arista ¦v, w¦ de G
f
se incluye en G

f
solamente
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 ser´ıa igual
al flujo m´ aximo en G

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

f
como un flujo
que ya no se puede aumentar con caminos que solamente utilizan aristas que “avanzan”
hac´ıa t.
Definimos como el flujo posible de un v´ ertice es el m´ınimo 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
= m´ın

¸
{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 flujo posible cero y cada arista adyacente a
estos v´ ertices. Despu´ es identificamos el v´ ertice v con flujo posible m´ınimo. “Empujamos”
una cantidad de flujo igual al flujo posible de v desde v hac´ıa t. Despu´ es “retiramos” flujo
a v de sus aristas entrantes por construir caminos desde s a v hasta que se satisface la
demanda de flujo que sale de v a t. Ahora actualizamos las capacidades de las aristas
afectadas y memorizamos el flujo generado y el camino que toma.
Computamos de nuevo los flujos posibles y eliminamos de nuevo v´ ertices con flujo posi-
ble cero juntos con sus aristas adyacentes. Si s y t quedaron fuera, el flujo construido es
el flujo mayor en G

f
. Si todav´ıa est´ an, repetimos el proceso de elegir el m´ınimo y empu-
jar y retirar flujo. Iteramos as´ı, sumando los flujos 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 flujo son ambas de complejidad asint´ otica O(n) y de
ejecutan en total O(n) veces. Entonces, el algoritmo del flujo mayor tiene complejidad
asint´ otica O(n
3
).
76 CAP
´
ITULO 5. CLASES DE COMPLEJIDAD
5.5.2. El problema de corte m´ınimo
El problema de corte m´ınimo es igual al problema del flujo m´ aximo: se resuelve por fijar
un v´ ertice s cualquiera y despu´ es resolver el flujo m´ aximo entre s y todos los otros v´ erti-
ces. El valor m´ınimo de los flujos m´ aximos corresponde al corte m´ınimo del grafo entero.
Entonces, como existen algoritmos polinomiales para el problema de flujo m´ aximo, y so-
lamente repetimos n −1 veces su ejecuci´ on, el problema del corte m´ınimo pertenece a la
clase P.
Sin embargo, el problema de decisi´ on siguiente es mucho m´ as dif´ıcil:
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 ocu-
rrencias de los literales x
i
y x
i
en φ.
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 ser´ıa una
tautolog´ıa. 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 ser´ıa 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 cruzar´ıan el corte despu´ es del cambio). Entonces
podemos asumir que caen en lados distintos del corte.
5.5. COMPLEJIDAD DE PROBLEMAS DE GRAFOS 77
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 dife-
rentes, 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 definimos 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 modificar 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 modificado
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?
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,
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.
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 figura 5.2:
gadgets de elecci´ on que eligen la asignaci´ on a las variables x
i
,
gadgets de consistencia que verifican 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
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 verificar 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:
5.5. COMPLEJIDAD DE PROBLEMAS DE GRAFOS 79
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 corres-
ponde 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 finales. 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
dif´ıcil:
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
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
.
Verificando 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.
80 CAP
´
ITULO 5. CLASES DE COMPLEJIDAD
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 art´ıculos ϕ
i
∈ Φ y cada objeto tiene una utilidad ν(ϕ
i
) y un peso
ω (ϕ
i
). La pregunta es qu´ e conjunto M ⊆ Φ de art´ıculo deber´ıa uno elegir para tener un
valor total por lo menos k si tiene una mochila que solamente soporta peso hasta un cierto
l´ımite 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. Definimos variables auxiliares V (w, i) que es el valor total
m´ aximo posible seleccionando algunos entre los primeros i art´ıculos 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´ax¦V (w, i), v
i+1
+ V (w −w
i+1
, i)¦ (5.50)
5.7. PROBLEMAS FUERTEMENTE NP-COMPLETOS 81
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, ne-
cesitar´ıa 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
Cap´ıtulo 6
Estructuras de datos
Un paso t´ıpico en el dise˜ no de un algoritmo es la elecci´ on de una estructura de datos apro-
piada para el problema. En esta secci´ on revisamos algunas estructuras que se utiliza en
construir algoritmos eficientes para problemas de decisi´ on y problemas de optimizaci´ on.
6.1. Arreglos
Un arreglo es una estructura capaz de guardar en un orden fijo n elementos. Los ´ındices
de las posiciones pueden empezar de cero
a[] = [a
0
, a
1
, a
2
, . . . , a
n−1
] (6.1)
o alternativamente de uno
b[] = [b
1
, b
2
, . . . , b
n−1
, b
n
]. (6.2)
Hay que cuidar que se use las ´ındices consistentemente. Se refiere 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 identificar 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 fijo 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
j−1
, 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 figura
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 eficientes — 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 final del arreglo.
(VI) Si al final, c = 0, asigna c := 0 y comienza de nuevo.
(VII) Si al final 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 figura 6.2. En cada iteraci´ on, se
hace n−1 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 fin 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 fin del arreglo.
Para ordenar en orden decreciente, habr´ a que siempre buscar el elemento mayor entre i
y el fin 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 =
n−1
¸
j=1
j =
n−1
¸
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, aho-
rramos 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 m´ınimo 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 podr´ıa fijar k = 1.
Las dos subarreglos b

[] y b
r
[] as´ı ordenados est´ an combinados con uso de memoria auxi-
liar: 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 final de b[].
(V) Mientras todav´ıa 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 final. 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 l´ınea nueva. Las
iteraciones est´ an separadas por l´ıneas horizontales.
6.2. LISTAS 89
6.2. Listas
Listas son estructuras un poco m´ as avanzadas que puros arreglos, como t´ıpicamente 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 lis-
ta, 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 eficacia 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 “r´ıgi-
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 final,
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 final.
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 hac´ıa 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 sim-
plemente, grupos de datos que habr´ a que ordenar.
´
Arboles permiten realizar eficientemen-
te 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 figura 6.3. Si ning´ un v´ ertice tiene solamente un hijo, se
dice que el ´ arbol est´ a lleno.
la ra´ız
hijo derecho
ramo derecho de la ra´ız
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 f´ısica de la computadora. La figura 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 figura 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 l´ıneas agrupan juntos sub´ arboles del mismo tama˜ no.
El peor caso de falta de balance para n = 8 tiene profundidad seis.
Un ´ arbol balanceado con n = 8 y profundidad tres.
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 Adel’son-Vel’skii 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 ra´ız del ´ arbol y progresa recursivamente al hijo izquierdo si el valor del ra´ız 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 m´ınimo 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.
procedure ubicar(int clave, node actual) : leaf ¦
if (actual es una hoja) ¦
return leaf ;
¦ else ¦
if (actual.clave ¡clave) ¦
ubicar(clave, actual.derecho);
¦ else ¦
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 definir 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 ra´ız de cual es v es la altura
de v. La altura del ´ arbol entero es la altura de su ra´ız. Un ´ arbol balanceado se puede
caracterizar como un ´ arbol con ra´ız 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, definimos adem´ as la profundidad de cada
v´ ertice del ´ arbol:
T(v) =

0, si v es la ra´ız,
T(v.{) + 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 Hel numero de hojas del ´ arbol. Para
todo n = 2k, tenemos H = 2n−1 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 H hojas, se puede localizar una clave en tiempo
O(T) = O(log
2
H) = 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
ra´ız 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 ra´ız 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 definici´ 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
k−1
+T
k−2
, 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
a
b
c
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 H > 0 — siempre hay hojas si el ´ arbol no est´ a com-
pletamente vac´ıo. 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 deber´ıa 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 figura 6.6 muestra un
ejemplo.
Para eliminar un elemento del ´ arbol, hay que primero ubicar su posici´ on y despu´ es eli-
minar 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 figura 6.7 muestra un ejemplo.
Las operaciones de insertar y eliminar claves modifican la forma del ´ arbol. La garant´ıa
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 ra´ız 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
a
b c
c
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
B
A
A
B
v
t
u
w
u
v
B1
u
B2
A2
v
B1
u
u
w
t v
A1
v
A2
A1
B2
A A
t
t
B
t
B B
w
A
u
t
v
w
A
t u
u v t
v
B
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 m´ınimo 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 ra´ız 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 rotacio-
nes est´ an presentadas en la figura 6.8.
La rotaci´ on adecuada est´ a elegida seg´ un las alturas de los ramos que est´ an fuera de ba-
lance, 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 figura 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 t´ıpica de encontrar el punto de rotaci´ on t es regresar
hac´ıa la ra´ız despu´ es de haber operado con una hoja para verificar si todos los v´ ertices
en camino todav´ıa 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” hac´ıa la ra´ız 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 hac´ıa la ra´ız 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
identifica 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 ra´ız 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 figura 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.
v
v w
w
A
B C A
C
B
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 ra´ız. Las posibles violaciones
son de dos tipos: v´ ertices de ruteo rojos que llegan a tener un hijo rojo por las rotaciones y
la ra´ız 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 eficientemente. 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
˚
A•boles 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
k−1
, 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 exac-
tamente 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 ra´ız 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 deber´ıamos realizar la inserci´ on todav´ıa no est´ a lleno, insertamos la clave y estamos
listos. Si el v´ ertice es lleno, habr´ a que identificar 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 ra´ız.
Como tambi´ en impusimos una cota inferior al n´ umero de claves, al eliminar una clave
podemos causar que un v´ ertice sea “demasiado vac´ıo”. 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 m´ınima 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 ra´ız,
si presente, y en la ausencia de ℓ en A, la ra´ız ser´ a
m´ax ¦k ∈ A [ ℓ > k¦ (6.17)
si A contiene claves menores a ℓ y m´ın ¦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 ra´ız 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
m´ınima de A
2
. Ejecutamos splay(∞, A
1
) para lograr que la ra´ız de A
1
modificado
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 figura 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 ra´ız y A
2
el resto del A
modificado.
eliminaci´ on de ℓ de A: divide A con la clave ℓ. Si resulta que ℓ es la ra´ız, qu´ıtalo y
ejecuta la uni´ on de los dos ramos sin ℓ. Si ℓ no es la ra´ız, 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 ra´ız, solamente
vuelve a juntar A
1
como el ramo derecho de A
2
. Si no lo es, crea un v´ ertice ra´ız
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
como cualquier b´ usqueda en un ´ arbol binario ordenado desde la ra´ız utilizando el hecho
que las claves peque˜ nas est´ an a la izquierda y las grandes a la derecha — en compara-
ci´ on con la clave del v´ ertice actual. Al terminar la b´ usqueda en un v´ ertice v, empezamos
6.3.
´
ARBOLES 101
rotaciones simples para mover v hac´ıa la ra´ız sin mezclar el orden de las claves (ver las
rotaciones simples en la figura 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 figura
6.8). Este es el caso de la ´ ultima operaci´ on con cual v llega al ser la ra´ız.
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 figura
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.
A
rotate(y)
rotate(x)
x
A B
y
C
z
D
D C
y
B
x
z
Figura 6.11: Una rotaci´ on doble derecha-derecha.
102 CAP
´
ITULO 6. ESTRUCTURAS DE DATOS
B
k+1
B
k
B
k
Figura 6.12: La definici´ on recursiva de un ´ arbol bin´ omico B
k+1
en t´ erminos de dos copias
de B
k
. La ra´ız de B
k+1
es el v´ ertice gris.
6.4. Mont´ıculos
Un mont´ıculo (ingl´ es: heap) es una estructura compuesta por ´ arboles. Existen muchas
variaciones de mont´ıculos. La implementaci´ on t´ıpica de un mont´ıculo 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. Mont´ıculos bin´ omicos
Un mont´ıculo bin´ omico se define de una manera recursiva. Un ´ arbol bin´ omico de un
v´ ertice es B
0
y el ´ unico v´ ertice es la ra´ız. El ´ arbol B
k+1
contiene dos copias de B
k
tales
que la ra´ız de una copia es la ra´ız de B
k+1
y la ra´ız de la otra copia es un hijo directo de
esta ra´ız (ver figura 6.12). Algunas consecuencias de esta definici´ on son que
1. El ´ arbol B
k
contiene 2
k
v´ ertices.
2. La altura de B
k
es k.
3. La ra´ız de B
k
tiene k hijos directos B
k−1
, B
k−2
, . . . , B
1
, B
0
.
Las claves est´ an guardadas en un ´ arbol bin´ omico seg´ un el orden de mont´ıculo: la clave
del v´ ertice padre es menor que la clave de su hijo. Cada v´ ertice contiene una clave. Un
mont´ıculo 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
k−1
. . . b
2
b
1
b
0
, (6.18)
donde los b
i
son los bits y k es el n´ umero m´ınimo de bits requeridos para representar n.
Si b
i
= 1, en el mont´ıculo est´ a presente un ´ arbol bin´ omico B
i
, y si b
i
= 0, ese tama˜ no de
´ arbol no forma parte del mont´ıculo. Por definici´ on, el largo del n´ umero binario es log
2
n,
o sea O(log n). Por seguir el orden de mont´ıculo en cada ´ arbol, se puede encontrar la
clave m´ınima del mont´ıculo en tiempo O(log [n). La figura 6.13 muestra un ejemplo de
un mont´ıculo bin´ omico compuesto por cinco ´ arboles.
6.4. MONT
´
ICULOS 103
Figura 6.13: Un ejemplo de un mont´ıculo bin´ omico, compuesto por cinco ´ arboles bin´ omi-
cos.
Cada v´ ertice del mont´ıculo 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 ra´ız ser´ a un ramo del otro ´ arbol B
n
. Esta operaci´ on
se realiza en tiempo O(1).
Para unir dos mont´ıculos bin´ omicos, hay que recorrer las listas de ra´ıces de los dos
mont´ıculos simultaneamente. Al encontrar dos ´ arboles del mismo tama˜ no B
i
, se los junta
a un ´ arbol B
i+1
. Si uno de los mont´ıculos ya cuenta con un B
i+1
se los junta recursiva-
mente. Si hay dos, uno queda en el mont´ıculo final 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
mont´ıculo en tiempo O(log n), dando una complejidad total de O(log n) para la inser-
ci´ on.
Para eliminar el elemento m´ınimo, lo buscamos en tiempo O(log n), le quitamos y crea-
mos otro mont´ıculo de sus hijos en tiempo O(log n). Unimos los dos mont´ıculos 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 ra´ız para no violar el orden del mont´ıculo 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 m´ınimo en tiempo O(log n).
6.4.2. Mont´ıculos de Fibonacci
Un mont´ıculo de Fibonacci es una colecci´ on de ´ arboles (no bin´ omicos) que respetan el
orden de mont´ıculo 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 ra´ıces 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 mont´ıculo y el manejo del n´ umero de ´ arboles, el elemento
m´ınimo 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 ra´ıces se
logra simplemente por modificar 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 modificados).
Para eliminar el elemento m´ınimo, simplemente se lo quita de la lista de ra´ıces y adjun-
tando la lista de los hijos del v´ ertice eliminado en el mont´ıculo como si estuviera otro
mont´ıculo. Despu´ es de la eliminaci´ on, se repite una operaci´ on de compresi´ on hasta que
las ra´ıces tengan grados ´ unicos. Aqu´ı la dificultad viene de encontrar eficientemente las
ra´ıces con grados iguales para juntarlos. Se logra por construir un arreglo auxiliar mien-
tras recorriendo la lista de ra´ıces: el arreglo tiene el tama˜ no de grados posibles y se guarda
en el elemento i una ra´ız 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 ra´ıces,
el n´ umero de ra´ıces es O(log n) porque todas las ra´ıces tienen una cantidad diferente de
hijos y ninguna ra´ız puede tener m´ as que O(log n) hijos.
Para disminuir el valor de una clave, hay dos opciones: si est´ a en una ra´ız, es trivial
(solamente modificando 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 ra´ız nueva. Si el padre w de v llevaba
el valor uno en su marcador, tambi´ en se quita w y lo convierte en una ra´ız 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 ra´ıces habr´ a que hacer recursivamente hasta llegar a un padre con el valor de
marcador en cero.
En un mont´ıculo 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 mont´ıculo. En el peor caso, los v´ ertices forman un
s´ olo ´ arbol, donde la ra´ız tiene muchos hijos y no hay muchos otros v´ ertices.
Denotamos por B
k
el ´ arbol bin´ omico m´ınimo donde la ra´ız tenga k hijos. Los hijos son
B
0
, . . . , B
k−1
y B
i
tiene i hijos. Aplica que
[B
k
[ = 1 +
k−1
¸
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 mont´ıculo 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 ra´ız. Lo ´ unico que hay que establecer
es que los ramos de los hijos de la ra´ız 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 ra´ız.
Sea h ≥ 0 y F
h
un ´ arbol de un mont´ıculo Fibonacci donde la ra´ız v tiene h hijos, pero
donde la cantidad de otros v´ ertices es m´ınima. 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 m´ınima de hijos, H
i
ha necesariamente perdido un hijo; si hubiera perdido m´ as
que uno, H
i
habr´ıa sido movido a la lista ra´ız. Entonces, H
i
tiene i − 2 hijos y cada uno
de ellos tiene la cantidad m´ınima posible de hijos. Entonces, H
i
es la ra´ız de un F
i−2
.
Entonces, los hijos de un F
r
son las ra´ıces de F
0
, F
1
, . . . , F
r−2
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 ra´ız)
2 +
¸
r−2
i=0
[F
i
[, si r > 0, la ra´ız, 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
r−1
[ +[F
r−2
[ .
(6.21)
Resulta que el n´ umero de v´ ertices en F
r
es el n´ umero de Fibonacci T(r + 2) (definido
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 eficiente si el grafo es muy denso, porque la matriz ocupa n
2
elementos y si m es mucho menor que n
2
, la mayor´ıa 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.
Algor´ıtmicamente 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 modificaciones muy peque˜ nas. Los usos t´ıpicos de algoritmos de recorrido
incluyen
la construcci´ on de caminos
la computaci´ on distancias
la detecci´ on de ciclos
la identificaci´ 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 (L es una
pila):
1. crea una pila vac´ıa L
2. asigna u := v
3. marca u visitado
4. a˜ nade cada v´ ertice no marcado en Γ(v) al comienzo de L
6.5. GRAFOS 107
5. quita del comienzo de L todos los v´ ertices marcados
6. si L est´ a vac´ıa, termina
7. asigna u := el primer v´ ertice en L
8. quita el primer v´ ertice de L
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 L de v´ ertices ya visitados (inicialmente L := ∅), basta
con definir
dfs(v, G, L) ¦
L := L ∪ ¦v¦
para todo w ∈ Γ(v) ` L :
dfs(w, G, L).
¦
(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 clasificaci´ 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 ra´ız 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 ra´ız 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 clasifica 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 definici´ on recursiva:
nivel(v) =

0, si v es la ra´ız,
nivel(u) + 1, si u es el padre de v.
(6.24)
La definici´ 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 ra´ız; 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 L. Dado G y un v´ ertice inicial v ∈ V , el proce-
dimiento general es el siguiente:
1. crea una cola vac´ıa L
2. asigna u := v
3. marca u visitado
4. a˜ nade cada v´ ertice no marcado en Γ(v) al fin de L
5. si L est´ a vac´ıa, termina
6. asigna u := el primer v´ ertice en L
7. quita el primer v´ ertice de L
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 cone-
xos de un grafo. Como ya definido 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 gra-
fo 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 clasificados 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 definiciones, 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 identificar los componentes conexos en tiempo O(n
2
).
En un grafo conexo, podemos clasificar 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 final” de los v´ ertices y son denotados por F(v).
Las I(v) definen 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 definici´ 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 identifica los com-
ponentes conexos simples genera tal ´ arbol). Si v es la ra´ız de un ´ arbol cubriente, tiene
necesariamente por lo menos dos hijos, porque por definici´ on de los v´ ertices de articula-
ci´ on, un recorrido no puede pasar de alg´ un componente a otro sin pasar por v.
Si v no es la ra´ız, por lo menos un ramo de v contiene un componente doblemente cone-
xo (o sea, 2-conexo). De tal ramo no es posible tener una arista retrocedente a ning´ un
antepasado.
Hacemos un recorrido y marcamos para cada v´ ertice que tan cerca de la ra´ız se puede
llegar solamente por las aristas de ´ arbol y las aristas retrocedentes:
R(v) = m´ın

¸
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 ra´ız es un v´ ertice de articulaci´ on si y s´ olo si tiene un hijo u tal
que R(u) ≥ I(v). Una definici´ on recursiva de R(v) es
R(v) = m´ın


¦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 { 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;
{ := ∅;
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
procedure 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 {;
padre(u) := v;
doblemente-conexo(u);
si R(u) ≥ I(v)
elimina aristas de { hasta e inclusa ¦v, v

¦;
R(v) := m´ın¦R(v), R(u)¦;
en otro caso si u = padre(v);
R(v) := m´ın¦R(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 ma-
ximales fuertemente conexos. La figura 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 reflexiva 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 ra´ız del
ramo se dice la ra´ız del componente. La meta de ordenaci´ on topol´ ogica es encontrar las
ra´ıces de los componentes seg´ un el orden de sus n´ umeros F(v). Al llegar a una ra´ız v
i
,
su componente est´ a formado por los v´ ertices que fueron visitados en el ramo de v
i
pero
no fueron clasificados a ninguna ra´ız anterior v
1
, . . . , v
i−1
. Esto se puede implementar
f´ acilmente con una pila auxiliar {, empujando los v´ ertices en la pila en el orden del
DFS y al llegar a una ra´ız, quit´ andolos del encima de la pila hasta llegar a la ra´ız misma.
As´ı nada m´ as el componente est´ a eliminado de la pila.
Lo que queda es saber identificar las ra´ıces. 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 figura 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 ra´ıces, utilizamos un arreglo auxiliar /(v) para guadrar un n´ umero para
c´ ada v´ ertice encontrado (ver figura 6.16 para una ilustraci´ on):
/(v) = m´ın

¦I(v)¦ ∪

I(v

) [
∃w que es descendente de v tal que

¦w, u¦ es retrocedente o transversa
la ra´ız del componente de u es un antepasado de v

(6.29)
Entonces, si /(v) = I(v), sabemos que v es una ra´ız 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
v
w
u
Figura 6.16: La situaci´ on de la ecuaci´ on 6.29. La ra´ız del componente est´ a dibujado en
gris y la flecha no continua es un camino, no necesariamente una arista directa.
forma recursiva:
/(v) = m´ın ¦ ¦I(v)¦
∪ ¦/(u) [ u es hijo de v¦
∪ ¦I(u) [ ¦v, u¦ es retrocedente o transversa
∧ la ra´ız del componente de u es un antepasado de v¦¦ .
(6.30)
Durante la ejecuci´ on el algoritmo, en la pila auxiliar { habr´ a v´ ertices los componentes de
los cuales no han sido determinados todav´ıa. Para facilitar el procesamiento, mantenemos
un arreglo de indicadores: guardado(v) = true si v est´ a en la pila auxiliar y false
en otro caso. As´ı podemos determinar en el momento de procesar una arista retrocedente
o transversa ¦v, u¦ si la ra´ız 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 ra´ız est´ an todav´ıa 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 { 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 cla-
ves con valores. Por ejemplo, se podr´ıa implementar una gu´ıa 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 t´ıpica 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. T´ıpicamente
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 m´ınimo 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 m´ınimo,
3. retirar el elemento m´ınimo,
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 m´ınimo pero el concepto de prioridad no
aplica. Las colas de prioridad se puede implementar con mont´ıculos.
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.
procedure fuerteconexo(v);
a := a + 1;
I(v) := a;
/(v) := I(v);
empuja v en {;
guardado[v] := true ;
for all ¦v, u¦ ∈ E do
if I(u) = 0
fuerteconexo(u);
/(v) := m´ın¦/(v), /(u)¦;
else
if (I(u) < I(v)∧ guardado(u) = true )
/(v) := m´ın¦/(v), I(u)¦;
if /(v) = I(v)
quita de { los elementos hasta e incluso v,
guardado(w) := false ;
imprime w como parte del componente de v;
procedure main(V, E)
a := 0;
I(v) := 0;
{ := ∅;
for all v ∈ V do
I(v) := 0;
guardado(v) := false
for all v ∈ V
if 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-find) 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 definici´ on
S ∩ T = ∅.
No es realmente necesario asignar nombres a los conjuntos, porque cada elemento perte-
nece a un s´ olo conjunto en C. Entonces, se puede definir 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 figura 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: {(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
12
11
1
5 2
3 4 7
8
6
10 9
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;
while {(p) = p
p := {(p);
return 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 ra´ız de una (con clave c
1
) sea un hijo de
la ra´ız de la otra (con clave c
2
): {(c
1
) := c
2
. Esta operaci´ on necesita tiempo O(1).
Podemos considerar la complejidad de una sucesi´ on de operaciones. Por ejemplo, si crea-
mos 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 ser´ıa 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 ser´ıa 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 modificar los caminos cuando uno realiza una b´ usqueda de
conjunto en la estructura.
Condensaci´ on del camino: traer los v´ ertices intermedios a la ra´ız
118 CAP
´
ITULO 6. ESTRUCTURAS DE DATOS
p := c;
while {(p) = p
p := {(p);
q := i;
while {(q) = q
r := {(q); {(q) := p;
q := r
return p;
Divisi´ on del camino: mover v´ ertices intermediados a otra parte
p := c;
while {({(p)) = {(p)
q := {(p);
{(p) := {({(p));
p := q
return y;
Cortar el camino a su mitad: saltando a abuelos
p := c;
while {({(p)) = {(p)
{(p) := {({(p));
y := {(p)
return {(p);
Cap´ıtulo 7
An´ alisis de algoritmos
7.1. Algoritmos simples
Para analizar desde un pseudoc´ odigo la complejidad, t´ıpicamente se aplica las reglas si-
guientes:
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(m´ax¦f
1
, . . . , f
k
¦) . (7.1)
La complejidad de una cl´ ausula de condici´ on (if ) es la suma del tiempo de evaluar
la condici´ on y la complejidad de la alternativa ejecutada.
La complejidad de una repetici´ on (while , for , . . .) 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 t´ıpicamente involucra la soluci´ on de una ecua-
ci´ on diferencial. El m´ etodo m´ as simple es adivinar una soluci´ on y verificar si est´ a bien 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 simplificar 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
+
k−1
¸
j=0
a
j
d(b
k−j
)
. .. .
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
k−1
d

n
b
k−1

+ . . . + d(n)
= a
k
T(1) +
k−1
¸
j=0
a
j
d(b
k−j
)
= a
k
+
k−1
¸
j=0
a
j
d(b
k−j
).
(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
k−j
) = (d(b))
k−j
que nos permite reformular la parte heterog´ eni-
ca:
k−1
¸
j=0
a
j
d(b)
k−j
= d(b)
k
k−1
¸
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
k−1
¸
j=0
a
j
d(b)
k−j
= d(b)
k
k−1
¸
j=0

a
d(b)

j
= d(b)
k
k−1
¸
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 multipli-
cativa. 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, tendr´ıamos una parte homog´ enica 3
log n
= n
log 3
. En el caso
U(1) =
1
2
tendr´ıamos
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:
k−1
¸
j=0
a
j
d(b
k−j
) =
k−1
¸
i=0
2
j
2
k−j
log 2
k−j
= 2
k
k−1
¸
j=0
k −j
= 2
k
(k + (k −1) + (k −2) +. . . + 1)
= 2
k
k(k+1)
2
= 2
k−1
k(k + 1).
(7.21)
Vamos a asignar k = log n:
2
k−1
k(k + 1) = 2
log n−1
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
n−2
(7.25)
124 CAP
´
ITULO 7. AN
´
ALISIS DE ALGORITMOS
Ahora multiplicamos por los coeficientes del lado izquiera y sumamos para obtener el
resultado:
R(n) = 2
n−1
R(1) +n + 2(n −1) + 4(n −2) +. . . + 2
n−2
2
= n + 2(n −1) + 4(n −2) +. . . + 2
n−2
2 + 2
n−1
=
n−1
¸
i=0
2
i
(n −i)
= 2
0
+ . . . + 2
0
. .. .
n veces
+2
1
+ . . . + 2
1
. .. .
n−1 veces
+2
2
+ . . . + 2
2
. .. .
n−2 veces
+. . . + 2
n−1
....
1 vez
=
n−1
¸
i=0
i
¸
j=0
2
j
=
n−1
¸
i=0
(2
i+1
−1) =
n−1
¸
i=0
2
i+1

n−1
¸
i=0
1
= 2
n+1
−2 −n.
(7.26)
7.2.3. Transformaciones
Para simplificar 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
n−1
) + 2
n
= 3U(n −1) + 2
n
, si n ≥ 1.
(7.30)
7.3. AN
´
ALISIS DE COMPLEJIDAD PROMEDIO 125
Abriendo esta definici´ on, obtenemos
U(n) = 3U(n −1) + 2
n
[ 1
U(n −1) = 3U(n −2) + 2
n−1
[ 3
U(n −2) = 3U(n −3) + 2
n−2
[ 9
.
.
.
U(1) = 3U(0) + 2 [ 3
n−1
(7.31)
y entonces
U(n) = 3
n
+
n−1
¸
i=0
3
i
2
n−i
= 3
n
+ 2
n
n−1
¸
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 mayor´ıa de las instancias tiene tiempo de ejecuci´ on mucho me-
jor. 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
informaci´ on a priori de las probabilidades, se asume que cada instancia es equiproba-
ble (es decir, la instancia est´ a seleccionada del espacio de todas las instancias posibles
uniformemente al azar).
T´ıpicamente el an´ alisis de complejidad promedio es m´ as desafiante 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 fija el ´ ultimo elemento y considera las permutaciones de los otros ele-
mentos). Entonces, la complejidad del caso promedio se puede caracterizar con la ecua-
ci´ on diferencial:
7.3. AN
´
ALISIS DE COMPLEJIDAD PROMEDIO 127
T(n) =

d, n = 1,
(n−1)!
n!

T(0) +T(n) + cn +
n−1
¸
i=1
(T(i) + T(n −i) + cn)

, n > 1,
=
1
n

T(0 +T(n) + cn +
n−1
¸
i=1

T(i) + T(n −i) + cn

=
1
n

T(0 +T(n + cn +
n−1
¸
i=1

T(i) + T(n −i) + cn

=
1
n

T(0 +T(n) + cn + (n −1)cn + 2
n−1
¸
i=1
T(i)


d
n
+ Cn + cn +
2
n
n−1
¸
i=1
T(i)
≤ (d + C + c)n +
2
n
n−1
¸
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
simplificar, reemplazamos el constante d + C + c = D para obtener la ecuaci´ on
T(n) ≤ Dn +
2
n
n−1
¸
i=1
T(i) (7.38)
y intentamos solucionarla con la adivinanza T(n) ≤ αnlog n, donde α es un constante
suficientemente 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
n−1
¸
i=1
αi log i = Dn +

n

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

= Dn +

n

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

n
2
+ i

= Dn +

n
+

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

= Dn +

n

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

¸
n
2

n
2
−1

+
n
2
−1
¸
i=1
i

≤ Dn +

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 +

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 verifican la adivinanza
T(n) = αnlog n.
7.4. An´ alisis de complejidad amortizada
La idea en el an´ alisis de complejidad amortizada es definir una sucesi´ on de n operaciones
y estimar una cota superior para su tiempo de ejecuci´ on. Esta cota superior est´ a dividido
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 sucesi´ on sean
iguales ni del mismo tipo. La motivaci´ on de complejidad amortizada es poder “pron´ osti-
car” con mayor exactitud el tiempo de ejecuci´ on del uso del algoritmo en el “mundo real”:
si uno t´ıpicamente 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
“costo” computacional de operaci´ on O
i
puede ser muy distinto del costo de otra operaci´ on
7.4. AN
´
ALISIS DE COMPLEJIDAD AMORTIZADA 129
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 guarant´ıa 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 significa 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 definida, vamos a tener que multiplicar el ta-
ma˜ 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 dif´ıcil n´ umero i, el tama˜ no va a ser 2
i
. Enton-
ces la suma de la complejidad de las k inserciones dif´ıciles 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 opera-
ci´ 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 necesita todos
sus
M
n
pesos asignados, los ahorramos en una cuenta bancaria com´ un. Si una operaci´ on
necesita m´ as que
M
n
pesos, la operaci´ on puede retirar fondos adicionales de la cuenta
130 CAP
´
ITULO 7. AN
´
ALISIS DE ALGORITMOS
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. Denotamos 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 suficiente” 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
−Φ
i−1
. .. .
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
−Φ
i−1
)
=
n
¸
i=1
r
i
+
n
¸
i=1

i
−Φ
i−1
)
=
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 definir 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
−Φ
i−1
≤ p
i
. (7.46)
As´ı tambi´ en aplicar´ıa
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.
T´ıpicamente 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 floja 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 inserci´ on
cara es t
1
+ nt
2
. Vamos a definir una funci´ on de balance tal que su valor inicial es ce-
ro 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 ta-
ma˜ no doble (t
2
) adem´ as de preparar mover todas las claves anteriores (uno por elemento,
el otro t
2
). Queremos cumplir con ecuaci´ on 7.46: para todo i, necesitamos que
a
i
= r
i
+ Φ
i
−Φ
i−1
≤ 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
i−1
+ 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´ aci-
les, aplica e
i
= e
i−1
, mientras con las dif´ıciles aplica e
i
= 2e
i−1
= 2c
i−1
.
El caso de una inserci´ on f´ acil ser´ a entonces
a
i
= t
1
+ (2t
2
(c
i−1
+ 1) −t
2
e
i−1
) −(2t
2
c
i−1
−t
2
e
i−1
)
= t
1
+ 2t
2
= p
i
.
(7.51)
Entonces el costo amortizado es igual al costo planeado. Para las inserciones dif´ıciles,
tenemos
a
i
= (t
1
+ t
2
c
i−1
) + (2t
2
(c
i−1
+ 1) −t
2
2c
i−1
)
− (2t
2
c
i−1
−t
2
c
i−1
)
= t
1
+ 2t
2
= p
i
,
(7.52)
que tambi´ en cumple con lo que quer´ıamos: 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 definido 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
−Φ
i−1
= t
1
+

t
2
e
i
2
−t
2
c
i

t
2
e
i−1
2
−t
2
c
i−1

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

t
2
e
i−1
2
+ t
2
c
i−1
= 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
−Φ
i−1
= t
3
+ (2t
2
c
i
−t
2
e
i
) −(2t
2
c
i−1
−t
2
e
i−1
)
= t
3
+ 2t
2
(c
i−1
−1) −2t
2
c
i−1
= t
3
−2t
2
.
(7.56)
Para el caso de c
i
=
e
i
2
−1 al cambio de definici´ on de Φ obtenemos
a
i
= r
i
+ Φ
i
−Φ
i−1
= t
3
+

t
2
e
i
2
−t
2
e
i

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

e
i
4
+1, tenemos
a
i
= r
i
+ Φ
i
−Φ
i−1
= t
3
+

t
2
e
i
1
2
−t
2
c
i

t
2
e
i−1
2
−t
2
c
i−1

= t
3
−t
2
(c
i−1
−1) +t
2
c
i−1
= t
3
+ t
2
.
(7.58)
7.4. AN
´
ALISIS DE COMPLEJIDAD AMORTIZADA 133
Para el ´ ultimo caso, el eliminaci´ on, c
i−1
=
e
i−1
4
, obtenemos
a
i
= r
i
+ Φ
i
−Φ
i−1
= t
3
+

t
2
c
i

t
2
e
i
2

t
2
e
i−1
2
−t
2
c
i−1

= t
3
+
t
2
e
i−1
4

t
2
e
i−1
2
+ t
2
c
i−1
= t
3

t
2
e
i−1
4
+
t
2
e
i−1
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 inva-
riant) 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
operaciones es O(mlog n). Marcamos con R(v) el ramo la ra´ız de cual es el v´ ertice v y
con [R(v)[ el n´ umero de v´ ertices en el ramo (incluyendo a v). Definimos
µ(v) = ⌊log [R(v)[⌋. (7.60)
Sea r la ra´ız 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 cons-
tante 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 figura 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 rotaciones
derechas — primero para mover t al lugar del abuelo, empujando el abuelo abajo a la de-
recha 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 definici´ 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 definici´ 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 significa 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 ra´ız nueva O(log n) pesos. Cada operaci´ on puede gastar
O(log n) pesos en ejecutar las operaciones splay y el mantenimiento del invariante de
costo y las operaciones adicionales que se logra en tiempo O(1). Entonces, cada opera-
ci´ 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. Mont´ıculos de Fibonacci
Para los mont´ıculos de Fibonacci (de secci´ on 6.4.2 utilizamos el siguiente invariante de
costo: cada ra´ız tiene un peso y cada v´ ertice marcado tiene dos pesos. Los costos planea-
dos de inserci´ on, decrementaci´ on del valor de clase y unir dos mont´ıculos son un peso por
operaci´ on, mientras la eliminaci´ on del m´ınimo 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 ra´ız 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 ra´ıces en tiempo O(1) junto con un peso.
Si el padre est´ a marcado, su movimiento a la lista de ra´ızes 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 mont´ıculos, solamente unimos las listas de ra´ıces. Por la contracci´ on de
las listas que se realiza al eliminar el m´ınimo, 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 ra´ıces est´ an implementadas como listas enlazadas, por lo cual
no hay que copiar nada, solamente actualizar unos punteros.
Para eliminar el m´ınimo, 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
ra´ıces, gastamos los pesos de las ra´ıces mismas. Despu´ es depositamos de nuevo un peso
en cada ra´ız. Son O(log n) ra´ıces, 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 dismi-
nuir su valor a −∞y despu´ es quitando el m´ınimo. Esto toma tiempo O(1) +O(log n) ∈
O(log n). Con estos valores, completamos en cuadro 7.1 los costos de operaciones 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), mont´ıculos (M),
mont´ıculos binomiales (B) y mont´ıculos 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 m´ınimo O(1) O(1) O(1) O(log n) O(1)
Eliminar m´ınimo 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
Cap´ıtulo 8
T´ ecnicas de dise˜ no de algoritmos
La meta al dise˜ nar un algoritmo es encontrar una manera eficiente a llegar a la soluci´ on
deseada. En este cap´ıtulo 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 l´ınea 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 me-
joramiento de una soluci´ on factible. En algunos casos es mejor hacer cualquier aumento,
aunque no sea el mejor ni localmente, en vez de considerar todas las alternativas para po-
der despu´ es elegir vorazmente o con otra heur´ıstica una de ellas. En general, algoritmos
heur´ısticos 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 operaciones de
aumento utilizados logra mejorarla. Este tipo de soluci´ on se llama un ´ optimo local.
8.1. Algoritmos de l´ınea de barrer
Los algoritmos de l´ınea 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 pro-
blemas de geometr´ıa computacional, donde se procesa objetos geom´ etricos como puntos,
139
140 CAP
´
ITULO 8. T
´
ECNICAS DE DISE
˜
NO DE ALGORITMOS
Figura 8.1: Una instancia del problema de intersecciones de segmentos.
l´ıneas, pol´ıgonos, etc´ etera. La instancia del problema est´ a compuesta por la informaci´ on
de la ubicaci´ on de los objetos en un espacio definido.
Para el caso que es espacio sea un plano, se puede imaginar que una l´ınea mueva en el
plano, cruzando la parte relevante del espacio donde se ubican los objetos. El movimiento
de la l´ınea sigue uno de los ejes u otra l´ınea fija y la l´ınea se para en puntos relevan-
tes al problema. Los puntos de parada se guarda en un mont´ıculo. La inicializaci´ on del
mont´ıculo 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 in-
formaci´ on sobre cu´ ales objetos est´ an actualmente bajo de la l´ınea. Entre dos paradas de la
l´ınea, 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 l´ınea 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 l´ıneas 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 figura 8.1.
Sin embargo, en una instancia promedia o t´ıpica, el n´ umero de puntos de intersecci´ on
k es mucho menor que n(n − 1). El algoritmo mejor imaginable tuviera complejidad
asint´ otica O(n + k), porque se necesita tiempo O(n) para leer la entrada y tiempo O(k)
8.1. ALGORITMOS DE L
´
INEA DE BARRER 141
Figura 8.2: Los puntos de inicio y fin de la instancia de la figura 8.1 y la direcci´ on de
procedimiento del algoritmo de l´ınea de barrer.
para imprimir la salida. Aqu´ı presentamos un algoritmo de l´ınea 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 finales y k inter-
secciones. La l´ınea 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 mont´ıculo. Las actualizaciones necesarias del
mont´ıculo tomar´ an O(log n) tiempo cada una.
Entre dos puntos de parada, por definici´ on no hay ninguna intersecci´ on, y adem´ as, el
subconjunto de segmentos cuales quedan “bajo” de la l´ınea de barrer, o sea, los segmentos
que intersectan con la l´ınea 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 fijo.
Entonces, guardamos en un ´ arbol binario balanceado los segmentos que quedan actual-
mente bajo de la l´ınea 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 l´ınea 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.
Por el hecho que el orden est´ a seg´ un la coordenada y, al momento de llegar a la inter-
142 CAP
´
ITULO 8. T
´
ECNICAS DE DISE
˜
NO DE ALGORITMOS
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 actuali-
zado 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 mont´ıculo 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 mont´ıculo 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 mont´ıculo, 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 m´ınimo, 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 m´ınimo 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 eficiente 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 compu-
tacional de dividir un problema a subproblemas sea bajo y tambi´ en que la computaci´ on
de juntar las soluciones de los subproblemas sea eficiente. 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 l´ınea de barrer para encontrar los puntos de intersecci´ on de
un conjunto S de n segmentos en R
2
.
M := un mont´ıculo vac´ıo
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 vac´ıo
mientras M no est´ a vac´ıo
(x, y) := el elemento m´ınimo 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 definido 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 definido 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 “final”
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 definidos 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 definido en el dato
j := el segundo ´ındice definido 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 definido 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 definido 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
m´ınima que contiene todos los puntos del conjunto. Una regi´ on es convexa si todos los
puntos de un segmento de l´ınea 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 figura 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 figura 8.4). Tales
puentes se encuentra por examinar en orden los puntos de las dos cubiertas, asegurando
que la l´ınea infinita definida por el segmento entre los dos puntos elegidos no corta nin-
guna 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
heur´ıstica 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 multipli-
car dos matrices. Sean A = (a
ij
) y B = (b
ij
) matrices de dimensi´ on n n. 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 multiplicacio-
nes
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
2ℓ−2i
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 a·log 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 ser´ıa buscar el m´ınimo 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 as´ınt´ 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´ı podr´ıamos 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 si-
guientes 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.
procedure pivote(i ∈ Z, D ⊆ R)
if [D[ < 20
ordenar(D);
return D[i]
else
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;
if [A[ ≥ i return pivote(i, A)
else return 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. T´ıpicamente 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 coeficientes 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 coeficientes peque˜ nos, llegando a la complejidad asint´ otica

n
k

= Ω

2
n

n

, (8.14)
aunque guardando las soluciones parciales (o sea, cada coeficiente ya calculado), llega-
mos a la complejidad O(nk) (de tiempo — la de espacio crece). El arreglo del algoritmo
de programaci´ on din´ amica para los coeficientes bin´ omicos resulta ser el tri´ angulo de Pas-
150 CAP
´
ITULO 8. T
´
ECNICAS DE DISE
˜
NO DE ALGORITMOS
cal:
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 pol´ıgono convexo
Nuestra segundo ejemplo de programaci´ on din´ amica es el siguiente problema:
Problema 8.22: Pol´ıgono convexo
Dado: Un pol´ıgono convexo de n lados en formato de la lista de los
n + 1 puntos finales de sus lados en la direcci´ on del reloj.
Pregunta: ¿Cu´ al divisi´ on del pol´ıgono a tri´ angulos da la suma m´ınima
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 pol´ıgono tiene n opciones
de asignaci´ on a tri´ angulos, incluyendo un tri´ angulo degenerado que consiste en el lado
s´ olo (ver figura 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 podr´ıa 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 pol´ıgono. Definimos como el “precio” de cada tri´ angulo degene-
rado cero y suponemos que estamos triangulizando el pol´ıgono parcial definido por los
puntos i −1, i, . . . , j −1, j. El precio de la triangulaci´ on ´ optima es
T[i, j] =

0, si i = j
m´ın
i≤k≤j−1
¦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 definido 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 pol´ıgono convexo con una soluci´ on fac-
tible (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 c´ırculos negros, mientras
el pol´ıgono est´ a dibujado en l´ınea 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 pol´ıgono. 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 pol´ıgono
en una triangulaci´ on ´ optima.
Cap´ıtulo 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 final 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
eficiente 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 cap´ıtulo 10). Una manera de aproximaci´ on es utilizar
m´ etodos heur´ısticos, 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 heur´ıstica 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 deci-
si´ 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 dif´ıcil, lo transformamos
en un problema de decisi´ on y demostramos que el problema de decisi´ on es NP-completo
(o ma´ as dif´ıcil). 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 definici´ 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 Papa-
dimitriou y Steiglitz [16].
9.1.
´
Arbol cubriente m´ınimo
Estudiamos algunos algoritmos de encontrar un ´ arbol cubriente m´ınimo 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 heur´ısti-
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 m´ınimo
y marcando los puntos finales 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 candi-
datos. 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 mont´ıculos normales se obtiene complejidad de O(mlog n) y con mont´ıculos 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. Ramificar-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 m´ınimo 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 todav´ıa. Cuando uno utiliza cotas para decidir cu´ ales
ramos dejar sin explorar, la t´ ecnica se llama ramificar-acotar (ingl´ es: branch and bound).
Es recomendable utilizar m´ etodos tipo ramificar-acotar solamente en casos donde uno no
conoce un algoritmo eficiente 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) deber´ıa 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 ramificar-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 L(R) de cualquier ruta R
aplica que
L(R) =
1
2
n
¸
i=1
(L(v
i−1
, v
i
) +L(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
m´ın
aplica que
L(R
m´ın
) ≥
1
2
¸
v∈V
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 fijo. Al procesar la arista
¦v, w¦, el paso “ramificar” es el siguiente:
1. Si al excluir ¦v, w¦ resultar´ıa 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¦ resultar´ıa 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 generar´ıa un ciclo en la ruta actua sin haber incluido todos
los v´ ertices todav´ıa, ignoramos el ramo de inclusi´ on.
156 CAP
´
ITULO 9. OPTIMIZACI
´
ON COMBINATORIA
Despu´ es de haber eliminado o inclu´ıdo aristas as´ı, computamos un nuevo valor de R
m´ın
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 todav´ıa
tiene ramos sin considerar. Cuando ya no queda ninguno, el algoritmo termina.
Cap´ıtulo 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 eficientemente. 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 cap´ıtulo 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 deber´ıa 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 m´ınimo para pro-
blemas 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 art´ıculos ϕ
i
∈ Φ donde cada ob-
jecto tiene una utilidad ν(ϕ
i
) y un peso ψ(ϕ
i
) y una mochila
que soporta peso hasta un cierto l´ımite Ψ
Pregunta: ¿c´ omo elegir un conjunto de art´ıculos M ⊆ Φ con la res-
tricci´ 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
art´ıculo ϕ
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 coeficiente 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 art´ıculo ϕ
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 art´ıculo 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 0–1
del problema original. Una versi´ on aun m´ as general no tiene l´ımite superior:
(x
i
∈ Z) ∧ (x
i
≥ 0). (10.5)
En el problema de empaquetear a cajas (ingl´ es: bin packing) tenemos un conjunto finito
de objetos Φ = ¦ϕ
1
, ϕ
2
. . . , ϕ
N
¦, cada uno con un tama˜ no definido t(ϕ
i
) ∈ R. Los
objetos habr´ a que empaquetear en cajas de tama˜ no fijo T tal que
T ≥ m´ax¦t(ϕ
i
) [ ϕ
i
∈ Φ¦ (10.6)
y queremos encontrar un orden de empaquetear que minimiza el n´ umero de cajas utiliza-
das. Este problema es NP-completo.
Un algoritmo de aproximaci´ on simple y r´ apido empieza por ordenar las cajas en una fila.
Procesamos los objetos en orden. Primero intentamos poner el objecto actualmente pro-
cesado en la primera caja de la fila. Si cabe, lo ponemos all´ı, y si no, intentamos en la
siguiente caja. Iterando as´ı obtenemos alguna asignaci´ on de objetos a cajas. Denotamos
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 significa 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 prime-
ro 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 define un
orden de visitas que efectivamente fija la ruta R:
1. Construye un ´ arbol cubriente m´ınimo 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 m´ınimo.
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 m´ınimo 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 heur´ıstica 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 t´ıpicas 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. Definiciones b´ asicas
En esta secci´ on, resumimos las definiciones utilizadas en el libro de texto editado por
Aarts y Lenstra [1]. Un problema combinatorial se define por un conjunto espec´ıfico 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 generalidad,
consideramos solamente problemas de minimizaci´ on, ya que uno puede convertir cual-
quier 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.
T´ıpicamente, uno cuenta con una representaci´ on compacta del conjunto de las soluciones
factibles y un algoritmo polinomial para verificar 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 define 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 t´ıpicos 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 modificaci´ 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 figura 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 modificaci´ on 2-opt para el problema del viajante: la ruta original R
est´ a marcada por las flechas azules y la ruta m´ as econ´ omica R

por las flechas verdes; las
aristas eliminadas est´ an en gris y las a˜ nadidas en l´ınea negro descont´ınua. Los cuatro ver-
tices que son puntos finales 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 definir 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 definido reducciones para la clase PLS y encontrado problemas completos,
como por ejemplo TSP y MAXCUT.
164 CAP
´
ITULO 10. ALGORITMOS DE APROXIMACI
´
ON
Cap´ıtulo 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, pro-
babilidades tambi´ en juegan un papel importante en an´ alisis del caso promedio (secci´ on
7.3).
Un ejemplo simple de un algoritmo aleatorio ser´ıa 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 pro-
piedades 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 definici´ on m´ as “flexible”
de algoritmo: un algoritmo aleatorizado tiene “permiso” para dar una salida incorrecta,
mientras al definir 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 ser´ıa 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 verificar
si una dada “soluci´ on” es correcta (cf. los certificados concisos de los problemas NP),
podemos convertir un algoritmo Monte Carlo a un algoritmo Las Vegas por repetirlo.
Resumimos ahora algunos resultados de la teor´ıa 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 definida en el espacio de probabi-
lidad 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 define 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 aleato-
rizado 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 significativamente
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 m´ınimo
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
aplicar´ıa 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
(verificado por ejemplo por DFS en tiempo polinomial) — con varios componentes, el
corte m´ınimo 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 flujo 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 flujo m´ aximo tiene complejidad asint´ otica
O(nmlog(n
2
/m)) y habr´ıa 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 significa que para resolver el problema de corte m´ınimo, 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 todav´ıa 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 contra´ıda
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 figura 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 final 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 finales (los v´ ertices amarillos) est´ an reemplazados
por un s´ olo v´ ertice (rojo en el frangmento modificado 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 m´ınimo con una probabili-
dad no cero. As´ı por repetir el algoritmo, podr´ıamos aumentar la probabilidad de haber
encontrado el corte m´ınimo. Las siguientes observaciones nos ayudan:
Si la capacidad del corte m´ınimo 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 m´ınimo es k.
La capacidad del corte m´ınimo en G despu´ es de la contracci´ on de una arista es
mayor o igual a la capacidad del corte m´ınimo en G.
Fijamos un corte m´ınimo 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 todav´ıa. Quedan n
i
= n − i + 1 aristas en el grafo actual
G
i
. Por la tercera observaci´ on, el conjunto de aristas F todav´ıa define un corte m´ınimo
en el grafo actual G
i
y los v´ ertices de los dos lados del corte definido 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 ≥
n−2
¸
i=1
(1 −2(n −i + 1)
−1
)
=

n
2

−1
=
2
n(n−1)
.
(11.7)
Hemos establecido que un corte m´ınimo espec´ıfido de G corresponde al resultado del
algoritmo de contracci´ on con probabilidad p ∈ Ω(n
−2
). Como cada grafo tiene por lo
menos un corte m´ınimo, 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 m´ınima encontrado sea el corte m´ınimo 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 m´ınimo 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 m´ınimo crece hac´ıa el final 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 mayor´ıa de los detalles de la demostraci´ on est´ an explicados en el
libro de Motwani y Raghavan [14].
Cap´ıtulo 12
Transiciones de fase
En este cap´ıtulo, estudiamos un fen´ omeno interesante de complejidad en algunos proble-
mas. Al generar instancias del problema aleatoriamente seg´ un alg´ un conjunto de par´ ame-
tros, 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 cap´ıtulo est´ a basada en el libro de Hartmann y Weigt [8].
12.1. Modelo de Ising
Un vidrio de esp´ın (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 part´ıculos 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 energ´ıa m´ınima cuando
tienen el mismo sentido, mientras dos ´ atomos con interacci´ on antiferromagn´ etica llegan
a su estado de energ´ıa m´ınima 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 energ´ıa m´ınima (ver
figura 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 energ´ıa m´ınima. En cada una de las ocho posi-
bles configuraciones de los sentidos (marcados con ∧ y ∨), por lo menos una interacci´ on
est´ a en conflicto (marcado con una zeta sobre la arista).
La funci´ on hamiltoniana se define como
H(G) = −
¸
{i,j}∈E
J
ij
σ
i
σ
j
. (12.2)
Es una medida de energ´ıa total del sistema G. Pensamos en J
ij
como algo fijo, mientras
los valores de σ
i
pueden cambiar seg´ un la temperatura ambiental. En temperatura T = 0,
el sistema alcanza su energ´ıa m´ınima. Las configuraciones que tienen energ´ıa m´ınima se
llaman estados fundamentales (ingl´ es: ground state).
En temperaturas bajas el sistema queda organizado para minimizar “conflictos” de inter-
acciones. Al subir la temperatura del sistema, en un cierto valor cr´ıtico T
c
de repente se
pierde la organizaci´ on global.
Cuando ambos tipos de interacciones est´ an presentes, hasta determinar el valor m´ınimo
alcanzable para la funci´ on hamiltoniana se complica. T´ıpicamente, 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 via-
jante, por colocar n v´ ertices (o sea, ciudades) aleatoriamente en un plano cuadr´ atico de
superficie 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 superficie elegido A y del n´ umero de v´ ertices.
Definimos 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 fijo 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 ramificar-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 definici´ on de la
familia. La definici´ on est´ a t´ıpicamente 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 vac´ıa).
174 CAP
´
ITULO 12. TRANSICIONES DE FASE
Una propiedad de grafos de la familia ( es un subconjunto cerrado { ⊆ (. Cuando
grafo ∈ {, se dice que “el grafo G tiene la propiedad {”. Lo que significa ser cerra-
do es que al tener dos grafos G ∈ { y G

∈ (, si aplica que G y G

sea isomorfos,
necesariamente G

∈ { tambi´ en.
Una propiedad { es monotona si de G ∈ { y G es subgrafo de G

, implica que G

∈ {.
Un ejemplo de tal propiedad ser´ıa “el grafo contiene un tri´ angulo” o “el grafo contie-
ne un camino de largo k” — por a˜ nadir aristas o v´ ertices al grafo, no es posible hacer
desaparecer 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 ∈ {, implica que tambi´ en G

∈ {.
Decimos que “casi cada grafo” G = (V, E) de la familia (
n
la definici´ on de cual depende
de n = [V [ tiene { si para G ∈ (
l´ım
n→∞
Pr [G ∈ {] = 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 fija 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¦ indepen-
dientemente 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]: fijar 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 automorfismos 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 definir un proceso (estoc´ astico) como una sucesi´ on (G
t
)
N
0
donde t repre-
senta 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
t−1
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 definir 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 definici´ on.
12.3.3. Comportamiento repentino
Suponemos que { sea una propiedad monotona de grafos. Observamos el proceso de ge-
neraci´ on (G
t
)
N
0
y checamos en cada instante t si o no G
t
tiene la propiedad {. Llamamos
el momento τ cuando G
t
∈ { el tiempo de llegada (ingl´ es: hitting time) del proceso a la
propiedad,
τ = τ(n) = m´ın
t≥0
¦G
t
∈ {¦ . (12.9)
Nota que por ser monotona {, G
t
∈ { para todo t ≥ τ y que τ puede variar entre
diferentes instancias del proceso con un valor n fijo.
Podemos definir una funci´ on umbral para la propiedad { en t´ erminos del valor de n
utilizado al definir el proceso: U(n) es la funci´ on umbral de { 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
cr´ıtico” antes de que es poco probable que G
t
tenga { 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 cone-
xos de G
t
. Por definici´ on, en G
0
cada v´ ertice est´ a aislado y G
N
es el grafo completo
de n vertices, K
n
. Definimos { como la propiedad que el grafo sea conexo. En alg´ un
momento,
τ ∈
¸
n −1,

n −1
2

+ 1

, (12.11)
el grafo llega a tener la propiedad { 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 n−1 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,
(n−1)]
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 logar´ıtmico en n, pero para c >
1
2
— que es todav´ıa 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:
¸
v∈V
deg (v)
n
=
2m
n
=
2⌊cn⌋
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 ramificar-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 fija 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.
Bibliograf´ıa
[1] Emile Aarts and Jan Karel Lenstra. Local Search in Combinatorial Optimization.
John Wiley & Sons, Inc., Chichester, UK, 1997.
[2] G. M. Adel’son-Vel’skii and E. M. Landis. An algorithm for the organization of
information. Soviet Mathematics Doklady, 3:1259–1263, 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 308–315. 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 482–525. 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 s´ımbolos
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 propie-
dad 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 coeficiente 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 suficien-
temente grandes de n
f(n) = Ω(g(n)) [f(n)[ ≥ [g(n)[ para alg´ un constante c y valores suficiente-
mente grandes de n
f(n) = Θ(g(n)) c

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

y
valores suficientemente 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 tautolog´ıa
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 cuentificaci´ on universal: para todo a ∈ A
∃a ∈ A cuantificaci´ 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-first search b´ usqueda en anchura
CNF conjuntive normal form forma normal conjuntiva
DFS depth-first search b´ usqueda en profundidad
DNF disjuntive normal form forma normal disyunctiva
NTM nondeterministic Turing machine m´ aquina Turing no determin´ıstica
PTAS polynomial-time approximation sche-
me
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
flujo flow
fuerza bruta brute-force
185
186 BIBLIOGRAF
´
IA
grafo graph
hashing dispersi´ on
hoja leaf
hijo child
intratable intractable
lista list
mont´ıculo 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
ra´ız root
ramificar-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-find
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 ramificar-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
flow flujo
forest b´ osque
graph grafo
greedy voraz
heap mont´ıculo
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 ra´ız
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-find unir-encontrar
vertex v´ ertice
weighted ponderado
worst case peor caso
´
Indice de figuras
1.1. Gr´ aficas de la funci´ on exponencial f(x) = exp(x): a la izquierda, en
escala lineal, mientras a la derecha, el eje y tiene escala logar´ıtmica (ver
la secci´ on 1.4). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2. Las funciones logar´ıtmicas por tres valores t´ıpicos de la base: b ∈
¦2, e, 10¦, donde e ≈ 2, 718 es el n´ umero neperiano. . . . . . . . . . . . 7
1.3. Gr´ aficas de las potencias de dos: a la izquierda, con ejes lineales hasta
x = 7, y a la derecha, con ejes de escala logar´ıtmica 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 suficientemente 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 acopla-
miento. En azul se muestra el acoplamiento actual. Se puede aumentar
el tama˜ no intercambiando la pertenencia con la no pertenencia al acopla-
miento 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 flujos: 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 flujos. Se
muestra cuatro cortes con sus capacidades respectivas. . . . . . . . . . . 52
5.1. En ejemplo de un grafo con flujo y su grafo residual. . . . . . . . . . . . 74
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 l´ınea nueva. Las iteraciones est´ an separadas por l´ıneas 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 me-
moria: las l´ıneas 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 definici´ on recursiva de un ´ arbol bin´ omico B
k+1
en t´ erminos de dos
copias de B
k
. La ra´ız de B
k+1
es el v´ ertice gris. . . . . . . . . . . . . . . 102
6.13. Un ejemplo de un mont´ıculo 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 ra´ız del componente est´ a dibujado en
gris y la flecha 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 fin de la instancia de la figura 8.1 y la direcci´ on de
procedimiento del algoritmo de l´ınea 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 pol´ıgono 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 c´ırculos negros, mientras el pol´ıgono est´ a dibujado en l´ınea
negra y los tri´ angulos en colores variados. . . . . . . . . . . . . . . . . . 151
8.6. Las opciones de n tri´ angulos los cuales puede pertenecer un lado del
pol´ıgono en una triangulaci´ on ´ optima. . . . . . . . . . . . . . . . . . . . 152
10.1. Una modificaci´ on 2-opt para el problema del viajante: la ruta original
R est´ a marcada por las flechas azules y la ruta m´ as econ´ omica R

por
las flechas verdes; las aristas eliminadas est´ an en gris y las a˜ nadidas en
l´ınea negro descont´ınua. Los cuatro vertices que son puntos finales 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 iz-
quierda) est´ a contraida as´ı que sus puntos finales (los v´ ertices amarillos)
est´ an reemplazados por un s´ olo v´ ertice (rojo en el frangmento modifica-
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 energ´ıa m´ınima.
En cada una de las ocho posibles configuraciones de los sentidos (marca-
dos con ∧ y ∨), por lo menos una interacci´ on est´ a en conflicto (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), d´ıas
(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 d´ıa, 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 significa 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 configuraciones para
el ejemplo se muestra a la derecha, mientras el programa general est´ a a la
izquierda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.1. La jerarqu´ıa de complejidad computacional con ejemplos: arriba est´ an las
tareas m´ as f´ aciles y abajo las m´ as dif´ıciles. . . . . . . . . . . . . . . . . . 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),
mont´ıculos (M), mont´ıculos binomiales (B) y mont´ıculos de Fibonacci
(F). Las complejidades amortizadas llevan un asterisco (

). . . . . . . . . 137
8.1. Un algoritmo de l´ınea 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
m´ınimo, 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
m´ınimo, 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´ eficit, 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 l´ınea de barrer, 139
de Prim, 154
de Strassen, 145, 146
determinista, 24
eficiente, 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
reflexiva, 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, 75, 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, 73
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
certificado 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
reflexiva, 3
transitiva, 3
clave, 91, 113
clique, 22
CNF, 12
coeficiente
binomio, 2
coeficiente binomio, 2
cola, 90
de prioridad, 114
de adjunto, 114
coma
flotante, 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
vac´ıo, 1
conservaci´ on
de flujo, 51
constante
de Napier, 5
contracci´ on, 168
convexo, 5, 174
corte, 51
capacidad de, 51
m´ınimo, 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
cuantificaci´ on
existencial, 14
universal, 14
cubierta, 50
convexa, 144
de aristas, 50
de v´ ertices, 50
d´ eficit, 49
decisi´ on, 23
definici´ on, 10
demostraci´ on, 10
densidad, 21
descendiente, 107
desigualdad de tri´ angulo, 159
DFS, 106
di´ ametro, 21
no definido, 22
dif´ıcil, 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
esp´ın, 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
mont´ıculo, 103
mont´ıculo, 136
n´ umero de, 124
n´ umero, 105
flujo
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
ac´ıclico, 21
bipartito, 21
completo, 21
completo, 20
conexo, 22
fuertemente, 22
denso, 21
dirigido, 19
escaso, 21
etiquetado, 19
no conexo, 22
no reflexivo, 19
plano, 19
ponderado, 19
regular, 20
residual, 74
simple, 19
h´ıpergrafo, 19
HALTING, 43
hamiltoniano, 172, 173
hash table, 113
heap, 102
heur´ıstica, 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
l´ınea de barrer, 139
largo, 21
Las Vegas, 166
layered network, 75
lema, 10
lenguaje, 33
completo, 65
dif´ıcil, 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
mont´ıculo, 102
bin´ omico, 102, 104
de Fibonacci, 103
mont´ıculo bin´ omico, 102
mont´ıculo
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 mont´ıculo, 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
pal´ındromo, 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
fija, 17
flotante, 17
queue, 90
quicksort, 87, 125
ra´ız, 107
RAM, 34
ramificar-acotar, 155
ramo, 108
rango, 4
abierto, 3
cerrado, 3
recorrido, 106
red de capas, 75
red-black tree, 97
redondeo, 18
reducci´ on, 58, 59
Cook, 58
espacio logar´ıtmico, 58
Karp, 58
reducible, 58
regi´ on
convexa, 144
registro, 34
relaci´ on
reflexiva, 3
sim´ etrica, 3
transitiva, 3
relaci´ on
polinomialmente balanceada, 69
representaci´ on
punto
fija, 17
flotante, 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
satisfiabilidad, 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
tautolog´ıa, 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-find, 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 esp´ın, 171
voraz, 153, 154
vuelta atr´ as, 154
ZPP, 167

Prefacio
Estas notas fueron escritas para el curso de An´ lisis y Dise˜ o de Algoritmos a n (MECBS5126) del Programa de Posgrado en Ingenier´a de Sistemas (PISIS) de la Faculı tad de Ingenier´a Mec´ nica Y El´ ctrica (FIME) de la Universidad Aut´ noma de Nuevo ı a e o Le´ n, ubicada en San Nicol´ s de los Garza, en el estado de Nuev´ Le´ n en M´ xico. Es un o a o o e curso del programa doctoral, aunque tambi´ n permitimos estudiantes de maestr´a llevarlo e ı a su propio riesgo. La mayor´a de los estudiantes de PISIS no son comp´ tologos, y a´ n ı u u menos del campo de teor´a de computaci´ n, por lo cu´ l la presentaci´ n es simplificada de ı o a o lo usual de programas con enfoque en computaci´ n. o Mucho de este material se debe a los materiales que use yo misma cuando estudi´ las mise mas temas en la Universidad Polit´ cnica de Helsinki (TKK). En el a˜ o 2000 trabaj´ como e n e asistente de ense˜ anza en un curso de an´ lisis y dise˜ o de algoritmos bajo la instrucci´ n n a n o del Dr. Eljas Soisalon-Soininen, y juntos con otro asistente de ense˜ anza Riku Saikkonen, n compilamos un documento en fin´ s LTEX basado en las diapositivas escritas a mano por e A 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 fin´ s, por e lo cual varios ejemplos son inspirados por el trabajo que hicimos en el a˜ o 2000. n Otro fuente importante es el Dr. Ilkka Niemel¨ de TKK y el curso de complejidad compua tacional que di´ el, basado en el libro de texto cl´ sico de Christos Papadimitriou [15]. Dr. o´ a Niemel¨ me prest´ todas sus diapositivas del curso para la preparaci´ n de este documento, a o o por lo cual le agradezco mucho. Otras partes del documento est´ n prestadas y modificadas de trabajos anteriores m´os, en a ı la revisi´ n de los cuales he contado con el apoyo de muchas personas, los m´ s importantes o a siendo el asesor de mi tesis doctoral el Dr. Pekka Orponen y el oponente de la misma tesis el Dr. Josep D´az. ı

I

II

´ Indice general
1. Definiciones matem´ ticas y computacionales a 1.1. Conjuntos y permutaciones . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1. Subconjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.2. Relaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.3. Permutaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Mapeos y funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3. Funci´ n exponencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 1.4. Logaritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5. Sucesiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.1. Series aritm´ ticas . . . . . . . . . . . . . . . . . . . . . . . . . . e 1.5.2. Series geom´ tricas . . . . . . . . . . . . . . . . . . . . . . . . . e 1.5.3. Otras series . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6. Demostraciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7. L´ gica matem´ tica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o a 1.7.1. L´ gica booleana . . . . . . . . . . . . . . . . . . . . . . . . . . o 1.7.2. L´ gica proposicional . . . . . . . . . . . . . . . . . . . . . . . . o 1.7.3. Informaci´ n digital . . . . . . . . . . . . . . . . . . . . . . . . . o 1.7.4. Redondeo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8. Teor´a de grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ı 1.8.1. Clases de grafos . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.2. Adyacencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.3. Grafos bipartitos . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.4. Densidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.5. Caminos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.6. Conectividad . . . . . . . . . . . . . . . . . . . . . . . . . . . .
III

1 1 2 3 4 4 5 6 7 8 9 10 10 11 11 14 15 17 19 19 20 21 21 21 22

2.3. . . . . M´ quina Turing precisa .1. . . . . .4. . . . . . . . . . . Problemas sin soluci´ n . Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. o 2. . . . . . . . . . . . a 3. . . . . . . . . . . . . . . . Problema . . . . 22 22 23 23 23 23 24 25 25 26 26 27 27 28 31 31 34 37 38 39 41 41 42 43 43 44 44 46 53 55 2. . . Operaci´ n b´ sica . .3. . . . . . . . . . . . . . . . . . . . . . . . . . . . Problema de optimizaci´ n . . . . a 3. . . . Algoritmo recursivo . . .1. . . Funciones de complejidad . . Clases de complejidad de espacio . . . . . . . .5. . . . . . . Modelos de computaci´ n o 3. . . . M´ quinas Turing no deterministas . . . Calidad de algoritmos . . . . . . . . .3. Problema de decisi´ n . . . . Problemas de grafos . a 3. . . . . .1. . . . . . . . . Consumo de memoria . . . . .1. . . . . . . . . . . . . . .2. . . . . . . . . . . . . . . . . . . . . . . . . . . M´ quinas Turing . . . . . . . . .1. . . . . . . . . . .2. . . 4. .8. . . . . o 4. . . . .2. . . . . M´ quina Turing universal . . . .3. . . . 2. . . . . . . . Arboles . . a 3. . . . . . . . . . . . . . . . . o a 2.5. . a . . . . . . . . . . . . . . . . . . . 2. . . . 4. . M´ quinas de acceso aleatorio (R AM) . . . . . . . . . . .5. . n 2. . . Problemas y algoritmos 2.1. . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . 2. . . . . o 2. . . . . . . . . o 4. . . . . . . . . . . . . .2. . . . . . . . . . . a o 3.8. 2. . . . . . . . . . . . . Subgrafos . . .3. . . . . . . . . .8. . . . . Tama˜ o de la instancia . . 2. . . . . 4. . . . . . . . . . . 4. . . . . . An´ lisis asint´ tico .5. . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . Clases de complejidad 5. . .1. . . . . . . . . . . ´ 1. . . . . . . . . . . . .5. . Clases de complejidad de tiempo . . . . . .IV ´ INDICE GENERAL 1. . . . . . . . . . . . . . Jer´ rquias de complejidad . . . . . . . . . . . . . . . . . . . . .4.3. . . . . . . . . . . . . . . . . . . . .7. . . . . . . 2. . . . . . . .1. . . . .3. . . . .3. Complejidad computacional de problemas 4. . . . . Algunos problemas fundamentales . . . .4. . .2. Problema complemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3. . . . . . . . .2. . . . . . . . . . . . Problemas de l´ gica booleana . . a 4.

. . . .3. . . . . Mont´culos de Fibonacci . . . . . . . . . . . . . . . . . .1. . . . Arreglos . . .3. . . . . . 6. . . . . . . . . 103 ı . . . . o ´ 6. . . . .5. . Ordenaci´ n de arreglos . . . . . . . . Listas . . . . . Complejidad de algunas variaciones de S AT . . . ´ 6. . . .1. . . . . . Caminos y ciclos de Hamilton . Arboles B . . . . . . . . . El problema de corte m´nimo . . . . . . . . . .3. . . . . . . . . . .3. . . . . . . . . . . . . . . 6. . . . . . . . . . . . . . .5. . ´ 6. . 5.3. . . . . . . . . . . . . . . . 5. . . . . . o 6. . . . . . . . . .1. . . . .2. . . . Mont´culos bin´ micos . . 6. . . . . . . . .5. . . . . . . . 102 ı 6. .3. . . . . . . . . . . . . . . . . . 5. . . . . . Pilas . . . . . . .5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arboles . .1. . . . . B´ squeda binaria .2. . . . . . .6. Problemas kS AT .1. . .1. . .4. . . . El problema de flujo m´ ximo . . . . Reducciones . . . . . . . . . . . . . . . .2. . . 5. . . . . . . . . . ı 5. . . . . . . . . 5. . . . . . . . .2. . . . Problemas fuertemente NP-completos . . . .3. . . . . . . . . . . . . . . . .1.1. . . . . Arboles biselados . . . . .5. . . .5. . . . . . . . . 5. . . Caracterizaci´ n por relaciones: certificados . . . . . . . . . . . . o 5. . .1. . . . a 5. . . . . . . . . . 5. Arboles binarios . . Complejidad de problemas de grafos . . . . . . .2. . . . . . .2. . . .´ INDICE GENERAL 5. . . . . . . . . . 6. . . . . . . . . . . . . . . . . . . . . . . ´ 6. . .1. Coloreo . V 58 64 67 69 70 70 71 72 73 76 77 79 80 80 81 83 83 84 85 89 89 90 90 91 91 92 97 98 99 ´ 6.4. . . . . . . . . . . . . . . . . . . . . . . S AT de “no todos iguales” (NAESAT) . . . . . . . . . u 5. . . . . . . . . . . . . . . .4. . . . . . . . . . . .4. . . . . .2. . . .5. . . . . . .2. .2. . . . . . . . . . . . . Arboles AVL . . . . . . . . . . . . . . . . . . . .4. . . . . . . . . . . . . . ´ 6. . . . . . . . . . . . . . . . . . . 102 ı o 6. . . . . . .4. . . . . . . . . . . . . . Estructuras de datos 6. . . . . . . . . . . . . . . . . .4. . . . . . .2. Problemas completos . . . . . . . . . . .2. . . . . . . . . . . . . .4. . . 5. . .7. . Arboles rojo-negro . . . . . . . . . . . .3. . . . . . . . .5. . . . . . . . . . . .3. . . . . . 5. . . . . . . . . . . . . . Colas .3. . . . . . . . Problemas NP-completos . . .3. . . . . . . . . . . . . . . u 6. . . . . . . . . . . . . . . . . . 6. . . . . . . . . . . Mont´culos .2. . . . . . . . . . . . 6. . Algoritmos pseudo-polinomiales . . . .3. . . . . . Conjuntos y n´ meros . . . . 5. . Ordenaci´ n de listas . . . .

. . . . . . . . . . . 154 ı 9. . Estructuras unir-encontrar .5. . . . An´ lisis de algoritmos a 119 7. . . . . . . . . . . . . . . . . . Colas de prioridad . 121 o u 7. . . . .4. . . 119 7. . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . 114 6. Mont´culos de Fibonacci . . . . . . .2. . . . . . . . . . . . . . . Cubierta convexa . . . . . . . . .1. Algoritmos de l´nea de barrer . . . . . . . . . T´ cnicas de diseno de algoritmos e 139 8. . . . 142 8. . . .2. . . 128 a 7.1. . . . . . . . . B´ squeda y recorrido en grafos .2. . . . . . . . . . . . . . . . . . . . . . . . .4. . . Implementaci´ n de un conjunto en forma de un arbol . .8. . . . . .2.3. . . . . . .3. . . . . . . . . . . . . . . . . . . . .3. .8. . . . . .VI ´ INDICE GENERAL 6.7. . . . . . . . . . . . . . . . . . 113 o a 6. . Problema de viajante . . . . . 125 a 7. . . . . . . . . . . . . . . .2. . . . . . . . . Soluci´ n general de una clase com´ n . 129 a ´ 7. . . Arbol cubriente m´nimo . Optimizaci´ n combinatoria o 153 ´ 9. . Arreglos din´ micos . . . .2. . . . . . . . . . . . . . . . . .5. .4. . . . . . . .8. . . Ordenaci´ n r´ pida . . . . Grafos . Programaci´ n din´ mica . . . . . . . . . . 139 ı 8. . . . . . . . . . . . . . . .6. . . . 147 8. . . . . 116 6.2. . . An´ lisis de complejidad promedio . . .1. . . . . . . . . . . . . . . . .2. . . . Dividir y conquistar . . . . . . . . . . . 116 o ´ 7. . . . . . . . . . . . . . . . . . . . . . . .1. 150 o ´ ı 9. Conjuntos . . . . . . . . . Transformaciones . . . . . . . . .2. . . . . . . . . . . . . . . . . . . . . 155 . . . . . . . . . .1. . .1. . . . . . . . . . 106 u 6. . . . . . . . . . . . .1. . M´ todo de expansi´ n . . . . . . . . . . . . Complejidad de algoritmos recursivos . . . . . . Componentes conexos . . . . . . . . . 106 6. Algoritmos simples . . . . . . . . . . . . . . 120 7. . . . . . . . 154 9. . . . . Podar-buscar . . . . . 149 o a 8. . Tablas de dispersi´ n din´ micas . . . . . . . .4. . . 144 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3. . . . . . . .2.1. . . . . . .2. . . . . .5. . Triangulaci´ n optima de un pol´gono convexo . . .2. . Ramificar-acotar . . . . . . . . . .4. . . . . . 136 ı ˜ 8. . 133 7. . . . . . . . . . . . . . . . 124 7. . . . . . An´ lisis de complejidad amortizada . . . . . . . . . Arboles biselados . . . . . . . 125 o a 7. . . . . . . . .1. . . 116 6. . .3. . . . . . . . . . . . . . . . . . 123 e o 7. . 109 6. . .4. . . . . .

. . . . . . . . .1. . . . . . . . . . . . . . . . . . . B´ squeda local . . . . . . . . . . . . . . . . . . . . . . . . . 180 Mapeos y funciones . . . . . . . Complejidad computacional . . . . . . . . . . . . . . . . . . . . . . . 173 12.3. . .2. . . . . . . . . . . . . . . . . . . . . 161 10. . . . . . . . . . . . . . . . . . . . . . . . . . . . Definiciones b´ sicas .2. . . . . . . . . . . . . . . .1. . . . . . . .3. . . . . . 174 o 12. .4. . . . . . . . . . . . . . . . . . Transiciones de fase 171 12. . . . . .3. . . . . . . . . Cubierta de v´ rtices (V ERTEX C OVER) . . . . . . . . . 182 Lista de abreviaciones ˜ Minidicconario espanol-ingl´ s e ˜ Minidicconario ingl´ s-espanol e Lista de figuras 183 184 187 189 . . . . . . . . . . . . Modelo de Ising . . . . . . . . . Comportamiento repentino . . . . . . . . . 173 12. . Algoritmos de aproximaci´ n o VII 157 10. . . . . . Problema del viajante (T SP D) . . . . . . 175 12. . . . . . . . . 168 ı 12. Problema de corte m´nimo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 o 12. . . . . . Algoritmos aleatorizados 165 11. . . . . . .2. . 158 10.3. . . . .2. . . . . . . 173 12. . . . . . . . . . . .3. . Modelos de generaci´ n . . . . . . .1. . . . . . . . . . .3.2. . .4.´ INDICE GENERAL 10. . 181 L´ gica matem´ tica .1. Familias y propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . Ejemplo: 2-opt . . . . . . . . . . . . 160 u 10. . . . . . . .2. . . . . . 171 12. . Complejidad de b´ squeda local . . . . . . . . . . . 160 a 10. . . .1. . . . . . . . . . . . . . . . . . . 167 11. . . . . . . . . . . .3. . . Grafos aleatorios uniformes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2. . . 181 o a Grafos . 161 u 11. . Aparici´ n de un componente gigante . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 e Listas de s´mbolos ı 179 Conjuntos y conteo . . . . . .2. . . . . . . . . . . . 182 Probabilidad . . . . . . Ejemplos . . . . . . . . . . .

VIII ´ INDICE GENERAL 191 195 Lista de cuadros ´ Indice alfab´ tico e .

Si el elemento a no pertenece al conjunto A. c} es tres. El a ın conjunto vac´o que no contiene ning´ n elemento se denota con ∅. ı u 1 . (1. se escribe a ∈ A. u El cardinalidad de un conjunto A es el n´ mero de elementos que pertenecen al conjunto. b y c forman un conjunto.2) donde ⇔ significa que la expresi´ n a la izquierda siendo verdadera implica que la expreo si´ n a la derecha tambi´ n tiene que ser v´ lida y viceversa. la cardinalidad del conjunto A = {a. b. se puede definir para cada par de elementos si uno est´ maa a yor. Conjuntos y permutaciones Si unos elementos a. c} . u Se denota por |A|. / Z es el conjunto de n´ meros enteros y R es el conjunto de n´ meros reales. La intersecci´ n de dos conjuntos A y B se denota por A ∩ B o y contiene solamente los elementos que pertenecen a ambos conjuntos: c ∈ (A ∩ B) ⇔ (c ∈ A) ∧ (c ∈ B) . |B|} y |A ∩ B| ≤ m´ {|A| . |a| = 3. se escribe a ∈ A. |B|}. Por ejemplo.1) Si el elemento a pertenece a un conjunto A.Cap´tulo 1 ı Definiciones matem´ ticas y a computacionales 1. (1. u u Si un conjunto est´ ordenado.1. La uni´ n de dos conjuntos A y B contiene todos los elementos de A y todos los elementos o de B y se denota por A ∪ B. o e a Nota que necesariamente |A ∪ B| ≥ m´x {|A| . b. se asigna una letra may´ scula para denotar u el conjunto y ofrece una lista de los elementos seg´ n la siguiente notaci´ n: u o A = {a. menor o igual a otro seg´ n el orden definido.

Una aproximaci´ n muy util del factorial es la aproximaci´ n de Stirling o ´ o √ 2πk k e k (1. DEFINICIONES MATEMATICAS Y COMPUTACIONALES 1.4) Dado un conjunto A. si A = {a. El factorial est´ definido a todo n´ mero entero k ∈ Z tal que a u k! = k · (k − 1) · (k − 2) · . {a}. Si |A| = n. 718 es el n´ mero neperiano. {a.9) . c}.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. Subconjuntos Un subconjunto B ⊆ A es un conjunto que contiene alg´ n parte de los elementos del u conjunto A. la diferencia de dos / conjuntos A y B es el conjunto de los elementos que est´ n en A pero no en B. {c}.8) donde e ≈ 2. A}. u n k n−1 k−1 El coeficiente binomio permite una definici´ n recursiva: o = + n−1 . · 2 · 1. en otro caso. el n´ mero de los diferentes combinaciones de k elementos posibles es el coeficiente binomio u n k = n! . 3 (1.6) ≤ k ≤ 2 2πk √ k e k (1. Por ejemplo. El n´ mero u |A| total de tales subconjuntos es 2 . tenemos que B ⊆ A. c} y C = {c. {b}. ¯ El complemento de un conjunto A es el conjunto A que contiene cada elemento del universo que no est´ incluido en A.2 ´ ´ CAPITULO 1. b}. / (1. Un k-subconjunto de un conjunto A es un subconjunto de k elementos de A. pero C no es un subconjunto: C A. c}. Por ejemplo.1.7) y una versi´ n mejorada por Gosper es o k! ≈ 1 π(2k + )k k ek . escribimos B ⊂ A y aplica |B| < |A|. (1. . el conjunto de todos sus subconjuntos se denota con 2A . tenemos |A| = 3. Si no se permite incluir todos los elementos de A en B. c}. a ¯ A = {a | a ∈ A} . {a. / (1. . c}. b. 23 = 8 y 2A = {∅. a A \ B = {a | a ∈ A. si A = {a. k!(n − k)! (1.5) donde n! es el factorial. En general. B = {b. a ∈ B} . d}. {b. si 0 < k < n k 1.1. b.

12) 0. . . . Se escribe (a. bm } es un subconjunto de asociaciones de elementos de A con los elementos de B. An . b) ∈ R o alternativamente aRb. Una relaci´ n entre un conjunto A = o o {a1 . . ck ∈ A tales que c0 = a. e e El clausura transitiva de una relaci´ n R ⊆ A × A es la relaci´ n transitiva RT ⊆ A × o o A de cardinalidad menor que contiene R. n). . . b ∈ A s´ y s´ lo si ı o ∃c0 . La representaci´ n es una matriz binaria A tal que el elemento aij de la matriz o A tiene el valor uno si y s´ lo si los elementos ai y bj forman uno de los pares incluidos o en la relaci´ n R: o 1. A × B = {(a.1. donde n = |A| y o m = |B|. .11) 1. donde n = |A|. o e Una relaci´ n R en A es reflexiva si para todo a ∈ A. . aj ) ∈ R ⇔ (aj . aplica que aRa. . Una relaci´ n se puede representar en la forma de una n × m matriz. b ∈ A aplica aRR b si y s´ lo si a = b o aRb. c1 . b]. an } y otro conjunto B = {b1 . ck = b y ci RT ci+1 para todo i ∈ [0. . c ∈ A tales que aRb y bRc. o En la clausura reflexiva y transitiva R∗ aplica que (a.10) El conjunto A × B se llama el producto cartesiano.2. A2 . bj ) ∈ R. 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. ai ) ∈ R. a2 . (1. c) ∈ R y (c. Tal relaci´ n es transitiva si ∀a. aij = (1. la notaci´ n es (a. bj ) ∈ R.1. . a a El conjunto A × B es el conjunto de todos los pares ordenados (a. . / Una relaci´ n R ⊆ A × A entre un conjunto y si mismo se dice una relaci´ n en el conjunto o o A. . (1. × An = {(a1 . Se puede generalizar a m´ s de dos a conjuntos: para n conjuntos A1 . b ∈ B} . . . . La clausura reflexiva de la relaci´ n R en A es la relaci´ n m´nima reflexiva RR en A que o o ı contiene R: para todo a. . i ∈ [1.1. . b) de elementos de los conjuntos A y B tal que a ∈ A y b ∈ B. a2 . b) ∈ R∗ si y s´ lo si o a = b o existe o un c ∈ A tal que (a. 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. si (ai . . (1. Relaciones Una relaci´ n R ⊆ A×B es un subconjunto de pares. si (ai . . b) | a ∈ A. b] o [a. Entonces.13) Esto implica que la n × n matriz A. b) ∈ R∗ . aRT b para a. ı o dependiendo de cu´ l extremo est´ incluido. . an ) | ai ∈ Ai . b). es tambi´ n sim´ trica: A = AT . Una relaci´ n R en o o A es sim´ trica si aplica que e (ai . es el conjunto de todos los n-eadas ordenadas A1 × A2 × . Si uno de los puntos extremos s´ se incluye y el otro no. b). n]} . tambi´ n aplica que aRc. b2 . . b. .

b) ∈ Rg . la imagen inversa de todo b ∈ B tiene cardinalidad menor o igual a uno. El conjunto A se llama el dominio de la relaci´ n y el conjunto B el rango. ingl´ s: surjection o onto) si e e para cada elemento del rango est´ asignada alg´ n elemento del dominio: a u ∀b ∈ B∃a ∈ A tal que g(a) = b. c.14) Por ejemplo. El conjunto de los elementos de A que corresponden a un cierto elemento b ∈ B tal que (a. e . Nota que se puede asignar varios elementos de A a un elemento de B y viceversa. Mapeos y funciones Un mapeo (ingl´ s: map o mapping) g : A → B es un tipo de relaci´ n que asocia algunos e o elementos de A a elementos de B. b) ∈ Rg es la imagen inversa de b. pero t´picamente se escribe g(a) = b para significar o ı que (a. Un mapeo es t´ cnicae mente equivalente a una relaci´ n Rg . los 12 ordenes son abc abd acd bac bad bcd cab cad cbd dab dbc dcb 1. A tiene n! o permutaciones.4 ´ ´ CAPITULO 1. b. bi ) ∈ Rg (es decir g(a) = bi ) son la imagen de a en B.1.3.16) (1. (n − k)! (1. (1. El conjunto o de los elementos bi ∈ B para las cuales aplica (a. Un mapeo g : A → B es sobreyectivo (tambi´ n epiyectivo.15) o sea. si A = {a. Un mapeo es inyectivo (ingl´ s: injection o one-to-one) si e ∀a1 . d}. Por ejemplo. Si |A| = n. si A = {a. d} y k = 3. las 4! = 24 permutaciones de A son abcd bacd cabd dabc abdc badc cadb dacb adbc bdac cdab dcab adcb bdca cdba dcba acbd bcad cbad dbac acdb bcda cbda dbca El n´ mero de k-subconjuntos ordenados del conjunto A de orden |A| = n es u k! · n k = n! . Aqu´ ⇒ ı o significa que la expresi´ n a la izquierda siendo verdadera implica que la expresi´ n a la o derecha tambi´ n tiene que ser v´ lida. pero no necesariamente todos. a2 ∈ A tales que a1 = a2 ⇔ g(a1 ) = g(a2 ).2. Permutaciones Una permutaci´ n de un conjunto A es un orden de los elementos. DEFINICIONES MATEMATICAS Y COMPUTACIONALES 1. g −1 (b). b. puede ser que a1 = a2 tambi´ n. pero no es necesariamente as´ en la direcci´ n cone a ı o traria: g(a1 ) = g(a2 ) no implica que necesariamente sea a1 = a2 . c.

19) donde e ≈ 2. el eje y tiene escala logar´tmica (ver la secci´ n 1. La figura 1.. (1. Funci´ n exponencial o La funci´ n exponencial se define por un serie (la expansi´ n de Taylor) como o o exp(x) = e = x ∞ i=0 xi x2 x3 =1+x+ + + .´ 1. mientras f (x) refiere al valor de la funci´ n en x. mientras a la derecha. FUNCION EXPONENCIAL 5 Un mapeo es biyectivo si es inyectivo y sobreyectivo: todo elemento de A tiene una imagen distinta y la uni´ n de las im´ genes cubren todo el rango B. x. ı o o o sea.21) 1 ba . f (αx1 + (1 − α)x2 ) ≤ αf (x1 ) + (1 − α)f (x2 ).1 muestra su forma. 718281828 es el constante de Napier. o que en el caso de exp(x) es e: b0 = 1 b1 = b ba+c = ba bc bac = (ba )c a b−a = 1 = b (1. x2 y α ∈ [0. (1. 1] o El valor absoluto de x ∈ R es una funci´ n de valores reales a valores reales positivos: o |x| = (1. o El s´mbolo f refiere a la funci´ n misma.3. Una definici´ n alternativa es por l´mite: o ı x n . −x.3.4). en escala a o lineal.18) 1.20) ex = l´ ım 1 + n→∞ n Escala lineal 1000 800 600 100 400 200 0 0 2 4 6 8 10 10 1 0 2 4 6 8 10 10000 1000 Escala logarítmica Figura 1. i! 2! 3! (1. si x ≥ 0 si x < 0..17) Una funci´ n f : R → R es convexa si para todo x1 . el elemento del rango B a lo cual corresponde el elemento del dominio x ∈ A. ı o La funci´ n exponencial comparte las propiedades de exponentes sin importar la base b.1: Gr´ ficas de la funci´ n exponencial f (x) = exp(x): a la izquierda. o a Una funci´ n f : A → B es un mapeo sobreyectivo pero no necesariamente una inyectiva.

6

´ ´ CAPITULO 1. DEFINICIONES MATEMATICAS Y COMPUTACIONALES

mientras tambi´ n tiene otras propiedades interesantes: es su propio derivativo e D(ex ) = ex . (1.22)

Aplican las siguientes cotas y aproximaciones que resultan utiles en varios contextos de ´ an´ lisis de algoritmos: a
1 1 − x ≈ e− x 1 − x ≤ e−x xx < ex x! para |x| ≤ 1 : ex (1 − x2 ) ≤ 1 + x ≤ ex k k para k ≪ x : 1 − x ≈ e− x . k
k

(1.23)

1.4. Logaritmos
El logaritmo en base b es una funci´ n que se define por la ecuaci´ n o o blogb x = x, (1.24)

donde x > 0. Eso quiere decir que si logb x = y, by = x. Se define adem´ s que logb 1 = 0. a Se puede realizar cambios de base b a otra base b′ : logb′ (x) = logb (x) . logb (b′ ) (1.25)

T´picamente en el an´ lisis de algoritmos se utiliza b = 2. El logaritmo es una funci´ n ı a o inyectiva, logb x = logb y =⇒ x = y, (1.26) y tambi´ n es una funci´ n creciente e o x > y =⇒ logb x > logb y. Cuenta con algunas propiedades de inter´ s que ayuden a simplificar f´ rmulas: e o Logaritmo de multiplicaci´ n: logb (x · y) = logb x + logb y o logb x = logb x − logb y y logb xc = c logb x xlogb y = y logb x , logb (n!) = n logb i i=1 (1.28) (1.27)

El logaritmo con la base e se llama el logaritmo natural o neperiano. En la figura 1.2, se muestra las funciones para tres valores de base. T´picamente se escribe ln x para loge x y ı log x sin base normalmente se interpreta como log10 , aunque en computaci´ n la interpreo taci´ n log x = log2 x es muy com´ n cuando x ∈ Z. o u

Logaritmo de divisi´ n: o Logaritmo con potencia: Logaritmo en el exponente: Logaritmo de un factorial:

1.5. SUCESIONES
10 9 8 7 6 5 4 3 2 1 0 200 400 600 800 1000 b=2 b=e b = 10

7

Figura 1.2: Las funciones logar´tmicas por tres valores t´picos de la base: b ∈ {2, e, 10}, ı ı donde e ≈ 2, 718 es el n´ mero neperiano. u la segunda igualdad siendo consecuencia de la primera, la pen´ ltima igualdad siendo u consecuencia de la tercera y la ultima siendo consecuencia de la primera. ´ Una variaci´ n de la aproximaci´ n de Stirling para el factorial cuenta con logaritmos: o o ln k! ≈ k ln k − k que aplica para valores grandes de k. Una forma que aplica m´ s generalmente es a ln k! ≈ 2k + 1 ln(2π) ln k − k + . 2 2 (1.30) (1.29)

1.5. Sucesiones
Dado una sucesi´ n de n´ meros, asignamos un ´ndice a cada n´ mero de la sucesi´ n. Por o u ı u o ejemplo, el primer n´ mero ser´ x1 , el segundo x2 , etc´ tera, hasta el ultimo n´ mero, que u a e ´ u marcamos con xn , n siendo el largo de la sucesi´ n. Cada uno de los x1 , x2 , . . . se llama o un t´ rmino. Para hablar de un t´ rmino arbitrario cualquiera, usamos xi (o alguna otra letra e e de ´ndice), donde se supone de una manera impl´cita que 1 ≤ i ≤ n. ı ı

La suma de los t´ rminos de una sucesi´ n x1 , x2 , . . . , xn se llama una serie S y la sumaci´ n e o o tiene su notaci´ n especial donde un ´ndice i corre desde el valor uno hasta el valor n: o ı
n

S = x1 + x2 + x3 + . . . + xn =
i=1

xi .

(1.31)

Una serie parcial Sk es la suma hasta el t´ rmino xk : e
k

Sk =
i=1

xi .

(1.32)

8

´ ´ CAPITULO 1. DEFINICIONES MATEMATICAS Y COMPUTACIONALES

Tal que Sn = S. Depende la sucesi´ n de qu´ manera calcular el valor de la serie S o un o e subserie Sk . Tambi´ n se puede definir el producto de una sucesi´ n: e o
n

P = x1 · x2 · x3 · . . . · xn =

xi .
i=1

(1.33)

1.5.1. Series aritm´ ticas e
En las series aritm´ ticas, la diferencia entre cada par de t´ rminos subsecuentes xi y xi+1 e e es un constante d: xi+1 − xi = d (1.34)

para todo i ∈ [0, n − 1] si es una sucesi´ n finita y para todo i ∈ [0, ∞) en el otro caso. o La suma de una sucesi´ n infinita es infinita positiva ∞ si la diferencia d > 0 y infinita o negativa −∞ si la diferencia d < 0 es negativa. La subserie de los n t´ rminos primeros e de una sucesi´ n aritm´ tica es o e
n−1

Sn =
i=0

(x1 + i · d) =

n(x1 + xn ) . 2

(1.35)

Se puede derivar la f´ rmula por pensar en la suma como un tri´ ngulo de encima de columo a nas que todos tienen una base de altura x1 , y en cada columna, el cambio de altura es d a en comparaci´ n con la columna anterior. Se deja como un ejercicio hacer el c´ lculo que o a corresponde. Otra manera de derivar el resultado es a trav´ s de la ecuaci´ n recursiva de los t´ rminos: e o e xi+1 = xi + d. (1.36)

Aplicamos esta ecuaci´ n de una manera repetitiva para encontrar una ecuaci´ n para xn : o o x2 = x1 + d, x3 = x2 + d = (x1 + d) + d = x1 + 2d, x4 = x3 + d = (x1 + 2d) + d = x1 + 3d, . . . xn = x1 + (n − 1)d. En la otra direcci´ n, tenemos o xn−1 = xn − d, xn−2 = xn−1 − d = (xn − d) − d = xn − 2d, xn−3 = xn−2 − d = (xn − 2d) − d = xn − 3d, . . . xn−k = xn−k−1 − d = xn − (n − k)d, x1 = xn−(n−1) = xn − n − n − (n − 1) d = xn − (n − 1)d.

(1.37)

(1.38)

1.5. SUCESIONES

9

Al sumar x1 + x2 + . . . + xn escrito por la formulaci´ n de la ecuaci´ n 1.37 con lo mismo o o pero escrito por la formulaci´ n de la ecuaci´ n 1.38 nos da 2Sn y se simplifica a dar el o o mismo resultado. El c´ lculo se deja como ejercicio. a Tambi´ n hay que notas que transformaciones del ´ndice hacen que las series se ven m´ s e ı a complejas:
n n i=1

(n − i + 1) =

i.
i=1

(1.39)

1.5.2. Series geom´ tricas e
e En una serie geom´ trica, la proporci´ n de un t´ rmino con el siguiente es constante: e o xi+1 = xi · d. (1.40)

Si |d| > 1, la serie infinita tiene un valor infinita el signo de cual depende de los signos de x1 y d. Cuando |d| < 1, incluido las series infinitas tienen una suma finita: S=
∞ i=0

di xi =

x1 . 1−d

(1.41)

Nota que hay que empezar del ´ndice i = para lograr que el primer t´ rmino tenga el valor ı e x1 = d0 x1 . Las sumas parciales hasta t´ rmino n cuando d = 1 tienen la f´ rmula siguiente: e o
n

Sn =
i=0

di xi =

x1 (1 − dn+1 ) . 1−d

(1.42)

Un ejemplo es la subserie donde x1 = 1 y d = 1, o sea, la suma parcial de la sucesi´ n, o 1, d, d2, d3, . . .: n dn+1 − 1 1(1 − dn+1 ) = . (1.43) Sn = di = 1−d d−1 i=0 Entonces, si d = 2 y x1 = 1, tenemos la suma de potencias de dos:
n

Cuando d = 1, todos los t´ rminos son iguales a x1 y la suma parcial es simplemente e Sn = n · x1 .

Sn =
i=0

2i =

2n+1 − 1 = 2n+1 − 1. 2−1

(1.44)

20. . 8. algunos teoremas. Los teoremas “auxiliae res” que uno tiene que demostrar para llegar al resultado final deseado se llaman lemas. DEFINICIONES MATEMATICAS Y COMPUTACIONALES 1. 213. Demostraciones Para analizar si o no algo es valido en todo caso.35 (en la p´ gina 8) es la f´ rmula o a o correcta para la sucesi´ n 3. 14. 5. 11. Adem´ s se cuenta con a a definiciones donde se fija el sentido de alg´ n formalismo. Otras series Hay algunas series interesantes donde el ´ndice de la sumaci´ n aparece en el t´ rmino. donde d = 1 1−d kn . La meu o ı ta es derivar de los axiomas y las definiciones. Despu´ s hay que mostrar que Sn + xn+1 = Sn+1 (el paso inductivo). 1) 1−k π2 . que son proposiciones verdaderas. la demostraci´ n de que la validez de la f´ rmula de la ecuaci´ n 1. se necesita utilizar los conceptos de sistemas matem´ ticos: los hechos universales se llaman axiomas.6. donde d = 1 (d − 1)2 (1. Cuando uno establece esto. donde x ∈ (0. 17.45) i=0 i · di = ∞ di = ki = i=0 ∞ i=n ∞ i=1 1 . . e Una t´ cnica esencial de demostraci´ n es la inducci´ n matem´ tica. donde primero se ese o o a tablece que una condici´ n inicial c1 es v´ lida y verdadera (el paso base). ı o e Aqu´ incluyamos unos ejemplos: ı n i2 = n i=1 n(n + 1)(2n + 1) 6 n · dn+2 − (n + 1) · dn+1 + d . primero sacamos los valores x1 = o a e d = 3 y mostramos que S1 = x1 +0·d = 3+0 = 3 = x1 es v´ lida (el paso base). Cada teorema trata de una cierta propiedad de inter´ s. a e Por ejemplo. . La cadena de pasos que establecen que un teorema sea verdad es llama la demostraci´ n o (o tambi´ n prueba) del teorema.35 est´ completa. o o o a .5.3. y despu´ s deriva o a e que si ck es v´ lida y verdadera. para verificar que la suma de la ecuaci´ n 1. tambi´ n ck+1 lo es (el paso inductivo).10 ´ ´ CAPITULO 1. . notaci´ n o terminolog´a. 6 i−2 = 1.

si xi = ⊥. Se puede formar expresiones de las variables con los s´mbolos. Las expresiones b´ sicas ı a son los literales xi y ¬xi . la precedencia se interpreta en el orden (de la m´ s fuerte al o a m´ s d´ bil): ¬. ∧ (“y”) — tambi´ n ¬ se considera un conectivo. Una variable se interpreta a tener el valor “verdad” (se denota con el s´mbolo ı ⊤) o “falso” (se denota con el s´mbolo ⊥). ((x1 ∨ x2 ) ∧ ¬x3 ) es una e expresi´ n booleana pero ((x1 ∨ x2 )¬x3 ) no lo es.´ ´ 1. pero en su ausencia. . Por ejemplo. o . ⊥}.1. Una asignaci´ n de o o ′ ′ valores T : X → {⊤.49) Como las variables se interpreta como verdaderas o falsas. ↔. Por ejemplo. Si φ1 y φ2 son expresiones booe leanas.46) ⊥. Una asignaci´ n de verdad T es un mapeo o o de una subconjunto finito X ′ ⊂ X al conjunto de valores {⊤. (1.. tambi´ n es posible evaluar si o e no es verdadera cualquier expresi´ n booleana. lo que se denota por T |= φ tiene siguiente la definici´ n inductiva: o (I) Si φ ∈ X ′ . x2 . Denota por X(φ) el conjunto de variables booleana que aparezcan en una expresi´ n φ. o Es siempre recomendable marcar con par´ ntesis la precedencia deseada de los operadores e l´ gicos. Escribimos xi ∈ T si / T (xi ) = ⊤ y xi ∈ T si T (xi ) = ⊥. (1. la expresi´ n a e o ¬x1 ∨ x2 → x3 ↔ ¬x4 ∧ x1 ∨ x3 (1. ⊥} es adecuada para φ si X(φ) ⊆ X . La negaci´ n de una variable xi se denota con ı o ¬xi : ⊤. aplica T |= φ si y s´ lo si T (φ) = ⊤. Adem´ s se puede formar expresiones con los conectivos ∨ a (“o”). ∨. →. L´ gica matem´ tica 1. (φ1 ∧ φ2 ) y ¬φ1 lo son. .47) ϕi i=1 φ1 → φ2 φ1 ↔ φ2 Lo de → se llama una implicaci´ n y lo de ↔ se llama una equivalencia. L´ gica booleana o La l´ gica booleana de trata de un conjunto X de variables que tambi´ n se llama atomos o e ´ x1 .7. ¬xi = (1. ∧.7.7. si xi = ⊤. tambi´ n (φ1 ∨ φ2 ). existen o las convenciones siguientes: n ϕi i=1 n significa significa significa significa ϕ1 ∨ · · · ∨ ϕn ϕ1 ∧ · · · ∧ ϕn ¬φ1 ∨ φ2 (¬φ1 ∨ φ2 ) ∧ (¬φ2 ∨ φ1 ).48) deber´a ser interpretada como ı ((((¬x1 ) ∨ x2 ) → x3 ) ↔ ((¬x4 ) ∧ (x1 ∨ x3 ))). . LOGICA MATEMATICA 11 o a 1. Para simplificar las expresiones. Si T satisface a φ.

o (1. a Una expresi´ n booleana φ es v´ lida si para toda T imaginable aplica que T |= φ. aplica T |= φ si y s´ lo si T |= φ1 o T |= φ2 . y tampoco se repiten literales dentro de las cl´ usulas o los implicantes. En general aplica que |= φ si o ı y s´ lo si ¬φ es no satisfactible. o (III ) Si φ = φ1 ∧ φ2 . Una conjunci´ n de literales se llama un implicante y una disyunci´ n de literales se llama una o o cl´ usula. (1.50) Por ejemplo.51) Existen formas normales de escribir expresiones booleana. Se puede asumir que ninguna cl´ usula ni implicante sea repetido en una forma a a normal.12 ´ ´ CAPITULO 1. Las dos formas normales son la forma normal conjuntiva (C NF) que utiliza puramente el conectivo ∧ y literales y la forma normal disyunctiva (D NF) que utiliza puramente el conectivo ∨ y literales. aplica T |= φ si y s´ lo si T |= φ′ (lee: T no satisface a φ′ ). Unos ejemplos de expresiones l´ gicamente o equivalentes son los siguientes: ¬¬φ (φ1 ∨ φ2 ) ((φ1 ∧ φ2 ) ∧ φ3 ) ((φ1 ∧ φ2 ) ∨ φ3 ) ¬(φ1 ∧ φ2 ) (φ1 ∨ φ1 ) ≡ ≡ ≡ ≡ ≡ ≡ φ (φ2 ∨ φ1 ) (φ1 ∧ (φ2 ∧ φ3 )) ((φ1 ∨ φ3 ) ∧ (φ2 ∨ φ3 )) (¬φ1 ∨ ¬φ2 ) φ1 . o Dos expresiones φ1 and φ2 son l´ gicamente equivalentes si para toda asignaci´ n T que es o o adecuada para las dos expresiones aplica que T |= φ1 si y s´ lo si T |= φ2 . (II ) Eliminar la notaci´ n auxiliar de →: La expresi´ n φ1 → φ2 es l´ gicamente equio o o valente a la expresi´ n ¬φ1 ∨ φ2 por lo cual puede ser reemplazado con la segunda o . aplica T |= φ si y s´ lo si T |= φ1 y T |= φ2 . Las rea glas para transformar una expresi´ n booleana a una de las dos formas normales son los o siguientes: primero eliminamos las notaciones auxiliares ↔ y → y movemos las negaciones a formar literales: (I) Eliminar la notaci´ n auxiliar de ↔: La expresi´ n φ1 ↔ φ2 es l´ gicamente equio o o valente a la expresi´ n (¬φ1 ∨ φ2 ) ∧ (¬φ1 ∨ φ2 ) por lo cual puede ser reemplazado o con la expresi´ n m´ s larga que ya no contiene el s´mbolo auxiliar ↔ no permitido o a ı en las formas normales. pero T |= (x1 ∨ ¬x2 ) ∧ (¬x1 ∧ x2 ). DEFINICIONES MATEMATICAS Y COMPUTACIONALES (II ) Si φ = ¬φ′ . la expresi´ n es una tautolog´a y se lo denota por |= φ. o Una expresi´ n booleana φ es satisfactible si existe una asignaci´ n de verdad T que es o o adecuada para φ y adem´ s T |= φ. o (IV ) Si φ = φ1 ∨ φ2 . En este o a caso. es v´ lido que T |= o a x1 ∨ x2 . si tenemos la asignaci´ n T (x1 ) = ⊤ y T (x2 ) = ⊥. o La equivalencia l´ gica se denota por φ1 ≡ φ2 .

(1. utilizamos la notaci´ n o siguiente para las variables: a = x1 . queda una expresi´ n de puros e o literales con los conectivos ∧ y ∨. para ahorrar espacio. o o Para dar un ejemplo de la transformaci´ n. LOGICA MATEMATICA 13 expresi´ n que ya no contiene el s´mbolo auxiliar → no permitido en las formas o ı normales. (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.52) Despu´ s de aplicar esas reglas tantas veces como posible. ⊥}n al conjunto {⊤. ∧.7. consideramos el caso de la expresi´ n (x1 ∨ o o x2 ) → (x2 ↔ x3 ) y su transformaci´ n a la forma normal conjuntiva utilizando las reglas o mencionadas. ⊥} definida por o la ecuaci´ n 1. .54) Es importante tomar en cuenta que las expresiones en forma normal pueden en el peor caso tener un largo exponencial en comparaci´ n con el largo de la expresi´ n original.55) o Una funci´ n booleana de n-dimensiones f es un mapeo de {⊤. (III ) Mover negaciones donde las variables para formar literales: utiliza las siguientes equivalencias l´ gicas para cambiar la ubicaci´ n de los s´mbolos de negaci´ n ¬ o o ı o tal que no habr´ redundancia y que cada negaci´ n forma un literal y ya no aplica a a o una expresi´ n compleja: o ¬¬φ ¬(φ1 ∨ φ2 ) ¬(φ1 ∧ φ2 ) es equivalente a es equivalente a es equivalente a φ ¬φ1 ∧ ¬φ2 ¬φ1 ∨ ¬φ2 . Cada l´nea en el proceso es l´ gicamente equivalente con todas las versiones ı o anteriores por las equivalencias ya definidas. hay que aplicar las equivalencias siguientes para mover los conectivos ∨ afuera de los conjunciones: φ1 ∧ (φ2 ∨ φ3 ) (φ1 ∨ φ2 ) ∧ φ3 es equivalente a es equivalente a (φ1 ∧ φ2 ) ∨ (φ1 ∧ φ3 ) (φ1 ∧ φ3 ) ∨ (φ2 ∧ φ3 ).´ ´ 1. El conectivo ¬ corresponde a una funci´ n unaria f ¬ : {⊤.53) Si la meta es lograr la forma normal disyuntiva. ⊥}. Para lograr una forma normal conjunctiva. b = x2 y c = x3 . ⊥}. ⊥} → {⊤. hay que mover los conectivos ∧ afuera de los disyunciones aplicando las equivalencias l´ gicas o siguientes: φ1 ∨ (φ2 ∧ φ3 ) (φ1 ∧ φ2 ) ∨ φ3 es equivalente a es equivalente a (φ1 ∨ φ2 ) ∧ (φ1 ∨ φ3 ) (φ1 ∨ φ3 ) ∧ (φ2 ∨ φ3 ). (1. ⊥} → {⊤. (1. Los conectivos ∨. → y ↔ definen cada uno una funci´ n binaria o o 2 f : {⊤.46.

. ⊥. V = {1.58) (1. o o Cada puerta es de un cierto tipo: la puerta puede representar una variable xi . . Cao o da variable individual corresponde a una oraci´ n. Los v´ rtices que corresponden a variables o los valores e de verdad deben tener grado de entrada cero. . Las funciones booleanas se puede representar a trav´ s de grafos (ver secci´ n 1. si T |= φ. Por ejemplo.8 como e o circuitos booleanos: los v´ rtices son “puertas” y el grafo es dirigido y no c´clico. La cuantificaci´ n existencial quiere decir que en un conjunto indicado existe por lo menos o una variable que cumpla con una cierta requisito. una valor ⊤ o ⊥ o un conectivo (∧. . La asignaci´ n de tales etiquetas se llama sorteo topol´ gico. n. (1. j ∈ E que i < j. Los valores de verdad de las distintas puertas se determina con un procedimiento inductivo tal que se define el valor para cada puerta todas las entradas de la cual ya est´ n a definidos. El ultimo v´ rtice n ´ e representa la salida del circuito. L´ gica proposicional o La l´ gica de primer orden es una l´ gica donde se cuantifica variables individuales. . .2. . si T |= φ. ∨ o ¬). DEFINICIONES MATEMATICAS Y COMPUTACIONALES Cada expresi´ n booleana se puede interpretar como una funci´ n booleana con la dimeno o si´ n n = |X(φ)|. . ∃y tal que x = 2y. n}. mientras la cuantificaci´ n universal dice o que alguna requisito se aplica para todas las variables del conjunto indicado. y ∈ Z. Las puertas de tipo negaci´ n tienen grado o de entrada uno y las puertas con ∧ o ∨ tienen grado de entrada dos. Se puede cuantificar varias variables al mismo tiempo: ∀x. porque en la consa trucci´ n del circuito se puede “compartir” la definici´ n de un subcircuito.56) donde T es tal que T (xi ) = ti para todo i = 1. ∃z. Un grafo e ı dirigido no c´clico siempre se puede etiquetar tal que cada v´ rtice est´ representado por ı e a un n´ mero entero. . Los s´mbolos de cuantificaci´ n son la o ı o cuantificador ∃ para la cuantificaci´ n existencial y la cuantificador ∀ para la cuantificaci´ n o o universal.14 ´ ´ CAPITULO 1. Los circuitos o pueden ser representaciones m´ s “compactas” que las expresiones. de tal manera que aplica para cada arista dirigida u i. . o 1. 2. Se dice que una expresi´ n booleana expresa una funci´ n f si cada o o o n-eada de valores de verdad τ = (t1 . tn ) aplica que f (τ ) = ⊤. . ∀x ∈ R.57) . .7. Cada circuito booleano corresponde a una expresi´ n booleana φ. (1. z ′ ∈ Z tal que x − y = z y x + y = z ′ . mientras en o o las expresiones habr´ que repetir las subexpresiones que aparecen en varias partes de la a expresi´ n.

(1.59) b = m´ k | 2k > x .3: Gr´ ficas de las potencias de dos: a la izquierda. con ejes de escala logar´tmica hasta x = 64. ın k∈Z Para incluir los enteros negativos. ı 1. Un byte (se pronuncia “bait”) a es una sucesi´ n de ocho bits.7.3. empezando con la potencia m´ s grande que a quepa en el n´ mero e iterando hasta llegar a la suma correcta. o En la memoria de una computadora.3).´ ´ 1.1 y la figure 1. se usa un bit auxiliar de signo. con ejes lineales hasta x = 7. Por lo general. Informaci´ n digital o Bit El bit es la unidad b´ sica de informaci´ n digital. u Representamos la presencia de una cierta potencia con un bit de valor 1 y su ausencia por un bit de valor 0. Entonces se necesita seis bits para representar el valor 61. la cantidad b de bits requeridos para representar un valor x ∈ Z+ est´ el exponente de la m´nima potencia a ı de dos mayor a x. empezando con la potencia m´ s grande presente: a 61 = = = ⇒ 32 + 29 = 32 + 16 + 13 = 32 + 16 + 8 + 5 32 + 16 + 8 + 4 + 1 25 + 24 + 23 + 22 + 20 111101. LOGICA MATEMATICA 140 120 100 80 60 40 20 0 0 1 2 3 4 5 6 7 1e+20 1e+18 1e+16 1e+14 1e+12 1e+10 1e+08 1e+06 10000 100 1 0 10 20 30 40 50 60 15 Figura 1. a y a la derecha.7. se expresa los n´ meros enteros con sumas de potenu cias de dos (ver el cuadro 1. Un bit es una variable binaria: tiene dos a o valores posibles que se interpreta como los valores l´ gicos “verdad” (1) y “falso” (0). Byte El byte es la unidad b´ sica de capacidad de memoria digital. El n´ mero entero m´ s grande que se puede guardar en un o u a solo byte es 27 + 26 + 25 + 24 + 23 + 22 + 21 + 20 = 28 − 1 = 255 .

16 ´ ´ CAPITULO 1. 2k = x u 21 22 23 24 25 26 27 28 29 210 211 212 213 214 215 216 217 218 219 = 2 220 = 4 221 = 8 222 = 16 223 = 32 224 = 64 225 = 128 226 = 256 227 = 512 228 = 1 024 229 = 2 048 230 = 4 096 231 = 8 192 232 = 16 384 233 = 32 768 234 = 65 536 235 = 131 072 236 = 262 144 237 = 524 288 238 239 = 1 048 576 = 2 097 152 = 4 194 304 = 8 388 608 = 16 777 216 = 33 554 432 = 67 108 864 = 134 217 728 = 268 435 456 = 536 870 912 = 1 073 741 824 = 2 147 483 648 = 4 294 967 296 = 8 589 934 592 = 17 179 869 184 = 34 359 738 368 = 68 719 476 736 = 137 438 953 472 = 274 877 906 944 = 549 755 813 888 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 = 1 099 511 627 776 = 2 199 023 255 552 = 4 398 046 511 104 = 8 796 093 022 208 = 17 592 186 044 416 = 35 184 372 088 832 = 70 368 744 177 664 = 140 737 488 355 328 = 281 474 976 710 656 = 562 949 953 421 312 = 1 125 899 906 842 624 = 2 251 799 813 685 248 = 4 503 599 627 370 496 = 9 007 199 254 740 992 = 18 014 398 509 481 984 = 36 028 797 018 963 968 = 72 057 594 037 927 936 = 144 115 188 075 855 872 = 288 230 376 151 711 744 = 576 460 752 303 423 488 . DEFINICIONES MATEMATICAS Y COMPUTACIONALES Cuadro 1.1: Algunas potencias del n´ mero dos.

(1.61 es la base del sistema de representaci´ n. El par´ metro b en ecuaci´ n 1. LOGICA MATEMATICA 17 y entonces.61. Los n´ meros a o o u binarios tienen base b = 2 y com´ nmente en c´ lculo utilizamos b = 10.´ ´ 1. Tambi´ n existen u a e sistemas en base b = 8 (el sistema octal) y b = 16 (el sistema hexadecimal). La mantisa t´picamente tiene un tama˜ o m´ ximo limitado a una cierta cantidad fija ı n a de bytes. mientras permite guardar valores de un rango mucho m´ s amplio. Lo que determina el rango de valores posibles que se puede representar en punto flotante es la cantidad de memoria reservada para el exponente γ ∈ Z de la ecuaci´ n 1. o a 1. Normalmente el prefix kilo implica un mil. En comparaci´ n. como el espacio para guardar un n´ mero entero u u est´ limitada a un tama˜ o constante. Nota que aplica en general la igualdad k 2 k+1 −1 = 2i .7.4. La representaci´ n o o e o de punto fija es mucho m´ s restrictiva con respeto al rango de valores posibles de guara dar. a y∈Z (1. Representaci´ n de punto flotante o Para representar n´ meros reales por computadora. son 256 valores posibles por un byte. contando cero. La idea es trasladar la coma decimal hacia la posici´ n de la primera cifra significativa de x mediante un exponente γ: o x = m · bγ . El m´ todo com´ n de lograr tal representaci´ n es a n e u o lo de punto flotante (tambi´ n conocido como coma flotante) donde la representaci´ n se e o adapta al orden magnitud del valor x ∈ R.7. eligieron la potencia m´ s cercana. i=0 (1. 210 = 1024. o La otra opci´ n ser´a simplemente reservar una cierta cantidad de bytes para la represeno ı taci´ n y fijar a posici´ n en la cual se supone que est´ la coma decimal. pero como mil no es ning´ n potencia de dos. hay que definir hasta que exactitud u se guarda los decimales del n´ mero. el m´ todo de punto flotante causa variaciones en la exactitud de la o e representaci´ n. u a para corresponder a los prefixes.60) Un kilobyte es 1024 bytes.62) .61) donde m se llama la mantisa y contiene los d´gitos significativos de x – es com´ n normaı u lizar la mantisa tal que su parte entera consta de solamente la primera cifra significativa de x. Redondeo Funciones techo y piso La funci´ n piso ⌊x⌋ : R → Z define el n´ mero entero m´ ximo menor a x ∈ R: o u a ⌊x⌋ = m´x {y | x ≤ y} . un megabyte es 1024 kilobytes (1048576 bytes) y un gigabyte es 1024 megabytes (1073741824 bytes).

en algunas implementaciones una sucesi´ n instrucciones como o . Funci´ n parte entera o Varios lenguajes de programaci´ n incorporan una manera de convertir un n´ mero en foro u mato punto flotante a un valor entero. se asigna a b el valor ⌊a⌋. y cuando a < 0. siempre aplica para todo x ∈ R que o donde la igualdad ocurre solamente cuando x ∈ Z. (1. Acumulando uno despu´ s de otro.64) ⌊x⌋ ≤ x < ⌊x + 1⌋ (1. o La funci´ n techo ⌈x⌉ : R → Z define el n´ mero entero m´nimo mayor a x ∈ R: o u ı ⌈x⌉ = m´ {y | x ≤ y} . x ≤ ⌈x⌉ < x + 1. los errores de redondeo se e e pueden amplificar y causar comportamiento no deseado en el programa. x > 0 aplica e x ≤ 2⌈log2 x⌉ < 2x. x ∈ R que e x < 2⌊log2 x⌋ ≤ x.67) (1.66) 2 la verificaci´ n de que se deja como ejercicio.68) (1. tenemos Tambi´ n.63) ⌊k + x⌋ = k + ⌊x⌋.65) Una sucesi´ n de combinar las propiedades del logaritmo con la funci´ n piso es que siemo o pre aplica tambi´ n para x > 0. Igualmente. Si a ≥ 0. en C se permite la construcci´ n sio guiente float a = 3. se asigna a b el valor ⌈a⌉. ı a o (1.70) Hay que tener mucho cuidado con la operaci´ n de parte entera en programaci´ n.5]. 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. El redondeo t´pico de x ∈ R al entero m´ s pr´ ximo es equivalente a [x + 0. int b = (int)a.18 ´ ´ CAPITULO 1. La funci´ n que captura esta comportamiento es la funci´ n parte entera o o [x] : R → Z. Por ejemplo. como o o implica p´ rdida de datos.76. para todo k ∈ Z y x ∈ R aplica e x − 1 < ⌊x⌋ ≤ x (1. ın y∈Z (1. Por ejemplo. DEFINICIONES MATEMATICAS Y COMPUTACIONALES Por definici´ n. (1.69) Aplica por definici´ n que o Se deja como ejercicio verificar que tambi´ n para x ∈ R.

nodos). u Si se asignan pesos ω (v) w (o costos o longitudes) a las aristas. el cual caso se habla de h´pergrafos. E) es un grafo G = (V.72) 1. el grafo es ponderado. el grafo es e etiquetado. w ∈ V y E es un conjunto de aristas m (o sea. TEORIA DE GRAFOS float a = 0. Si las aristas tienen direcci´ n. porque por la representaci´ n binaria de punto flotante de los valores 0.8. u. el grafo es no reflexivo.8. w y el v´ rtice w es el destino (o fin) de la e arista.2. v. {u. u} ∈ E ⇔ {v.999999999999999555910790149937. En tal caso. Si se asigna identidad a los v´ rtices o las aristas. los v´ rtices v y w tienen un papel igual en la arista e {v. es posible que haya m´ s de una a arista entre un par de v´ rtices. En un grafo no dirigido. Clases de grafos Un grafo es plano si se puede dibujar en dos dimensiones tal que ninguna arista cruza a otra arista. donde coinciden el v´ rtice de origen y el v´ rtice e e de destino: {v.2. aunque la respuesta correcta es 3. En el caso general. 19 o puede resultar en b asignada al valor 2. Entonces. u}.71) pero tambi´ n se puede definir grafos donde el producto es entre m´ s de dos “copias” del e a conjunto V .1. donde V es un e a conjunto de n v´ rtices (o sea.8.6/0. e arcos). v . ı ¯ ¯ El complemento de un grafo G = (V. es decir que sean distinguibles. el grafo se llama multigrafo. v} o v. aplicar la funci´ n parte entera al valor o de la variable a resulta en el valor 2. u} ∈ E . Si un grafo G no cuente con ninguna arista reflexiva. las aristas definen una ı e relaci´ n entre el conjunto V con si mismo: o E ⊆ V × V. v} ∈ E. 1. Utilizamos la notaci´ n |V | = n. Un bucle es una arista reflexiva. / (1. es decir.´ 1. (1. |E| = m o Las aristas son t´picamente pares de v´ rtices. Teor´a de grafos ı Un grafo (tambi´ n se dice gr´ fica) G es un par de conjuntos G = (V. . su divisi´ n resulta en el valor punto flotante o 2. Si no se permiten e aristas m´ ltiples.6 y 0. o sea. E puede ser un multiconjunto. E) donde ¯ ∀v = u : {v. E). el grafo es simple. el grafo G es dirigido (tambi´ n digrafo) y el v´ rtice o e e v es el origen (o inicio) de la arista dirigida v. int b = (int)a.

77) Si todos los v´ rtices tienen el mismo grado k. . w2}| ≥ 1 (1. La matriz A que corresponde a la relaci´ n E se llama la matriz de adyacencia del grafo.76) La sumaci´ n sobre v ∈ V quiere decir que cada v´ rtice v del conjunto V se toma en o e cuenta una vez en el c´ lculo. es mejor usar una matriz (real) A′′ donde el elemento a′′ contiene el peso de la arista {vi . w} ∈ E. ij El grado deg (v) de un v´ rtice v es el n´ mero de aristas incidentes a v. v2 . v∈V (1. cada v´ rtice est´ conectado a cada otro v´ rtice por una arista. Para grafos dirie u − → gidos. .74) V´ rtices adyacentes son llamados vecinos y el conjunto de vecinos del v´ rtice v se llama e e su vecindario y se denota con Γ (v). La matriz de adyacencia de un grafo no dirigido es sim´ trica. e Para representar la adyacencia de multigrafos. Para grafos ponderados. Una arista es incidente a un v´ rtice si esta lo une a otro v´ rtice. El grado total de un v´ rtice de un grafo dirigido es e ← − − → deg (v) = deg (v) + deg (v) . es mejor abandonar la matriz binaria y construir otra matriz entera A′ donde el elemento a′ij ≥ 0 contiene el n´ mero de arisu tas entre vi y vj . w2 } de un grafo son adyacentes si tienen un v´ rtice en com´ n: e u |{v1 . a En un grafo simple no reflexivo.75) En un grafo simple no dirigido. e En un grafo n − 1-regular. vw } ∩ {w1 . el grafo es regular. . k-regular. e ´ e Dos v´ rtices v y w son adyacentes si una arista los une: e {v. (1. . o para construir la matriz. se define el grado de salida deg (v) de un v´ rtice v como el n´ mero de aristas que e u ← − tienen su origen en v y el grado de entrada deg (v) de v como el n´ mero de aristas que u tienen su destino en v. el grado deg (vi ) del v´ rtice vi es la suma de la ij´ sima e e fila de A. (1.2. Adyacencia Dos aristas {v1 .73) (el valor puede ser mayor a uno solamente en un multigrafo). Nota que siempre aplica deg (v) = 2m.20 ´ ´ CAPITULO 1. (1. aplica deg (v) = |Γ (v)| . DEFINICIONES MATEMATICAS Y COMPUTACIONALES 1. e a e Se llama un grafo completo y se denota por Kn . vj } o cero si no hay tal arista en el grafo. es necesario etiquetar los v´ rtices para que sean identificados e como v1 . o mejor dicho. v2 } y {w1 . vn .8. .

siempre aplica que m = a · b. E) cuyos v´ rtices se pueden separar en dos e conjuntos disjuntos U y W .8.b donde a = |U| y b = |W |.4. o u .5. Un ciclo es un camino que regresa a su v´ rtice inicial. Densidad El n´ mero m´ ximo posible de aristas en un grafo simple es u a mm´x = a n 2 = n(n − 1) .b .3. U ∩ W = ∅. a diam (G) = m´x dist (v.´ 1. (1. La densidad δ (G) de un G se defina como a δ (G) = m m = n . tenemos m = mm´x .80) Para Kn . nunca dos veces o a m´ s. El largo de un camino es el n´ mero de aristas que contiene el camino. mm´x a 2 (1. Grafos bipartitos Un grafo bipartito es un grafo G = (V.8. w) entre v y w es el largo m´nimo de todos los caminos de v a w. w} ∈ E ⇒ (u ∈ U ∧ w ∈ W ) ∨ (u ∈ W ∧ w ∈ U). Nota que para Ka. 1. TEORIA DE GRAFOS 21 1. w) . La u distancia dist (v. a v∈V w∈V (1. Un grafo no dirigido ac´clico es necesariamente un arbol. U ∪ W = V (1.81) Un grafo denso tiene δ (G) ≈ 1 y un grafo escaso tiene δ (G) ≪ 1. La ı distancia de un v´ rtice a si mismo es cero.82) Un camino simple solamente recorre la misma arista una vez m´ ximo. Un grafo es bipartito ´ si y s´ lo si no tiene ning´ n ciclo de largo impar.79) En un grafo bipartito completo est´ n presentes todas las aristas entre U y W . Caminos Una sucesi´ n de aristas adyacentes que empieza en v y termina en w se llama un camino o de v a w.8.78) tal que las aristas solamente unen v´ rtices de un conjunto con algunos v´ rtices del otro: e e {u. Un grafo que no cuente con a e ning´ n ciclo es ac´clico. Se denota a tal grafo por Ka. pero u ı ı ´ en grafos dirigidos la ausencia de ciclos no implica que sea un arbol. El di´ metro diam (G) de un grafo G es la e a distancia m´ xima en todo el grafo. 1.8. 2 (1.

8. Subgrafos Un grafo G(S) = (S. F ) es un subgrafo del grafo G = (V. n u e Un subgrafo que completo se dice una camarilla (ingl´ s: clique). (1.6. Conectividad Un grafo G es conexo si cada par de v´ rtices est´ conectado por un camino. la distancia entre los dos v´ rtices no est´ definido. Un grafo no conexo se puede dividir en dos o m´ s componentes conexos que son formados a por tales conjuntos de v´ rtices de distancia definida. f (u1 )} ∈ E2 . a cual no se puede a˜ adir ning´ n otro v´ rtice sin romper conectividad. denotado por E2 aplica que {v1 .8. Si el grafo es ponderado.84) ´ 1. E) si S ⊆ V y F ⊆ E tal que {v. el grafo G es no e u conexo. Un grafo G no conexo es ı un bosque si cada componente conexo de G es un arbol.22 ´ ´ CAPITULO 1. dos caminos que no e a comparten ninguna arista.8.8. o sea.83) Cada componente conexo es un subgrafo conexo maximal. e Un grafo G1 es isomorfo a otro grafo G2 si y s´ lo si existe una funci´ n f : V1 → V2 de o o los v´ rtices V1 de G1 a los v´ rtices V2 de G2 tal que para en conjunto de aristas de G1 .7. y en consecuencia el di´ metro e a a diam (G) del grafo tampoco es definido. Un arbol cubriente (tambi´ n: un arbol de expanı e ´ ´ ´ si´ n) de un grafo G = (V. es decir. e e denotado por E1 . u1 } ∈ E1 ⇔ {f (v1 ). Si por ale a gunos v´ rtices v y w no existe ning´ n camino de v a w en el grafo G. el arbol cubriente m´nimo es cualquier arbol e ´ ı ´ donde la suma de los pesos de las aristas incluidas es m´nima. (1. Arboles Un arbol es un grafo conexo ac´clico. E) es un subgrafo de graf o que es un arbol y contiene todos o ´ los v´ rtices de G. DEFINICIONES MATEMATICAS Y COMPUTACIONALES 1. w} ∈ F ⇒ (v ∈ S) ∧ (w ∈ S) . Un grafo G es fuertemente conexo si cada par de v´ rtices est´ conectado por al menos dos caminos disjuntos. y lo de las aristas de G2 . ´ . e 1.

Problema de optimizaci´ n o Para problemas de optimizaci´ n. y adem´ s una funci´ n objetivo que asigna un valor a o 23 . junto con una relaci´ n que asocia para cada instancia del problema un subconjunto o de soluciones (posiblemente vac´o). Problema de decisi´ n o En un problema de decisi´ n. la tarea es decidir si o no la relaci´ n entre instancias y o o soluciones asigna un subconjunto vac´o a una dada instancia. e o 2.1. mientras en la o ı segunda clase de problemas la pregunta es del tipo “cu´ l es el mejor valor posible” o “con a qu´ configuraci´ n se obtiene el mejor valor posible”. Un problema es un conjunto (posiblemente infio nita) de instancias junto con una pregunta sobre alguna propiedad de las instancias.Cap´tulo 2 ı Problemas y algoritmos En este curso. En los primeros. Problema Problemas en general son conjuntos de instancias al cual corresponde un conjunto de soluciones.1. la respuesta es ı “no”.1. 2.2. y si el subconjunto es vac´o. un conjunto de restricciones. veremos c´ mo analizar de complejidad de dos conceptos diferentes de o computaci´ n: problemas y algoritmos.1. Si existen soluciones. la instancia est´ compuesta por un conjunto de configuo a raciones. Un algoritmo es un proceso formal para encontrar la respuesta correcta a la pregunta de un problema para una cierta instancia del problema. 2. la ı respuesta a la pregunta del problema es “si”. la respuesta es siempre “s´“ o “no”. ı Los dos tipos de problemas que estudiamos son los problemas de decisi´ n y los problemas o de optimizaci´ n .

En este curso. por lo cual se puede representar el algoritmo como una funci´ n f : E → S. o a e Los algoritmos se implementa como programas de c´ mputo en diferentes lenguajes de o programaci´ n. Ser´a altamente o a ı deseable que para todo ρ ∈ E. Depende del problema o si el mejor valor es el mayor (problema de maximizaci´ n) o el menor (problema de minio mizaci´ n). Si las configuraciones son discretas. hay que definir primero dos conjuntos: (I) un conjunto E de las entradas del algoritmo. diferente tiempo de ejecuci´ n con la misma instancia del problema). o Existen tambi´ n algoritmos probabilistas o aleatorizados donde esto no es el caso. los ejemplos siguen las estructuras b´ sicas de programaci´ n procedural. El mismo algoritmo se puede implementar en diferentes lenguajes y para o diferentes plataformas computacionales. por lo general existen varios algoritmos con diferente nivel de eficiencia (es decir. el problema es combinatorial. e Los algoritmos se escribe como sucesiones de instrucciones que procesan la entrada ρ ∈ E para producir el resultado ξ ∈ S. la ejecuci´ n de S terminar´ despu´ s de un tiempo finito. que representan las instancias del problema y (II ) un conjunto S de las salidas. PROBLEMAS Y ALGORITMOS (real) a cada instancia. por lo general. es decir. que son los posibles resultados de la ejecuci´ n del o algoritmo. el resultado de la computaci´ n ser´ f (ρ) ∈ S. las que cumplen con a todas las restricciones. ´ La sucesi´ n S de instrucciones tiene que ser finita y tal que para toda ρ ∈ E. La configuraci´ n factible con el mejor valor se llama la soluci´ n optima de la o o o ´ instancia. Algoritmo Un algoritmo es un m´ todo de soluci´ n para resolver una dada instancia de un cierto e o problema. Cada instrucci´ n es una operaci´ n simple. En o algoritmos deterministas. a o o . La tarea es identificar cu´ l de las configuraciones factibles. la salida del algoritmo depende unicamente de la entrada de ´ lo mismo. se escribe el algoritmo en un lenguaje de o programaci´ n para ser ejecutado por una computadora. Para un problema.2. tiene el mejor valor de la funci´ n objetivo. En computaci´ n. 2. si P est´ ejeo a cutada con la entrada ρ. Ejemplos de algoritmos son los o m´ todos sistem´ ticos de resolver los problemas siguientes: e a ¿C´ mo encontrar un nombre en la gu´a telef´ nica? o ı o ¿C´ mo llegar de mi casa a m´ oficina? o ı ¿C´ mo determinar si un dado n´ mero es un n´ mero primo? o u u Para definir un algoritmo.24 ´ CAPITULO 2. en pseudoc´ digo parecido a C y Java. produce un o o resultado intermedio unico y es posible ejecutar con eficiencia.

1. que se lee igual hacia adelante que hacia atr´ s. e o ı ı el algoritmo da la respuesta “s´”: ı procedure rpal(palabra P = ℓ1 ℓ2 . CALIDAD DE ALGORITMOS 25 2. el algoritmo los quita de la sucesi´ n de letras y llama a si ´ o mismo para ver si el resto tambi´ n lo es. Algoritmo recursivo Un algoritmo recursivo es un algoritmo donde una parte del algoritmo utiliza a si misma como subrutina.2. En muchos casos es m´ s f´ cil entender la funci´ n de un algoritmo a a o recursivo y tambi´ n demostrar que funcione correctamente. . . return true . o sea. ℓn−2 ℓn − 1). Un algoritmo que en vez de e llamarse a si mismo repite en una manera c´clica el mismo c´ digo se dice iterativo. j := j − 1. . Es un hecho o universal que cada algoritmo recursivo puede ser convertido a un algoritmo iterativo (aunque no viceversa). Depende del problema cu´ l manera es m´ s eficiente: recursiva o iterativa. Un ejemplo de tal ı a palabra es “reconocer”. veremos dos algoritmos para verificar si o no una dada palabra (una sola palabra de puras letras. . En ı o muchos casos. Al recibir una sucesi´ n de un s´mbolo o vac´o. ℓn−1 ℓn ) i = 1. . aunque t´picamente hace da˜ o a la eficiencia del algoritmo hacer tal ı n conversi´ n. else i := i + 1. el pseudoc´ digo de un algoritmo recursivo resulta m´ s corto que el pseuo a doc´ digo de un algoritmo parecido pero iterativo para el mismo problema. else return false Una versi´ n iterativa examinar´a al mismo tiempo desde el inicio y desde el fin verificando o ı para cada letra si son iguales: procedure ipal(palabra P = ℓ1 ℓ2 . while i < j if ℓi = ℓj return false . Calidad de algoritmos Las dos medidas m´ s importantes de la calidad de un algoritmo son a . en espa˜ ol. if ℓ1 = ℓ2 return rpal(ℓ2 ℓ3 . .2. t´picamente ignorando los acutes de las letras) es un n ı pal´ndromo. ℓn−1 ℓn ) if n ≤ 1 return true . j = n. Un algoritmo recursivo simplemente examinar´a la primera y la ı ultima letra. o a a Como ejemplo. Si son iguales.3.3. 2.

a o .1. o u 2. ↔). >. =. T´picamente se utiliza la cantidad de bits. el tama˜ o de la instancia es la cantidad u n de n´ meros que tiene como entrada. Para un algoritmo de ordenar una lista de n´ meros. y o (II ) la cantidad de memoria utilizada. continue. La notaci´ n para capturar tal informaci´ n es a trav´ s de funciones de complejidad. su tama˜ o es u n bien capturado en la suma n+m. hay que definir cu´ les opea raciones se cualifican como operaciones b´ sicas. −.26 ´ CAPITULO 2. como veremos en secci´ n 2. variables a a ı enteras. ≤. hay que fijar cu´ l ser´ la n a a unidad b´ sica de tal c´ lculo. o o e Para eliminar el efecto de una cierta computadora o un cierto lenguaje de programaci´ n. T´picamente se considera b´ sicas los a ı a siguientes tipos de operaciones: (I) operaciones simples aritm´ ticas (+. etc´ tera). sumando en 2m. etc´ tera que se necesita ocupar para representar el problema en su totalidad en la e memoria de una computadora. /.5.2. (V) instrucciones de salto (break. ×. En realidad. →. ∨. e ˜ 2.3. e (II ) operaciones simples l´ gicas (∧. o (III ) comparaciones simples (<. ¬.3. Por ejemplo. se necesita n guardar su punto de inicio y su punto final. mod ). PROBLEMAS Y ALGORITMOS (I) el tiempo total de computaci´ n. para guardar cada arista. existen t´picamente varias si no una cantidad infiı nita de instancias. como ninguno de los dos n´ meros s´ lo puede capturar el u o tama˜ o de la instancia completamente.3. si la instancia es un grafo. pero por lo general se suele ignorar multiplicadores constantes en tal an´ lisis. se o considera que el algoritmo se ejecuta en una m´ quina “modelo” virtual tipo R AM (ingl´ s: a e random access machine) que no tiene l´mite de memoria ni l´mite de precisi´ n de repreı ı o sentaci´ n de n´ meros enteros o reales. Para definir el tama˜ o de una dicha instancia. bytes. ≥). Operaci´ n b´ sica o a Para poder contar las operaciones que ejecuta un algoritmo. Tamano de la instancia Para un cierto problema computacional. =. medido por el n´ mero de operaciones de c´ mputo o u o realizadas durante la ejecuci´ n del algoritmo. (IV ) asignaciones de variables (:=).

La complejidad amortizada sirve para evaluar la eficiencia de un algoritmo en tal caso.3.2. todav´a hay variaciones en la cantidad de n ı tiempo requerido para la ejecuci´ n del algoritmo. y dividiendo por a o el n´ mero de instancias. 1] que la lista [1. es posible que el tiempo de ejecuci´ n de un algoritmo depende de o las ejecuciones anteriores. a ´ Complejidad amortizada En algunos casos. La idea es ejecutar el algoritmo varias veces en secuencia con diferentes instancias. si es posible. 5. 2. En tal caso. 7]. 6. Aqu´ la parte con posible dificultad es la estimaci´ n de la distribuci´ n de n ı o o probabilidad: ¿con qu´ probabilidad ocurren diferentes tipos de instancias? En pr´ ctica. caso promedio y el caso amortizado. el valor o f (n) representa el n´ mero promedio de operaciones b´ sicas sobre todas las instancias u a de tama˜ o n. el consumo de memoria es una medida importante o en la evaluaci´ n de calidad de algoritmos. 3. 2.3. Lo que a queremos nosotros es tal caracterizaci´ n de la calidad de un algoritmo que nos facilita o hacer comparaciones entre algoritmos. Hay que definir cu´ l ser´ la unidad b´ sica de o a a a memoria para hacer el an´ lisis: puede ser un bit. Funci´ n del peor caso o Formamos una funci´ n de complejidad f : Z+ → Z+ tal que para un valor n. es m´ s dif´cil ordenar o a ı la lista [3. resulta m´ s util estudiar el caso promedio. Por ejemplo.3. En muchos casos. e a si el peor caso es muy raro. un byte o una variable de tama˜ o consa n tante de un cierto tipo. Consumo de memoria Igual como el tiempo de ejecuci´ n. CALIDAD DE ALGORITMOS 27 2. El caso peor de consumo de memoria es la cantidad de unidades de . la computaci´ n de la complejidad amortizada u o resulta razonable y no demasiado compleja. como la segunda ya est´ ordenada. el valor f (n) o representa el n´ mero de operaciones b´ sicas para el m´ s dif´cil de todas las instancias de u a a ı tama˜ o n. 9. 5. Las soluciones incluyen el uso del caso peor.4.3. La unica dificultad es identificar o construir la instancia que es el peor posible n ´ para la ejecuci´ n del algoritmo. Este ocurre cuando uno procesa una serie de instancias con alg´ n tipo de dependencia entre ellas. Funciones de complejidad Incluso se fijamos el tama˜ o de la instancia. las funciones de peor caso y caso u promedio pueden resultar pesimistas. ordenando las instancias de la peor manera posible (para consumir m´ s recursos). o Funci´ n del caso promedio o Formamos una funci´ n de complejidad f : Z+ → R tal que para un valor n. calculando el tiempo total de ejecuci´ n.

(III ) f (n) ∈ Θ (g(n)) si ∃c. An´ lisis asint´ tico La meta del an´ lisis de algoritmos es evaluar la calidad de un algoritmo en comparaci´ n a o con otros algoritmos o en comparaci´ n a la complejidad del problema o alguna cota de o complejidad conocida. a Se define el caso promedio y el caso amortizado igual como con el tiempo de ejecuci´ n.5. o a o 2. t´picamente el conteo de “pasos de computaci´ n” ı o falta precisi´ n en el sentido que no es claro que cosas se considera operaciones b´ sicas. (II ) f (n) ∈ Ω (g(n)) si ∃c > 0 tal que |f (x)| ≥ c |g(x)| para suficientemente grandes valores de n. Otra propiedad util es que si ´ (f (n) ∈ O (h(n)) ∧ g(n) ∈ O (h(n))) ⇒ f (n) + g(n) ∈ O (h(n)) . g(n) El s´mbolo ∈ se reemplaza frecuentemente con =.1) Como este aplica para Ω (f (n)) y O (f (n)) los dos. (2. La tercera definici´ n quiere decir que las dos funciones crecen asint´ ticamente o o o iguales.28 ´ CAPITULO 2. mientras la Ω (f (n)) es una cota inferior o o asint´ tica. PROBLEMAS Y ALGORITMOS memoria que el algoritmo tendr´ que ocupar simultaneamente en el peor caso imaginable.2) (2. n a Para definir clases de magnitudes. La funci´ n O (f (n)) es una cota ı o superior asint´ tica al tiempo de ejecuci´ n. Las definiciones se generalizan para funciones de argumentos m´ ltiples. necesitamos las definiciones siguientes.3) . Sin embargo. c′ > 0 tales que c · |g(x)| ≤ |f (x)| ≤ c′ · |g(x)| para suficientemente grandes valores de n y (IV ) f (n) ∈ o(g(n)) si l´ ım n→∞ f (n) = 0. (2. si tenemos que (f (n) ∈ Ω (g(n)) ∧ g(n) ∈ Ω (h(n))) ⇒ f (n) ∈ Ω (h(n)) . Igualmente. sino que instancias grandes — con una o n instancia peque˜ a. Tampoco son interesantes los o o tiempos de computaci´ n para instancias peque˜ as. normalmente todos los algoritmos producen resultados r´ pidamente. escribimos (I) f (n) ∈ O (g(n)) si ∃c > 0 tal que |f (n)| ≤ c |g(n)| para suficientemente grandes valores de n. aplica por definici´ n tambi´ n para o e Θ (f (n)). Para funciones f : Z+ → R y g : Z+ → R. u Estas definiciones son transitivas: (f (n) ∈ O (g(n)) ∧ g(n) ∈ O (h(n))) ⇒ f (n) ∈ O (h(n)) . o a Por eso normalmente se caracteriza la calidad de un algoritmo por la clase de magnitud de la funci´ n de complejidad y no la funci´ n exacta misma.3.

podemos ignorar o coeficientes num´ ricos de los t´ rminos de la expresi´ n. o u .3. pero para o u valores suficientemente grandes ya no hay cambios. En t´ rminos no muy exactos.1: Crecimiento de algunas funciones com´ nmente encontrados en el an´ lisis u a de algoritmos. se dice que un algoritmo es eficiente si su tiempo de ejecue ci´ n tiene una cota superior asint´ tica que es un polinomio. Entonces.4) porque logb (a) es un constante. Por definici´ n. o o Otra relaci´ n importante es que para todo x > 1 y todo k > 0. CALIDAD DE ALGORITMOS 1e+07 1e+06 100000 10000 1000 100 10 1 0. Adem´ s con el resultado anterior e e o a nos permite quitar todos los t´ rminos salvo que el t´ rmino con exponente mayor. Para ilustrar el efecto del tiempo de ejecuci´ n. no hay necesidad de marcar la base en una expresi´ n de complejidad asint´ tica con logaritmos. cada polinomial crece asint´ ticamente m´ s lentamente que cualquiera expresi´ n o a o exponencial. Tambi´ n se dice que un problema u e sin soluci´ n si no cuenta con algoritmo ninguno. Utilizando la definici´ n de o o ecuaci´ n 1.1 (adaptado de [10]) muestra o la dependencia del tiempo de ejecuci´ n del n´ mero de operaciones que se necesita.2. Esto nos permite f´ cilmente formar a O (f (n)) de polinomios y muchas otras expresiones. el cuadro 2. o o a u Una observaci´ n interesante es la complejidad asint´ tica de funciones logar´tmicas: para o o ı cualquier base b > 0 y cada x > 0 tal que x ∈ R (incluso n´ meros muy cercanos a cero). O (f (n)) es la notaci´ n de complejidad asint´ tica m´ s com´ nmente utilizado. Un problema que cuenta con o o por lo menos un algoritmo eficiente es un problema polinomial.25 para cambiar la base de un logaritmo. Si g(n) ∈ O (f (n)). logb (a) (2. Un problema es intratable si no existe ning´ n algoritmo eficiente para resolverlo. Nota que el ordenaci´ n seg´ n magnitud cambia al comienzo. El el siguiente cap´tulo formulamos estes o ı tipos de conceptos formalmente. u x aplica que logb (n) ∈ O (n ) (por la definici´ n de logaritmo). llegamos a tener o loga (n) = 1 logb (n) ∈ Θ (logb n) . como loga (n) = Θ (logb n). Por lo e e general. f (n) + g(n) ∈ O (f (n)). aplica que nk ∈ O (xn ) — o es decir.1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 f(x) = ex f(x) = 2x f(x) = x3 f(x) = x2 f(x) = x log2(x) f(x) = x f(x) = log2(x) 29 Figura 2.

lo marcamos simplemente como ≈ ∞. PROBLEMAS Y ALGORITMOS Cuadro 2. horas (h). d´as (d) o a˜ os (a)) para un o ı n algoritmo necesita exactamente f (n) operaciones b´ sicas del procesador para encontrar a soluci´ n y el procesador es capaz de ejecutar un mill´ n de instrucciones por segundo. 892 a ≈∞ ≈∞ ≈∞ ≈∞ 2n ≈0 18 min 36 a 17 a˜ os 10 n ≈∞ ≈∞ ≈∞ ≈∞ n! 4s 1025 a ≈∞ ≈∞ ≈∞ ≈∞ ≈∞ ≈∞ . El redondeo con tiempos mayores a un segundo est´ n redondeados a un segundo entero mayor si menos de un minuto. o o 25 Si el tiempo de ejecuci´ n es mayor a 10 a˜ os. n f (n) (→) n (↓) 10 30 50 100 1000 10000 100000 1000000 n ≈0 ≈0 ≈0 ≈0 ≈0 ≈0 ≈0 1s n log2 n ≈0 ≈0 ≈0 ≈0 ≈0 ≈0 2s 20 s n2 ≈0 ≈0 ≈0 ≈0 1s 2 min 3h 12 d n3 ≈0 ≈0 ≈0 1s 18 min 12 d 32 a 31710 a 1.30 ´ CAPITULO 2. minutos (min). 5n ≈0 ≈0 11 min 12. y el a˜ o ı n entero mayor si medidos en a˜ os. al minuto a entero mayor si menores a una hora. o n mientras los menores a un segundo son ≈ 0.1: En la tabla (originalmente de [10]) se muestra para diferentes valores de n el tiempo de ejecuci´ n (en segundos (s). la hora entera mayor si menores a un d´a.

“no”}) × Σ × {→. −}. Las m´ quinas Turing o a a pueden simular cualquier algoritmo con p´ rdida de eficiencia insignificante utilizando e una sola estructura de datos: una sucesi´ n de s´mbolos escrita en una cinta (infinita) que o ı permite borrar y imprimir s´mbolos. D). ρ es el s´mbolo que ser´ escrito en el lugar de σ y D ∈ {→. ρ. −} es la direcci´ n a la cual mover´ el puntero. El largo de la a o 31 . (3. Si el estado actual es q ∈ K y el o a s´mbolo actualmente bajo el puntero es σ ∈ Σ.1. ı (III ) una funci´ n de transici´ n o o δ : K × Σ → (K ∪ {“alto”. ← ı a . M´ quinas Turing a Un modelo formal de computaci´ n es lo de la m´ quina Turing. s) por (I) un conjunto finito de estados K. Formalmente. la funci´ n δ nos da ı o δ(q.1) (IV ) un estado de alto “alto”. ⊲ ∈ Σ. Si el puntero mueve fuera de la sucesi´ n o a o de entrada a la derecha. La funci´ n δ captura el “programa” de la m´ quina. ı (3. “s´”. (II ) un conjunto finito de s´mbolos Σ. que se llama el alfabeto de M que contiene dos ı s´mbolos espaciales ⊔. ←. el s´mbolo que es le´do es siempre ⊔ (un s´mbolo blanco) hasta ı ı ı que la m´ quina lo reemplaza por imprimir algo en esa posici´ n de la cinta. ← (izquierda) y − (sin mover). δ.2) donde p es el estado nuevo.Cap´tulo 3 ı Modelos de computaci´ n o 3. un estado de acepto “s´” y un estado de rechazo “no” y ı (V) direcciones del puntero: → (derecha). Σ. σ) = (p. se define una m´ quina Turing M = ı a (K.

σ) = (p. q. MODELOS DE COMPUTACION cinta en todo momento es la posici´ n m´ s a la derecha le´do por la m´ quina. ρ. La salida M(x) de la m´ quina a a a M con la entrada x se define como (I) M(x) = “s´” si la m´ quina acepta x. la o a ı a mayor cantidad de posiciones utilizada por la m´ quina hasta actualidad. la m´ quina acepta la entrada. 1. →) (q. u′ es como u pero sin el primer s´mbolo. s. y u es la sucesi´ n a la derecha del puntero. w. u′ tambi´ n la es. o a Se dice que la m´ quina se ha detenido si se ha llegado a uno de los tres estados de alto a {“alto”. ⊲. Si u no es vac´a. incluyendo el s´mbolo o ı o debajo del puntero actualmente. a (III ) M(x) = y si la m´ quina llega a “alto” y ⊲y ⊔ ⊔ . 1. u) es tal que q ∈ K es el estado actual y w. aplica que q ′ = p y los w ′ ı ´ ı y u′ se construye seg´ n (p. La relaci´ n “rinde en un paso” → es la siguiente: o (q. ı e . ρ. 0. y si u es ı ı vac´a. →) (“alto”. si D =→. en a o representaci´ n binaria. ı a (II ) M(x) = “no” si la m´ quina rechaza x. Por ejemplo. ´ ı ı ı se adjunta un ⊔ a w. →) Una configuraci´ n (q. ⊲}. Tenemos dos estados s y q (adem´ s del estado “alto”) y cuatro o a s´mbolos: Σ = {0. . u′ ) M M (3. ⊔. ←) (“alto”. la m´ quina rechaza su entrada. “s´”. →) (s. w ′. D). y el puntero o ı puntando a ⊲ en la cinta. s. q. La funci´ n de transici´ n δ se define como ı o o p∈K s. es decir. n > 0. tenemos w ′ igual a w con el u ultimo s´mbolo reemplazado por ρ y el primer s´mbolo de u concatenado. w. Un ejemplo es la m´ quina siguiente para el c´ mputo de n + 1 dado n ∈ Z. u ∈ Σ∗ tal que w es o la parte de la sucesi´ n escrita en la cinta a la izquierda del puntero. 0.32 ´ ´ CAPITULO 3.3) as´ que si σ es el ultimo s´mbolo de w y δ(q. σ∈Σ 0 1 ⊔ ⊲ 0 1 ⊲ δ(p. ⊔. ⊲. D). “no”}. donde x es una sucesi´ n finita de s´mbolos en (Σ − {⊔})∗ . es la sucesi´ n escrita en la cinta a o de M en el momento de detenerse y (IV ) M(x) =ր si M nunca se detiene con la entrada x. Si u es vac´a. q. s. σ) (s. Si la ı a ı a m´ quina se detuvo en “no”. . ←) (s. u) → (q ′ . 1. La sucesi´ n x es la entrada de la m´ quina. a Cada programa comienza con la m´ quina en el estado inicial s con la cinta inicializada a a contener ⊲x. −) (q. Si la m´ quina se detuvo en “s´”.

La clase de ı lenguajes decididos por alguna m´ quina Turing son los lenguajes recursivos. a Una m´ quina Turing acepta un lenguaje L si para toda sucesi´ n x ∈ (Σ \ {⊔})∗ aplica a o que si x ∈ L. La relaci´ n de “rinde en general” definimos como o (q. w. wi. Una m´ quina Turing M decide el lenguaje L si y s´ lo si para toda sucesi´ n a o o ∗ x ∈ (Σ − {⊔}) aplica que si x ∈ L. M(x) =ր. (II ) (qi . M(x) = “s´” y si x ∈ L. lo que se hace es decidir o a un lenguaje que consiste de representaciones de las instancias del problema que corresponden a la respuesta “s´”. definimos o (q. tambi´ n es a e recursivamente numerable. u′). . pero si x ∈ L. T´ cnicamente. para representar grafos. u) → (q ′ . u′ ) si y s´ lo si existen configuraciones (qi . ui+1 ). w ′ . u′) Mk M∗ M∗ M Mk 33 (3. i = 1. w1 . Nota que si L es recursivo. ui ) → (qi+1 . w. w. ui ). La unica excepci´ n es la diferencia entre la u ´ o representaci´ n singular (ingl´ s: unary) en comparaci´ n con la representaci´ n binaria: la o e o o singular necesita una cantidad exponencial de s´mbolos en la cinta. u1 ). wk+1.´ 3. . Si existen varias maneras de hacer e la codificaci´ n. w ′. cualquier “objeto matem´ tico finito” puede ser representado por una sue a cesi´ n finita con un alfabeto adecuado. Los lenguajes aceptados por alg´ n ı u m´ quina Turing son recursivamente numerables. MAQUINAS TURING Para la relaci´ n “rinde en k pasos”. M(x) = “s´”. k y (III ) (q ′ . . u) → (q ′ . u′) = (qk+1 . i = 1. . La relaci´ n → es la clausura transitiva o o M y reflexiva de →. . w ′ . . todas las representaciones tienen largos polinomialmente relacionados: o siendo N el largo de una representaci´ n de una dada instancia. k + 1 as´ que o ı (I) (q.4) (3. ı . M(x) = “no”. las otras tienen largo no o mayor a p(N) donde p() es alg´ n polinomio. . se puede preparar una sucesi´ n con informaci´ n de o o n y despu´ s los elementos de su matriz de adyacencia.5) si y s´ lo si ∃k ≥ 0 tal que (q. wi. Las m´ quinas Turing son una representaci´ n bastante natural para resolver muchos proa o blemas sobre sucesiones. Por lo general. n´ meros siempre deber´an estar o u ı representados como n´ meros binarios. u) = (q1 . u Por ejemplo. reo o presentando tanto la entrada como la salida en formato de sucesiones con un alfabeto adecuado. .1. uk+1). w ′ . Los problemas de optimizaci´ n est´ n resueltos por m´ quinas ı o a a Turing que hagan el c´ mputo de una funci´ n apropiada de sucesiones a sucesiones. u) → (q ′ . w. como por ejemplo reconocer lenguajes: sea L ⊂ (Σ − {⊔})∗ un lenguaje. wi+1 . Para resolver un problema de decisi´ n por una m´ quina Turing.

. a ı rj es el contenido actual del registro Rj . con diferencia polinomial.2. . MODELOS DE COMPUTACION Cuadro 3. R). . .. o a Instrucci´ n o READ READ STORE STORE LOAD ADD SUB HALF JUMP JPOS JZERO JNEG HALT Operando j ↑j j ↑j x x x j j j j Sem´ ntica a r0 := ij r0 := irj rj := r0 rrj := r0 r0 := x′ r0 := r0 + x′ r0 := r0 − x′ r0 := ⌊ r20 ⌋ κ := j si r0 > 0. La notaci´ n x significa que puede ser reemplazado por cualquier de los tres operadores j. rj1 ). . π2 . . La estructura de datos de un R AM es un arreglo de registros R0 . rjk )} es o a un conjunto finito de pares registro-valor. ij es el contenido del registro de entrada Ij . La configuraci´ n inicial es (1. R2 . Un R AM es capaz de manejar n´ meros enteros de tama˜ o arbiu n trario. posiblemente negativo. cada uno con capacidad de un entero cualquiera. . . . a Un modelo ideal de computaci´ n es lo de m´ quinas de acceso aleatorio (ingl´ s: random o a e access machines. a lo de m´ quinas Turing. (jk . (j2 . κ := j κ := 0 3. R1 . La entrada o al programa est´ guardada en un arreglo finito de registros de entrada I1 . In . R AM) . Un programa R AM es una sucesi´ n finita de instrucciones de tipo assembler.1: Instrucciones de las m´ quinas de acceso aleatorio (R AM). donde κ es el contador del programa que detero mina cual instrucci´ n de Π se est´ ejecutando y R = {(j1 . κ es el contador del programa que determina cual instrucci´ n de Π se est´ ejecutando. . Se define una o . rj2 ). πm ). .1 Una configuraci´ n es un par C = (κ. . κ := j si r0 = 0. κ := j si r0 < 0. Hay una conjectura que dice que cualquier intento razonable de moa delado matem´ tico de algoritmos computacionales y su eficacia (en t´ rminos de tiempo a e de ejecuci´ n) resultar´ en un modelo de computaci´ n y costo de operaciones que es equio a o valente. Π = (π1 . ↑ j o o = j — x′ es el resultado de tal reemplazo. . ∅). . . I2 . Aqu´ j es un entero. a El primer registro r0 sirve como una acumuladora y las instrucciones posibles se muestra en el cuadro 3. M´ quinas de acceso aleatorio (R AM) a Una pregunta interesante es si se puede implementar cualquier algoritmo como una m´ quina Turing.34 ´ ´ CAPITULO 3.

y) = |x − y| para enteros arbitrarios o x. R) → (κ′ . 6).2: Una R AM para computar la funci´ n φ(x. {(0. o Para valores negativos. (2. R) Π. −4).I k en k pasos”) y → (“da eventualmente”) como en el caso de las m´ quinas Turing. ∅) → (0. El tama˜ o de la entrada se considera en logaritmos: sea bi una repreo n sentaci´ n binaria del valor absoluto un entero i sin ceros no significativos al comienzo. (2. 10). {(0. e as´ que (0. y) = |x − y| en el cuadro 3. {(0. {(0.´ 3. (2. (1.2. {(0. φ(I)) ∈ R. lo que nos da como resultado φ(I) = 4. 6)}) JNEG 8 (6. Tambi´ n hay que tomar a e en cuenta que multiplicaci´ n no est´ incluida como instrucci´ n y que se implementa por o a o sumaci´ n repetida. x = 6 y y = 10. 10). se dice que una m´ quina de acceso aleatorio como a pute una funci´ n φ : D → Z si y s´ lo si para toda I ∈ D aplica que o o (1.I ∗ entre las configuraciones para un programa R AM Π y una entrada I de n instrucciones: κ′ es el valor nuevo de κ despu´ s de haber ejecutado la instrucci´ n en posici´ n κ (nota e o o ′ ′ que no es necesariamente κ = κ + 1) y R es una versi´ n posiblemente modificada de o u u n u R donde alg´ n par (j. La abstracci´ n normalmente considerala sumaci´ n de eno o o teros grandes como es algo que no se puede hacer r´ pidamente. 6)}) HALT (8. (2. 10). 10)}) READ 1 (3. 10). {(0. pensamos que hay un bit “gratuito” para el signo. (1. {(0. a Π. a Programa Configuraci´ n o READ 2 (1.I (3. (2. −4).2. (1. 4). o sea. (1.I ∗ (3. . 10)}) STORE 1 (4. Las configuraciones para el ejemplo se muestra a la derecha. 4). Como un ejemplo. 10). (2. tenemos la R AM que computa la funci´ n ı o φ(x. 10)}) SUB 2 (5. 10). (1. 10). mientras el programa general est´ a la izquierda.7) El modelo de tiempo de ejecuci´ n es el siguiente: la ejecuci´ n de cada instrucci´ n cuenta o o o como un paso de computaci´ n. MAQUINAS DE ACCESO ALEATORIO (RAM) 35 Cuadro 3. y. (1. (2. 6).6) instrucci´ n en posici´ n κ del programa Π. La entrada del ejemplo es I = (6. x) puede haber sido removido y alg´ n par (j ′ . (2. El largo del entero en el contexto R AM es el n´ mero de bits en bi . Esta relaci´ n induce otras relaciones → (“da o o o Si D es una sucesi´ n finita de enteros. 6)}) SUB 1 (10. 6)}) HALT (0. {(0. 10). x′ ) a˜ adido seg´ n la Π. {(0. El largo de la entrada entera L(I) u es la suma de los largos de los enteros en estos t´ rminos. 10). R′ ) Π. 6)}) LOAD 2 (9. ∅) STORE 2 (2. 6)}) relaci´ n de un paso o (κ.

como pares de n´ mero de registro y su contenido separados por el s´mbolo u ı “. . o Tambi´ n funciona viceversa: cada R AM se puede simular con una m´ quina Turing con e a p´ rdida de eficiencia polinomial. .1. . Dado un lenguaje L que se puede decidir en tiempo f (n) por una m´ quina a Turing. . Primero hay que representar la sucesi´ n de entrada I = e o (i1 . R) as´ que k ≤ f (L(I)). El rango de entradas posibles para la e R AM simulando a M es DΣ = {(i1 . . hay que definir una funci´ n φL : DΣ → {0. . Se dice que una m´ quina Turing M computa φ si y s´ lo si para cualquier I ∈ D aplica a o que M(bI ) = bφ(I) . . σk } con p´ rdida lineal de eficiencia. 1} o as´ que φL(i1 . . . in . (IV ) una cinta para el n´ mero de registro que se busca actualmente y u (V) tres cintas auxiliares para usar en la ejecuci´ n de las instrucciones. MODELOS DE COMPUTACION Se dice que un programa R AM Π computa una funci´ n φ : D → Z en tiempo f (n) donde o + + f : N → N si y s´ lo si para toda I ∈ D aplica que o (1.36 ´ ´ CAPITULO 3. ∅) → (0. 1 ≤ ij ≤ k. o Teorema 3. . (3. in ) de enteros como una cadena bI = b1 . .”. (III ) una cinta para el contador de programa κ. . in . b2 . . llegando a la teorema siguiente: Teorema 3. bn donde bj es la representaci´ n o binaria del entero ij . La idea de la construcci´ n es preparar una o subrutina R AM para simular cada transici´ n de una m´ quina Turing M que decide L. o La prueba de este resultado utiliza m´ quinas Turing con siete cintas. . aunque todas esas m´ quia a a u a nas pueden ser simuladas por una m´ quina Turing ordinaria.I k (3. se puede simular una m´ quina Turing M con un alfabeto Σ = a {σ1 . Para muchos casos. .9) Para un lenguaje L ⊂ (Σ − {⊔})∗ . Ahora sea D un conjunto de sucesiones finitas de enteros y φ : D → Z. . Si un programa R AM compute la funci´ n φ en tiempo f (n). . . . . . n}. a es m´ s f´ cil considerar m´ quinas Turing de cintas m´ ltiples.2. donde bφ(I) es la representaci´ n binaria de φ(I). . 0) = 1 si y s´ lo si σi1 · · · σin ∈ L. (II ) una cinta para representar los contenidos de los registros en su representaci´ n bio naria. La tarea de decidir el lenguaje ı o L es equivalente a la tarea de computar φL . . existe una R AM que computa la funci´ n φL en tiempo O (f (n)). ı Π. 0) | n ≥ 0. . Las siete cintas sirven los a prop´ sitos siguientes: o (I) una cinta para la entrada.8) Con una R AM. Eso o a se puede probar formalmente. . existe neceo sariamente una m´ quina Turing M de siete cintas que compute la misma funci´ n φ en a o 3 tiempo O (f (n) ). j = 1.

u) → (q . Una o m´ quina Turing no determinista acepta su entrada si existe alguna secuencia de seleca ciones no deterministas que resulta en el estado de aceptaci´ n “s´”. ı (3. STORE o READ no crean valores nuevos. hay que analizar los casos de diferentes tipos de instrucciones. u ) si y s´ lo si la transici´ n est´ representada por alg´ n elemento en o o a u ∆. a ı . pero nos va a servir mucho para definir complejidad computacional. Cualquier computaci´ n de N es una secuencia de selecciones no deterministas. Entonces. Las instruccioo nes que son saltos. pero la relaci´ n de un paso generaliza: o o o N ′ ′ ′ (q. Cuando ı a se ha ejecutado t pasos del programa Π con la entrada I. o Todav´a habr´ que establecer que ℓ = O (f (n)) para llegar a tener Teorema 3. “no”}) × Σ × {→. simulaci´ n de Π con M requiere O (ℓf (n)2 ) pasos. LOAD. En la segunda cinta de la m´ quina hay O (f (n)) pares. Se necesita O (ℓf (n)) a pasos para simular una instrucci´ n de Π. M´ quinas Turing no deterministas a El modelo de m´ quinas Turing no deterministas (N TM) no son un modelo real´stico de a ı computaci´ n. hemos establecido a 1 + t − 1 + LI + bj = t + N(I) + N(B) y as´ llegado a validar el Teorema 3.2. w.2. el contenido de cada registro tiene largo m´ ximo t + Li + bj donde j es el entero mayor referido a el cualquier instrucci´ n a o de Π. −}]. donde ℓ es el tama˜ o m´ ximo de todos los enteo n a ros en los registros.11) La definici´ n de una configuraci´ n no cambia. a o o pero una relaci´ n de transici´ n: o o ∆ ⊂ (K × Σ) × [(K ∪ {“alto”. el largo del resultado es uno m´ s el largo del operando mayor (por aritm´ tica binaria).3. Esto es v´ lido para t = 0. probamos que si esto es verdad hasta el a o paso n´ mero t − 1. e Una m´ quina Turing no determinista es un cu´ druple N = (K. ∆. Para la operaci´ n aritm´ tica ADD de dos enteros i o o e y j. El grado de no determinismo de una N TM N es la cantidad ı m´ xima de movimientos para cualquier par estado-s´mbolo en ∆.´ 3.3. w . MAQUINAS TURING NO DETERMINISTAS 37 La idea es que cada instrucci´ n del programa R AM Π se implementa por un grupo de eso tados de M. ser´ v´ lido tambi´ n en el paso n´ mero t. HALT. ı (3. s) donde la diferena a cia a una m´ quina Turing determinista es que ahora ∆ no es una funci´ n de transici´ n. La pregunta interesante — y abierta — es si e es posible simularlas con p´ rdida solamente polinomial de eficiencia. “s´”. a e y como el operando mayor tiene largo m´ ximo t − 1 + LI + bj . por lo cual no alteran la validez de la proposici´ n. Por inducci´ n. Para establecer la prueba por u a a e u inducci´ n. Se o puede simular cada m´ quina Turing no determinista con una m´ quina Turing determinista a a con una p´ rdida exponencial de eficiencia. Σ.10) 3. Una m´ quina Turing o ı a no determinista rechaza su entrada si no existe ninguna secuencia de selecciones no deterministas que resultara en “s´”. ←.

. s). (3. Cada paso de la simulaci´ n consiste de tres fases: o (I) Buscar en S2 para el entero que corresponde al estado actual de M.12) para algunas cadenas w y u. tambi´ n U para. “s´”. ρ. Nk (3. σ). e . . cada m´ quina Turing es capaz de resolver un cierto problema. . . (IV ) En cuanto M para.14) Ahora. −. u) o ı (3. una cinta a a S1 para guardar la descripci´ n Mb de M y otra cinta S2 para guardar la configuraci´ n o o actual de M. s) est´ representada por Mb = bΣ . Dada una m´ quina Turing M = (K. . D)) de la funci´ n de transici´ n δ utilizando o o las representaciones binarias de sus componentes. ς + 2. ⊲. a Ahora definimos una m´ quina Turing universal U la entrada de la cual es la descripci´ n a o de una m´ quina Turing M junto con una entrada x para M y la funci´ n de U es tal que a o U simula a M con x as´ que U(M. ς + k + 6} . →. (q. .13) Esto quiere decir que todos los caminos de computaci´ n en el arbol de las decisiones no o ´ deterministas tiene largo m´ ximo f (|x|). δ. . 2. . ς} . w. x) → (q. . . x) → (“s´”. . para lograr un alfabeto finito. u). M´ quina Turing universal a Como las hemos definido. Σ.4. ς + 1 y finalmente {ς + k + 1. x) = M(x). w. (III ) Aplicar la regla. podemos codificarlo utilizando a n´ meros enteros de la manera siguiente. ı Habr´ que ver c´ mo representar una m´ quina Turing por una cadena se s´mbolos de alg´ n a o a ı u alfabeto. ⊲. bδ donde cada ı a entero i est´ representado como bi con exactamente ⌈log(ς + k + 6)⌉ bits y la codificaci´ n a o de δ es una secuencia de pares ((q. u) ⇒ k ≤ f (|x|) . ς + k} .”: M = (K. MODELOS DE COMPUTACION Se dice que una N TM N decide un lenguaje L si y s´ lo si para todo x ∈ Σ∗ aplica lo o siguiente: N∗ x ∈ L si y s´ lo si (s. bK . una N TM N decide un lenguaje L en tiempo f (n) si y s´ lo si N decide L y para a o ∗ todo x ∈ Σ aplica lo siguiente: (s.38 ´ ´ CAPITULO 3. codificamos todo esto con las representaciones binarias y el s´mbolo “. δ. ς + k + 2. Σ. “alto”. {ς + 1. w. “no”} ı = = = = {1. a 3. La m´ quina universal U necesita adem´ s de la cinta de entrada donde tiene x. (II ) Buscar en S1 para la regla de δ que corresponde al estado actual. donde ς = |Σ| y k = |K|: u Σ K d´ nde s o {←. Adem´ s. . (p.

. a para toda entrada x del largo |x| = n y para cada computaci´ n de M aplica que M o para despu´ s de exactamente f (|x|) pasos de computaci´ n y todas sus cintas que no son e o reservados para entrada o salida tienen largo exactamente g(|x|) cuando M para.5. La m´ quina M es precisa si existen funciones f y g tales que para todo n ≥ 0.´ 3. Lo mismo se puede definir para espacio en vez de tiempo. Dada una m´ quina M (determinista o no) que decide el lenguaje L en tiempo f (n) donde a f es una funci´ n correcta de complejidad. alterando la construcci´ n de M ′ as´ que en la simulaci´ n de M. MAQUINA TURING PRECISA 39 a 3. Entonces necesariamente existe una m´ quina o a ′ Turing precisa M que decide L en tiempo O (f (n)). M´ quina Turing precisa Sea M una m´ quina Turing con m´ ltiples cintas. La construcci´ n de tal m´ quina o a M ′ es as´ que M ′ usa Mf para computar una “vara de medir” ⊓f (|x|) y simula M o por ı exactamente f (|x|) pasos. determinista o no.5. se ocupa exactamente o ı o f (|x|) unidades de espacio. con o sin entrada y a u salida.

MODELOS DE COMPUTACION .40 ´ ´ CAPITULO 3.

4.1.1) Definici´ n 4. (4. (4. a Definici´ n 4. P= k>0 TIME nk .3. Una clase de complejidad NTIME (f (n)) es el conjunto de lenguajes L o tales que una m´ quina Turing no determinista decide L en tiempo f (n).1. Clases de complejidad de tiempo Empezamos a definir clases de complejidad computacional a trav´ s de las m´ quinas Tue a ring deterministas y no deterministas: o Definici´ n 4. El conjunto NP contiene todos los lenguajes decididos por m´ quinas Tuo a ring no deterministas en tiempo polinomial. NP = k>0 NTIME nk .2) 41 .Cap´tulo 4 ı Complejidad computacional de problemas 4.2. a Definici´ n 4. Una clase de complejidad TIME (f (n)) es el conjunto de lenguajes L tales que una m´ quina Turing (determinista) decide L en tiempo f (n). El conjunto P contiene todos los lenguajes decididos por m´ quinas Turing o a (deterministas) en tiempo polinomial.

La m´ quina M que o a puede simular a N necesita considerar todas las secuencias posibles en orden de largo creciente y simula el conducto de N para cada secuencia fijada en turno.5) donde |wi ui | es el largo (en cantidad de s´mbolos) de la cadena concatenada de las dos ı cadenas wi y ui . o sea.42 ´ CAPITULO 4. 1. . Numeramos las opciones disponibles a cada momento de decisi´ n o con los enteros 0. . 4. siempre ha llegado a “no” o “alto”). . . Dada una N TM N con k cintas. . Eso implica que NTIME (f (n)) ⊆ TIME cf (n) . Supone que una N TM N decide un lenguaje L en tiempo f (n). . ∆. Entonces. . M tambi´ n termina con ı e “s´”. . . ǫ. ⊲. ⊲. Σ.3. s) una N TM y denota por d el grado de no determinismo de N. sea N = (K. . c>1 (4. wk . . . hay que definir una N TM con cintas m´ ltiples. La cota de tiempo de ejecuci´ n O cf (n) resulta como el producto del n´ mero total de o u secuencias posibles f (n) t=1 dt = O df (n)+1 (4. w1. con la secuencia (c1 .3) Para comprobar Teorema 4. ) → (q. Si una secuencia no resulta en “s´” para N. . c2 . uk ) ⇒ k−1 i=2 N∗ |wi ui | ≤ f (|x|). ct ) la m´ quina M simula las acciones que hubiera tomado N si a N hubiera elegido la opci´ n ci en su selecci´ n n´ mero i durante sus primeros t pasos de o o u computaci´ n. donde a cN > 1 es un constante que depende de N. u1 . es decir. la secuencia de selecciones en un camino de computaci´ n de N se representa como una secuencia de t enteros.4) y el costo de simular cada secuencia O 2f (n) . ǫ. la m´ quina M continua con la siguiente ı ı a secuencia en su lista. . M rechaza la entrada. o Si M llega a simular una secuencia que resulta a “s´” en N. (4. d − 1.3. la necesidad de memoria. .2. Clases de complejidad de espacio Para considerar complejidad del espacio. . ⊲. COMPLEJIDAD COMPUTACIONAL DE PROBLEMAS Teorema 4. x. se dice que N decide a un u lenguaje L dentro de espacio f (n) si N decide L y para todo x ∈ (Σ \ {⊔})∗ aplica que (s. Entonces f (n) existe una m´ quina Turing determinista M que decide L en tiempo O cN . Despu´ s de haber simulado todas las secuencias sin llegar a “s´” (o e ı sea. .

Dada la m´ quina D con entrada M tal que a D(Mb ) = ր. a D(Db ) =ր. o sea. la respuesta para su problema complemento A Complement es “no” y viceversa: ı A Complement(x) = “s´” si y s´ lo si A(x) = “no”. (4. por definici´ n M(x) =ր por lo cual U(Mb . o 4. ı si MH (Mb .3. (4.1: H ALTING Dado: Pregunta: una descripci´ n Mb de una m´ quina Turing M y una entrada o a x ¿va a parar M cuando se ejecuta con x? El lenguaje que corresponde al H ALTING es simplemente H = {Mb . MH (Db . Db ∈ H. x) =ր. a a ı Entonces. Db . o sea. Db ) = “s´” que implica que D(Db ) =ր y llegamos a ı una contradicci´ n. por lo cual Db . H ALTINGno es recursivo: supone que H sea recursivo. (4.9) . Un problema sin soluci´ n muy famoso es el problema H ALTING: o Problema 4.´ 4. ı en otro caso. ı o (4. que nos da otra contradicci´ n. Resulta que H ALTING es recursivamente numerable.3. tenemos MH (Db .6) donde Mb es una descripci´ n de M. x) = “s´”. Mb ) = “s´”. tenemos MH (Db . PROBLEMAS SIN SOLUCION 43 o 4. x ∈ H. Entonces.8) En el contexto de problemas de decisi´ n. alguna m´ qui˜ a na Turing MH decide H. si Mb .4. o lo que se puede comprobar por modificar un poco la m´ quina Turing universal U. Entonces. Al otro lado. el complemento del lenguaje L es el lenguaje ¯ L = Σ∗ \ L.7) tomamos la representaci´ n de D misma. Entonces H no puede ser recursivo. aplica que M(x) = U(Mb . si Mb . ¿Qu´ es el resultado de D(Db )? Si o e D(Db ) =ր. x ∈ H. Pero como o ı MH es la m´ quina que decide H. Un problema que no cuente con una a m´ quina Turing se llama un problema una problema sin soluci´ n (ingl´ s: undecidable a o e problem). x | M(x) =ր}. Db ) = “s´”. que resulta o en U ′ (Mb . La a ′ m´ quina modificada U es tal que cada estado de alto de U est´ reemplazada con “s´”. x) =ր. Problemas sin soluci´ n Existen m´ s lenguajes que m´ quinas de Turing. x) = ı ′ U (Mb . si la respuesta para el problema A con la entrada o x es “s´”. Problema complemento Dado un alfabeto Σ y un lenguaje L ⊆ Σ∗ . si D(Db ) =ր. Sin embargo. Db ) = “no”. “s´”. habr´ que existir lenguajes a a a que no son decididos por ninguna m´ quina Turing.

la respuesta es “s´”.5. S dice “no”. El siguiente problema es sin soluci´ n: dada una m´ quina Turing M. Resulta que cualquier propiedad no trivial de las m´ quinas Turing no a tiene soluci´ n: o Teorema 4. se puede resolver el problema S AT en tiempo O (n2 · 2n ). COMPLEJIDAD COMPUTACIONAL DE PROBLEMAS ¯ Teorema 4. formulamos una m´ quina Turing no determinista para a examinar si φ es satisfactible: asignamos para cada variable xi ∈ X(φ) de una manera no determinista un valor T (x) := ⊤ o alternativamente T (x) := ⊥. o a ¿aplica que L(M) ∈ C si L(M) es el lenguaje aceptado por M? 4. Si ML acepta a ¯ a x.4. e ¯ Teorema 4. a e Dado: Pregunta: una expresi´ n booleana φ en C NF o ¿es φ no satisfactible? . pero no se sabe si S AT est´ tambi´ n en P.2: S AT Dado: Pregunta: una expresi´ n booleana φ en C NF o ¿es φ satisfactible? Para demostrar que S AT ∈ NP.5.6. ı ¯ ¯ Entonces. (Teorema de Rice) Sea R el conjunto de lenguajes recursivamente numerables y ∅ = C ⊂ R. Si resulta que T |= φ. En el otro caso. su complemento L tambi´ n lo es. la respuesta es “no”. S dice “s´” y si ML acepta a x.5. Problemas de l´ gica booleana o El problema de satisfiabilidad (S AT) es el siguiente: Problema 4. Si un lenguaje L es recursivo. Aplica que S AT ∈ NP. El problema complemento de ı S AT es: Problema 4.44 ´ CAPITULO 4. el complemento H de H (el lenguaje del problema H ALTING) no es recursivamente numerable. Un lenguaje L es recursivo si y s´ lo si los ambos lenguajes L y L son o recursivamente numerables. Algunos problemas fundamentales 4.1. Cada lenguaje recursivo es tambi´ n recursivamente numerable.3: S AT Complement Utilizando tablas completas de asignaciones. En la otra direcci´ n la e o demostraci´ n necesita un poco m´ s atenci´ n: vamos a simular con una m´ quina S las dos o a o a m´ quinas ML y ML con la misma entrada x tomando turnos paso por paso.

10) por las reglas de transformaci´ n de la secci´ n 1. φ tambi´ n lo es.7. (III ) Si T cambi´ . .1. ALGUNOS PROBLEMAS FUNDAMENTALES 45 Una clase especial de inter´ s de S AT es la versi´ n donde solamente cl´ usulas Horn est´ n e o a a permitidos. φi = ¬x1 ∨ · · · ∨ ¬xn : Si existe un literal ¬xi tal que xi ∈ T . por lo cual H ORNSAT ∈ P. . o (IV ) Cuando ya no haya cambios en T . Si una cl´ usula Horn a contiene un literal positivo.11) (4.5: C IRCUITSAT .4: H ORNSAT una expresi´ n booleana φ que es una conjunci´ n de cl´ usuo o a las Horn ¿es φ satisfactible? Dado: Pregunta: Resulta que H ORNSAT s´ tiene un algoritmo polinomial.5. / Si no existe tal literal. haz que y sea verdadera por asignar T := / T ∪ {y}. El ı algoritmo para determinar satisfiabilidad para una expresi´ n φ que consiste de cl´ usulas o a Horn es lo siguiente: (I) Inicializa T := ∅ y el conjunto S para contener las cl´ usulas. a e Problema 4. verifica para todas las cl´ usulas en S que consisa ten de puros literales negados. . Una cl´ usula Horn es una disyunci´ n que contiene por m´ ximo un literal a o a positivo (es decir. todas menos una variable tienen que ser negadas). vuelve a repetir el paso II . el resultado es que φi es satisfactible. (V) Si todas las cl´ usulas negativas son satisfactibles. El problema H ORNSAT es el siguieno o te: Problema 4. se llama implicaci´ n por la raz´ n siguiente: la cl´ usula Horn o o a (¬x1 ) ∨ (¬x2 ) ∨ . ∧ xl ) → xp (4. a (II ) Si hay una implicaci´ n o φi = (x1 ∧ x2 ∧ · · · ∧ xn ) → y ∈ S tal que (X(φi ) \ {y}) ⊆ T pero y ∈ T . el resultado es que φi es no satisfactible y as´ φ tampoco ı lo es.4. (¬∨)xk ∨ xp es l´ gicamente equivalente a la expresi´ n o o (x1 ∧ x2 ∧ . .

2. n}. k) que construye el camino m´ s corto entre los v´ rtices i y j pasando a e solamente por v´ rtices con etiqueta menor o igual a k.8: R EACHABILITY Complement Dado: Pregunta: un grafo G = (V. u ∈ V e ¿existe un camino de v a u? Dado: Pregunta: Su problema complemento es obviamente Problema 4. El algoritmo compara todos los caminos posibles entre todos los a pares de v´ rtices en un grafo de entrada. Utilizamos como e subrutina cc(i.46 ´ CAPITULO 4.7: R EACHABILITY un grafo G = (V. pero C IRCUITVALUE ∈ P. ⊥} tal que la salio da del circuito tenga el valor verdad? Problema 4. tenemos dos opciones: e la primera es que el camino m´ s corto con etiquetas menores o iguales a k + 1 utiliza a . Problemas de grafos Problema de alcance (R EACHABILITY) Un problema b´ sico de grafos es el problema de alcance : a Problema 4. COMPLEJIDAD COMPUTACIONAL DE PROBLEMAS Dado: Pregunta: un circuito booleano C ¿existe una asignaci´ n T : X(C) → {⊤.6: C IRCUITVALUE Dado: Pregunta: un circuito booleano C que no contenga variables ¿tiene el valor ⊤ la salida del circuito? C IRCUITSAT ∈ NP. E) tal que V = {1. E) y dos v´ rtices v. Para C IRCUITVALUE.5. . . ´ Etiquetamos los v´ rtices de G = (V.2. . El algoritmo construye de una manera incree mental estimaciones a los caminos m´ s cortos entre dos v´ rtices hasta llegar a la soluci´ n a e o optima. . Para construir un camino de i a j e con solamente v´ rtices intermedios con menores o iguales a k + 1. u ∈ V e ¿es verdad que no existe ning´ n camino de v a u? u Un algoritmo b´ sico para R EACHABILITY es el algoritmo Floyd-Warshall que adem´ s a a resuelve no solamente la existencia de los caminos pero en grafos ponderados encuentra los caminos m´ s cortos. j. no es necesario definir un T como X(C) = ∅. 4. E) y dos v´ rtices v.

k − 1) + cc(k. 0) = w(i. cc(i.5. La problema de decisi´ n que corresponde a la versi´ n ponderada es T SP D: o o Problema 4. o a e Ciclos y caminos de Hamilton Los problemas de decidir si un grafo de entrada contiene un camino o un ciclo de Hamilton son los siguientes: Problema 4. 0) = ∞. donde el costo es la suma de los pesos de las aristas incluidas en el ciclo. Los pesos tienen que ser no negativos para que funcione el algoritmo. k.10: H AMILTON C YCLE un grafo G = (V. k − 1). E) ¿existe un ciclo C en G tal que C visite cada v´ rtice exace tamente una vez? Dado: Pregunta: Un problema de optimizaci´ n basada en el problema de decisi´ n H AMILTON C YCLE es o o el problema del viajante (de comercio) (ingl´ s: travelling salesman problem) T SP es una e versi´ n en un grafo ponderado: habr´ que encontrar un ciclo de Hamilton con costo m´nio a ı mo. contie nuando hasta k = n para cada par. el uso de memoria es lineal. En ambos casos.9: H AMILTON PATH un grafo G = (V. j. E) ¿existe un camino C en G tal que C visite cada v´ rtice exace tamente una vez? Dado: Pregunta: Problema 4. k) = m´ {cc(i. 0) = 1 para cada arista de G = (V. k) primero con k = 1. j) es el peso de la arista (i. j. Lo conveniente es que la informaci´ n de la iteraci´ n k o o se puede reemplazar con la de la iteraci´ n k + 1. j) ∈ E y para grafos no ponderados cc(i. Esta observaci´ n nos ofrece una formulaci´ n recursiva de cc(): o o cc(i.12) con la condici´ n inicial siendo para grafos ponderados que cc(i. cc(i.4. Iterando esto para computar cc(i. j. k − 1)} . E). Entonces. para los pares que no corresponden a una arista. j. despu´ s con k = 2. ın (4.11: T SP D . j. ALGUNOS PROBLEMAS FUNDAMENTALES 47 solamente los v´ rtices con etiquetas menores o iguales a k o que existe alg´ n camino que e u primero va de i a k + 1 y despu´ s de k + 1 a j tal que la combinaci´ n de estos dos caminos e o es m´ s corto que cualquier camino que solamente utiliza v´ rtices con etiquetas menores a e a k + 1. o El tiempo de computaci´ n es O (n3 ) — es un ejercicio f´ cil ver porqu´ . j. j) donde o w(i. j.

48 ´ CAPITULO 4.13: I NDEPENDENT S ET Dado: Pregunta: grafo no dirigido G = (V. No es necesariamente unico. E). u} ∈ E: / Problema 4.1 muestra un ejemplo simple. n Todos los acoplamientos m´ ximos deben ser maximales. E) y un entero k > 0 ¿existe un subgrafo completo inducido por el conjunto C ⊆ V tal que |C| = k? Un problema muy relacionado es el problema de conjunto independiente (I NDEPENDENT S ET) que es un conjunto I ⊆ V tal que ∀v. pero no todos los maximales a deben de ser m´ ximos. u ∈ I aplica que {v.? Una observaci´ n importante es que si C es una camarilla en G = (V. E) y un entero k > 0 ¿existe un subgrafo inducido por el conjunto I ⊆ V tal que |I| = k y que no contenga arista ninguna. Un v´ rtice v est´ acoplado si M contiene una arista incidente a v. C es un conjunto o ¯ independiente en el grafo complemento G. Si no e a est´ acoplado. el conjunto que resulta ya no es un acoplamiento. COMPLEJIDAD COMPUTACIONAL DE PROBLEMAS Dado: Pregunta: un grafo ponderado G = (V. conjuntos de v´ rtices C ⊆ V tales que ∀v. si se a˜ ade una arista a tal M. E) con pesos en las aristas y un constante c ¿existe un ciclo C en G tal que C visite cada v´ rtice exace 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 (C LIQUE) trata de la existencia de subgrafos completos. a . o sea. Acoplamiento Un acoplamiento (ingl´ s: matching) es un conjunto M ⊆ E de aristas disjuntas no e adyacentes. La figura 4. u ∈ C aplica que {v. Ena tonces. Un acoplamiento maximal tiene la propiedad de todas ´ las aristas que no pertenecen a M est´ n adyacentes a por lo menos una arista en M. u} ∈ E: e Problema 4. a e a u a Un acoplamiento m´ ximo Mm´x es uno que contiene el n´ mero m´ ximo posible de arisa a tas. el v´ rtice est´ libre.12: C LIQUE Dado: Pregunta: grafo no dirigido G = (V.

podemos realizar un intercambio de las aristas de A incluidas en M para las aristas de A no en M para construir un acoplamiento nuevo M′ tal que |M′ | = |M| + 1. a . e En azul se muestra el acoplamiento actual. donde M′ = M \ (M ∩ A) ∪ A \ (M ∩ A) . se utiliza el m´ todo de caminos aumentantes. ALGUNOS PROBLEMAS FUNDAMENTALES 49 Figura 4. E) es |Mm´x |.4. Un camino aumentante A es un camino alternante de un v´ rtice libre v e a otro v´ rtice libre u.5. E) un subgrafo que contiene las aristas de un acoplamiento m´ ximo Es un algoritmo iterativo para eliminar aristas que no a formar´ n parte del acoplamiento y se acredita a Harold Kuhn (1955). Un acoplamiento perfecto cubre e todos los v´ rtices del grafo.2 muestra un ejemplo del intercambio por un camino aumentante. Cada acoplamiento perfecto es m´ ximo y maximal y tiene un e a n´ mero de acoplamiento igual a |n| . Figura 4. La a o u figura 4.13) Un acoplamiento M es m´ ximo si y s´ lo si no contiene ning´ n camino aumentante. e Dado un camino aumentante A. e a El n´ mero de acoplamiento de G = (V. Un e camino alternante es un camino en G al cual sus aristas alternativamente pertenecen y no pertenecen a M. El algoritmo H´ ngaro es un algoritmo de tiempo O (n3 ) que construye en base de la u matriz se adyacencia de un grafo de entrada G = (V. u 2 Para mejorar un acoplamiento existente. El n´ mero de v´ rtices libres u u e a (dado G y M) se llama el d´ ficit del acoplamiento en G.2: Un ejemplo del m´ todo de camino aumentante para mejorar un acoplamiento. (4.1: Un acoplamiento de un grafo peque˜ o: las aristas gruesas negras forman el n acoplamiento y los v´ rtices azules est´ n acoplados. Se puede aumentar el tama˜ o intercambiando n la pertenencia con la no pertenencia al acoplamiento de las aristas del camino aumentante indicado.

por lo menos uno de los e v´ rtices incidentes est´ incluido en CV .14: V ERTEX C OVER Dado: Pregunta: un grafo G = (V. El grafo necesita ser conexo en un sentido especial: ∀v ∈ V . una cubierta de aristas es un conjunto CE de aristas tal que para cada v´ rtice v ∈ V . C contiene una arista incidente a v. existe un camino . u Cubiertas Una cubierta (ingl´ s: cover) es un subconjunto de v´ rtices (o aristas) que de una manera e e “cubre” todas las aristas (resp. t´picamente se considera grafos ponderados (y posiblemente ı dirigidos). una cubierta de v´ rtices e e es un conjunto CV de v´ rtices tal que para cada arista {v. Adem´ s.50 ´ CAPITULO 4. E) es un conjunto independiente si e y s´ lo si I es una camarilla en el grafo complemento de G. Adem´ s se fija dos v´ rtices especiales: un v´ rtice fuente s y un v´ rtice sumia e e e dero t. muy t´picamente el grafo de entrada es bipartito. dado un M m´ ximo. u} ∈ E. Adem´ s. I es un conjunto o a independiente en G si y s´ lo si V \ I es una cubierta de v´ rtices G. se puede f´ cilmente construir una cubierta a a a CE optima. COMPLEJIDAD COMPUTACIONAL DE PROBLEMAS Para problemas de acoplamiento. w}.3: Ejemplos de cubiertas: los v´ rtices verdes cubren todas las aristas y las aristas e amarillas cubren todos los v´ rtices. En ı acoplamientos de grafos ponderados. Similarmente. se considera la suma de los valores de las aristas en M y no solamente el n´ mero de aristas incluidas en el acoplamiento. Un problema de decisi´ n relacionado es el siguiente: ´ o Problema 4. Figura 4. E) no dirigido y un entero k > 0 ¿existe un conjunto de v´ rtices C ⊆ V con |C| ≤ k tal que e ∀{v.3 ı o tiene ejemplos de los dos tipos de cubiertas. e Para un acoplamiento m´ ximo M y una cubierta de aristas m´nima CE . todos los v´ rtices). La meta de las problemas relacionadas suele ser e a encontrar un conjunto de cardinalidad m´nima que cumpla con la definici´ n. La figura 4. o v ∈ C o u ∈ C? Existe una conexi´ n fuerte entre conjuntos independientes y camarillas y cubiertas de o v´ rtices : Un conjunto I ⊆ V de un grafo G = (V. e Formalmente. aplica siempre que a ı |CE | ≥ |M|. o e Flujos Para problemas de flujos.

/ (4. . w ∈ C}| . Para generalizar la definici´ n de capacidad a ser una funci´ n sobre todos o o los pares de v´ rtices c : V × V → R. w} ∈ E ⇒ c(v.14) y la restricci´ n de conservaci´ n de flujo: el flujo que entra es igual al flujo que sale. u) = v∈V v∈V f (u.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.17) v∈C w∈C / f (v. se define: {v.5 muestra una instancia de un problema de flujos con cuatro cortes y sus capacidades.4: Una instancia de ejemplo para problemas de flujos: los v´ rtices grises son el e fuente (a la izquierda) y el sumidero (a la derecha). w) ≤ 0. V´ rtices que no cumplan con este requisito pueden ser eliminados en un paso de e preprocesamiento para preparar una instancia de un problema de flujos.5. ALGUNOS PROBLEMAS FUNDAMENTALES 51 (dirigido en en caso de grafos dirigidos) del fuente s al sumidero t que pasa por el v´ rtie ce v. Un flujo positivo es una funci´ n f : V × V → R que satisface dos restricciones: la o restricci´ n de capacidad: o ∀u. v). c(v. En el caso especial de cortar un grafo de flujo. La / capacidad de un corte C en un grafo no ponderado es el n´ mero de las aristas que cruzan u de C a V \ C. los valores de las aristas se llaman capacidades c(v. v) (4. se exige que s ∈ C y t ∈ C. En el grafo de entrada ponderado. w).15) La figura 4. t} : Cortes Un corte C ⊆ V de G es una partici´ n del conjunto de v´ rtices V en dos conjuntos: C y o e V \ C.4. 4 1 2 Fuente 3 2 2 3 4 1 1 5 2 3 2 2 3 2 4 3 1 3 1 3 1 3 6 2 1 Sumidero 3 2 4 Figura 4. Se muestra la capacidad de cada arista. v ∈ V : 0 ≤ f (u. (4.4 e / muestra un ejemplo de un grafo que puede ser una instancia de un problema sobre flujos. w) = 0. |{{v. La figura 4. u} ∈ E | v ∈ C. o o ∀u ∈ V \ {s. v) ≤ c(u. (4.

15: M AX B ISECTION Dado: Pregunta: un grafo G = (V. ı o a la capacidad del corte m´nimo entre dos v´ rtices s y t es igual al flujo m´ ximo entre s y ı e a t.5: Un ejemplo de un grafo que es una instancia de un problema de flujos. E) es un corte cuya capacidad es m´nima entre todos los ı ı cortes de G. El problema de la m´ xima bisecci´ n es el a o siguiente: Problema 4. |C| y |V \ C| no suelen ser arbitrarios. Se muestra cuatro cortes con sus capacidades respectivas. la cantidad de flujo que cruza un corte es igual a cada corte del grafo. u ∈ V tal que {v. En la mayor´a de las aplicaciones de cortes de grafos. COMPLEJIDAD COMPUTACIONAL DE PROBLEMAS 4 1 2 3 2 5 2 3 4 14 15 19 1 1 5 2 3 2 2 3 2 4 3 1 3 1 3 1 3 6 2 1 3 2 4 Figura 4. El problema de encontrar el corte m´nimo tiene soluci´ n polinomial. E) y un entero k > 0 ¿existe una asignaci´ n de colores a los v´ rtices de V tal que o e ning´ n par de v´ rtices v. E) (tal que n es par) y un entero k > 0 ¿existe un corte C en G con capacidad mayor o igual a k tal que |C| = |V \ C|? Coloreo Problema 4. u} ∈ E tenga el u e mismo color? . Cuando establecido un flujo en el grafo.52 ´ CAPITULO 4.16: k-C OLORING Dado: Pregunta: un grafo no dirigido G = (V. Adem´ s. Un corte m´nimo de G = (V. los tama˜ os de los dos “lados” del ı n corte.

f · g y 2f son funciones correctas. (5. n2 . Los requisitos para definir una clase son (I) fijar un modelo de computaci´ n (es decir. o e (IV ) la cota que se impone al recurso (es decir.. obtenemos las clases siguientes: o  determinista TIME (f )   tiempo  no determinista NTIME (f ) determinista SPACE (f )   espacio  no determinista NSPACE (f ) 53 (5. n!. no determinista. o e a (II ) la modalidad de computaci´ n: determinista.1) donde n es el par´ metro de la funci´ n. donde ⊓ es un s´mbolo “casi-blanco”. tambi´ n f + g. 2n . ⌈log n⌉. una clase de complejidad es el conjunto de todos los lenguajes decididos por alguna m´ quina Turing M del tipo I que opera en el modo de operaci´ n de II tal que a o para todo entrada x. f (n). n. Algunos ejemplos de funciones de complejidad son √ c. o Una funci´ n f : N → N es una funci´ n correcta de complejidad si es no decreciente y o o existe una m´ quina Turing Mf de k cintas con entrada y salida tal que con toda entrada a x aplica que Mf (x) = ⊓f (|x|) . a donde f es la funci´ n de IV . log2 n. e Formalmente. etc´ tera. etc´ tera. n. espacio. M necesita al m´ ximo f (|x|) unidades del recurso definido en III . y c es un constante. o e (III ) el recurso el uso del cual se controla por la definici´ n: tiempo. n log n.Cap´tulo 5 ı Clases de complejidad Es posible definir diferentes tipos de clases de complejidad computacional. n3 + 3n.2) . y adem´ s Mf para ı a despu´ s de O (|x| + f (|x|)) pasos de computaci´ n y utiliza O (f (|x|)) espacio en adici´ n e o o a su entrada. Dada dos funciones a o correctas de complejidad f y g. una funci´ n f correcta de complejidad). qu´ tipo de m´ quina Turing se utiliza). o Dada una funci´ n correcta de complejidad f .

4) Todas las clases deterministas de tiempo y espacio son cerradas bajo el complemento.1: La jerarqu´a de complejidad computacional con ejemplos: arriba est´ n las ı a tareas m´ s f´ ciles y abajo las m´ s dif´ciles. Otras clases que se encuentra frecuentemente son L = SPACE (log(n)) y NL = NSPACE (log(n)) Para cada clase de complejidad C. CLASES DE COMPLEJIDAD Cuadro 5. ¯ L|L∈C . (5. Es decir. existe una clase coC que es la clase de los complementos. pero es una pregunta abierta si tambi´ n aplica para clases no deterministas e de tiempo. a a a ı Tiempo O (1) O (n) O (n log n) O (n3 ) O nk O (n2 2n ) Clase Ejemplo Problemas con algoritmos eficientes P si un n´ mero es par o impar u P b´ squeda de un elemento entre n elementos u P ordenaci´ n de n elementos o P multiplicaci´ n de matrices o P programaci´ n lineal o Problemas dif´ciles ı NP-completo satisfiabilidad Para definiciones m´ s amplias. P = coP. .54 ´ CAPITULO 5. la operaci´ n de tomar el complemento de un lenguaje L ∈ C resulta en un lenguaje o ¯ L′ = L tal que tambi´ n L′ ∈ C. Lo unico que hay que hacer e ´ para mostrar esto es intercambiar los estados “s´” y “no” en las m´ quinas Turing que ı a corresponden. Por ejemplo.3) TIME 2n = j>0 TIME 2n j = EXP. podemos utilizar una familia de funciones f cambiando a un par´ metro k ≥ 0. k ∈ Z: las clases m´ s importantes as´ obtenidas son a a ı TIME NTIME SPACE NSPACE Definici´ n de la clase o j nk = j>0 TIME (n ) j nk = j>0 NTIME (n ) j nk = j>0 SPACE (n ) j nk = j>0 NSPACE (n ) k = = = = Nombre P NP PSPACE NPSPACE (5. Se puede mostrar tambi´ n que las clases de espacio no deterministas est´ n cerradas bajo e a complemento.

Cada paso de la simulaci´ n necesita O (f (n)2 ) tiempo.1.´ 5. Para una funci´ n correcta de complejidad f (n) ≥ n. definimos un a o lenguaje nuevo: Hf = {Mb . donde n = |x| es el largo de la entrada x. Db ) = “no”. Mb est´ copiada a la tercera cinta. Db ) = “s´”. x | M acepta a x despu´ s de no m´ s de f (|x|) pasos } e a El lenguaje Hf es una versi´ n “cortada” de H. llegamos a tiempo de ejecuci´ n total O (f (n)3 ) para Uf . Si D(Db ) = “s´”.6) 2 pasos. Para comprobar esto. tenemos que M(Db . por lo ı ı cual Db . D no puede aceptar la entrada Db dentro de f (|Db |) pasos. Con a ı ı la entrada Mb . o Entonces D(Db ) = “s´”. En ı este caso. La operaci´ n de la m´ quina Uf es la siguiente: o a (I) Mf computa la vara de medir ⊓f (|x|) para M en la cuarta cinta. una m´ quina de aumento de rapidez lineal y la m´ quina Mf u a a que computa la “vara de medir” del largo f (n). a o (5. Mb ) = “s´” y en otros casos D dice “s´”. a (IV ) La primera cinta est´ inicializada para contener la entrada ⊲x. Consideramos otra a 2 m´ quina D que dice “no” cuando M(Mb . o Se puede mostrar que Hf ∈ TIME ((f (n))3 ) con una m´ quina Turing Uf de cuatro a cintas que est´ compuesta de la m´ quina universal U.1. D necesita 2|Mb | + 1 f (⌊ ⌋) = f (|Mb |) (5. ı o Utilizando estos dos resultados. y entonces D. logramos que M puede tratar de a a tareas m´ s complejas.5) Tambi´ n se puede mostrar que Hf ∈ TIME f (⌊ n ⌋) . (VI ) Despu´ s de cada paso de M simulado. que es una contradicci´ n. e o (VII ) Si Uf descubre que M acepta a x en f (|x|) pasos. por lo cual con los f (|x|) pasos o simulados al m´ ximo. D ∈ Hf . Esto quiere a decir que D(Db ) = “s´”. o a (III ) La segunda cinta est´ inicializada para codificar el estado inicial s. podemos llegar a probar al teorema siguiente: . Uf acepta su entrada. el lenguaje de H ALTING. un simulador de m´ quinas de cintas a a a m´ ltiples con una sola cinta. suponga e 2 que existe una m´ quina Turing M que decide a Hf en tiempo f (⌊ n ⌋). Db ∈ Hf y D acepta la entrada Db en no m´ s que f (|Db |) pasos. Uf rechaza su entrada. Uf avanza la vara de medir por una posici´ n. Esto implica que D(Db ) = “no” y M(Db . a (V) Uf simula con una sola cinta a M. (VIII ) Si se acaba la vara de medir sin que M acepte a x. que es otra contradicci´ n y nos da el resultado deseado. Jer´ rquias de complejidad Si permitimos m´ s tiempo a una m´ quina Turing M. que significa que D(Db ) = “no”. (II ) La descripci´ n binaria de M. JERARQUIAS DE COMPLEJIDAD 55 a 5.

La demostraci´ n se construye por simular todas las opciones: dado un lenguaje L ∈ o NTIME (f (n)). existe una m´ quina Turing precisa no determinista M que decide L en a o tiempo f (n).56 ´ CAPITULO 5. d − 1]. entonces la clase o TIME (f (n)) est´ estrictamente contenida en TIME ((f (2n + 1))3 ). existe una funci´ n no correcta f : Z → Z+ tal que TIME (f (n)) = o f (n) TIME 2 . considerando cada sucesi´ n de sea o lecciones posibles a su turno. El truco es definir f tal que ninguna m´ quina Turing M con entrada a x. Un resultado menos obvio es el siguiente: Teorema 5. El largo de la sucesi´ n es f (n) y cada elemento o o se puede representar por un entero ∈ [0. Por o + ejemplo. Si f (n) ≥ n es una funci´ n correcta de complejidad. (5. entonces aplica que o SPACE (f (n)) ⊂ SPACE (f (n) log f (n)). a Es bastante evidente que TIME (f (n)) ⊆ TIME (f (2n + 1))3 como f es no decreciente.9) (5. con “buenas adivinana e e zas”.7. (5. Como M ′ simula las acciones de M.8) (5. e Relaciones entre clases Sea f (n) una funci´ n de complejidad correcta. Construyamos una m´ quina M ′ para simular a M. para despu´ s de k pasos tal que f (n) ≤ k ≤ 2f (n) . Es muy importante el requisito que f sea una funci´ n correcta de complejidad.9. CLASES DE COMPLEJIDAD Teorema 5. si con una sucesi´ n o . cada computaci´ n de M es una sucesi´ n de selecciones no deterministas.10) Teorema 5.8. NTIME (f (n)) ⊆ SPACE (f (n)). |x| = n. Si f (n) ≥ n es una funci´ n correcta de complejidad. Naturalmente SPACE (f (n)) ⊆ o NSPACE (f (n)) y TIME (f (n)) ⊆ NTIME (f (n)) por el hecho simple que una m´ quina Turing determinista es t´ cnicamente tambi´ n una N TM.7) Este resultado implica tambi´ n que P ⊂ TIME (2n ) ⊆ EXP por nk = O (2n ) y por el e resultado anterior que nos da TIME (2n ) ⊂ TIME (22n+1 )3 ⊆ TIME 2n 2 ⊆ EXP. Sea d el grado de no determinismo de M. Ya sabemos que Hf (2n+1) ∈ TIME (f (2n + 1))3 y que Hf (2n+1) ∈ TIME f ⌊ 2n + 1 ⌋ 2 = TIME (f (n)) .

El estado y todo lo anotado durante la simulaci´ n de una sucesi´ n puede ser borrado cuando empieza la simulaci´ n de la suo o o cesi´ n siguiente.12) Es com´ nmente aceptado que las inclusiones inmediatas en ecuaci´ n 5. Si ninguna sucesi´ n acepta. La demostraci´ n del teorema siguiente se encuentra en el libro de texto de Papadimitriou o [15]: Teorema 5. (5. a Espacio y no determinismo De los resultados de la secci´ n anterior tenemos que o NSPACE (f (n)) ⊆ TIME clog n+f (n) ⊆ SPACE clog n+f (n) . M ′ tambi´ n para con “s´”. (5.1. la primera o a o secuencia se puede generar en espacio f (n). (Teorema de Savitch) R EACHABILITY∈ SPACE log2 n .´ 5. ı . Adem´ s. Con los resultados ya establecidos. todav´a no se sabe si P = NPo no.13) pero existen resultados a´ n m´ s estrictas: m´ quinas no deterministas con l´mites de espau a a ı a cio se puede simular con m´ quinas deterministas con espacio cuadr´ tico. tenemos L ⊂ PSPACE por L = SPACE (log(n)) ⊂ SPACE (log(n) log(log(n))) ⊆ SPACE (n2 ) ⊆ PSPACE. y tambi´ n e que por lo menos una entre P y EXP es de ese tipo. pero todav´a no se ha establecido tal resultado. Entonces m´ quinas no detera o a ministas con respeto a espacio son menos poderosos que las m´ quinas no deterministas a con respeto a tiempo. El resultado se a basa en R EACHABILITY . (5.10. como f (n) es una funci´ n correcta de complejidad.11. (5. entre que clases podemos probar que existe una diferencia: algunos elementos pertenecen a una pero no a la otra. Una secuencia del teorema es que L ⊆ NL ⊆ P ⊆ NP ⊆ PSPACE ⊆ EXP. el espacio que necesitamos es sou lamente f (n) como lo hacemos una por una. Se llega a o a probar que para toda funci´ n correcta f (n) ≥ log n. La demostraci´ n del teorema est´ en el libro de texto de Papadimitriou [15]. aplica que o NSPACE (f (n)) ⊆ SPACE (f (n))2 .11) La pregunta interesante con ese corolario es donde aplica A ⊂ B en vez de A ⊆ B. El problema es que no se sabe cu´ l. NSPACE (f (n)) ⊆ TIME clog n+f (n) .11 sean todos de u o tipo A ⊂ B. es decir. Aunque el n´ mero de simulaciones es exponencial. M ′ rechaza su ı e ı o entrada. Teorema 5. Lo que s´ se ha establecido ı ı que por lo menos una de las inclusiones entre L y PSPACE es de ese tipo. se demostraci´ n que PSPACE = NPSPACE.14) Adem´ s. JERARQUIAS DE COMPLEJIDAD 57 M para con “s´”.

a mientras una reducci´ n Karp es una reducci´ n con una funci´ n de transformaci´ n de o o o o tiempo polinomial y las reducciones de espacio logar´tmico son la clase de reducciones ı que utilizamos en este curso: un lenguaje L es reducible a un lenguaje L′ . o Entonces.15) Entonces. o La funci´ n R se llama una reducci´ n de L a L′ . No e todas las problemas en la misma clase parecen igualmente dif´ciles. Las u reducciones Cook permiten que R(x) sea computada por una m´ quina Turing polinomial. M para despu´ s de un n´ mero polinomial de pasos. 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. C LIQUE. habr´ que construir R(x) y rea solver el problema A para descubrir la respuesta que aplica para los dos problemas con sus entradas respectivas.12. etc´ tera. Como M utiliza O (log n) espacio. e u La demostraci´ n sigue las ideas siguientes: denota el largo de la entrada x con |x| = o n. que o u a al final contiene R(x). no es posible que se repita ninguna configuraci´ n. si contamos con un algoritmo para el problema A y un algoritmo para construir R(x).58 ´ CAPITULO 5. parece razonable que A es por lo menos a tan dif´cil como B. R EACHABILITY. si y s´ lo si existe una funci´ n R de cadenas a cadenas que est´ computada por o o a una m´ quina Turing determinista en espacio O (log n) tal que para toda entrada x a x ∈ L si y s´ lo si R(x) ∈ L′ . si R(x) es f´ cilmente construida. es a necesariamente polinomial en n = |x|. Si R es una reducci´ n computada por una m´ quina Turing determinista o a M. M para despu´ s de o e c′ nclog n = c′ nnlog c = O nk (5. Para poder establecer resultados formales.2. o (5. Un problema B reduce al problema A si existe una transformaci´ n R que para toda eno trada x del problema B produce una entrada equivalente y de A tal que y = R(x).17) (5. para resolver el problema B con la entrada x. la combinaci´ n nos da un algoritmo para el problema B. CLASES DE COMPLEJIDAD 5. Reducciones Una clase de complejidad es una colecci´ n infinita de lenguajes. el largo de R(x). Un m´ todo para esı e o tablecer un ordenamiento de problemas por dificultad es la construcci´ n de reducciones: un problema A es por lo menos tan dif´cil como otro problema B si existe una reducci´ n ı o del problema B al problema A. Es decir. . para toda entrada x. como la cinta de salida de M. x ∈ B si y s´ lo si R(x) ∈ A. Entonces. est´ computada en tiempo polinomial. |R(x)|. el n´ mero de configuraciones posibles de M es u log n O nc . Adem´ s. denotado por L ≤L L′ . hay que clasificar las reı ducciones seg´ n los recursos computacionales utilizados por sus transformaciones. o o Teorema 5. la clase o NP contiene problemas como S AT. El hecho que M es determinista y para con toda entrada. H ORNSAT. Por ejemplo.16) pasos de computaci´ n con alg´ n valor de k.

(5. x. x ∈ H si y s´ lo si t(Mb . x ∈ H ⇔ M para con x ⇔ M ′ para con toda entrada ⇔ M ′ ∈ A.18) Ahora veremos ejemplos de reducciones entre dos problemas: de un problema B a otro problema A. En cada caso. una expresi´ n booleana en C NF) tal que G es un o a o camino de Hamilton si y s´ lo si R(G) es satisfactible. el resultado R(G) o es una conjunci´ n de cl´ usulas (o sea.5. Una reducci´ n de B a A es una transformaci´ n de la entrada IB del problema o o B a una entrada IA = t(IB ) para A tal que IB ∈ B ⇔ IA ∈ A y que exista una m´ quina Turing T tal que t(IB ) = T (IB ). x | ∃y : M(x) = y} (III ) {Mb .20) M(x). x. necesariamente tiene que existir un algoritmo para H ALTING. a Entonces. en otro caso. se transforma la entrada Mb . x) de A tal que Mb . La t´ cnica para mostrar tal cosa es por construir una reducci´ n del problema H ALTING al e o problema A.2. o . x) ∈ A. se construye o la siguiente m´ quina M ′ a M ′ (y) = para la cual aplica que Mb . y | M(x) = y} Para el primero. E). “alto” si x = y. Como un ejemplo. hacemos ahora una reducci´ n de H AMILTON PATH a S AT. hay que establecer una ı reducci´ n R de H AMILTON PATH a S AT: para un grafo G = (V.19) (5. Algunos o ejemplos de lenguajes no recursivos son (I) {Mb | M para con cada entrada} (II ) {Mb . (5. REDUCCIONES Ejemplos de reducciones 59 Si queremos mostrar que un problema A no tenga soluci´ n. x | para computar M(x) se usa todos los estados de M} (IV ) {Mb . Para moso trar que S AT es por lo menos tan dif´cil que H AMILTON PATH. tenemos que mostrar que si o existe un algoritmo para A. para mostrar que A no tiene soluci´ n. la idea de la reducci´ n es la siguiente: dada la entrada Mb . x de H AL o TING a una entrada t(Mb . se presenta una reducci´ n R del lenguaje LB del problema B o al lenguaje LA del problema A tal que para cada cadena x del alfabeto de B o (I) x ∈ LB si y s´ lo si R(x) ∈ LA y (II ) se puede computar R(x) en espacio O (log n).

i = k : ¬xij ∨ ¬xkj .24) (V) El camino tiene que seguir las aristas del grafo: un v´ rtice solamente puede seguir e otro v´ rtice en el camino C si esos v´ rtices est´ n conectados por una arista en e e a G = (V. (III ) En cada posici´ n del camino C hay alg´ n v´ rtice: o u e ∀i ∈ V : xi1 ∨ · · · ∨ xin .21) (5. . . ∀j. j = k : ¬xij ∨ ¬xik . k ∈ [1. E): ∀(i.60 ´ CAPITULO 5. a Entonces. Etiquetamos los n v´ rtices de G = (V. . Representamos cada par de v´ rtices con una variable booleana xij donde e i ∈ V y j ∈ [1. La construcci´ n es la siguiente y no es nada obvia sin conocer los trucos t´picos del o ı dise˜ o de reducciones.22) (5. o Por las cl´ usulas V . n]. T representa una a permutaci´ n π(1). n]. / (5. las aristas que corresponden a la secuencia (π(1). E) con los enteros: V = n e {1. ∀k ∈ [1. (5. . ∀j ∈ [1. n − 1]. . . e . n}. Las cl´ usulas necesarias son las siguientes: a (I) Cada v´ rtice necesita estar incluido en el camino C: e ∀j ∈ V : x1j ∨ · · · ∨ xnj . aplica que {π(k). π(n) de los v´ rtices tal que o e π(i) = j si y s´ lo si T (xij ) = ⊤. j) ∈ E. CLASES DE COMPLEJIDAD Asignamos a la variable xij el valor ⊤ si y s´ lo si el v´ rtice n´ mero i en el camino C o e u construido en H AMILTON PATH es el v´ rtice j. . son en total n2 variables. a o Entonces.23) (5. (IV ) Ning´ n par de v´ rtices puede ocupar la misma posici´ n en el camino C: u e o ∀i ∈ V. n − 1] : ¬xki ∨ ¬x(k+1)j . π(k + 1)} ∈ E para todo k ∈ [1. π(n)) de visitas a los v´ rtices es un camino de Hamilton. a o e Por las cl´ usulas III y IV existe una sola posici´ n j tal que T (xij ) = ⊤. este o corresponde al camino C del problema H AMILTON PATH: Por las cl´ usulas I y II existe un s´ lo v´ rtice i tal que T (xij ) = ⊤. (II ) Cada v´ rtice solamente puede estar incluida una sola vez en el camino C: e ∀i. . Entonces. . 2. como e el largo del camino es necesariamente n. . . k ∈ V.25) Ahora hay que mostrar que si R(G) tiene una asignaci´ n T que satisface a R(G). n]. .

E) que corresponde a un camino de Hamilton. n. el resultado R(G) es un circuito tal que la salida del circuito R(G) es ⊤ si y s´ lo si existe un camino del v´ rtice 1 al v´ rtice n en G = (V. se imprime las cl´ usulas de las primeras cuatro clases uno por uno a trav´ s de a e tres contadores i. M construye a R(G) de la manera siguiente: a primero. se a˜ ade para todo k ∈ [1. queda mostrar que la computaci´ n de R(G) ocupa O (log n) espacio. . la puerta gijk es una entrada en R(G). M genera las cl´ usulas V por considerar cada par (i. 2. Las puertas de R(G) o e e son de dos formas: (I) gijk donde 1 ≤ i. j. Dada G a o como la entrada de una m´ quina Turing M. j y k. j} ∈ E y en otro caso una puerta tipo ⊥. . La puerta e e u e hijk deber´a funcionar tal que tenga el valor ⊤ si y s´ lo si existe un camino en G del ı o v´ rtice i al v´ rtice j sin usar ning´ n v´ rtice intermedio mayor a k pero s´ utilizando k. T (xij ) = (5. π(n)) es una secuencia de visitas a los e v´ rtices del grafo G = (V. y si no lo es. por lo cual la compua taci´ n de R(G) es posible en espacio O (log n). el espacio ocupado simultaneamente es al m´ ximo 3 log n. j ≤ n y 0 ≤ k ≤ n y (II ) hijk donde 1 ≤ i.26) ⊥ en otro caso. Est´ parte no depende de la estructura del grafo.5. hacemos una reducci´ n de R EACHABILITY a C IRCUITVALUE: Para o un grafo G. . . j) en su turno: M verifica a a si (i. E). . . En total. REDUCCIONES 61 Tambi´ n hay que establecer que si (π(1).2. definido por la e permutaci´ n π. las conexiones entre las puertas en R(G) son las siguientes: • Cada hijk es una puerta tipo ∧ con dos entradas: la salida de gik(k−1) y la salida de gkj(k−1). Adem´ s. n a Aqu´ espacio adicional aparte de la entrada misma es solamente necesario para los contaı dores i. n − 1] la cl´ usula ¬xki ∨ ¬x(k+1)j . n] es o posible en log n espacio. La puerta gij0 es una puerta tipo ⊤ si i = j o {i. necesariamente est´ satisfecha la expresi´ n R(G) por una asignaci´ n T o a o o tal que ⊤ si π(i) = j. j y k. La puerta gijk deber´a funcionar tal que tenga el valor ⊤ si y s´ lo si existe un camino en ı o G del v´ rtice i al v´ rtice j sin pasar por ning´ n v´ rtice con etiqueta mayor a k. . u e Adem´ s. solamente de a su n´ mero de v´ rtices. . k ≤ n. La e e u e ı estructura del circuito R(G) es tal que Para k = 0. Para k = 1. j) ∈ E. o Como otro ejemplo. La representaci´ n binaria de cada contador con el rango [1. .

.62 ´ CAPITULO 5. CLASES DE COMPLEJIDAD • Cada gijk es una puerta tipo ∨ con dos entradas: la salida de gij(k−1) y la salida de hijk . e Para k > 0. 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´ n. . El caso b´ sico k = 0 aplica por o a definici´ n. el circuito asigna por definici´ n gijk = gij(k−1) ∨ hijk . tiene el valor ⊤ solamente en el caso que existe una camino del v´ rtice i al v´ rtice j sin pasar por ning´ n v´ rtice con e e u e etiqueta mayor a k. el circuito asigna o hijk = gik(k−1) ∧ gkj(k−1). por cu´ l reo a a sulta que el circuito R(G) de hecho implementa el algoritmo Floyd-Warshall para el problema de alcance. n. lo unico es etiquetar v = 1 y u = n e ´ y la reducci´ n est´ completa. gijk es o o ⊤ si y s´ lo si existe un camino del v´ rtice i al v´ rtice j sin usar ning´ n v´ rtice con etiqueta o e e u e mayor a k − 1 o si existe un camino entre los v´ rtices que no utilice ning´ n v´ rtice con e u e etiqueta mayor a k pero pasando por k mismo. o Cada circuito C sin variables de puede convertir a un circuito mon´ tono: la idea es utilizar o las leyes De Morgan ¬(a ∧ b) ⇔ (¬a) ∨ (¬b) (5. o Un circuito mon´ tono solamente puede computar funciones booleanas mon´ tonas: si el o o valor de una se sus entradas cambia de ⊥ a ⊤. 1. La salida del circuito R(G) es ⊤ si y s´ lo si g1nn es ⊤. hacemos el an´ lisis siguiente. lo que aplica si y s´ lo si haya un camino del v´ rtice i al o e v´ rtice j que no utiliza ning´ n v´ rtice intermedio mayor a k pero s´ pasa por el mismo e u e ı v´ rtice k.28) ¬(a ∨ b) ⇔ (¬a) ∧ (¬b) para “empujar” todas las negaciones hasta las puertas de entrada. lo que aplica si o y s´ lo si existe un camino de 1 a n en G sin v´ rtices intermedios con etiquetas mayores a o e n (que ni siquiera existen) lo que implica que existe un camino de 1 a n en G. u ∈ V para el problema R EACHABILITY. (5. o a Entonces. Para comprobar que es correcta la reducci´ n. . La puerta g1nn es la salida del circuito R(G). lo unico que necesitamos son tres contadores para computar el circuito R(G): ´ se puede hacer esto en O (log n) espacio. Llegamos a una asignaci´ n correcta ı o de valores a hijk y gijk por inducci´ n en k = 0. Entonces. . Una observaci´ n importante es que R(G) es un o circuito mon´ tono: no contiene ninguna puerta tipo ¬. .27) Nuestro hip´ tesis de inducci´ n es que hijk sea ⊤ si y s´ lo si haya un camino del v´ rtice o o o e i al v´ rtice k y adem´ s un camino del v´ rtice k al v´ rtice j sin usar v´ rtices intermedios e a e e e con etiquetas mayores a k − 1. El circuito R(G) es no c´clico y libre de variables. Dado dos v´ rtices v. el valor de la funci´ n no puede cambiar de o ⊤ a ⊥. Por el hip´ tesis. Para k > 0.

Entonces. (VII ) Si la puerta j es una puerta de salida. habr´ que poner la cl´ usula (yj ). C IRCUITSAT es una generalizaci´ n de C IRCUITVALUE. La reducci´ n es trivial: la funci´ n o o o de identidad I(x) = x de C IRCUITVALUE a C IRCUITSAT. las dos variables u yj y xi en R(C) tienen que tener el mismo valor. o Nuestra ultima reducci´ n de la secci´ n es de C IRCUITVALUE a C IRCUITSAT. habr´ que poner la cl´ usula (yj ). habr´ que poner la cl´ usula (¬yj ). en C NF contendr´ las tres cl´ usulas a a (¬yj ∨ yh ). (5. (5. ´ o o C IRCUITVALUE es un caso especial de C IRCUITSAT. yj ↔ ¬yh . o La expresi´ n R(C) usar´ todas las variables xi de C y incorpora una variable adicional o a yj para cada puerta de C. a a (III ) Si la puerta j es una puerta tipo ⊥.32) . Las cl´ usulas son las siguientes: a (I) Si la puerta n´ mero j es una puerta tipo variable con la variable xi . habr´ que a asegurar que yj tiene el valor ⊤ si y s´ lo si yh tiene el valor ⊥. (5. las soluciones de C IRCUITVALUE y C IRCUITSAT coinciden. Todas las entradas de C IRCUITVALUE son tambi´ n entradas validas de C IRCUITSAT . habr´ que construir una expresi´ n booleana R(C) a o en C NF tal que C es satisfactible si y sol´ si R(C) lo es. habr´ que a asegurar que yj ↔ (yh ∨ yk ).31) (VI ) Si la puerta j es una puerta tipo ∨ con las puertas de entrada h y k. (¬yj ∨ yk ) y (yj ∨ ¬yh ∨ ¬yk ). para las instancias de e a C IRCUITVALUE.5. en C NF contendr´ las dos a cl´ usulas a (yj ∨ ¬xi ) y (¬yj ∨ xi ). a a Es relativamente directa la demostraci´ n de que sea correcto. (yj ∨ ¬yk ) y (yj ∨ ¬yh ). en C NF contendr´ las tres cl´ usulas a a (¬yj ∨ yh ∨ yk ). de hecho. REDUCCIONES 63 Continuamos con los ejemplos de reducciones con una reducci´ n de C IRCUITSAT a o S AT: Dado un circuito booleano C.2. (5. habr´ que a asegurar que yj ↔ (yh ∧ yk ). yi ↔ x.30) (V) Si la puerta j es una puerta tipo ∧ con las puertas de entrada h y k. a a (IV ) Si la puerta j es una puerta tipo ¬ y su puerta de entrada es la puerta h. en o C NF contendr´ las dos cl´ usulas a a (¬yj ∨ ¬yh ) y (yj ∨ yh ). Adem´ s.29) (II ) Si la puerta j es una puerta tipo ⊤.

o sea. |x| = n. pero ı ı ı no toda la cinta. (5. por lo cual no se puede guardar sin romper a el requisito de espacio logar´tmico. ı Como las ambas m´ quinas MR (con la entrada x) y MR′ (con la entrada R(x)) operan en a espacio O (log n). |x| = n. contando los s´mbolos de salida y parando al generar la posici´ n i de la salida. Construyamos una m´ quina Turing M a ′ para la composici´ n R · R .34) Lo que hay que mostrar es que es posible computar R′ (R(x)) en espacio O (log n). Si R es una reducci´ n del lenguaje L a lenguaje L′ y R′ es una reducci´ n o o ′ ′′ ′ ′′ del lenguaje L al lenguaje L . ı Cuando MR′ mueve a la derecha. o o R EACHABILITY ≤L C IRCUITVALUE ≤L C IRCUITSAT ≤L S AT . a Inicialmente i = 1 y por definici´ n de las m´ quinas Turing. ı e 5. o Si MR′ mueve a la izquierda. Guardando solamente el ´ndice i en binaria y el s´mbolo actualmente le´do. Por ejemplo. o De inter´ s especial son los problemas que son elementos maximales de tal orden de come plejidad. aplica que o x ∈ L ⇔ R(x) ∈ L′ ⇔ R′ (R(x)) ∈ L′′ . La cinta de entrada de MR′ es la cinta de salida del cursor i en la cinta de entrada de MR de MR . el primer s´mbolo escaneado o a ı es ⊲.64 Reducciones compuestas ´ CAPITULO 5. CLASES DE COMPLEJIDAD En la secci´ n anterior. (5.33) Una pregunta interesante es si se puede componer reducciones. Necesitamos cuidar no guardar el resultado intermedio de o MR porque eso puede ser m´ s largo que log n. Problemas completos La relaci´ n transitiva y reflexiva de reducciones ≤L nos ofrece un orden de problemas. establecemos una sucesi´ n de reducciones. si la relaci´ n ≤L es o transitiva. a Tomamos las dos m´ quinas Turing MR y MR′ . ı o El espacio necesario para tal seguimiento de la salida de MR con la entrada x es O (log n): estamos guardando un ´ndice binario de una cadena del largo |R(x)| = O nk . M corre a MR para generar el s´mbolo de salida de esa posici´ n y incrementa i := i + 1.3. as´ tambi´ n M necesita O (log n) espacio.13. ı o La m´ quina Turing M necesita simular a MR′ con la entrada R(x) por recordar la posici´ n a ′ . o o Por definici´ n de reducciones. M asigna i := i − 1 y vuelve a correr a MR con x desde el comienzo. podemos asegurar usar no m´ s que O (log n) espacio. ¿aplica que R EACHABILITY ≤L S AT? Teorema 5. . la composici´ n R · R es una reducci´ n de L a L .

Las clases P. e o Sea M = (K. Para continuar. El lenguaje L es C-completo si para todo L′ ∈ C aplica que L′ ≤L L. tambi´ n L ∈ C′ . El m´ todo de hacer o e esto se llama el m´ todo de tabla. NL. ı (5. Entonces.35) Sea C una clase de complejidad computacional y L ∈ C un lenguaje. La demostraci´ n es f´ cil: sea M una m´ quina Turing que acepta L. La computaci´ n que ejecuta M con la entrada x se puede representar como o si fuera una tabla de c´ mputo T de tama˜ o |x|k × |x|k . Un lenguaje L es C-duro (tambi´ n se dice: C-dif´cil) si se puede reducir cada lenguaje e ı ′ L ∈ C a L. Teorema 5. la implicaci´ n ser´a que P = NP. H ALTING es completo para lenguajes recursivamente numerables. coNP. Lo a a a m´ s dif´cil es establecer el primero: hay que capturar la esencia del modo de c´ mputo y a ı o la cota del recurso de la clase en cuesti´ n en la forma de un problema. x ∈ H. a Todas las clases principales como P. e a o con el valor de k elegido tal que se garantiza esto para cualquier |x| ≥ 2.5. aplica C′ = C si C′ est´ cerrada bajo reducciones. ı . si uno pudiera mostrar que un problema NPa completo pertenece a la clase P. δ. s) una m´ quina Turing de tiempo polinomial que computa un lenguaje a L basado en Σ.14. habr´ que establecer cu´ les problemas son completos para cu´ les clases. Una clase a ′ C est´ cerrada bajo reducciones si aplica que siempre cuando L es reducible a L′ y a ′ L ∈ C′ . NP. PROBLEMAS COMPLETOS 65 En palabras: un lenguaje L es completo en su clase C si cada otro lenguaje L′ ∈ C se puede recudir a L. con cada posici´ n que o falta un s´mbolo llenada con un ⊔. En esta secci´ n lo aplicamos para las clases P y NP.j tiene ´ el s´mbolo contenido en la posici´ n j de la cinta de M despu´ s de i pasos de computaci´ n ı o e o de M. PSPACE y EXP todas e est´ n cerradas bajo reducciones. donde |x|k es la cota de uso de o n tiempo de M. pero no se sabe si es v´ lido que L ∈ C. hay que hacer algunas suposiciones sobre M: M cuenta con una sola cinta. NP. a e Si resulta que L ∈ C′ . L. o ı Entonces.3. Se utiliza los problemas completos para caracterizar una clase de complejidad. M para con toda entrada x despu´ s de un m´ ximo de |x|k − 2 pasos de c´ mputo. Las cadenas en la tabla todos tienen el mismo largo |x|k . 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´ s d´ bil” C′ ⊆ C. Entonces o a a x ∈ L ⇔ M(x) = “s´” ⇔ ML (x) =ր⇔ ML . Cada columna es una cadena del mismo largo tal que el elemento Ti. Cada fila de la tabla representa un paso de computaci´ n: desde el primer paso 0 hasta el o k−1 ultimo |x| . Σ. PSPACE y NLtienen problemas completos naturales.

nunca ⊲q . ´ Ti−1. La idea es codificar este relaci´ n de las celdas de la tabla en un circuito o booleano. existe una reducci´ n R de L a C IRCUITVALUE . CLASES DE COMPLEJIDAD Si en el paso i. sino en el primer s´mbolo de la entrada.j a priori.j−i . Ti. Cuando i = 0 o j = 0 o j = |x|k − 1. o e e Tambi´ n resulta que computaci´ n no determinista en tiempo polinomial se puede capturar e o en el problema de satisfiabilidad de circuitos: Teorema 5. est´ se logra ı a por acoplar dos movimientos si M visitar´a ese ⊲. C IRCUITVALUE es P-completo. “no” para alg´ n i < |x|k −1 ı u y j. todas las filas despu´ s ser´ n id´ nticas. ı Si M para antes de llegar a |x|k pasos. Primero se codifica T en representaci´ n binaria. e a e Se dice que la tabla T es aceptante si y s´ lo si T|x|k −1. o Para la entrada x.j y Ti−1.j ∈ “s´”. Este circuito se copia (|x|k −1)×(|x|k −2) veces. el elemento Ti. Habr´ que establecer que sea correcta la reducci´ n y que la construcci´ n de a o o R(x) es posible en espacio logar´tmico. Ya sabemos que C IRCUITVALUE ∈ P.j = “s´” para alg´ n j. ı El primer s´mbolo de cada fila es siempre ⊲. conocemos el valor de Ti. Como consecuencias del resultado. sino σq . Despu´ s se utiliza el hecho o e que cada funci´ n booleana se puede representar como un circuito booleano. el resultado R(x) ser´ un circuito libre de variables tal que x ∈ L si y a s´ lo si el valor de R(x) es ⊤.66 ´ CAPITULO 5. o Considera una m´ quina Turing M que decide a L en tiempo nk y su tabla de computaci´ n a o T . o o Ahora utilizamos el m´ todo para establecer que cualquier computaci´ n determinista de e o tiempo polinomial se puede capturar en el problema de determinaci´ n del valor de un o circuito booleano: Teorema 5.16. Todos los otros elementos de T dependen unicamente de los valores de las posiciones Ti−1. basta con demostrar que para todo lenguaje L ∈ P. o sea. Se llega a un o circuito C que depende de M y no de x. se puede establecer que el problema de valores de circuitos mon´ tonos es tambi´ n P-completo y tambi´ n que H ORNSAT es P-completo.j no es σ. por los ı cuales el elemento es “s´” o “no” respectivamente. .15. Adem´ s. ı Al comienzo el cursor no est´ en ⊲. salvo que para los estados “s´” y “no”. el estado de M es q y el cursor est´ escaneando el s´mbolo j que es a ı σ. a un circuito por cada entrada de la tabla T que no est´ en la primera fila o las columnas extremas.j+1. Para establecer que sea completo. a ı El cursor nunca visita al s´mbolo ⊲ extremo al la izquierda de la cinta. Los detalles de la demostraci´ n est´ n en el libro ı o a de texto de Papadimitriou [15]. M o ı u a acepta a su entrada x si y s´ lo si la tabla de computaci´ n de M con x es aceptante. C IRCUITSAT es NP-completo.

Ti−1.j+1 y ci−1 o en representaci´ n binaria. Dise˜ amos una n reducci´ n R que para cada cadena x construye un circuito booleano R(x) tal que x ∈ L o si y s´ lo si R(x) es satisfactible. c). se puede reducir tama o bi´ n de L a S AT por la composici´ n de reducciones.36) Si fijamos la secuencia elegida c. la computaci´ n hecha por M es efectivamente determio nista. Como C tiene tama˜ o constante que no depende de |x|. una entrada x y una secuencia fija de elecciones c. y adicionalmente de la elecci´ n ci−1 hecha en el paso anterior. o El circuito R(x) ser´ como en el caso determinista. Entonces. Sea L un lenguaje en la clase NP. En la codificaci´ n binaria de T (M. Si en realidad hubieran o m´ s. x. Si a n ´ en realidad hubiera un paso determinista.j−1. 5. la primera fila y las columnas extremas resulo tan fijas como en el caso anterior. Adem´ s. Sea M una m´ quina Turing no determinista con una sola o a k cinta que decide a L en tiempo n . Adem´ s. Problemas NP-completos La clase NP contiene numerosos problemas de importancia p´ ctica. T´picamente el proa ı blema tiene que ver con la construcci´ n o existencia de un objeto matem´ tico que sao a tisface ciertas especificaciones. tenemos que e o S AT es NP-completo. como C IRCUITSAT tiene una reducci´ n a S AT. salvo que la parte para c que ser´ ina a corporada.j dado como entradas los cuatro datos Ti−1. es simple: sea L ∈ o NP.3. c1 .17. Empezamos por estandardizar las selecciones hechas por M: se asume que M tiene exactamente dos alternativas δ1 . (5. .1. La versi´ n de la construcci´ n misma es un problema de o o . Entonces. el circuito R(x) puede n ser computada en espacio logar´tmico. Como S AT ∈ NP. . ahora que conocemos el resultado de C IRCUITSAT. x.j+1 . o Entonces hemos llegado a probar es resultado. Una consecuencia de mucha importancia es el teorema de Cook: Teorema 5. Definimos ahora la tabla de computaci´ n T (M. c|x|k −2 ) ∈ {0.j−1. 1}|x| k −1 . existe una reducci´ n de L a C IRCUITSAT. .5.j y Ti−1. se puede a˜ adir estados adicionales para dividir las opciones en un arbol binario. (Teorema de Cook) S AT es NP-completo.3. . Ti−1. se asigna δ1 = δ2 . c) que corresponde a la m´ quina o a Turing M. una secuencia c de elecciones no deterministas se puede representar en forma binaria donde δ1 = 0 y δ2 = 1: c = (c0 . el circuito R(x) es satisfactible si y s´ lo ı a o si existe una secuencia de elecciones c tal que la tabla de computaci´ n es aceptante si y o s´ lo si x ∈ L.j . PROBLEMAS COMPLETOS 67 Ya sabemos que C IRCUITSAT ∈ NP. Ti−1. Los otros elementos Ti.j dependen de los elementos Ti−1. δ2 ∈ ∆ en cada paso de computaci´ n. La demostraci´ n. o Existe un circuito booleano C con 3m + 1 entradas y m salidas que compute la codificaci´ n binaria de Ti. como C IRCUITSAT es NPo completo.

a o (II ) Buscar por problemas que ya tengan demostraci´ n de ser NP-completos que o podr´an servir para la reducci´ n necesaria. porque este implicar´a que el problema es entre los menos proe ı bables de pertenecer en la clase P. muchos problemas resultan NP-completos. que es la versi´ n que pertenece a la clase NP. aplicar´a NP = P. la cono ı sistencia y restricciones. la pregunta es si existe por lo o o menos una configuraci´ n que cumpla con los requisitos del problema. (IV ) Probar que con la entrada R(x). Una t´ cnica b´ sica es estudiar el cone a junto de instancias producidas por una reducci´ n utilizada en la demostraci´ n de ser NPo o completo para capturar otro problema NP-completo. En la versi´ n o o o o de decisi´ n. CLASES DE COMPLEJIDAD optimizaci´ n. En muchos casos es importante identificar cu´ les requisitos exactamente causan que el a problema resulte NP-completo versus polinomial. a Se puede decir que la mayor´a de los problemas interesantes de computaci´ n en el munı o do real pertenecen a la clase NP. Lo dif´cil es c´ mo expresar la naturaleza del problema P en ı o t´ rminos de Q. o quiz´ s a ninguna. o . si la soluci´ n de P es “s´” que este implica que la o ı soluci´ n de Q con R(x) tambi´ n es “s´”. ı Si se sube a un nivel suficientemente general. ı o (III ) Construir un reducci´ n R de un problema P conocido y NP-completo al problema o Q.68 ´ CAPITULO 5. normalmente se a e dirige el esfuerzo de investigaci´ n a o estudiar casos especiales. La aplicaci´ n “cotidiana” de la teor´a de complejidad o ı computacional es el estudio sobre las clases a cuales un dado problema pertenece: solamente a NP o tambi´ n a P. o e ı (V) Probar que con la entrada x. Nota que si alg´ n problema NP-completo perteneciera u a NP. El proceso de dise˜ ar una demostraci´ n de NP-completitud para un problema Q es en n o general el siguiente: (I) Jugar con instancias peque˜ as de Q para desarrollar unos “gadgets” u otros compon nentes b´ sicos para usar en la demostraci´ n. e a La herramienta b´ sica para esta tarea es construir una demostraci´ n que el problema de a o inter´ s sea NP-completo. o e ı En la construcci´ n t´picamente se busca por representar las elecciones hechas. El libro de Garey o y Johnson [7] es la referencia cl´ sica de los problemas NP-completos. donde la mejor construcci´ n posible es la soluci´ n deseada. si la soluci´ n de Q es “s´” que este implica que la o ı soluci´ n de P con x tambi´ n es siempre “s´”. e Cuando ya est´ establecido que un problema de inter´ s es NP-completo. algoritmos de aproximaci´ n.

tenemos o o L = {x | (x. y) ∈ R para alg´ n y} . Como N decide a L. . Esto implica que existe una m´ quina Turing no determinista N que decide a L en a tiempo |x|k para alg´ n valor de k. tambi´ n llamado un testigo polinomial.38) Definimos la relaci´ n R en la manera siguiente: (x. (x. u Para entender porqu´ est´ definici´ n es v´ lida. Una relaci´ n R est´ polinomialmente balanceada si o a Sea L ⊆ Σ∗ un lenguaje.5. u (5. y) ∈ R. algoritmos exponenciales para instancias peque˜ as o n m´ todos heur´sticos de b´ squeda local. el subgrafo tiene tama˜ o no mayor al tama˜ o del grafo n n de entrada. el objeto mismo sirve como un certificado — t´picamente el objeto tiene un tama˜ o no muy grande en comparaci´ n con la entrada. y) ∈ R si y s´ lo si y es una codifio o caci´ n de una computaci´ n de N que acepta la entrada x. como cada computaci´ n de N tiene cota polinomial. (5.39) Habr´ que razonar la equivalencia l´ gica tambi´ n en la otra direcci´ n: suponga que L ∈ a o e o NP. y) ∈ R → (∃k ≥ 1 tal que |y| ≤ |x|k ).3. (5. ı Un problema A pertenece a la clase NP si cada instancia con la respuesta “s´” del probleı ma A tiene por lo menos un certificado conciso y. e ı u 69 5. y) ∈ R} en tiempo a polinomial.37) Aplica que L ∈ NP si y s´ lo si existe una polinomialmente balanceada o relaci´ n R que se puede decidir en tiempo polinomial tal que o L = {x ∈ Σ∗ | (x. suponga que existe tal relaci´ n R.3. Caracterizaci´ n por relaciones: certificados o Una relaci´ n R ⊆ Σ∗ × Σ∗ se puede decidir en tiempo polinomial si y s´ lo si existe o o una m´ quina Turing determinista que decide el lenguaje {x. como se puede verificar en tiempo polinomial si o no y es una codificaci´ n de una computaci´ n que acepta a x en N. si se trata n o se encontrar un cierto subgrafo. y adem´ s se puede deo a cidir R en tiempo polinomial. Los requisitos tambi´ n suelen suficientemente simples para poder verificar en e tiempo polinomial que un dado objeto realmente corresponde a los criterios definidos. PROBLEMAS COMPLETOS an´ lisis asint´ tica del caso promedio. y | (x. Esta R est´ polinomialmente o o a balanceada. Por ejemplo. a o algoritmos aleatorizados. u exactamente como quer´amos. y) ∈ R para alg´ n y ∈ Σ∗ } .2. e En los problemas t´picos que tratan de la existencia de un objeto matem´ tico que cumple ı a ı con ciertos criterios. Ene a o a o tonces L est´ decidida por una m´ quina Turing no determinista que con la entrada x a a “adivina” un valor y con largo m´ ximo |x|k y utiliza la m´ quina para R para decidir en a a tiempo polinomial si aplica (x.

e ¯ ¯ Como NL est´ cerrada bajo el complemento. Ya hemos mostrado que C IRCUITSAT es NP-completo y adem´ s una reducci´ n de C IRCUITa o SAT a S AT est´ construida. . a˜ ademos las cl´ usulas siguientes en φ: n a (¬x1 ∨ x2 ). La existencia del camino de “no satisfiabilidad” del resultado anterior puede ser La demostraci´ n resulta del hecho que φ no es satisfactible si y s´ lo si existe una variable o o x tal que existen caminos de x a x y viceversa en G(φ). si {xi .19. Considera una variable x que aparece k > 3 veces en φ. o A veces es posible aplicar transformaciones que eliminen algunas propiedades de un lenguaje NP-completo tal que el hecho que est´ NP-completo no est´ afectado. a a .40) Denota por φ′ la expresi´ n que resulta cuando cada ocurrencia extra de una variable en φ o ha sido procesada de esta manera. .70 ´ CAPITULO 5. 3S AT es NP-completo a´ n cuando solamente se permite que cada variable u aparezca por m´ ximo tres veces en la expresi´ n φ ∈ 3S AT y adem´ s que cada literal a o a aparezca por m´ ximo dos veces en φ. Es decir. etc´ tera. Entonces. Para asegurar que las variables nuevas tengan e todas el mismo valor. (¬xk ∨ x1 ). o Para problemas kS AT. Problemas kS AT El lenguaje kS AT. (5. a Teorema 5. Resulta que φ′ ya cumple con las propiedades deseadas y que φ es satisfactible si y s´ lo si φ es satisfactible. . Entonces.4. xi } ∈ E. la frontera entre problemas polinomiales y problemas NPcompletos est´ entre 2S ATy 3S AT. es el conjunto de expresiones booleanas φ ∈ S AT (en C NF) en las cuales cada cl´ usula contiene exactamente k literales. Las variables x de φ y sus negaciones x forman el conjunto de v´ rtices de G(φ). Claramente 3S AT ∈ NP por ser un caso especial de S AT y sabemos que S AT ∈ NP. . . podemos mostrar que 2S AT Complement ∈ a NL. CLASES DE COMPLEJIDAD 5. Para cada instancia φ de 2S AT. .4. (¬x2 ∨ x3 ).1. Adem´ s. o a ¯ ¯ tambi´ n {xj . Ahora vamos a considerar las cl´ usulas producidas en esa a a reducci´ n: ¡todas tienen tres literales o menos! Como las cl´ usulas son disyunciones. la segunda por x2 .18. a La demostraci´ n es una reducci´ n donde cada instancia φ ∈ 3S ATest´ transformada a o o a eliminar las propiedades no permitidas. xk y reemplazamos la primera ocurrencia de x en φ por x1 . existe un algoritmo a polinomial basado en el problema R EACHABILITY en un grafo G(φ). poo a demos “aumentar” cada cl´ usula de uno o dos literales a tener tres simplemente por copiar a literales. Introducimos variables nuevas x1 . donde k ≥ 1 es un entero. . xj } ∈ E. 3S AT es NP-completo. resulta que 2S AT∈ NL (habr´ que recordar que NL ⊆ P). Complejidad de algunas variaciones de S AT 5. sabemos que 2S AT es ¯ polinomial. tenemos una reducci´ n de C IRCUITSAT a 3S AT. Una arista conecta dos v´ rti¯ e e ces xi y xj si y s´ lo si existe una cl´ usula xi ∨ xj o xj ∨ xi en φ. . a a Teorema 5.

tambi´ n la asignaci´ n complementaria T lo satisface por la e o condici´ n NAESAT: en una de las dos asignaciones asigna ⊥ al literal z. Entonces.4. NAESAT es NP-completo. (5. Ya sabemos que C IRCUITSAT es NP-completo y vimos una reducci´ n R de C IRCUITo SAT a S AT: para todo circuito C. (¬g ∨ h′ ∨ z). El problema M AX 2S AT es una generalizaci´ n de 2S AT: o Problema 5. En el caso de ∧.5. Teorema 5. por lo cual contienen z y T (z) = ⊥. por lo cual alg´ n literal es necesariamente asignado el valor ⊤ en a u T para cada cl´ usula. est´ n satisfechas por T . Entonces extendemos T para Rz (C) por asignar T (z) = ⊥.2. 5. por la reducci´ n a a o o de C IRCUITSAT a S AT. todas las literales tengan el o a mismo valor ⊤ o ⊥. Sin embargo. ¬ o variable ten´a a ı originalmente dos literales o menos.17: M AX 2S AT Dado: Pregunta: una expresi´ n booleana φ en C NF con no m´ s que dos liteo a rales por cl´ usula y un entero k a ¿existe una asignaciones de valores T que satisfecha por lo menos k cl´ usulas de φ? a Se puede probar que M AX 2S AT es NP-completo. ⊥. COMPLEJIDAD DE ALGUNAS VARIACIONES DE SAT 71 verificada en espacio logar´tmico por computaci´ n no determinista por “adivinar” una ı o variable x y el camino entre x y ¬x.41) . tenemos que C ∈ C IRCUITSAT si y s´ lo si R(C) ∈S AT. (g ∨ ¬h ∨ ¬h′ ). las cl´ usulas ´ o a tienen la forma (¬g ∨ h ∨ z). S AT de “no todos iguales” (NAESAT) El lenguaje NAESAT⊂ 3S AT contiene las expresiones booleanas φ para las cuales existe una asignaci´ n de valores T tal que en ninguna cl´ usula de φ. existe una asignaci´ n de valores T que satisface o o a Rz (C). Cada cl´ usula que corresponde a una puerta tipo ⊤. o En la direcci´ n (⇐). En la direcci´ n (⇒). Vamos a mosn trar que para la expresi´ n booleana Rz (C) en C NF de tipo 3S AT aplica que Rz (C) ∈ o NAESAT⇔ C ∈C IRCUITSAT. o Primero aumentamos todas las clausulas de la reducci´ n a contener exactamente tres lio terales por a˜ adir uno o dos duplicados de un literal z donde hace falta. En ninguna cl´ usula a de Rz (C) es permitido que todos los literales tengan el valor ⊤ (y tampoco que todos tengan el valor ⊥).4. por lo cual todas o las cl´ usulas originales est´ n satisfechas en esta asignaci´ n. si C es satisfactible. a Los unicos casos de preocupaci´ n son puertas de tipo ∧ y ∨.20. si una asignaci´ n de valores T satisface a la expresi´ n original R(C) o o o ¯ en el sentido de NAESAT. existe una asignaci´ n que satisface el circuito.

bi y ci las tres literales de una cl´ usula Ci . u e Vamos a restringir la clase de grafos que permitimos: solamente consideramos grafos los v´ rtices de cuales se puede dividir en tri´ ngulos disjuntos. Complejidad de problemas de grafos En esta secci´ n. hay que conectar las cl´ usulas que comparten variables. se puede construir un grafo que corresponde a φ = (x1 ∨ x2 ∨ x3 ) ∧ (¬x1 ∨ = x2 ∨ ¬x3 ) ∧ (¬x1 ∨ x2 ∨ x3 ). Como φ tiene k cl´ usulas y |i| = k. Si el grafo de entrada contiene un tri´ ngulo. solamente uno de los tres a e participantes del tri´ ngulo puede ser considerado para formar un conjunto independiente. no todas las tres pueden tener el valor ⊤ porque as´ no es posible satisfacer a las dos primeras. est´ n conectadas por una arista si y s´ lo si los literales a cuales a a o corresponden los v´ rtices vi y vj son de la misma variable. a habr´ n v´ rtices vai . CLASES DE COMPLEJIDAD donde las primeras dos tienen z con su valor ⊥. (5.5. tenemos definida nuestra reducci´ n. vci} y a e a {vbi . necesitamos un “gadget”: el tri´ ngulo. {vai . vbi }. cada v´ rtice del grafo e a e solamente puede tomar parte en un tri´ ngulo (por lo de disjunto) y cada v´ rtice tiene que a e ser parte de un tri´ ngulo (por lo de haber sido dividido). ning´ n par de v´ rtices puede compartir una arista. Es decir. Adem´ s. a o Suponga que tal conjunto I existe.42) Con el grafo G as´ construido y la cota k que es la cardinalidad del conjunto independiente ı en el problema I NDEPENDENT S ET siendo k = t. a Por construcci´ n. generamos un tri´ ngulo a a en el grafo G = R(φ).72 ´ CAPITULO 5. a e a Adem´ s. En la tercera. El caso de ∨ es ı parecido. Como un ejemplo. a porque en un conjunto independiente. por construcci´ n I a o necesariamente contiene un v´ rtice de cada uno de los k tri´ ngulos.21. una camarilla de tres v´ rtices. o Habr´ que mostrar que es correcta la reducci´ n: existe un conjunto independiente I ⊆ V a o en el grafo G = R(φ) tal que |I| = k y φ tiene k cl´ usulas si y s´ lo si φ es satisfactible. Sean ai . I NDEPENDENT S ET es NP-completo. Un v´ rtice vi que corresa a e ponde a un literal de la cl´ usula Ci y otro v´ rtice vj que corresponde a un literal de la a e cl´ usula Cj . consideramos solamente grafos no dirigidos. donde i = j. pero el literal es positivo en e Ci y negativo en Cj . Entonces. vci} que forman el tri´ ngulo de los tres v´ rtices de la cl´ usula Ci . un conjunto independiente de cardinalidad t existe a solamente si las otras aristas del grafo permiten elegir un v´ rtice de cada tri´ ngulo sin que e a tengan aristas en com´ n los v´ rtices elegidos. Denotamos el n´ mero de tales a u tri´ ngulos por t. Nuestra reducci´ n R ser´ de 3S AT a I NDE u e o a PENDENT S ET: para cada cl´ usula de una instancia φ de 3S AT. vbi y vci en el grafo G y adem´ s las tres aristas {vai . obviamente en ese tipo de grafo ning´ n conjunto independiente puede o u tener cardinalidad mayor a t. 5. a Para demostrar el teorema. es decir. o Teorema 5. El conjunto I no puee a de contener ning´ n par de v´ rtices que corresponda una ocurrencia positiva de un variable u e .

si w. v ∈ E. Cada par de literales contradictorios est´ conectado en G a por una arista. y entonces |I| = k si φ tiene k cl´ usulas. w) = c(v. w) > 0.43) . w). utilizamos el mismo truco: si φ es satisfactible.5.19. w) < c(v. w incluidas ser´ n tales que si se viaja en la direcci´ n original. podemos hacer esta construcci´ n solamente suponiendo que cada lio teral ocurre por m´ ximo dos veces. identificamos cuales literales tienen el valor ⊤ en T . donde el flujo por a cada arista es cero — no rompe con ninguna restricci´ n. como I o ı ´ contiene un v´ rtice de cada tri´ ngulo. 5. ´ Para aumentar el flujo.1. a a a por construcci´ n. el grafo que resulta tiene grado a m´ ximo cuatro: a Teorema 5. los v´ rtices as´ elegidos no est´ n conectados por ninguna arista. y cada tri´ ngulo es una cl´ usula. w). f (v.23. Adem´ s. Elegimos de cada cl´ usula un literal con el valor ⊤. podemos elegir el flujo cero. dada la asignaci´ n T o o que la satisface. a Tambi´ n aplica que I NDEPENDENT S ET es NP-completo para grafos planos. C LIQUE y V ERTEX C OVER son NP-completos. C LIQUE y V ERTEX C OVER. aplica que a o f (v. llegamos a reducciones triviales que demostraci´ nn lo siguiente: o Teorema 5. I NDEPENDENT S ET es NP-completo para grafos de grado m´ ximo cuatro. Son uno por cl´ usula. o Por las conexiones conocidas entre I NDEPENDENT S ET. si v. Definimos una funci´ n auxiliar o δ(v. El problema de flujo m´ ximo a Dado un grafo dirigido con capacidades en las aristas y un flujo no-´ ptimo. Los v´ rtices que corresponden a estos literales forman a e el conjunto I.5. Entonces. porque o e ı a solamente elegimos uno por tri´ ngulo y las aristas fuera de los tri´ ngulos est´ n entre a a a literales contradictorios. Este nos ofrece un algoritmo para descubrir el flujo m´ ximo. ¡I define una asignaci´ n o de valores T ! Si un v´ rtice v pertenece a I y v corresponde a una ocurrencia positiva de la e variable x. o aunque no optimo. COMPLEJIDAD DE PROBLEMAS DE GRAFOS 73 x y una ocurrencia negativa ¬x de la misma variable. y entonces la asignaci´ n T as´ definida es consistente. Por ultimo. porque necesariamente T (x) = ⊤ o T (¬x) = ⊥ que implica que T (x) = ⊤ para la variable x el v´ rtice de cual est´ incluido en el conjunto e a independiente I. pero si se viaja en contra. cada cl´ usula tiene e a a a a exactamente un literal con el valor ⊤. por lo cual es un flujo factible. u o Las aristas v. w) − f (v. f (v. Si el v´ rtice v ∈ I corresponde a una ocurrencia negae tiva ¬x. aplica que T (x) = ⊥. aplica que T (x) = ⊤. w ∈ E.5.22. Por Teorema 5. (5. pero la dee mostraci´ n se deja como ejercicio. En la otra direcci´ n. En consecuencia. Para empezar. w). se puede o aumentar el flujo que cruza un corte desde el lado de s al lado de t o alternativamente por disminuir el flujo desde el lado de t al lado de s. 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´ n su direcci´ n o en contra.

La mayor eficiencia se logra por elegir siempre el camino aumentante de largo m´nimo. w) < c(v. w) = c(v. El valor de δ es igual al capacidad de aumento m´nimo del camino. El flujo se aumenta por a˜ adir δ en todos los flujos que van ın n seg´ n la direcci´ n de las aristas en el camino C y restar δ de todos los flujos que van en u o contra en C. w) f (w. CLASES DE COMPLEJIDAD 5/5 0/4 3/6 s 3/7 3/3 2 t 5 s 4 4 3 3 2 3 4 3 3 5 t 3 Figura 5. Se podr´a resolver el ı ı . y sea δ = m´ C δ(v. w} ∈ E.1. v) si {v. w} ∈ E | (f (v. Por la manera en que elegimos a δ.74 2/4 5/5 3/7 3/3 ´ CAPITULO 5. v} ∈ E. ver la figura 5. w) − f (v. el flujo es maximal. no rompemos ninguna restricci´ n. w} ∈ Ef se define como c′ (v. Cuando ya no existe camino aumentante ninguno. Este procedimiento se itera hasta que ya no existan caminos aumentantes. w)) ∨ (f (w. Ef ) del grafo G = (V. Cada camino simple entre s y t en el grafo residual Gf es un camino aumentante de G.1: En ejemplo de un grafo con flujo y su grafo residual. (5. O (nm2 ) = O (n5 ). si {w.45) Para un ejemplo de un grafo residual. ni de o capacidades ni de balance. La eficiencia del m´ todo presentado depende de c´ mo se construye los caminos aumene o tantes. el algoritmo que resulta es polinomial. w). o Primero construyamos un grafo residual que captura las posibilidades de mejoramiento que tenemos. Es posible que haı yan m´ s de un camino de largo m´nimo — aplic´ ndolos todos al mismo paso resulta en a ı a un algoritmo de complejidad asint´ tica O (n3 ). (5.44) La capacidad de aumento de la arista {v. El grafo residual Gf = (V. E) con respeto a un flujo f tiene {v. v) > 0) .

5.46) c′ (u. Ahora actualizamos las capacidades de las aristas afectadas y memorizamos el flujo generado y el camino que toma. Despu´ s “retiramos” flujo ı e a v de sus aristas entrantes por construir caminos desde s a v hasta que se satisface la demanda de flujo que sale de v a t.5. La complejidad asint´ tica de la a o construcci´ n de G′f es O (m).w}∈Gf Primero sacamos de G′f todos los v´ rtices con flujo posible cero y cada arista adyacente a e estos v´ rtices. o Sea A el conjunto de v´ rtices que en el ultimo grafo residual Gf se puede alcanzar desde s. Si todav´a est´ n. por construcci´ n en el grafo original G. Si s y t quedaron fuera. Cada iteraci´ n de construcci´ n de una red de capas G′f utiliza a o o caminos m´ s largos que el anterior. repetimos el proceso de elegir el m´nimo y empujar y retirar flujo. vf = m´ ın   ′ ′ {u. Entonces.v}∈Gf {v. e ´ Entonces. Para elegir los caminos aumentantes m´ s cortos en el grafo residual. COMPLEJIDAD DE PROBLEMAS DE GRAFOS 75 problema de flujo m´ ximo por empezar con el flujo cero. Solamente v´ rtices e e ′ con distancias finitas est´ n incluidas. Las a o operaciones de empujar y retirar flujo son ambas de complejidad asint´ tica O (n) y de o ejecutan en total O (n) veces. “Empujamos” e e e ı una cantidad de flujo igual al flujo posible de v desde v hac´a t. Es decir. la capacidad del corte es igual al flujo actual. a ′ Entonces construyamos una aproximaci´ n: definimos el flujo mayor en Gf como un flujo o que ya no se puede aumentar con caminos que solamente utilizan aristas que “avanzan” hac´a t. En subgrafo formado por los caminos cortos en Gf se llama la red de capas (ingl´ s: layered network) y la denotamos con G′f . Su construcci´ n es la siguiente: e o se asigna a cada v´ rtice un valor de “capa” que es su distancia desde s. el algoritmo del flujo mayor tiene complejidad asint´ tica O (n3 ). La construcci´ n de una red de capas G′f toma tiempo O (n2 ) La distancia entre s y t o est´ en el peor caso O (n). pero en el peor caso es igual en complejidad al problema original. o En el grafo G′f . cada camino de s a t tiene el mismo largo. ı Definimos como el flujo posible de un v´ rtice es el m´nimo de la suma de las capacidades e ı de las aristas que entran y de la suma de las capacidades de las aristas que salen:     c′ (v. o . utilizamos b´ squeda a u en anchura desde s. Despu´ s identificamos el v´ rtice v con flujo posible m´nimo. V \A) o desde A al otro lado tiene flujo igual a su capacidad y cada arista que va en contra sobre el corte tiene flujo cero. Computamos de nuevo los flujos posibles y eliminamos de nuevo v´ rtices con flujo posie ble cero juntos con sus aristas adyacentes. Iteramos as´. por lo cual la construcci´ n se repite O (n) veces. v). sumando los flujos generados hasta que s y t ya no est´ n ı e ′ conectados en Gf . el flujo construido es ı a ı el flujo mayor en G′f . El mejor aumento ser´a igual ı ′ al flujo m´ ximo en Gf . cada arista que cruza el corte (A. w) . iterar la construcci´ n de Gf y a o la incorporaci´ n de un camino aumentante hasta que ya no haya caminos en Gf de s a t. Una arista {v. (5. w} de Gf se incluye en Gf solamente a si el valor de capa de w es el valor de capa de v m´ s uno.

24. ¬x1 . Para comprobar que sea correcta la construcci´ n. . β y γ. . xn .76 ´ CAPITULO 5. incluimos las aristas del tri´ ngulo entre los a a v´ rtices que representan a α. Sin embargo. Adem´ s. como existen algoritmos polinomiales para el problema de flujo m´ ximo. . ¬xn donde x1 . M AX C UT es NP-completo. . El valor m´nimo de los flujos m´ ximos corresponde al corte m´nimo del grafo entero. vi tiene al m´ ximo e a a e a o 2ni aristas a otros v´ rtices adem´ s de las ni aristas a su negaci´ n. E) tal o a que G tiene capacidad de corte 5r si y s´ lo si φ es satisfactible en el sentido de NAESAT. Se supone que una variable y su negaci´ n no aparecen en la misma clausula porque as´ la cl´ usula ser´a una o ı a ı a tautolog´a. incluyemos ni copias de la arista {xi . Para cada cl´ usula α∨β ∨γ. Si cambiamos al otro lado el v´ rtice con ı a menos aristas “externas”. y soa lamente repetimos n − 1 veces su ejecuci´ n. Entonces. Para una conjunci´ n de cl´ usulas φ = C1 ∧ .18: M AX C UT Dado: Pregunta: un grafo G = (V. Entonces tenemos en total 3r u ocurrencias de variables. . . . V \ S) o con capacidad 5m o mayor. el problema del corte m´nimo pertenece a la o ı clase P. Entonces e ı e podemos asumir que caen en lados distintos del corte. Si un literal que corresponde al v´ rtice vi participa en ni cl´ usulas. . ponemos e a dos aristas entre los v´ rtices que corresponden.5. CLASES DE COMPLEJIDAD 5. ¬xi } donde ni es el n´ mero total de ocua u rrencias de los literales xi y ¬xi en φ. de hecho. . o Los v´ rtices del grafo ser´ n los literales x1 . construimos un grafo G = (V. . ı a ı Entonces. Nota que o o un grafo simple es un caso especial de multigrafos. su contribuci´ n a o o e la capacidad del corte ser´a por m´ ximo 2ni . . . xn son e a las variables de φ.2. mejor convertir cada cl´ usula a e a uno con tres literales por repetir un literal seg´ n necesidad. ∧ Cr . E) no dirigido y no ponderado y un entero k ¿existe un corte en G con capacidad igual o mayor a k? Teorema 5. Hacemos la demostraci´ n para multigrafos con una reducci´ n desde NAESAT. la contribuci´ n al tama˜ o de corte del par no puede disminuir o n (las aristas ni entre los dos v´ rtices cruzar´an el corte despu´ s del cambio). los dos v´ rtices representando a xi y ¬xi tienen en total al m´ ximo ı e 2ni aristas a v´ rtices que representan a otros literales. el problema de decisi´ n siguiente es mucho m´ s dif´cil: o a ı Problema 5. El problema de corte m´nimo ı El problema de corte m´nimo es igual al problema del flujo m´ ximo: se resuelve por fijar ı a un v´ rtice s cualquiera y despu´ s resolver el flujo m´ ximo entre s y todos los otros v´ rtie e a e ces. e Si estuvieran cada variable y su negaci´ n las dos en el mismo lado. Si la cl´ usula tiene solamente dos literales. suponga que existe un corte (S. . . .

xn y cl´ usulas C1 . contribuyen una arista por ocurrencia en φ. Como ahora cada variable y su negaci´ n est´ n el lados difeo a rentes. es decir. .27. M IN B ISECTION es NP-completo. M AX B ISECTION es NP-completo. aunque ya sabemos que M IN C UT∈ P: o e Problema 5. . habr´ que ser 2r aristas que son aristas a de los tri´ ngulos representando a las cl´ usulas cruzando el corte. La reducci´ n es de 3S AT a H AMILTON PATH: dada una expresi´ n φ en C NF con las o o variables x1 . En la otra direcci´ n es f´ cil: dada una asignaci´ n T a φ en el sentido de NAESAT. Para lograr que sea mayor o igual a 5m la capacidad del corte. . tambi´ n es NP-completo. n El problema de minimizaci´ n correspondiente. Entonces.19: M IN B ISECTION un grafo no dirigido y un entero k ¿existe una bisecci´ n con cardinalidad menor o igual a k? o Dado: Pregunta: Teorema 5. M IN C UT con el requisito de ser una o bisecci´ n. Caminos y ciclos de Hamilton Teorema 5. La demostraci´ n es una reducci´ n de M AX B ISECTION: la instancia es un grafo G = o o (V. As´ cada uno de los r e ı tri´ ngulos necesariamente contribuye dos aristas. Adem´ s.5. . H AMILTON PATH es NP-completo.3. a a . podemos o a o agrupar los v´ rtices a darnos un corte con capacidad mayor o igual a 5r. . en total 3r aristas. . La reducci´ n es de M AX C UT a M AX B ISECTION por modificar la entrada: a˜ adimos n o n v´ rtices no conectados a G. Ese grafo tiene una bisecci´ n de tama˜ o k u e o n ¯ o m´ s si y s´ lo si el grafo complemento G tiene una bisecci´ n de tama˜ o c2 − k o menos. por lo cual V \ S contiene los literales que tienen asignado el valor ⊥. E) con un n´ mero par de v´ rtices n = 2c. como por lo menos un v´ rtice a a e de cada cl´ usula pertenece en el conjunto de literales asignados a ⊤ y por lo menos un a v´ rtice de cada cl´ usula pertenece al conjunto de literales asignados a ⊥. Entonces.5. Ahora cada corte de G se puede balancear a ser una bisecci´ n e o por organizar los v´ rtices no conectados apropiadamente a los dos lados.5. COMPLEJIDAD DE PROBLEMAS DE GRAFOS 77 Sea S el conjunto de literales asignadas ⊤. la asignaci´ n e a o satisface a φ en el sentido de NAESAT. cada tri´ ngua a a lo tiene que estar separado: dos v´ rtices en un lado y uno al otro. a o o n 5. Una pregunta o a interestante es si M AX B ISECTION es m´ s f´ cil que M AX C UT? a a Teorema 5. e Antes definimos un problema de bisecci´ n m´ xima (M AX B ISECTION). Cm tal que cada cl´ usula contiene tres literales. o sea.25. el e grafo original tiene un corte (S. . V \S) de tama˜ o k o mayor si y s´ lo si el grafo modificado n o tiene un corte de tama˜ o k o mayor con |S| = |V \ S|.26. .

CLASES DE COMPLEJIDAD = Figura 5. gadgets de restricci´ n que garantizan que cada cl´ usula sea satisfecha. en el centro. el gadget de consistencia y a la derecha. o o gadgets de consistencia que verifican que todas las ocurrencias de xi tengan el mismo valor asignado y que todas las ocurrencias de ¬xi tengan el valor opuesto. Se omite las detalles de verificar que est´ funcional la o e e reducci´ n. o a Como una consecuencia. dej´ ndolas como un ejercicio. e e a n o a La idea de la construcci´ n es que un lado de un gadget de restricci´ n est´ recorrida por o el camino de Hamilton si y s´ lo si el literal a cual corresponde es falso. el ultimo v´ rtice de la n a ´ e cadena de los gadgets de elecci´ n y un v´ rtice adicional v tal que formen una camarilla o e estos 3n + 2 v´ rtices. Se necesita tres tipos de gadgets (ver figura 5.2: gadgets de elecci´ n que eligen la asignaci´ n a las variables xi . el o gadget de elecci´ n. o por lo menos un literal de cada cl´ usula es verdad porque en el otro caso todo el tri´ ngulo a a ser´ recorrido. o a Los gadgets de elecci´ n de las variables se conecta en serie.2: Los gadgets de la reducci´ n de 3S AT a H AMILTON PATH: a la izquierda. El camino empezar´ en el primer v´ rtice de la cadena de los gadgets de a a e elecci´ n y termina en el v´ rtice w. Otro v´ rtice auxiliar w est´ a˜ adido y conectado con una arista a v. o un grafo G(φ) est´ construida tal que G(φ) contiene un camino de Hamilton si y s´ lo si a o φ es satisfactible. En consecuencia. Cada cl´ usula tiene un gadget o a de restricci´ n. La reducci´ n ser´ de H AMILTON PATH a T SP D: dado un grafo G = (V. el gadget de o restricci´ n. obtenemos un resultado sobre el problema del viajante: Teorema 5. o a e hay que construir una matriz de distancias dij y decidir un presupuesto B tal que existe un ciclo de largo menor o igual a B si y s´ lo si G contiene un camino de Hamilton (nota: o . T SP D es NP-completo. Adicionalmente se a˜ ade aristas para conectar todos los tri´ ngulos.78 ´ CAPITULO 5. E) con n v´ rtices.28. Las conexiones entre los gadgets de restricci´ n y elecci´ n llevan un gadget o o o de consistencia conectando los gadgets de restricci´ n a la arista de “verdad” de xi si el o literal es positivo y a la arista de “falso” de xi si el literal es negativo.

5. Si todos los literales de alguna cl´ usula son verdad o todos falso. De cada [Ci1 . Ci3]. sino un camino). Entonces. si {i. a e . o o e Entonces ninguno de los v´ rtices de las variables puede tener el color dos. construyamos un grafo G(φ) tal que se puede colorear G(φ) con tres colores. De una conjunci´ n de cl´ usulas φ = C1 ∧ o a o a .29. este camino utiliza al m´ ximo a un par de v´ rtices con dij = 2. j} ∈ E. Para cada cl´ usula. . Ahora. Coloreo El coloreo de grafos con dos colores es f´ cil (pertenece a P). ser´ imposible a a colorear a [Ci1 . 2} si y s´ lo si existe una asignaci´ n de valores o o que satisface a φ en el sentido NAESAT. dos literales con valores opuestos ser´ n coloreados con uno y cero y el tercer v´ rtice con el color dos. .47) dij = 2. Ci2 . xi y ¬xi — el v´ rtice v participa en todos los gadgets de e a e elecci´ n. . a a e u a Verificando la reducci´ n en la direcci´ n “⇒”: supone que el v´ rtice v tenga color 2. . . 2.4. denotados {0. por lo cual utiliza por m´ ximo un elemento que no correse a ponde a una arista del grafo original G. Nota que as´ el grafo ponderado que es la instancia de a ı T SP D es completo. 3C OLORING es NP-completo. n} y asignamos e simplemente 1. pero con tres colores ya es a dif´cil: ı Teorema 5. 5. en otro caso. En la otra direcci´ n: si G contiene un camino de Hamilton. los colores se asigna viceversa. los colores satisfacen a φ en el sentido de NAESAT. xn .5. nos o queda un camino que tambi´ n existe en G y visita a cada v´ rtice. basamos el ciclo de T SP D es o ese camino y a˜ adimos una conexi´ n entre los puntos finales. Ci2 . el color de xi es uno y de ¬xi es cero. En el caso contrario. Entonces podemos “extraer” el coloreo de G(φ) de T de la manera siguiente: v tiene color dos. ∧ Cm con variables x1 . sino que uno e o cero. si existe un ciclo de largo menor o igual a n + 1. . Entonces. si quitamos esta conexi´ n del ciclo. . Ci3 ] o a e a e donde adem´ s cada Cij est´ conectado al v´ rtice del literal n´ mero j de la cl´ usula Ci . Interpretamos sus colores como una asignaci´ n de valores: uno es verdad y cero o es falso. Los gadgets para las variables son unos de elecci´ n en forma de tri´ ngulo tal que los o a v´ rtices del tri´ ngulo son v. Ci2 . por lo cual cumplimos con el presupuesto n + 1. Etiquetamos los v´ rtices V = {1. Si T (xi ) = ⊤. porque el costo del camino a es n − 1 (todos los pares son aristas en G) y la conexi´ n adicional tiene costo menor o o igual a dos. Este es exactamente un e e camino de Hamilton.5. Esta conexi´ n es costo n o o m´ ximo dos. 1. . En la direcci´ n “⇐”: supone que φ es satisfactible por una asignaci´ n T en el sentido o o NAESAT. . El presupuesto ser´ B = n + 1. ponemos tambi´ n un tri´ ngulo con los v´ rtices [Ci1 . (5. La reducci´ n ser´ de NAESAT a 3C OLORING. COMPLEJIDAD DE PROBLEMAS DE GRAFOS 79 no un ciclo. . Ci3 ].

c) en T que no comparten ning´ n componente entre cualesquiera dos triples? u Teorema 5. i) con w = 1. i + 1) = m´x{V (w. cada uno con n elementos y una relaci´ n ternaria T ⊆ A × B × C o ¿existe un conjunto de n triples (a.48) ϕ∈M Cada instancia del problema de la mochila se puede resolver en tiempo O (N · Ψ). La reducci´ n es de 3S ATy est´ presentado en el libro de texto de Papadimitriou [15]. (5. Conjuntos y numeros El problema de 3M ATCHING es el siguiente: Problema 5. Definimos variables auxiliares V (w. . .50) . Ψ y i = 1.5. 3M ATCHING es NP-completo. Algoritmos pseudo-polinomiales Tambi´ n el famoso problema de la mochila (K NAPSACK. ingl´ s: exact e cover). La o a cantidad de problemas NP-completos de conjuntos es muy grande y uno de ellos sirve para dar una reducci´ n que muestra que programaci´ n entera es NP-completo. o 5. lo que se muestra por un problema de conjuntos (cubierto exacto. i).30. La pregunta es qu´ conjunto M ⊆ Φ de art´culo deber´a uno elegir para tener un e ı ı valor total por lo menos k si tiene una mochila que solamente soporta peso hasta un cierto l´mite superior Ψ.49) ω (ϕ) ϕ∈M (5. CLASES DE COMPLEJIDAD ´ 5. . Es un problema cl´ sico de optimizaci´ n combinatoria donde la instancia es una a o lista de N diferentes art´culos ϕi ∈ Φ y cada objeto tiene una utilidad ν(ϕi ) y un peso ı ω (ϕi ). N se puede calcular a trav´ s de la ecuaci´ n recursiva siguiente: e o V (w. . Cada uno de los V (w. aunque el problema es NP-completo. B y C. mientras o o programaci´ n lineal pertenece a P. . ingl´ s: knapsack) es NPe e completo. vi+1 + V (w − wi+1 . Entonces. i) que es el valor total m´ ximo posible seleccionando algunos entre los primeros i art´culos tal que su peso total a ı es exactamente w.20: 3M ATCHING Dado: Pregunta: tres conjuntos A. . . i)} a (5.5. b. . con la restricci´ n ı o Ψ≥ se aspira maximizar la utilidad total ν(ϕ) ≥ k.6.80 ´ CAPITULO 5.

podemos calcular en tiempo constante un valor de V (w. La respuesta de la problema o de decisi´ n es “s´” unicamente en el caso que alg´ n valor V (w. Los problemas S AT. i) sea mayor o igual a k. Un problema fuertemente NP-completo no puede tener u algoritmos pseudo-polinomiales salvo que si aplica que P sea igual a NP. Entonces. Este algoritmo tiene tiempo de ejecuci´ n O (N · Ψ). ı a Tal algoritmos donde la cota de tiempo de ejecuci´ n es polinomial en los enteros de la o entrada y no sus logaritmos se llama un algoritmo pseudo-polinomial. i) = −∞ si w ≤ 0. pero K NAPSACK no lo es.7. neo cesitar´a tener un algoritmo polinomial en el tama˜ o de la instancia. T SP D y H AMILTON PATH. por ejemplo. 0) = 0 para todo w y V (w. ¿c´ mo puede ser esto un problema NP-completo? Para pertenecer a P. PROBLEMAS FUERTEMENTE NP-COMPLETOS 81 donde V (w. son fuertemente NP-completos. que es m´ s como ı n a N ·log Ψ y as´ menor que el par´ metro obtenido N ·Ψ (tomando en cuenta que Ψ = 2log Ψ ).5. 5. Problemas fuertemente NP-completos Un problema es fuertemente NP-completo si permanece NP-completo incluso en el caso que toda instancia de tama˜ o n est´ restringida a contener enteros de tama˜ o m´ ximo n a n a p(n) para alg´ n polinomial p. M AX C UT. o ı ´ u Entonces.7. . i) conociendo algunos otros y en total son NΨ elementos.

82 ´ CAPITULO 5. CLASES DE COMPLEJIDAD .

a2 . . La complejidad de identificar si un arreglo no ordenado a[] contiene u un cierto elemento x es O (n). bn ]. tenemos el a peor caso de exactamente n comparaciones. El tiempo de acceso del elemento en posici´ n ı o k en un arreglo es O (1). Arreglos sirven bien para situaciones donde el n´ mero de elementos que se necesita es u conocido y no muy variable.1. .1) 83 . o o 6. Arreglos Un arreglo es una estructura capaz de guardar en un orden fijo n elementos.Cap´tulo 6 ı Estructuras de datos Un paso t´pico en el dise˜ o de un algoritmo es la elecci´ n de una estructura de datos aproı n o piada para el problema. Los ´ndices ı de las posiciones pueden empezar de cero a[] = [a0 . se asume con los elementos guardados en un arreglo no est´ n ordenados e por ning´ n criterio. Si el tama˜ o no est´ fijo ni conocido. Por defecto. como habr´ que comprar cada elemento a[k] con x y el a algoritmo termina al encontrar igualdad. . b2 . . com´ nmente hay que n a u ajustar el tama˜ o por reservar en la memoria otro arreglo del tama˜ o deseado y copiar los n n contenidos del arreglo actual al nuevo. (6. . En esta secci´ n revisamos algunas estructuras que se utiliza en o construir algoritmos eficientes para problemas de decisi´ n y problemas de optimizaci´ n. .2) Hay que cuidar que se use las ´ndices consistentemente. (6. bn−1 . a1 . Si el elemento no est´ en el arreglo. Se refiere com´ nmente al eleı u mento con ´ndice k como a[k] en vez de ak . . . an−1 ] o alternativamente de uno b[] = [b1 .

. la iteraci´ n termina cuando la parte consiste de un s´ lo elemento. depende de si los ´ndices comienzan de cero o 2 2 uno). Para contar cu´ ntas divisiones tiene el peor caso. ´ (II ) Si a[k] > x y el arreglo est´ en orden creciente. u 2 Estamos buscando para el elemento peque˜ o x en un arreglo que no lo contiene. La parte dibujada en gris est´ rechazada en cada iteraci´ n. habr´ que buscar entre los a a elementos a[k + 1] y el ultimo elemento. habr´ que buscar entre el primer a a elemento y el elemento a[k − 1]. ´ Entonces. . . habr´ que buscar entre el primer a a elemento y el elemento a[k − 1].84 ´ CAPITULO 6. tuvimos suerte y la b´ squeda ya termin´ . Sabemos que al ultimo nivel a ´ el tama˜ o de la parte es uno. ESTRUCTURAS DE DATOS Figura 6. aj−1. llegamos ya con pura inn tuici´ n el hecho que en el peor caso habr´ log2 (n) divisiones. Si a[k] = x.1. El resto del arreglo nunca ser´ procesado. Las otras opciones son: u o (I) Si a[k] < x y el arreglo est´ en orden creciente. El n o o peor caso es que el elemento est´ en la primera o la ultima posici´ n del arreglo. si i es el primer ´ndice del area donde buscar y j es el ultimo ´ndice del ı ´ ´ ı area.1. Cada divisi´ n contiene una o a o . ai+1 . El elemento a[k] se llama el elemento pivote. repetimos el mismo procedimiento de elecci´ n de k y comparaci´ n con un arreglo ´ o o a(1) = [ai . que nos ofrece un a ahorro. (III ) Si a[k] < x y el arreglo est´ en orden decreciente. habr´ que buscar entre los elemena a tos a[k + 1] y el ultimo elemento.1: El peor caso de la b´ squeda binaria: el elemento pivote es a[k] tal que k = ⌊ n ⌋. Considerando estas observaciones. . un algoritmo mejor para encontrar a un elemento igual a x es la b´ squeda binaria: comparar x con el elemento a[k] donde u ı k = ⌊ n ⌋ (o alternativamente k = ⌈ n ⌉. De esta manera. (IV ) Si a[k] > x y el arreglo est´ en orden decreciente. si el arreglo siempre se divide en dos partes de aproximadamente el mismo tama˜ o. x < a[i] n para todo i. Busqueda binaria Si el arreglo est´ ordenado en un orden conocido. aj ]. La figura e ´ o 6. tomamos en cuenta que el tama˜ o de la a n n parte que queda para buscar tiene al m´ ximo ⌈ 2 ⌉ elementos.1 muestra un ejemplo del peor caso. a o ´ 6.

c = 0. el arreglo est´ en la orden deseada. (IV ) Si no est´ n en orden. se o hace n−1 comparaciones y en el peor caso cada uno llega a un intercambio de posiciones. (III ) Denote el ´ndice del mejor elemento por k y guarda su valor en una variable auxiliar ı t := a[k]. podemos ordenar sus elementos en el orden creciente con el siguiente procedimiento: (I) Asigna i := primer ´ndice del arreglo a[]. .6. a a o e ı (III ) Si su orden est´ correcto con respeto a la ordenaci´ n deseada. comp´ ralo con el siguiente. Entonces son 3 log2 (n) operaciones y la complejidad asint´ tica es O (log(n)). o 6. hasta llegar al final del arreglo. o Ordenaci´ n por selecci´ n (selection sort) o o Dado un arreglo de n elementos.1. El peor caso es que el orden de los elementos es exactamente lo contrario a lo deseado: por ejemplo. ı (II ) Busca entre i y el fin del arreglo el elemento menor.1. En cada iteraci´ n.2. intercambia sus valores a y incrementa a la contadora. (II ) Comenzando desde el primer elemento. repitiendo el mismo procesamiento. La complejidad asint´ tica del algoritmo es O (n2 ). con la ayuda de una variable auxiliar t. a En cada paso un elemento encuentra su lugar correcto. ARREGLOS 85 comparaci´ n de x con un a[k] y la asignaci´ n del nuevo ´ndice inferior y el nuevo ´ndice o o ı ı superior. (VII ) Si al final c = 0. Ordenaci´ n de arreglos o Algoritmo de burbuja (bubble sort) Hay varios algoritmos para ordenar los elementos de un arreglo. asigna c := 0 y comienza de nuevo. c := c + 1. por lo cu´ l el n´ mero m´ ximo de a u a iteraciones de hacer es n.2. (VI ) Si al final. necesitamos repetir el acceso al arreglo entero n veces (ve ejemplo en figura 6. (V) Avanza a comparar el segundo con el tercero. Uno de los m´ s b´ sicos a a — y menos eficientes — es el algoritmo de burbuja (ingl´ s: bubble sort): e (I) Inicia una variable contadora a cero: c := 0. d´ jalos as´. para ordenar n elementos en orden creciente a orden decreciente.

(III ) Si bℓ [iℓ ] ≥ br [ir ]. Ambos 2 2 subarreglos est´ n divididos de nuevo hasta que contengan k elementos. Entonces. a˜ adir el m´nimo de estos dos en la lista nueva C y ren ı emplazar en la variable auxiliar por leer el siguiente elemento de su lista de origen. por ejemplo uno de los dos ya presentados. En el peor caso. hay ´ n−1 n−1 1 + 2 +. la complejidad asint´ tica es O (n2 ). habr´ que siempre buscar el elemento mayor entre i a y el fin del arreglo. El arreglo est´ dividido a dos partes del mismo tama˜ o (m´ s o menos u a n a un elemento): la primera parte tiene largo ⌊ n ⌋ y la segunda tiene largo n − ⌊ n ⌋. Por ejemplo. la lista combinada se crea por leer el primer elemento de A y el primer elemento de B. si la entrada son dos listas A y B de n´ meros enteros u ordenaros del menor a mayor. asigna b[i] := bℓ [iℓ ] y despu´ s actualiza los ´ndices relacionados: e ı iℓ := iℓ + 1 y i := i + 1. pero en pr´ ctica. Al a llegar al nivel donde la lista tiene k elementos. ı o (VI ) Itera hasta que i est´ en el fin del arreglo. la a primera iteraci´ n tiene n − 1 comparaciones. o La ordenaci´ n por fusi´ n (ingl´ s: mergesort) funciona por divisiones parecidas a las de la o o e b´ squeda binaria. asigna b[i] := br [ir ] y despu´ s actualiza los ´ndices relacionados: e ı ir := ir + 1 y i := i + 1. ı Las dos subarreglos bℓ [] y br [] as´ ordenados est´ n combinados con uso de memoria auxiı a liar: se forma un arreglo b[] por elegir elementos del comienzo de los dos arreglos ordenados: (I) Asigna iℓ := 0. ahoo o a rramos varias operaciones en comparaci´ n con la ordenaci´ n por burbuja.35. o o Ordenaci´ n por fusi´ n (mergesort) o o Es una operaci´ n O (n) combinar dos listas ordenadas en una sola lista ordenada bajo o el mismo criterio. . En total. hasta que o e el ultimo solamente tiene una.86 ´ CAPITULO 6. se utiliza otro algoritmo de sortearlo. la segunda tiene n − 2. ir := 0 y i := 0 (II ) Si bℓ [iℓ ] < br [ir ]. (V) Incrementa el ´ndice de posici´ n actual: i := i + 1. En este idea se basa el algoritmo siguiente de ordenaci´ n.. Opcionalmente se podr´a fijar k = 1. cuando los valores del arreglo est´ n en orden reverso a lo deseado. k ≥ 1 ≪ n. Este algoritmo se llama ordenaci´ n por selecci´ n (ingl´ s: selection o o e sort). ESTRUCTURAS DE DATOS (IV ) Intercambia los valores de a[i] y a[k]: a[k] := a[i]. a[i] := t. etc´ tera.+ n− 2 + n− 1 = j= j=1 j=0 j= n(n − 1) 2 (6.3) por ecuaci´ n 1.. e Para ordenar en orden decreciente.

Al encontrar elementos tales antes de cruzar un ´ndice contra el otro. o Se repite el mismo procedimiento con cada uno de las dos partes. 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. copia todo lo que queda del otro arreglo al final de b[]. se intercambia los dos valores y continua ı avanzando de las mismas posiciones de los dos ´ndices. a o . Ordenaci´ n r´ pida (quicksort) o a La idea de la ordenaci´ n r´ pida es tambi´ n dividir el arreglo.3. As´ nivel por nivel ı resultan ordenadas los subarreglos. (V) Mientras todav´a quedan elementos en los dos subarreglos. se ha llegado a la ı posici´ n donde cortar el arreglo a las dos partes. todo el arreglo resulta ordenado.6. El an´ lisis de quicksort est´ presentado como un a a ejemplo del an´ lisis amortizada en secci´ n 7. repite la elecci´ n del ı o elemento menor a guardar en b[]. Esto se puede implementar con dos ´ndices ı moviendo el el arreglo. Al cruzar. Se elige un elemento pivote a[k] seg´ n alg´ n criterio (existen n u u varias opciones como elegirlo).1. ARREGLOS 87 (IV ) Cuando iℓ o ir pasa afuera de su subarreglo. mientras el ´ndice de atr´ s ı a mueve en contra buscando por el primer elemento menor al pivote. y por el procesamiento hecha ya en los niveles anteriores. uno del comienzo y otro del final.1. El ´ndice del comienzo busca ı por el primer elemento con un valor mayor o igual al pivote. pero no necesariamente en o a e partes de tama˜ o igual.

. . . 7 8 8 .2: El peor caso de ordenaci´ n con el algoritmo burbuja: los elementos est´ n al o a comienzo en orden creciente y el orden deseado es decreciente. hay una l´nea nueva. . Las a ı iteraciones est´ n separadas por l´neas horizontales. La posici´ n del proceo samiento est´ marcada con letra negrita y por cada cambio. 2 1 3 3 3 3 3 3 3 2 4 4 4 4 4 4 4 3 5 5 5 5 5 5 3 3 1 4 4 4 4 4 4 4 2 5 5 5 5 5 5 5 3 6 6 6 6 6 4 4 4 1 5 5 5 5 5 5 5 2 6 6 6 6 6 6 6 3 7 7 7 7 5 5 5 5 1 6 6 6 6 6 6 6 2 7 7 7 7 7 7 7 3 8 8 8 6 6 6 6 6 1 7 7 7 7 7 7 7 2 8 8 8 8 8 8 8 3 9 9 7 7 7 7 7 7 1 8 8 8 8 8 8 8 2 9 9 9 9 9 9 9 3 3 8 8 8 8 8 8 8 1 9 9 9 9 9 9 9 2 2 2 2 2 2 2 2 2 9 9 9 9 9 9 9 9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 8 7 9 9 9 7 6 6 6 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 9 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 Figura 6.88 ´ CAPITULO 6. ESTRUCTURAS DE DATOS 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 . 8 9 . . . a ı .

Listas Listas son estructuras un poco m´ s avanzadas que puros arreglos. pero b´ squedas y consultas de elementos ahora n a u tienen costo O (n) mientras con arreglos tenemos acceso en tiempo O (1) y tama˜ o “r´gin ı do”. Al a˜ adir un elemento nuevo v.sig. Una pila es bastante f´ cilmente implementada como una lista enlazada manteniendo un a puntero p al primer elemento. hay que ajustar los punteros tal que el puntero del siguiente v. primero se asigna v. Una lista enlazada (ingl´ s: linked list) consiste de elementos que todos contengan adem´ s e a de su dato. como t´picamente pera ı miten ajustes de su capacidad. el elemento anterior siendo u. Si uno quiere mantener el orden mientras realizando inserciones y eliminaciones. a˜ adir elementos cuesta O (1) unidades de tiempo.2. ganamos tama˜ o din´ mico. pero hay aplicaciones en las cuales su eficacia es mejor. es f´ cil agregar un elemento en la lista: crear el elemento nuevo. Su funci´ n es f´ cil de n o a 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. un puntero al elemento siguiente. donde n es el n´ mero de u elementos en la lista. para eliminar un elemento v. mientras solamente ´ n utilizando un puntero al comienzo. o Con listas. primero hay que asignar u.sig de v tenga el valor de u. hay que primero ubicar el elemento anterior al punto de operaci´ n en la lista: o para insertar un elemento nuevo v inmediatamente despu´ s del elemento u actuale mente en la lista. Su mantenimiento es un poco m´ s laborioso por tener que actualizar m´ s punteros a a por operaci´ n. LISTAS 89 6. despu´ s de que se cambia el valor de u.1.sig := v. y hacer que el puntero del siguiente del ultimo elemento actualmente en la lista apunte al elemento nuevo.6.sig y despu´ s simplemente eliminar v.2.sig := p n y despu´ s p := v. Si el orden de los elementos no est´ actia vamente mantenido. a que ya no hay referencia de la e lista. 6. Si tambi´ n se mantiene un puntero al e ultimo elemento.sig a puntar a e v. a inicializar su puntero del siguiente elemento a nulo. se necesita tiempo O (n).2. hay que mantener un puntero al primer elemento. Una lista doblemente enlazada tiene adem´ s en cada elemento un enlace al elemento ana terior. Pilas Una pila (ingl´ s: stack) es una lista especial donde todas las operaciones est´ n con el e a primer elemento de la lista: se a˜ ade al frente y remueve del frente. e . Para acceder la lis´ ta.

e pero el procesamiento se hace desde el primer elemento.2. se inserta x al comienzo de la lista. . tal que j ≤ i. . ı o el elemento x estar´ insertada en la posici´ n justo despu´ s del elemento ℓj .2. ℓn ] en orden creciente. x) que busca desde el comienzo la posici´ n i en la lista L por un o elemento ℓj ≤ x hac´a la primera posici´ n. necesitamos una subrutina insertar(L. manteniendo un puntero al comienzo de la cola y otro al final.90 ´ CAPITULO 6. Colas Una cola (ingl´ s: queue) es una estructura donde los elementos nuevos llegan al final. o ´ quitamos ℓi de la lista y llamamos la subrutina insertar(L.2. x) para volver a guardarlo. i. 6. Ordenaci´ n de listas o o o Ordenaci´ n por inserci´ n Para ordenar una lista L = [ℓ1 . ı El procedimiento de la ordenaci´ n empieza con el primer elemento de la lista y progresa o con una variable indicadora de posici´ n i hasta el ultimo elemento. . Si no se a o e encuentra un elemento as´. Al encontrar tal elemento. ℓ2 . Para cada elemento. i. ESTRUCTURAS DE DATOS 6. .3. . Tambi´ n colas est´ n f´ cilmente e a a implementadas como listas enlazadas.

Para un ejemplo. ve la figura 6. u El unico requisito es que exista un orden sobre el espacio de las claves de los elementos ´ que se maneja.3.3: Un ejemplo de un arbol binario. Otra opci´ n e e o es guardar en cada elemento un puntero al v´ rtice padre (y posiblemente del padre una e estructura de punteros a sus hijos). La figura 6. ´ 6. adaptado de Knuth ı [11].´ 6. tal como el orden alfab´ tico o orden creciente num´ rico. se u e dice que el arbol est´ lleno. En un arbol binario. o m´ s sim´ ı a ´ plemente. .4 contiene un ejemplo. ARBOLES 91 ´ 6. cada ´ u ´ v´ rtice que no es una hoja tiene al m´ ximo dos v´ rtices hijos: su hijo izquierdo y su hijo e a e derecho. ´ Arboles son estructuras muy utiles para servir como ´ndices de bases de datos. Si ning´ n v´ rtice tiene solamente un hijo. . donde el valor de a[i] es la etiqueta del v´ rtice padre del v´ rtice i.1. n se puede guardar en un arreglo a[] de n ´ e posiciones. grupos de datos que habr´ que ordenar. Arboles binarios ´ Arboles binarios son una clase de arbol en uso muy com´ n.3. Cada e e e 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. ´ a la ra´z ı hijo izquierdo hijo derecho ramo derecho de la ra´z ı Figura 6.5). ´ Su uso como ´ndices es relativamente f´ cil tambi´ n para bases de datos muy grandes. . Arboles Un arbol de n v´ rtices etiquetados 1. etc´ tera. El problema con arboles binarios es que su forma depende del orden de inserci´ n de los ´ o elementos y en el peor caso puede reducir a casi una lista (ver la figura 6. Arboles permiten realizar eficientemena te operaciones como inserciones.3.3. . eliminaciones y b´ squedas de los elementos guardados. . ı a e como diferentes ramos y partes del arbol se puede guardar en diferentes p´ ginas de la ´ a memoria f´sica de la computadora. 2.

4: Un ejemplo de c´ mo dividir un arbol de ´ndice en varias p´ ginas de memoria: o ´ ı a las l´neas agrupan juntos sub´ rboles del mismo tama˜ o.2. El orden del arbol ı e e ´ es tal que todas las hojas en el ramo del hijo izquierdo contienen claves menores que el valor del v´ rtice de ruteo y todas las hojas en el ramo del hijo derecho contienen claves e mayores o iguales que el valor del v´ rtice de ruteo mismo. o a ı La variaci´ n de arboles AVL que estudiamos ac´ guarda toda la informaci´ n en sus hojas o ´ a o y utiliza los v´ rtices “internos” para informaci´ n utilizado al realizar las operaciones del e o ´ndice. Los v´ rtices que no son hojas ahora se llaman v´ rtices de ruteo . Si no es i. ı a n Un arbol balanceado con n = 8 y profundidad tres. u se eval´ a si el valor de la hoja es i o no. Cuando la b´ squeda llega a una hoja. e Por el uso de v´ rtices de ruteo. El pseudoc´ digo de la b´ squeda est´ en el cuadro 6. ´ El peor caso de falta de balance para n = 8 tiene profundidad seis.92 ´ CAPITULO 6. ESTRUCTURAS DE DATOS Figura 6. e ´ 6. o u a El arbol est´ balanceado si el largo m´ ximo es k. ambos ´ ´ ´ con ocho v´ rtices hojas. se empieza del ra´z del arbol y progresa recursivamente al hijo izquierdo si el valor del ra´z es mayor ı ´ ı a i y al hijo derecho si el valor es menor o igual a i. los arboles que resultan son arboles llenos. el arbol no contiene la clave i en u ´ ninguna parte. Para buscar la hoja con clave i.5: Un arbol binario de peor caso versus un arbol binario de forma optima.1. Utilizamos en e ´ ´ los ejemplos enteros positivos como las claves. Arboles AVL ´ Arboles AVL (de Adel’son-Vel’skii y Landis [2]) son arboles binarios que aseguran com´ plejidad asint´ tica O (log n) para las operaciones b´ sicas de ´ndices.3. el largo m´nimo tiene que ser mayor o ´ a a ı . Figura 6.

ı D(v) = (6. ´ a Denotamos por n el numero de v´ rtices en total y por H el numero de hojas del arbol. tiempo O (d). Un arbol balanceado se puede ´ ı ´ caracterizar como un arbol con ra´z vr con A(vr ) = O (log n).izquierdo).clave ¡clave) { ubicar(clave. ARBOLES 93 Cuadro 6. si v es una hoja m´x{A(izq(t)). A(der(t))} + 1. a (6. La condici´ n de balance ´ ı o AVL es que ∀v ∈ V |A(izq(v)) − A(der(v))| ≤ 1. La altura del arbol entero es la altura de su ra´z. si v es de ruteo.derecho). tenemos H = 2n − 1 y D = log2 n.5) La altura de un ramo de un v´ rtice v. el n´ mero de hojas del arbol n es u ´ 2k ≤ n < 2k+1. La profundidad del arbol entero es simplemente m´xv D(v). definimos adem´ s la profundidad de cada ´ a v´ rtice del arbol: e ´ 0. Entonces.1: Pseudoc´ digo del procedimiento de b´ squeda en un arbol binario ordenado o u ´ con los datos en las hojas. (6. Para e ´ todo n = 2k.6) Para derivar unas cotas sobre la forma del arbol. } else { ubicar(clave. procedure ubicar(int clave. es decir.P) + 1. hay que definir la altura de un v´ rtice: o e A(v) = 1. Para formular la o e condici´ n. node actual) : leaf { if (actual es una hoja) { return leaf . en otro caso. } else { if (actual. es decir.3.4) La condici´ n que utilizamos para decidir si o no un dado arbol esta balanceado se llama o ´ la condici´ n de balance AVL [2]. (6. un sub´ rbol la ra´z de cual es v es la altura e a ı de v. tambi´ n existen otras condiciones. si v es la ra´z. (6. para cada arbol ´ ´ perfectamente balanceado de H hojas. } } } igual a k − 1. Aplica que D = A − 1.7) D(v. actual. actual. En este caso. se puede localizar una clave en tiempo O (D) = O (log2 H) = O (log2 n) .´ 6.8) . Para ubicar a una clave a profundidad d toma exactamente d pasos en el arbol.

La sustituci´ n 1 + R(k) = o o F (k) tampoco aplica desde el comienzo. la diferencia en el largo de los caminos es un constante. si k = 1 Fk = (6. Denotamos por R(a) el n´ mero de v´ rtices o u e de ruteo en un ramo con ra´z un v en altura a.94 ´ CAPITULO 6. La condici´ n de balance AVL implica que para un v´ rtice de ruteo vr con A(vr ) = a es o e necesario que o ambos de sus hijos tengan altura a − 1 o un hijo tiene altura a − 1 y el otro altura a − 2.9) La sustituci´ n que hicimos era 1 + R(k) = F (k). como F (0) = 0 < R(0) + 1 = 0 + 1 = 1 F (1) = 1 < R(1) + 1 = 1 + 1 = 2. (6. por lo cual tambi´ n para esos arboles aplica que su tiempo de acceso a cualquier e ´ clave es O (log2 n). (6.10)  Fk−1 + Fk−2.11) √ donde φ = 1+2 5 es la tasa dorada. a e Utilizamos esta relaci´ n para escribir una ecuaci´ n recursiva para llegar a una cota suo o 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´ n a − 2. Las condiciones iniciales son los siguientes: R(0) = 0 porque no hay v´ rtices de ruteo en ramos de las hojas y R(1) = 1 porque el v´ rtice de e e ruteo mismo es el unico en su ramo si sus ambos hijos son hojas. de he´ cho uno.12) . Nota que suponemos que el arbol est´ en ı ´ a balance no perfecto en esta parte: w tiene altura a − 1 mientras u tiene altura a − 2. El tama˜ o del ramo con u e n ra´z en v se puede expresar en t´ rminos de los tama˜ os de los ramos de sus hijos: el ı e n n´ mero de v´ rtices de ruteo Rv en el ramo de v es la suma del n´ mero de v´ rtices de u e u e ruteo en el ramo de su hijo izquierdo Rw con el n´ mero de v´ rtices de ruteo en el ramo u e de su hijo derecho Ru m´ s uno por el v´ rtice de ruteo v mismo. El n´ mero de v´ rtices de ruteo en el ramo de una hoja es cero. Hemos llegado a la definici´ n de la o o sucesi´ n de Fibonacci. ´ Entonces la ecuaci´ n recursiva aplica para R(k) donde k ≥ 2. donde el elemento en posici´ n k se llama el k-´ cimo n´ mero de o o e u Fibonacci:  si k = 0  0. A los n´ meros de Fibonacci aplica que u φa F (a) > √ − 1 5 (6. La ecuaci´ n recursiva es o Rv R(a) 1 + R(a) 1 + R(a) F (a) = = = = = Rw + Ru + 1 R(a − 1) + R(a − 2) + 1 1 + R(a − 1) + R(a − 2) + 1 1 + R(a − 1) + 1 + R(a − 2) F (a − 1) + F (a − 2). ESTRUCTURAS DE DATOS Para un arbol balanceado. 1. para k > 1.

´ 6. La hoja vh va a ser uno de los hijos del v´ rtice de ruteo y el e e otro hijo ser´ un v´ rtice nuevo vn creado para el elemento que est´ insertado.440 log(n + 2) − 0. 13. Un arbol a a ´ ´ est´ perfectamente balanceado si su estructura es optima con respeto al largo del camino a ´ de la ra´z a cada hoja: todas las hojas est´ n en el mismo nivel. el largo m´ ximo de ı a a logφ (R(a) + 2) = a + 2 − logφ ( 5) a ≈ 1. 2. hay que primero ubicar su posici´ n y despu´ s eli´ o e minar adem´ s de la hoja su v´ rtice de ruteo vr y mover el otro v´ rtice hijo del v´ rtice de a e e e ruteo vh a la posici´ n que ocup´ vr . es decir. Para cada arbol que cumple con la condici´ n de balance AVL. 89.440 log(R(a) + 2) − 0. 5. . . ARBOLES 95 a c b a Figura 6. . La figura 6. podemos escribir para cada k que R(k) = F (k + 2) + 1.14) √ Ya sabemos que n > R(A) porque H > 0 — siempre hay hojas si el arbol no est´ com´ a pletamente vac´o. . 987. 34. Entonces aplica que siguiente: ı Teorema 6. o o Las operaciones de insertar y eliminar claves modifican la forma del arbol.3. hijos del cual ser´ n los v´ rtices hojas de a y b. La figura 6. 3. 55. hay que crear ı un v´ rtice de ruteo vr nuevo. Esto nos da a+2 R(a) = F (a + 2) − 1 > φ√5 − 2 logφ (R(a) + 2) = logφ R(a) − 2 = a+2 φ√ 5 a+2 φ√ 5 (6.328. o e a e Sin embargo. 144.6 muestra un ı a ejemplo. La garant´a ´ ı de tiempo de acceso O (log n) est´ solamente v´ lida a arboles balanceados.328. 8. primero hay que buscar la ubicaci´ n de la clave del elemento. los valores 1 y 2 tambi´ n aparecen en la sucesi´ n de Fibonacci: e o 0.13) — ¡son F (2) y F (3)! Entonces. (6. El valor del v´ rtice a e de ruteo vr as´ creado ser´ igual al valor de su hijo derecho.31. 377. Llegando a la hoja vh donde deber´a estar la clave. El elemento a e a menor de vh y vn ser´ el hijo izquierdo y el mayor el hijo derecho. 1. 21. 233. 1. Para eliminar un elemento del arbol. A ´ o 1. ´ ı o Para insertar un elemento nuevo al arbol de ´ndice. 610.6: La inserci´ n de un elemento nuevo con la clave b tal que b < a resulta en la o creaci´ n de un v´ rtice de ruteo nuevo c.7 muestra un ejemplo.

el v´ rtice de ruteo con el e e valor a est´ eliminado. aunque no cada operaci´ n causa una falta de balance en el o arbol. ı Necesitamos operaciones para “recuperar” la forma balanceada despu´ s de inserciones y e eliminaciones de elementos.8: Cuatro rotaciones b´ sicas de arboles binarios para restablecer balance de las a ´ alturas de los ramos. tienen diferencia de altura mayor o igual a dos. la diferencia ser´ siempre o o a exactamente dos: denotamos los hijos que est´ n fuera de balance del v´ rtice t por u y v. ESTRUCTURAS DE DATOS a c b c Figura 6. es decir. Esto es solamente ı posible cuando el n´ mero de hojas es 2k para k ∈ Z+ . Las cuatro variaciones b´ sicas de rotacio´ a nes est´ n presentadas en la figura 6. en que caso el largo de todos los u caminos desde la ra´z hasta las hojas es exactamente k. a e con la notaci´ n de la figura 6.96 ´ CAPITULO 6. a t u v u A B A A t B B v u t v A B u t v Rotaci´ n simple izquierda o t u w A A B1 B1 B2 B2 A1 v u Rotaci´ n simple derecha o w t v u t v w B A1 A2 u t w v B A2 Rotaci´ n doble izquiera-derecha o Rotaci´ n doble derecha-izquierda o Figura 6.8 para los ramos: la “direcci´ n” de la diferencia juntos con o o . a La rotaci´ n adecuada est´ elegida seg´ n las alturas de los ramos que est´ n fuera de bao a u a lance. Estas operaciones se llaman rotaciones . tal camino es igual al largo m´nimo de tal camino sobre todas las hojas.7: Al eliminar una hoja con clave b. tambi´ n su padre. Si se balancea despu´ s de e cada inserci´ n y eliminaci´ n siempre y cuando es necesario.8.

u Entonces. la operaci´ n en la hoja tiempo constante O (1). En vez de la condici´ n AVL. (IV ) Si un v´ rtice es rojo. adem´ s de las rotaciones para restaurar balance. Al insertar ´ hojas nuevas.3. Un arbol rojo-negro e e ´ cumple las siguientes propiedades: (I) Cada v´ rtice tiene exactamente uno de los dos colores: rojo y negro. ı ı o Si al ejecutar una rotaci´ n. puede hacer falta recolorear a . La manera t´pica de encontrar el punto de rotaci´ n t es regresar ı o hac´a la ra´z despu´ s de haber operado con una hoja para verificar si todos los v´ rtices ı ı e e en camino todav´a cumplan con la condici´ n de balance.3. ninguna operaci´ n va a aumentar la altura de un ramo. ı (III ) Cada hoja es negro. la estructura de un v´ rtice contiene adem´ s de su clave y los punteros al padre e a y los dos hijos. Las ´ e ´ reglas para mantener orden de las claves es las mismas. Tambi´ n ofrecen tiempo de acceso e y actualizaci´ n O (log n) y se balancea por rotaciones. o  ⇒   A(A) ≥ A(B)      rotaci´ n simple a la izquierda. habr´ que continuar hac´a la ra´z porque o a ı ı otras faltas de balance pueden t´ cnicamente haber resultado. o 97 (6. y cada rotaci´ n un tiempo constante O (1). la altura de t cambia. un color. a ´ ´ 6.15) Con esas rotaciones. e (II ) La ra´z es negro.3. Arboles rojo-negro Otro tipo de arboles binarias son los arboles rojo-negro (ingl´ s: red-black tree) . o   A(u) ≥ A(v) + 2 :   ⇒  A(A) < A(w)      rotaci´ n doble izquierda-derecha. o   A(u) ≤ A(v) − 2) :   ⇒   A(B) < A(w)     rotaci´ n doble derecha-izquierda.´ 6. se o o identifica v´ rtices fuera de balance por asignar colores a los v´ rtices. e (V) Para cada v´ rtice v. no hay necesidad de continuar m´ s arriba en el arbol. o Los arboles rojo-negro se balancea con rotaciones simples (ver figura 6. o la “vuelta” hac´a la ra´z otros O (log n) pasos. La complejidad asint´ tica de ı o o buscar una hoja toma O (log n) tiempo.9. todos los caminos de v a sus descendientes contienen el mismo e n´ mero de nodos negros. pero la puede o reducir por una unidad. Aplica para los arboles rojo-negro que su altura es O (log n) y ´ que la expresi´ n exacta tiene cota superior 2 log2 (n + 1). ARBOLES propiedades de los ramos determinan cu´ l rotaci´ n ser´ implementada en v a o a   ⇒  A(A) ≥ A(B)       rotaci´ n simple a la derecha. sus ambos hijos son negros. Si no hay cambio en la altura e de t.

Tambi´ n las operaciones de eliminaci´ n necesitan e o su propia subrutina para las rotaciones y recoloreo. .4. . ESTRUCTURAS DE DATOS v Rotaci´ n a la izq. c2 . Adem´ s. a3 ]. . . o v A B C A B C Figura 6.98 ´ CAPITULO 6. aunque es un poco m´ s complicado a que el caso de inserci´ n. . [a2 . se impone cotas superiores e inferiores al n´ mero de ´ a claves que un v´ rtice puede contener: e . Todos los v´ rtices ´ e e contienen datos y el n´ mero por datos por v´ rtice puede ser mayor a uno. las k claves en orden no decreciente 3. si no es una hoja. . . un valor binario que indica si o no el v´ rtice es una hoja e 4. Cada v´ rtice contiene la informaci´ n siguiente: e o 1. d]. . k + 1 punteros a sus hijos c1 .3. Es una idea buena implementar las rotaciones ı e y los cambios de color en una sola subrutina que se invoca despu´ s de cada inserci´ n para e o manejar los cambios eficientemente. . ak . Si un v´ rtice u e e internal contiene k claves a1 . o ´ 6. bd en el ramo del hijo ci que ai ≤ bj ≤ ai+1 para cada j ∈ [1. . algunos v´ rtices en el camino desde la hoja nueva hasta la ra´z. .9: Las dos rotaciones de los arboles rojo-negro son operaciones inversas una para ´ la otra. . Arboles B ˚ Los arboles B (ingl´ s: B-tree) son aA•boles balanceados no binarios. Las posibles violaciones e ı son de dos tipos: v´ rtices de ruteo rojos que llegan a tener un hijo rojo por las rotaciones y e la ra´z siendo un v´ rtice rojo por rotaciones. a2 . Todas las hojas del arbol tienen la misma profundidad y la profundidad es exac´ u tamente la altura del arbol. su n´ mero de claves k u 2. o w w Rotaci´ n a la der. a2 ]. . ck+1 Aplica para las d claves b1 . . tiene necesariamente k + 1 hijos que contienen las claves en los intervalos [a1 . [ak−1 . . ak ]. .

´ 6.3. ARBOLES
(I) Cada v´ rtice salvo que la ra´z debe contener por lo menos t − 1 claves. e ı (II ) Cada v´ rtice puede contener al m´ ximo 2t − 1 claves. e a

99

En consecuencia, cada v´ rtice que no es hoja tiene por lo menos t hijos y al m´ ximo 2t e a hijos. Un v´ rtice es lleno si contiene el n´ mero m´ ximo permitido de claves. e u a En los arboles B aplica para la altura a del arbol que (omitimos la demostraci´ n) para ´ ´ o t ≥ 2, n+1 a ≤ logt . (6.16) 2 B´ squeda de una clave en un arbol B no diferencia mucho de la operaci´ n de b´ squeda u ´ o u en arboles binarios, el unico cambio siendo que habr´ que elegir entre varias alternativas ´ ´ a en cada v´ rtice intermedio. e Para insertar, primero buscamos la posici´ n en d´ nde insertar la clave nueva. Si el v´ rtice o o e donde deber´amos realizar la inserci´ n todav´a no est´ lleno, insertamos la clave y estamos ı o ı a listos. Si el v´ rtice es lleno, habr´ que identificar su clave mediana y dividir el v´ rtice en e a e dos partes. La mediana misma mover´ al v´ rtice padre para marcar la divisi´ n, pero esto a e o puede causar que el padre tambi´ n tendr´ que dividirse. Las divisiones pueden continuar e a recursivamente hasta la ra´z. ı Como tambi´ n impusimos una cota inferior al n´ mero de claves, al eliminar una clave e u podemos causar que un v´ rtice sea “demasiado vac´o”. Entonces, al eliminar claves, los e ı v´ rtices “chupan” claves de reemplazo de sus hojas o de su padre. La operaci´ n que e o resulta se divide en varios casos posibles. Los arboles multicaminos (ingl´ s: B+ trees) tienen adem´ s punteros extras entre v´ rtices ´ e a e que son “hermanos” para ofrecer m´ s posibilidades simples para mover claves al buscar, a insertar y eliminar claves.

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

100

´ CAPITULO 6. ESTRUCTURAS DE DATOS

+

+ splay(+∞, A)

Figura 6.10: La uni´ n de dos arboles biselados. o ´ son menores o iguales a una clave dada como par´ metro y las mayores est´ n en el otro a a arbol. ´ La operaci´ n b´ sica utilizada para implementar todas estas operaciones es splay(ℓ, A): o a lo que hace splay es convertir el arbol A a tal forma que el v´ rtice con clave ℓ es la ra´z, ´ e ı si presente, y en la ausencia de ℓ en A, la ra´z ser´ ı a m´x {k ∈ A | ℓ > k} a (6.17)

si A contiene claves menores a ℓ y m´ {k ∈ A} en otro caso. El orden de las claves ın despu´ s de la operaci´ n cumple el mismo requisito de orden de las claves. e o Las operaciones est´ n implementadas de la manera siguiente utilizando splay: a ´ busqueda de ℓ en A: ejecuta splay(ℓ, A). Si la ra´z en el resultado es ℓ, la salida ı es “s´”, en otro caso “no”. ı uni´ n de A1 con A2 : se supone que las claves de A1 son todos menores que la clave o m´nima de A2 . Ejecutamos splay(∞, A1 ) para lograr que la ra´z de A1 modificado ı ı es su clave m´ xima y todos los otros v´ rtices est´ n en el ramo izquierdo. Hacemos a e a que A2 sea el ramo derecho. (Ver figura 6.10.) divisi´ n de A con la clave ℓ: ejecutamos splay(ℓ, A). Los dos arboles resultantes o ´ ser´ n tal que A1 contiene solamente el ramo derecho de la ra´z y A2 el resto del A a ı modificado. eliminaci´ n de ℓ de A: divide A con la clave ℓ. Si resulta que ℓ es la ra´z, qu´talo y o ı ı ejecuta la uni´ n de los dos ramos sin ℓ. Si ℓ no es la ra´z, solamente vuelve a juntar o ı A1 como el ramo derecho de A2 . inserci´ n de ℓ en A: ejecuta la divisi´ n de A con ℓ. Si ℓ ya es la ra´z, solamente o o ı vuelve a juntar A1 como el ramo derecho de A2 . Si no lo es, crea un v´ rtice ra´z e ı nuevo con la clave ℓ y haz A2 su ramo derecho y A1 su ramo izquierdo. Lo que queda entender es c´ mo implementar el m´ todo splay mismo. Comenzamos o e como cualquier b´ squeda en un arbol binario ordenado desde la ra´z utilizando el hecho u ´ ı que las claves peque˜ as est´ n a la izquierda y las grandes a la derecha — en comparan a ci´ n con la clave del v´ rtice actual. Al terminar la b´ squeda en un v´ rtice v, empezamos o e u e

´ 6.3. ARBOLES

101

rotaciones simples para mover v hac´a la ra´z sin mezclar el orden de las claves (ver las ı ı rotaciones simples en la figura 6.8). Las rotaciones se elige seg´ n las relaciones entre un u v´ rtice v y su padre y “abuelo”. e Si v tiene padre pero no tiene abuelo, elegimos una rotaci´ n simple derecha de la figura o 6.8). Este es el caso de la ultima operaci´ n con cual v llega al ser la ra´z. ´ o ı 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´ n doble derecha-derecha (ilustrada en la figura o 6.11), y si son ambos hijos izquierdos, una rotaci´ n doble izquierda-izquierda que es la o 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. z y x C A B D rotate(y) rotate(x) A B C D x y z

Figura 6.11: Una rotaci´ n doble derecha-derecha. o

102

´ CAPITULO 6. ESTRUCTURAS DE DATOS
Bk+1 Bk Bk

Figura 6.12: La definici´ n recursiva de un arbol bin´ mico Bk+1 en t´ rminos de dos copias o ´ o e de Bk . La ra´z de Bk+1 es el v´ rtice gris. ı e

6.4. Mont´culos ı
Un mont´culo (ingl´ s: heap) es una estructura compuesta por arboles. Existen muchas ı e ´ variaciones de mont´culos. La implementaci´ n t´pica de un mont´culo se basa de arboles, ı o ı ı ´ mientras arboles se puede guardar en arreglos. Entonces, las implementaciones se basan ´ en arreglos o el uso de elementos enlazados.

6.4.1. Mont´culos bin´ micos ı o
Un mont´culo bin´ mico se define de una manera recursiva. Un arbol bin´ mico de un ı o o ´ v´ rtice es B0 y el unico v´ rtice es la ra´z. El arbol Bk+1 contiene dos copias de Bk tales e ´ e ı ´ que la ra´z de una copia es la ra´z de Bk+1 y la ra´z de la otra copia es un hijo directo de ı ı ı esta ra´z (ver figura 6.12). Algunas consecuencias de esta definici´ n son que ı o 1. El arbol Bk contiene 2k v´ rtices. ´ e 2. La altura de Bk es k. 3. La ra´z de Bk tiene k hijos directos Bk−1 , Bk−2, . . . , B1 , B0 . ı Las claves est´ n guardadas en un arbol bin´ mico seg´ n el orden de mont´culo: la clave a ´ o u ı del v´ rtice padre es menor que la clave de su hijo. Cada v´ rtice contiene una clave. Un e e mont´culo bin´ mico es un conjunto de arboles bin´ micos tal que no hay duplicados de los ı o ´ o Bk . Si el n´ mero de claves para guardar es n, tomamos la representaci´ n binaria de n, u o n = bk bk−1 . . . b2 b1 b0 , (6.18)

donde los bi son los bits y k es el n´ mero m´nimo de bits requeridos para representar n. u ı Si bi = 1, en el mont´culo est´ presente un arbol bin´ mico Bi , y si bi = 0, ese tama˜ o de ı a ´ o n arbol no forma parte del mont´culo. Por definici´ n, el largo del n´ mero binario es log2 n, ´ ı o u o sea O (log n). Por seguir el orden de mont´culo en cada arbol, se puede encontrar la ı ´ clave m´nima del mont´culo en tiempo O (log |n). La figura 6.13 muestra un ejemplo de ı ı un mont´culo bin´ mico compuesto por cinco arboles. ı o ´

lo buscamos en tiempo O (log n). Si hay dos.4. Entonces el tiempo total para esta operaci´ n es tambi´ n O (log n). hay que recorrer las listas de ra´ces de los dos mont´culos simultaneamente. el grado y un marcador. o Para eliminar el elemento m´nimo. La operaci´ n de encadenaci´ n forma de dos arboles Bn un arbol Bn+1 tal o o ´ ´ que el arbol Bn con clave mayor a su ra´z ser´ un ramo del otro arbol Bn .´ 6. se los junta ı ´ n a un arbol Bi+1 . o Entonces. Unimos los dos mont´culos en ı ı tiempo O (log n).13: Un ejemplo de un mont´culo bin´ mico.4. punteros ı e a a su padre. para insertar un elemento. e ı 6. Si uno de los mont´culos ya cuenta con un Bi+1 se los junta recursiva´ ı mente. o e Para disminuir el valor de una clave. Cada v´ rtice contiene. Las ra´ces est´ n ´ o e e ı a en una cadena a trav´ s de los punteros a los hermanos. . compuesto por cinco arboles bin´ miı o ´ o cos. primero disminuimos su valor a −∞ en tiempo O (log n) y despu´ s quitamos el m´nimo en tiempo O (log n). creamos un B0 en tiempo O (1) y lo juntamos en el mont´culo en tiempo O (log n). Esta operaci´ n necesita O (log n) tiempo. El marcador del v´ rtice v tiene el valor uno si el v´ rtice v ha perdido un hijo despu´ s de la e e e ultima vez que volvi´ a ser un hijo de otro v´ rtice el v´ rtice v mismo. le quitamos y creaı mos otro mont´culo de sus hijos en tiempo O (log n). La lista se completa por hacer que el ultimo v´ rtice sea el hermano izquierdo ´ e del primero. su grado (en este e ı a contexto: el n´ mero de hijos que tiene) y tres punteros: a su padre. Al encontrar dos arboles del mismo tama˜ o Bi . sus dos hermanos (a la izquierda y a la derecha). a su hermano y a su u hijo directo. formando una lista doblemente e enlazada. dando una complejidad total de O (log n) para la inserı ci´ n. levantamos el v´ rtice correspondiente m´ s cerca de e a la ra´z para no violar el orden del mont´culo en tiempo O (log n). Mont´culos de Fibonacci ı Un mont´culo de Fibonacci es una colecci´ n de arboles (no bin´ micos) que respetan el ı o ´ o orden de mont´culo con las claves. uno queda en el mont´culo final como un arbol independiente mientras ı ´ en otro se une con el recien creado. MONTICULOS 103 Figura 6. ı o ı Para unir dos mont´culos bin´ micos. ı ı Para eliminar un elemento cualquiera.2. Esta operaci´ n ´ ı a ´ o se realiza en tiempo O (1). Cada v´ rtice del mont´culo tiene guardado adem´ s de su propia clave. adem´ s de su clave.

En el peor caso. Aqu´ la dificultad viene de encontrar eficientemente las ı ´ ı ra´ces con grados iguales para juntarlos. . Lo de convertir e v´ rtices en ra´ces habr´ que hacer recursivamente hasta llegar a un padre con el valor de e ı a marcador en cero. Si el padre w de v llevaba ı el valor uno en su marcador. los v´ rtices forman un e ı e s´ lo arbol. Es importante notar que despu´ s de haber compresionado la lista de ra´ces. (6. pero ´ ı ı donde la cantidad de otros v´ rtices es m´nima. Se logra por construir un arreglo auxiliar mienı tras recorriendo la lista de ra´ces: el arreglo tiene el tama˜ o de grados posibles y se guarda ı n en el elemento i una ra´z encontrado con grado i. Esto claramente hay que aplicar recur´ sivamente. que nos da el resultado deseado de O (log n).19) Entonces. log2 |Bk | = log2 2k = k log2 2 = k. Aplica que k−1 |Bk | = 1 + i=0 |Bi | = 2k . se crea un arbol con un ı ´ s´ lo v´ rtice con marcador en cero (en tiempo O (1)). . Los hijos son ´ o ı ı B0 . se repite una operaci´ n de compresi´ n hasta que ı e o o o las ra´ces tengan grados unicos. La uni´ n de dos listas de ra´ces se o e o ı logra simplemente por modificar los punteros de hermanos para lograr que sean una lista despu´ s de la otra (en tiempo O (1) — son cuatro punteros que ser´ n modificados). se marca el v´ rtice w (por poner el valor uno en el marcador). e ı el n´ mero de ra´ces es O (log n) porque todas las ra´ces tienen una cantidad diferente de u ı ı hijos y ninguna ra´z puede tener m´ s que O (log n) hijos. ı a Para disminuir el valor de una clave. e a Para eliminar el elemento m´nimo. simplemente se lo quita de la lista de ra´ces y adjunı ı tando la lista de los hijos del v´ rtice eliminado en el mont´culo como si estuviera otro e ı mont´culo. As´ establecemos que ı ı solamente unos pocos v´ rtices (en comparaci´ n con el n´ mero total n) pueden ser hijos e o u de la ra´z. En el e ı otro caso. . . ambos e ı .104 ´ CAPITULO 6. En un mont´culo bin´ mico. se junta ı a los dos arboles y libera el elemento del arreglo. el elemento ı u ´ m´nimo se encuentra en tiempo O (1). tambi´ n se quita w y lo convierte en una ra´z nueva. ESTRUCTURAS DE DATOS De nuevo. ı Sea h ≥ 0 y Fh un arbol de un mont´culo Fibonacci donde la ra´z v tiene h hijos. es trivial a ı (solamente modificando su valor). Despu´ s de la eliminaci´ n. Si el elemento ya est´ ocupado. En el otro caso. por el orden de mont´culo y el manejo del n´ mero de arboles. En el peor caso. habr´ que quitar el v´ rtice v con la a e clave de la lista de hermanos y convertirlo a una ra´z nueva. todos los v´ rtices est´ n en un s´ lo arbol y una cantidad e a o ´ m´ xima de los v´ rtices son hijos directos de la ra´z. Mostramos de la misma manera que en un mont´culo Fibonacci un v´ rtice tiene al m´ ximo ı e a O (log n) hijos. el n´ mero de hijos por v´ rtice es al m´ ximo O (log n) donde ı o u e a n es la cantidad total de v´ rtices en el mont´culo. Para insertar un elemento. Bk−1 y Bi tiene i hijos. Al momento de juntar el hijo Hi . hay dos opciones: si est´ en una ra´z. o ´ ı e Denotamos por Bk el arbol bin´ mico m´nimo donde la ra´z tenga k hijos. Lo unico que hay que establecer a e ı ´ es que los ramos de los hijos de la ra´z tienen que ser grandes. donde la ra´z tiene muchos hijos y no hay muchos otros v´ rtices.

por lo cual tenemos r = O (log n). Hi ha necesariamente perdido un hijo. . la cantidad total de v´ rtices es e |Fr | = 1.22) 2 Con las propiedades de logaritmo. u . MONTICULOS 105 v´ rtices v y Hi tuvieron exactamente i − 1 hijos.4. . Entonces. (solamente la ra´z) ı la ra´z. En total. si hubiera perdido m´ s ı a que uno. Hi es la ra´z de un Fi−2 . F1 . ı (6. ı ı Entonces. (6. 2+ r−2 i=0 |Fi |. Despu´ s de esto. Entonces. los hijos de un Fr son las ra´ces de F0 . llegamos a log n = log Fr ≥ (r + 1) log C donde C es alg´ n constante.20) Abrimos la recursi´ n: o |F0 | |F1 | |F2 | |F3 | |F4 | = = = = = 1 2 2 + |F0 | = |F1 | + |F0 | 2 + |F0 | + |F1 | = |F2 | + |F1 | 2 + |F0 | + |F1 | + |F2 | = |F3 | + |F2 | .11: o a o √ 1 + 5 r+1 |Fr | = F (r + 2) ≥ . (6. . Hi tiene i − 2 hijos y cada uno ı ı de ellos tiene la cantidad m´nima posible de hijos. la hoja y los ramos.´ 6. para que tenga la e e cantidad m´nima de hijos. . Fr−2 y adem´ s un hijo tipo hoja ı a que no tiene hijos. si r > 0. Utilizamos de nuevo la cota inferior de ecuaci´ n 6. Hi habr´a sido movido a la lista ra´z.10 en p´ gina 94).21) |Fr | = |Fr−1 | + |Fr−2 | . si r = 0. . Resulta que el n´ mero de v´ rtices en Fr es el n´ mero de Fibonacci F (r + 2) (definido u e u en la ecuaci´ n 6. .

Para ahorrar espacio. Entonces. El tama˜ o de la estructura de listas de e n 2 adyacencia es O (n + m) ≤ O (m) = O (n ). porque la matriz ocupa n2 elementos y si m es mucho menor que n2 . . asigna u := v 3. la mayor´a del espacio reservado tiene el valor ı cero. cada elemento de cu´ l es una lista de largo din´ mico. E) con el prop´ sito de encontrar un v´ rtice del G que tenga una o e cierta propiedad. El recorrido de un grafo a u (o un arbol) es el proceso de aplicaci´ n de un m´ todo sistem´ tico para visitar cada v´ rtice ´ o e a e del grafo (o arbol). Un algoritmo de b´ squeda es un m´ todo sistem´ tico para recorrer un ´ u e a grafo de entrada G = (V. se puede guardar la matriz e de adyacencia solamente es eficiente si el grafo es muy denso. . ESTRUCTURAS DE DATOS 6. se puede utilizar listas de adyacencia. Esto es muy parecido al implementar un grafo como una estructura enlazada. crea una pila vac´a L ı 2. el mismo pseudoc´ digo sirve para los e o o dos usos con modificaciones muy peque˜ as. Los dos ejemplos u m´ s fundamentales son los algoritmos de b´ squeda y recorrido.5. el procedimiento general es el siguiente (L es una e pila): 1.106 ´ CAPITULO 6. Grafos Para guardar un grafo de n v´ rtices etiquetados 1. marca u visitado 4. con punteros a todos los vecinos de cada v´ rtice. Se necesita un arreglo a[]. . 2. . a˜ ade cada v´ rtice no marcado en Γ (v) al comienzo de L n e .1. Busqueda y recorrido en grafos Los algoritmos de procesamiento de grafos com´ nmente utilizan colas. e ´ 6. n. Algor´tmicamente cada algoritmo de b´ squeda realiza un recorrido en el caso que visita ı u todos los v´ rtices sin encontrar soluci´ n. 3.5. Los usos t´picos de algoritmos de recorrido n ı incluyen la construcci´ n de caminos o la computaci´ n distancias o la detecci´ n de ciclos o la identificaci´ n de los componentes conexos o ´ Busqueda en profundidad (D FS) Dado G y un v´ rtice inicial v ∈ V . La lista de a[i] contiene las a a etiquetas de cada uno de los vecinos del v´ rtice i.

w o fue visitado por una llamada de v o vice versa. e En las dos implementaciones. si L est´ vac´a. Los ı e v´ rtices sin descendientes son hojas. w} del grafo: las aristas de arbol son las o ´ aristas por las cuales progresa el procedimiento. en la formulaci´ n recursiva. basta e con definir dfs(v. } Si el algoritmo D FS se utiliza para realizar alg´ n procesamiento en los v´ rtices.5. . G. continua de paso (3) 107 El algoritmo D FS puede progresar en varias maneras. . v es el antepasado inmediato de w y w es un descendiente inmediato de v. o sea. . asigna u := el primer v´ rtice en L e 8. E) y un conjunto L de v´ rtices ya visitados (inicialmente L := ∅). e a D FS produce una clasificaci´ n en las aristas {v. quita del comienzo de L todos los v´ rtices marcados e 6. El e orden de visitas a los v´ rtices si la visita se realiza antes de la llamada recursiva se llama e el preorden y el orden de visitas en el caso de visitar despu´ s se llama postorden. v es el padre directo de w.6. e Las aristas que no son aristas de abrol se clasifica en tres clases: ´ .23) dfs(w. el orden de visitas depende de c´ mo o e se elige a cu´ l vecino se va. Un v´ rtice v es el padre a a a (directo o inmediato) de otro v´ rtice w si v lanz´ la llamada recursiva para visitar a w. la complejidad asint´ tica de D FS es O (n + m): cada arista o est´ procesada por m´ ximo una vez “de ida” y otra “de vuelta”. . termina a ı 7. Cada v´ rtice solamente a a e se procesa una vez. u2 . uk = w tal que ui es el padre de ui+1 . Depende de la manera en que se ordena los e ´ e vecinos que habr´ que visitar cu´ les aristan ser´ n aristas de arbol. Estas aristas forman un arbol cubriente ´ del componente conexo del v´ rtice de inicio. que e e se llama la ra´z del arbol. L). quita el primer v´ rtice de L e 9. Cada v´ rtice. w es un descendiente de v. tiene un v´ rtice padre unico. a e Tambi´ n se puede formular D FS como un algoritmo recursivo: dado un v´ rtice de inicio. G. e Un v´ rtice v es un antepasado de otro v´ rtice w si existe una sucesi´ n de v´ rtices v = e e o e u1. El n´ mero de hijos que tiene un ı ´ e ´ u v´ rtice puede variar. La ra´z es un antepasado de todos los otros v´ rtices. En ese caso. porque los v´ rtices “ya marcados” no ser´ n revisitados. Algunas aristas encontradas apuntan a v´ rtices ya visitados. L) { L := L ∪ {v} para todo w ∈ Γ (v) \ L : (6. e el grafo G = (V. w es hijo de v. Si k = 2. e o Si v es el padre de w. es decir. salvo que el v´ rtice de inicio. con la u e implementaci´ n recursiva se puede f´ cilmente variar en qu´ momento “realizar la visita”: o a e las opciones son “visitar” antes o despu´ s de llamar la subrutina dfs para los vecinos. GRAFOS 5.

(6. continua de paso (3) Algunas aristas encontradas apuntan a v´ rtices ya visitados. ı si u es el padre de v. solamente v´ rtices que son descendientes de v est´ n incluidos adem´ s de v mismo. El nivel de un v´ rtice v tiene la siguiente definici´ n recursiva: e o nivel(v) = 0. si v es la ra´z. a˜ ade cada v´ rtice no marcado en Γ (v) al fin de L n e 5.108 ´ CAPITULO 6. es a ´ ´ ı decir. ESTRUCTURAS DE DATOS (I) una arista procedente conectan un antepasado a un descendiente no inmediato. (6. a si v es una hoja. marca u visitado 4. pero en la otra direcci´ n: o o altura(v) = 0.25) El sub´ rbol de v es el arbol que es un subgrafo del arbol cubriente donde v es la ra´z. (III ) una arista transversa conecta un v´ rtice a otro tal que no son ni antepasados ni e descendientes uno al otro — est´ n de diferentes ramos del arbol. asigna u := el primer v´ rtice en L e 7. el proceu e dimiento general es el siguiente: 1. termina a ı 6. crea una cola vac´a L ı 2. nivel(u) + 1. asigna u := v 3. a ´ Nota que aristas procedentes y aristas retrocedentes son la misma clase en un grafo no dirigido. (II ) una arista retrocedente conecta un descendiente a un antepasado no inmediato. si u es un hijo de v.24) La definici´ n del altura es similar. e a a ´ Busqueda en anchura La b´ squeda en anchura utiliza una cola L. Dado G y un v´ rtice inicial v ∈ V . si L est´ vac´a. m´x {altura(u) + 1} . e . quita el primer v´ rtice de L e 8.

Considerando que e n ∈ O (m) ∈ O (n + m) ∈ O n2 . desde un componente conexo no hay ninguna arista a otro componente conexo. o una arista transversa si y s´ lo si (I(u) > I(v)) ∧ (F (u) > F (v)). e . el a e e conjunto de v´ rtices visitados por el recorrido corresponde al componente conexo de v. y o una arista procedente si y s´ lo si en el recorrido v es un antepasado de u.8. Componentes conexos Se puede utilizar la b´ squeda en profundidad para determinar los componentes coneu xos de un grafo. empezando de 1.5. cada recorrido D FS ve valores menores de n y m porque no vuelve a procesar nada ya marcado. podemos clasificar las aristas seg´ n un recorrido D FS: asignamos u al v´ rtice inicial la etiqueta “uno”. Por iniciar D FS en el v´ rtice v. elegimos uno de esos v´ rtices e e u y corremos D FS desde u.2. Sin embargo. n]. As´ el v´ rtice de inicio tendr´ la etiqueta n. un grafo es conexo si cada v´ rtice o e est´ conectado a todos los v´ rtices por un camino. u} es e una arista de arbol si y s´ lo si el recorrido lleg´ a u directamente desde v. Si el grafo tiene v´ rtices que no pertenecen al componente de v. tenemos un algoritmo para identificar los componentes conexos en tiempo O (n2 ). As´ todos e ´ ı los v´ rtices llegan a tener etiquetas unicas en [1. El n´ mero de v´ rtices siendo n. las aristas retrocedentes son tambi´ n procedentes y vice versa. ´ o o una arista retrocedente si y s´ lo si (I(u) > I(v)) ∧ (F (u) < F (v)). y por definiciones. u e Las I(v) definen el orden previo (ingl´ s: preorder) del recorrido y las F (v) el orden e posterior (ingl´ s: postorder). e porque el algoritmo efectivamente explora todos los caminos que pasan por v.26) En un grafo conexo. GRAFOS 109 6.6. o De nuevo hay que tomar en cuanta que en grafos no dirigidos. Como ya definido en secci´ n 1. ı Iterando as´ hasta que todos los v´ rtices han sido clasificados a un componente.5. efectivamente procesamos cada v´ rtice y cada arista exactamente una vez. repetimos D FS por m´ ximo O (n) veces y cada recorrido u e a toma tiempo O (n + m). As´ encontramos el componente conexo que contiene a u. se logra ı e determinar todos los componentes conexos. le e e asignamos una etiqueta num´ rica uno mayor que la ultima etiqueta asignada. Siempre al visitar a un v´ rtice por la primera vez. Entonces. u e Asignamos otra etiqueta a cada v´ rtice tal que la asignaci´ n ocurre cuando todos los e o vecinos han sido recurridos. Una arista {v. (6. Llamamos la etiqueta as´ obtenida “el e ´ ı n´ mero de inicio” del v´ rtice y lo denotamos por I(v). ı e a Estas etiquetas se llaman “n´ meros de final” de los v´ rtices y son denotados por F (v).

El a procedimiento de inicializaci´ n ser´ o a inicio := 0. tiene ´ ı ´ necesariamente por lo menos dos hijos. para todo v ∈ V . 2-conexo). un recorrido no puede pasar de alg´ n componente a otro sin pasar por v. un e o o arbol cubriente de cada componente conexo — el mismo D FS que identifica los com´ ponentes conexos simples genera tal arbol). . Utilizamos esta definici´ n para llegar a un algoritmo para encontrar los o o componentes 2-conexos de un grafo no dirigido. ESTRUCTURAS DE DATOS Un grafo no dirigido es k-conexo si de cada v´ rtice hay por lo menos k caminos distintos e a cada otro v´ rtice. El requisito de ser distinto puede ser de parte de los v´ rtices tal que e e no pueden pasar por los mismos v´ rtices ningunos de los k caminos (ingl´ s: vertex cone e nectivity) o de las aristas tal que no pueden compartir ninguna arista los caminos (ingl´ s: e edge connectivity). o u Si v no es la ra´z. Tal v´ rtice se llama un v´ rtice a e e e de articulaci´ n. Hacemos un recorrido y marcamos para cada v´ rtice que tan cerca de la ra´z se puede e ı llegar solamente por las aristas de arbol y las aristas retrocedentes: ´ R(v) = m´ ın I(v) ∪ I(u) | ∧ u es un antepasado de v v o un descendiente suyo tiene arista con u (6.110 Componentes doblemente conexos ´ CAPITULO 6. e Para facilitar la implementaci´ n. podemos incorporar en el D FS original la calculaci´ n de los R(v) de todos los o v´ rtices. Si v es la ra´z de un arbol cubriente.28) De hecho. Una definici´ n recursiva de R(v) es o R(v) = m´ ın ∪ {I(v)} ∪ {R(u) | u es un hijo de v} {I(u) | {v. De tal ramo no es posible tener una arista retrocedente a ning´ n u antepasado. a las aristas del componente est´ n encima de la pila y se puede quitarlas con facilidad. porque por definici´ n de los v´ rtices de articulao e ci´ n. Sea v un v´ rtice de articulaci´ n y tengamos un bosque de extensi´ n del grafo (o sea. por lo menos un ramo de v contiene un componente doblemente coneı xo (o sea. P := ∅. para todo v ∈ V . se puede guardad aristas en una pila P al procesarlos.27) Un v´ rtice v que no es la ra´z es un v´ rtice de articulaci´ n si y s´ lo si tiene un hijo u tal e ı e o o que R(u) ≥ I(v). u} es una arista retrocedente} . I(v) := 0. En el sentido de v´ rtices distintos. (6. o Cuando el algoritmo est´ “de vuelta” y encuentra un componente doblemente conexo. aplica que la intersecci´ n de dos componentes distintos e o que son ambos 2-conexos consiste por m´ ximo un v´ rtice.

La figura 6. en otro caso si u = padre(v). u} ∈ E si I(u) = 0 a˜ ade {v. R(v) := m´ ın{R(v). R(v) := m´ ın{R(v). R(u)}. Sus componentes fuertemente conexos son los subgrafos mae ximales fuertemente conexos. doblemente-conexo(u).5. si R(u) ≥ I(v) elimina aristas de P hasta e inclusa {v. Entonces la complejidad del algoritmo completo e es O (n + m). n padre(u) := v. Los componentes fuertemente conexos de G = (V. u} en P.6.14 muestra un ejemplo. I(u)} El algoritmo visita cada v´ rtice y recorre cada arista. Componentes fuertemente conexos Un grafo dirigido est´ fuertemente conexo si de cada uno de sus v´ rtices existe un camino a e dirigido a cada otro v´ rtice. R(v) := I(v) para cada {v.14: Un grafo dirigido peque˜ o con dos componentes fuertemente conexos. v ′ }. Las aristas entre los componentes fuertemente conexos o . O (1). El tiempo de procesamiento de un e v´ rtice o una arista es constante. GRAFOS 111 Figura 6. E) determinan una partici´ n de los o u o v´ rtices de G a las clases de equivalencia seg´ n la relaci´ n de clausura reflexiva y trane sitiva de la relaci´ n de aristas E. n si I(v) = 0 doblemente-conexo(v) y el procedimiento recursivo que realiza el algoritmo procedure doblemente-conexo(v) inicio := inicio +1. I(v) := inicio.

Las aristas procedentes no tienen ning´ n efecto e u en los componentes. Al llegar a una ra´z vi . tienen que ser conectados por un camino que contiene aristas retrocedentes e o transversas (ver figura 6.15: Situaciones en las cuales dos v´ rtices (en gris) pueden pertenecer en el mismo e componente fuertemente conexo.29) Entonces.16 para una ilustraci´ n): a e o    ∃w que es descendente de v tal que    ′ {w. los v´ rtices de un componente conexo e se quedan en el mismo ramo del arbol cubriente. . ı a a Lo que queda es saber identificar las ra´ces. Para buscar las ra´ces.112 ´ CAPITULO 6. o o Cuando uno realiza un recorrido en profundidad. Para todo otro ı v´ rtice aplica que A(v) < I(v). las aristas azules son retrocedentes y las aristas verdes transversas. Para que una v´ rtice pueda pertenecer en el mismo componente con e otro v´ rtice. ı u u ı su componente est´ formado por los v´ rtices que fueron visitados en el ramo de vi pero a e no fueron clasificados a ninguna ra´z anterior v1 . El v´ rtice que queda como la ra´z del ´ e ı ramo se dice la ra´z del componente. La meta de ordenaci´ n topol´ gica es encontrar las ı o o ra´ces de los componentes seg´ n el orden de sus n´ meros F (v). si A(v) = I(v). . Las aristas de arbol est´ n dibujados en negro y otros v´ rtices (del mismo ´ a e componente) en blanco. Ese orden parcial se puede aumentar a un orden lineal por un algoritmo de ordenaci´ n topol´ gica . ı ´ cada v´ rtice forma su propio componente. Esto se puede implementar ı f´ cilmente con una pila auxiliar P. . sabemos que v es una ra´z de un componente. Figura 6. . porque A(v) contiene el valor del I(v) de un v´ rtice e e anteriormente recorrido por una arista retrocedente o transversa o alternativamente un valor de A(v) est´ pasado a v por un descendiente. vi−1 . Tambi´ n podemos formular A(v) en a e . Si el grafo contiene solamente aristas de arbol.15). empujando los v´ rtices en la pila en el orden del a e D FS y al llegar a una ra´z. quit´ ndolos del encima de la pila hasta llegar a la ra´z misma. ı a ı As´ nada m´ s el componente est´ eliminado de la pila. utilizamos un arreglo auxiliar A(v) para guadrar un n´ mero para ı u c´ da v´ rtice encontrado (ver figura 6. u} es retrocedente o transversa A(v) = m´ {I(v)} ∪ I(v ) | ın ∧    la ra´z del componente de u es un antepasado de v ı (6. ESTRUCTURAS DE DATOS determinan una orden parcial en el conjunto de componentes.

. o 6.16: La situaci´ n de la ecuaci´ n 6. Entonces tenemos un algoritmo con tiempo de ejecuci´ n O (n + m). As´ podemos determinar en el momento de procesar una arista retrocedente ı o transversa {v. forma recursiva: A(v) = m´ { {I(v)} ın ∪ {A(u) | u es hijo de v} ∪ {I(u) | {v.´ ´ 6.29. u} si la ra´z de u es un antepasado de v. u} es retrocedente o transversa ∧ la ra´z del componente de u es un antepasado de v}} .2. El algoritmo en e ı a ı pseudo-c´ digo est´ en el cuadro 6. Tablas de dispersi´ n din´ micas o a o Una tabla de dispersi´ n (ingl´ s: hash table) son estructuras de datos que asocien clae ves con valores. ı (6.30) Durante la ejecuci´ n el algoritmo. Para facilitar el procesamiento. no necesariamente una arista directa. Adicionamente hay que procesar cada arista. u est´ en el mismo ı a componente con v y los dos v´ rtices v y la ra´z est´ n todav´a en la pila. de e o tal manera que siempre ser´ r´ pido obtener la informaci´ n que corresponde a una clave a a o dada. Si lo es.6. mantenemos ı un arreglo de indicadores: guardado(v) = true si v est´ en la pila auxiliar y false a en otro caso. TABLAS DE DISPERSION DINAMICAS 113 v u w Figura 6. en la pila auxiliar P habr´ v´ rtices los componentes de o a e los cuales no han sido determinados todav´a.2 o a En el algoritmo del cuadro 6. cada v´ rtice entra la pila P una vez y sale de la pila una e vez. La computaci´ n por v´ rtice o arista es o e de tiempo constante. La ra´z del componente est´ dibujado en o o ı a gris y la flecha no continua es un camino. La idea es reservar primero espau cio en la memoria de la computadora y despu´ s alocarlo a la informaci´ n insertada.6. Por ejemplo. se podr´a implementar una gu´a telef´ nica por guardar los ı ı o n´ meros (los valores) bajo los nombres (las claves).

hay que ir a u a la posici´ n dada por la funci´ n hash y avancar desde all´ hasta la clave o en su ausencia o o a hasta llegar a un espacio no usado. Las operaciones son 1. a La operaciones de colas de prioridad de adjunto est´ n enfocadas a lograr f´ cilmente a a averiguar el elemento m´nimo guardado (en el sentido de los valores de las claves).7. retirar el elemento m´nimo. 5. hay que reservar m´ s. reducir el valor de un elemento. se puede por ejemplo asignar el elemento al espacio libre siguiente. ı 3. insertar un elemento. 2. T´picamente a ı se reserva una area de tama˜ o doble de lo anterior. ı . En el caso que la posici´ n indicada ya o o o est´ ocupada. Su implementaci´ n t´pica es por arreglos o ı unidimensionales. Cuando toda la memoria reservada ya est´ siendo utilizada (o alternativamente cuando el a porcentaje utilizado supera una cota pre-establecida). el elemento m´ s importante.114 ´ CAPITULO 6. aunque existen tambi´ n variantes multidimensionales. El menor valor corresponde a la prioridad m´ s urgente. e El tiempo de acceso promedio es constante por dise˜ o: hay que computar la funci´ n hash n o y buscar en la posici´ n indicada por la funci´ n. o ı sea. pero el caso peor es Ω (n) para una inserci´ n y Ω (n2 ) para un total de n o inserciones. consultar el elemento m´nimo. ESTRUCTURAS DE DATOS Una funci´ n de dispersi´ n (tambi´ n: una funci´ n hash) es una funci´ n del conjunto de o o e o o claves posibles a las direcciones de memoria. 6. Las colas de prioridad se puede implementar con mont´culos. 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. Este implica que es necesario que tengan un orden los a elementos procesados por la cola de prioridad. en cual a caso el proceso de b´ squeda cambia un poco: para ver si est´ o no una clave. Tambi´ n es posible utilizar el mismo dato como la clave en las aplicaciones donde soe lamente es de inter´ s tener acceso al elemento m´nimo pero el concepto de prioridad no e ı aplica. Entonces. despu´ s de que se puede empezar a a˜ adir ´ e n claves nuevas. “casi todas” las operaciones de inserci´ n son f´ ciles (de tiempo o a constante). ı 4. juntar dos colas. Primero se copia todas las claves ´ n existentes con sus valores en la area nueva.

u} ∈ E do if I(u) = 0 fuerteconexo(u). guardado(v) := false for all v ∈ V if I(v) = 0 fuerteconexo(v) . else if (I(u) < I(v)∧ guardado(u) = true ) A(v) := m´ ın{A(v). A(v) := I(v). a := a + 1.2: Un algoritmo basado en D FS para determinar los componentes fuertemente conexos de un grafo dirigido. for all {v. COLAS DE PRIORIDAD 115 Cuadro 6. I(v) := 0. A(v) := m´ ın{A(v). procedure fuerteconexo(v). E) a := 0. if A(v) = I(v) quita de P los elementos hasta e incluso v. guardado[v] := true . I(u)}. Se asume acceso global al grafo y las estructuras auxiliares. I(v) := a. for all v ∈ V do I(v) := 0.6. guardado(w) := false .7. empuja v en P. imprime w como parte del componente de v. procedure main(V. A(u)}. P := ∅.

8. habr´ que recorrir el o u a arbol (o sea. Sus opera´ ciones b´ sicas son a form(i. U) que junta los dos conjuntos S ∈ C y T ∈ C en un s´ lo conjunto o U = S ∪ T y actualiza C := (C \ {S.17 a La operaci´ n de crear un arbol nuevo es f´ cil: crear el primer v´ rtice v. se puede definir las operaciones tambi´ n en la o e manera siguiente: form(i): C := C ∪ {ı}. a u union(S. El conjunto de todos los elementos es su propio padre. find(i): devuelva la lista de elementos que est´ n en el mismo conjunto con i. Hay que asignar que sea su propio padre: P(c) := c. Implementaci´ n de un conjunto en forma de un arbol o Otra opci´ n de manejar conjuntos es a trav´ s de arboles: cada elemento est´ representada o e ´ a por un v´ rtice hoja del arbol.1. e e el padre de cual es su superconjunto.2. no n est´ permitido que el elemento i pertenezca a ning´ n otro conjunto de la estructura. No es realmente necesario asignar nombres a los conjuntos. T }) ∪ {U}. La estructura de los punteros padre est´ mostrada en el ejemplo de la figura 6. ESTRUCTURAS DE DATOS 6. recuerda que por definici´ n o S ∩ T = ∅. Un subconjunto es un v´ rtice intermedio.116 ´ CAPITULO 6. La operaci´ n de b´ squeda del conjunto a cual pertenece una clave c. e union(i. el arreglo) desde le v´ rtice con la clave deseada: ´ e .8. j): une el conjunto en el cual pertenece i con el conjunto en el cual pertenece j. Marcamos su o ´ a e clave (´ nica) con c. Entonces.8. Conjuntos 6. El v´ rtice padre de unas hojas representa el conjunto de los e ´ e elementos representadas por sus v´ rtices hijos. T . a u find(i) que devuelva el conjunto S ∈ C de la estructura donde i ∈ S y reporta un error si i no est´ incluido en ning´ n conjunto guardado. Esto toma u tiempo constante O (1). ´ 6. Estructuras unir-encontrar Una estructura unir-encontrar (ingl´ s: union-find) sirve para manejar un grupo C de cone juntos distintos de elementos tales que cada elemento tiene un nombre unico. S) que forma un conjunto S = {ı} y lo a˜ ade en C: C := C ∪ {S}. porque cada elemento pertenece a un s´ lo conjunto en C.

Si aseguramos que el juntar dos arboles. entre cuales ejecutamos por m´ ximo n − 1 operaciones de unir dos a conjuntos y no m´ s de dos b´ squedas de conjuntos por cada uni´ n. n p := c. si creao mos n conjuntos. la altura siendo un u ı o ´ n´ mero menor o igual al tama˜ o. return p. CONJUNTOS 117 1 2 5 6 3 4 7 9 10 11 8 12 Figura 6. Condensaci´ n del camino: traer los v´ rtices intermedios a la ra´z o e ı Para juntar dos conjuntos. el arbol de menor tama˜ o ser´ hecho hijo del otro. por lo cual tenemos complejidad asint´ tica O (n). Por ejemplo. Esta operaci´ n necesita tiempo O (1). La ventaja de la complejidad asint´ tica queda igual. while P(p) = p p := P(p). basta con hacer que la ra´z de una (con clave c1 ) sea un hijo de ı la ra´z de la otra (con clave c2 ): P(c1 ) := c2 . que ya es mejor. o .6. A´ n mejor ser´a guardar informaci´ n sobre la altura de cada arbol. el tiempo total es a u o 2 Θ(n + n − 1 + 2(n − 1)n) = Θ(n ). por lo cual podemos ´ asegurar que la operaci´ n de b´ squeda del conjunto toma tiempo O (log n) y la secuencia o u analizada ser´a de complejidad asint´ tica O (n log n). Lo unico que hay ı o ´ que hacer es guardar en un arreglo auxiliar el tama˜ o de cada conjunto y actualizarlo al n unir conjuntos y al generar un nuevo conjunto. el arrego se ha degenerado a una lista. ´ ´ n a se puede demostrar que la altura del arbol que resulta es O (log n). Podemos considerar la complejidad de una sucesi´ n de operaciones. u n o pero solamente necesitamos O (log log n) bits para guardar la altura.8. ı o En el peor caso. Hay diferentes opciones para modificar los caminos cuando uno realiza una b´ squeda de u conjunto en la estructura.17: Un ejemplo de los punteros padre de una arbol con n claves posibles para ´ poder guardar su estructura en un arreglo de tama˜ o n.

p := q return y. P(p) := P(P(p)). ´ CAPITULO 6. ESTRUCTURAS DE DATOS Divisi´ n del camino: mover v´ rtices intermediados a otra parte o e p := c. while P(P(p)) = P(p) q := P(p). while P(P(p)) = P(p) P(p) := P(P(p)).118 p := c. while P(p) = p p := P(p). q := r return p. Cortar el camino a su mitad: saltando a abuelos p := c. q := i. . y := P(p) return P(p). P(q) := p. while P(q) = q r := P(q).

Cap´tulo 7 ı An´ lisis de algoritmos a 7. . la complejidad n total de la sucesi´ n es o O (f1 + f2 + . f2 . n 119 . fk . o La complejidad de tiempo de una llamada de subrutina es la suma del tiempo de calcular sus par´ metros. . o o Operaciones aritm´ ticas y asignaciones que procesan arreglos o conjuntos tienen e complejidad lineal en el tama˜ o del arreglo o conjunto. donde k es o el n´ mero de veces que se repite. . . Algoritmos simples Para analizar desde un pseudoc´ digo la complejidad. . Leer una entrada simple toma tiempo O (1). a (7. ft es la complejidad de evaluar la condici´ n de u o terminar y fo la complejidad de la sucesi´ n de operaciones de las cuales consiste o una repetici´ n. el tiempo de asignaci´ n de los par´ metros y el tiempo de a o a ejecuci´ n de las instrucci´ nes. . I2 . .1) La complejidad de una cl´ usula de condici´ n (if ) es la suma del tiempo de evaluar a o la condici´ n y la complejidad de la alternativa ejecutada. o Escribir una salida simple toma tiempo O (1). . . + fk ) = O (m´x{f1 . for . Si las complejidades de una sucesi´ n de instrucciones I1 . t´picamente se aplica las reglas sio ı guientes: Asignaci´ n de variables simples toman tiempo O (1). . .1. o La complejidad de una repetici´ n (while . . son respectivamente f1 . . .) es O (k(ft + fo )). . Ik donde k no deo pende del tama˜ o de la instancia. . fk }) . .

aj . . aj . En ese momento tenemos o n T 2k = T (1).4) Esto se logra por inducci´ n.9) T (n) ≤ c1 n + c2 n log n o sea T (n) ∈ O (n log n). aj son par´ metros de la funci´ n f . . Por ejemplo. . en forma general.120 ´ ´ CAPITULO 7. donde o a1 . aj aplica para todo n que la soluci´ n sea la adivinada. Cuando est´ establecido. (7. resulta que a T (n) ≤ g T n .7) Observando la forma en que abre la ecuaci´ n. si n > 1. aj . n .10) De la condici´ n 2k = n sabemos que k = log n. . . . (7. n . Como un ejemplo. . . . n 2 ≤ g f a1 . .8) T (n) ≤ 2i T i + ic2 n para todo i. o sea T (n) ≤ 2k T (1) + kc2 n. . . podemos adivinar que por lo general aplica o n (7. con la o ecuaci´ n diferencial o T (1) = c1 . . 2 Si asumimos que n = 2k . 1) (7. k) para 1 ≤ k < o n. ANALISIS DE ALGORITMOS 7. g T (n/2). .5) Otra opcion es aplicar la ecuaci´ n recursiva de una manera iterativa. . . tenemos que a o demostrar que c ≤ f (a1 . . n). . T (n) ≤ f (a1 . tomamos la ecuaci´ n siguiente o T (n) ≤ c.2) y adivinamos que la soluci´ n sea. Entonces. con T (1) ≤ c1 obtenemos o . . Hay que mostrar que T (k) ≤ f (a1 . . . . n 2 ≤ f (a1 . . aj . si n = 1 si n > 1 (7.3) y tambi´ n que e g f a1 . . la recursi´ n acaba cuando i = k. . 2 (7. . n). . .2. n . 2 obtenemos por aplicaci´ n repetida o T (n) ≤ 2T n + c2 n ≤ 2 2T (n/4) + c2 n + c2 n 2 2 = 4T (n/4) + 2c2 n ≤ 4 (2T (n/8) + c2 n/4) + 2c2 n = 8T (n/8) + 3c2 n. . si n > 1. Complejidad de algoritmos recursivos La complejidad de programas recursivos t´picamente involucra la soluci´ n de una ecuaı o ci´ n diferencial. . . Para mostrar que para algunos valores de los a o par´ metros a1 . . aj . (7. aj . aj . n ≤ f (a1 . (7. El m´ todo m´ s simple es adivinar una soluci´ n y verificar si est´ bien la o e a o a adivinanza. . n). (7. . .6) T (n) ≤ 2T n + c2 n. .

o sea d(xy) = o a k−j d(x)d(y). o o En algunos casos la soluci´ n es m´ s simple: si d es multiplicativa.2. La soluci´ n necesariamente tiene la u o representaci´ n siguiente: o k−1 T (n) = ak parte homog´ nica e + j=0 aj d(bk−j ) .15) . n n (7. Para la parte homog´ nica a aplica que ak = alogb n = nlogb a . La demostraci´ n es por descoma e o posici´ n: o n T (n) = aT + d(n) b n = a aT 2 + d n + d(n) b nb = a2 T 2 + ad n + d(n) b b . cuando d es multiplicativo. . Para simplificar la situaci´ n. (7.1. si si si a > d(b) a < d(b) a = d(b). aplica que d(b ) = (d(b))k−j que nos permite reformular la parte heterog´ nie ca: k−1 k−1 aj d(b)k−j = d(b)k j=0 j=0 a d(b) j = d(b)k a d(b) a d(b) k −1 −1 = ak − d(b)k . .2.13) = ak T k + ak−1 d k−1 + .14) Entonces. . (7. En el an´ lisis de ordenaci´ n e a o k por fusi´ n tenemos a = b = 2. + d(n) b b k−1 = a T (1) + j=0 k−1 k aj d(bk−j ) = ak + j=0 k aj d(bk−j ). tenemos   O nlogb a . T (n) =  O nlogb d(b) logb n .7. parte heterog´ nica e (7. se supone o k que n = b por alg´ n k ≥ 0 (o sea k = log b). tomamos la ecuaci´ n siguiente a o T (1) = 1 T (n) = a(n/b) + d(n). en cual caso a = n (dejamos el an´ lisis mismo de o a ordenaci´ n por fusi´ n como ejercicio).11) donde a y b son constantes y d : Z+ → R+ . O nlogb d(b) .12) En el caso que d(n) ≡ 0. no habr´ parte heterog´ nica. a −1 d(b) (7. . Soluci´ n general de una clase comun o En forma m´ s general. COMPLEJIDAD DE ALGORITMOS RECURSIVOS 121 ´ 7.

a Sea a > d(b). Incluso se puede estimar la parte heterog´ nica en algunos casos donde d no es multiplie cativa. si a < d(b) y d(n) = nα . Esto se demuestra por el siguiente an´ lisis. En el caso ı e 1 1 log 3 U(1) = 2 tendr´amos 2 n . ANALISIS DE ALGORITMOS En especial. porque d(b) = d(b) =n . por lo cual la parte homog´ nica es para todos e logb n logb a 2 a =n =n . Entonces la parte heterog´ nica e log 3 es O n .5 2 d(n) = 2n1. la parte heterog´ nica es O d(b)k y T (n) ∈ O d(b)k e logb d(b) k logb n logb d(b) O n . tenemos T (n) ∈ O (n2 ). por lo cual en el caso e u a = 3 y b = 2 con d(b) = b1. Si en vez a = d(b) y d(n) = nα .122 ´ ´ CAPITULO 7.19) Si tuvieramos que U(1) = 1. a −1 d(b) (7. Entonces 2 U(1) = U(n) = 1 2 T (n) 2 Por ejemplo.18) T (n) = 3T n + 2n1. tenemos para la parte heterog´ nica que e k−1 k−1 = aj d(b)k−j = d(b)k j=0 j=0 a d(b) j k−1 = d(b)k j=0 1j = d(b)k k. = 3T 2 n 2 + n1.5 . Si a = d(b). el valor de U(1) no tiene ning´ n efecto. mientras n1. Si tenemos 2 T (1) = 1 con T (n) = 4T n + n2 . si T (1) = 1 y T (n) = 4T n + n. tambi´ n e T (n) ∈ O nlog 3 . 2 por lo cual T (n) ∈ O d(b)k k = O nlogb d(b) logb n . En consecuencia. y porque T (n) = 2 U(n). La parte heterog´ nica es entonces e ak − d(b)k ∈ O ak . Mientras con 2 T (1) = 1 y T (n) = 4T n + n3 . En este caso la parte homog´ nica y la parte heterog´ nica son practicamente iguales. tenemos T (n) ∈ O (nα ).5 s´ la lo es. 82 aplica que d(b) < a.5 = 3U n + n1. . (7. porque ak = alogb n = nlogb a . tendr´amos una parte homog´ nica 3log n = nlog 3 .5 no es multiplicativa. ı En la parte heterog´ nica.17) En todos estos ejemplos a = 4 y b = 2. Por ejemplo. resulta que T (n) ∈ O (n3 ). tenemos T (n) ∈ O (nα logb n). e e En el caso que a < d(b). tenemos que U(n) ∈ O nlog 3 . llegamos a T (n) ∈ O (n2 log n). Usamos la notaci´ n U(n) = o o T (n) para todo n. 2 (7.5 ≈ 2. en T (1) = 1 (7.16) por lo cual T (n) ∈ O ak = O nlogb a .

Por descomponer la ecuaci´ n obtenemos o 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 . + 1) = 2k k(k+1) = 2k−1 k(k + 1).20) donde la parte homog´ nica es ak = 2log n = nlog 2 = n.7. . 2 o sea.2. analizamos la ecuaci´ n o T (1) = 1 T (n) = 2T n 2 123 + n log n (7. . |× 1 |× 2 |× 4 i (7. M´ todo de expansi´ n e o El m´ todo de expansi´ n facilita la computaci´ n involucrada en abrir una ecuaci´ n recuro o e o siva.22) 7.2.25) = 2R(n − i − 1) + (n − i) | × 2 . donde n ≥ 2. . por lo cual habr´ que estimar directamente la parte heterog´ nica: a e k−1 k−1 k−1 aj d(bk−j ) = j=0 i=0 2j 2k−j log 2k−j = 2k j=0 k−j = 2k (k + (k − 1) + (k − 2) + .23) (7. COMPLEJIDAD DE ALGORITMOS RECURSIVOS Como otro ejemplo. la parte heterog´ nica es O n log2 n . . 2 Vamos a asignar k = log n: 2k−1k(k + 1) = 2log n−1 log n(log n + 1) n = 2log( 2 ) (log2 n + log n) = n (log2 n + log n). e (7.21) (7.24) La expansi´ n se realiza de la manera siguiente: o R(n) R(n − 1) R(n − 2) R(n − i) = 2R(n − 1) + n = 2R(n − 2) + (n − 1) = 2R(n − 3) + (n − 2) . Como un ejemplo. d(n) = n log n no es multiplicatie va. (7. R(n − (n − 2)) = 2R(1) + 2 | × 2n−2 .2.. . .. veremos la ecuacion siguiente: R(1) = 1 R(n) = 2 R(n − 1) + n.

T (n) = T (n − 1)T (n − 2). o sea. ..26) n veces i n−1 veces n−1 n−1 n−2 veces n−1 i+1 1 vez = 20 + .30) . el n´ simo n´ mero de Fibonacci . . .3. Entonces e u Fn T (n) = 2 . ANALISIS DE ALGORITMOS Ahora multiplicamos por los coeficientes del lado izquiera y sumamos para obtener el resultado: R(n) = 2n−1 R(1) + n + 2(n − 1) + 4(n − 2) + . + 21 + 22 + . U(0) U(1) T (0) T (1) (7. + 2n−2 2 + 2n−1 n−1 = i=0 2i (n − i) (7.. .27) (7. Otro ejemplo es T (1) = 1 T (n) = 3T (n/2) + n.28) Hemos llegado a tener U(n) = Fn . + 2n−1 n−1 = = 2 i=0 j=0 n+1 2j = i=0 (2i+1 − 1) = 2 i=0 − 1 i=0 − 2 − n. con = 1 = 2 . Transformaciones Para simplificar la soluci´ n. . .. . . si n ≥ 1.. (7. si n = 2k > 1. Por ejemplo. + 20 + 21 + . 7. + 2n−2 2 = n + 2(n − 1) + 4(n − 2) + . podemos hacer una asignaci´ n cambiando el dominio o el o o rango del mapeo T . donde con la asignaci´ n U(n) = T (2n ) llegamos a o   U(0) = 1 U(n) = T (2n ) = 3T (2n−1) + 2n  = 3U(n − 1) + 2n . .29) (7. si n ≥ 2 podemos asignar U(n) = log T (n). si n ≥ 2.2. + 22 + . . U(n) = U(n − 1) + U(n − 2). .124 ´ ´ CAPITULO 7. . Esto nos deja con = 0 = 1 .

se asume que cada instancia es equiprobao ble (es decir. 3n + 2n+1 · n (7. An´ lisis de complejidad promedio a En muchos casos.2).´ 7. usamos tiempo Θ (() n) y un espacio n auxiliar de tama˜ o O (1). obtenemos o U(n) = 3U(n − 1) + 2n |× 1 n−1 U(n − 1) = 3U(n − 2) + 2 |× 3 n−2 U(n − 2) = 3U(n − 3) + 2 |× 9 . . Para unir dos colas (de tama˜ os n1 y n2 ) en uno.1. a a 7. analizamos el o a algoritmo de ordenaci´ n r´ pida (ingl´ s: quicksort. pero resulta que en la pr´ ctica suele ser el m´ todo m´ s r´ pido. . o sea. Si uno conoce la distribuci´ n de probabilidad de las instancias (de un caso pr´ ctico). mientras una gran mayor´a de las instancias tiene tiempo de ejecuci´ n mucho meı o jor. u Cada vez que dividimos una cola o un arreglo. U(1) y entonces n−1 n−1 125 (7. En los casos donde no hay informaci´ n a priori de las probabilidades. que implica que el caso peor no es muy com´ n.1. Su o a e o a e peor caso es O (n2 ) para n elementos.32) De la condici´ n U(n) = T (2n ) derivamos que T (n) ∈ U(log n). la instancia est´ seleccionada del espacio de todas las instancias posibles a uniformemente al azar). se necesita por n .31) = 3U(0) + 2 | × 3n−1 3 2 i U(n) = 3 + i=0 n 3 2 i n−i =3 +2 n n i=0 = 3n + 2n = 3n + 2 · 3 − 2 3 n −1 2 = 1 2 n n+1 3 − 2n+1 2 = 3n+1 − 2n+1 = 3 · 2n log 3 − 2n · 2.3. presentado en la secci´ n 6. o T (n) = U(log n) = 3 · 2log n log 3 − 2log n 2 = 3nlog 3 − 2. (7.33) 7. ANALISIS DE COMPLEJIDAD PROMEDIO Abriendo esta definici´ n.3. El an´ lisis de complejidad promedia da a ordenaci´ n r´ pida la complejidad a a a o a O (n log n). T´picamente el an´ lisis de complejidad promedio es m´ s desafiante que el an´ lisis ı a a a asint´ tica del por caso. o a se puede analizar la complejidad promedio de un algoritmo. En la secci´ n siguiente ver´ mos el an´ lisis amortizada que reo o e a sulta m´ s f´ cil para muchos casos de procesamiento de estructuras de datos. Ordenaci´ n r´ pida o a En esta secci´ n. como un ejemplo de an´ lisis de complejidad promedio. la cota superior de la an´ lisis asint´ tica del caso peor da una idea basa o tante pesimista de la situaci´ n — puede ser que son muy escasas las instancias de peor o caso.3.

Tpeor (n) = (7. Θ (1) .36) . T (p) + T (n − p) + Θ (n) .34) La soluci´ n de la ecuaci´ n del peor caso es Tpeor (n) = Θ (n2 ). 3. La permutaci´ n en la cual aparecen los elementos est´ elegida entre los n! posibles o a permutaciones uniformemente al azar. donde c es a un constante. El peor caso corresponde a la situaci´ n donde p = 1 en cada divisi´ n del o o algoritmo. la complejidad del caso promedio se puede caracterizar con la ecuaci´ n diferencial: o . el tiempo total de ejecuci´ n del algoritmo de ordenaci´ n r´ pida est´ capturado en la o o a a ecuaci´ n recursiva siguiente: o T (n) = O (1) . si el pivote es 1    T (1) + T (n − 1) + cn. . que en turno deo termina exactamente los tama˜ os de las dos partes: n   T (0) + T (n) + cn. 5. . La complejidad del caso donde n ≤ 1 usa d pasos de computaci´ n. si el pivote es 2     T (2) + T (n − 2) + cn. ANALISIS DE ALGORITMOS m´ ximo el tiempo O (n1 + n2 ). si el pivote es 3 T (n) ≤ (7. cada caso ocurre (n − 1)! veces (se fija el ultimo elemento y considera las permutaciones de los otros ele´ mentos). n} (o en t´ rminos m´ s generales.35) Tpeor (n − 1) + Θ (n) . El ultimo elemento est´ siempre elegido como el pivote. hacemos las siguientes suposiciones: donde p es el tama˜ o de la una de las dos partes de la divisi´ n (y n − p el tama˜ o de n o n la otra parte).126 ´ ´ CAPITULO 7.  . si el pivote es n − 1     T (n − 1) + T (1) + cn. en otro caso. todos los elemene a tos son distintos). en la implementaci´ n que usa un arreglo. 1. 2.   T (n − 2) + T (2) + cn. a Suponemos que la subrutina de elecci´ n del pivote toma O (n) tiempo para n elemeno tos. esto de logra en en tiempo ´ a O (1) ∈ O (n). o La complejidad del algoritmo ahora depende de la elecci´ n del pivote.  . . Las operaciones de dividir y unir las partes usan al m´ ximo tiempo cn. Los n elementos son {1. 4. si el pivote es n. si n ≤ 1. 2. Para analizar el caso o o promedio. . Entonces. . (7. Considerando el conjunto de las n! permutaciones de los elementos. . si n ≤ 1. si n > 1. . unir las partes a o explicitamente no ser´ necesario.

aplica la ecuaci´ n ı´ o o siempre y cuando α ≥ D + d . Para u a simplificar. Para el caso n > 2.37) ≤ (d + C + c)n + La sumaci´ n est´ simplifacada por la observaci´ n que tiene adem´ s de cn dos ocurrencias o a o a de cada T (i). La demostrac´on es por inducci´ n: para n = 2. ANALISIS DE COMPLEJIDAD PROMEDIO 127 T (n) =   d. asumimos que para todo i < n aplica 2 . Adem´ s sabemos que T (1) = d. (7.    1 n 1 n 1 n n = 1. = = = ≤ T (0 + T (n) + cn + i=1 n−1 T (i) + T (n − i) + cn T (i) + T (n − i) + cn n−1 T (0 + T (n + cn + i=1 T (0 + T (n) + cn + (n − 1)cn + 2 n−1 T (i) i=1 d n + Cn + cn + 2 n i=1 n−1 2 n i=1 T (i) T (i).´ 7. El pen´ ltimo paso con ≤ viene del hecho que ya sabemos del an´ lisis de u a 2 peor caso que T (n) ≤ Cn para alg´ n constante C. n−1 (n−1)! n! T (0) + T (n) + cn + i=1 n−1 (T (i) + T (n − i) + cn) . n > 1. reemplazamos el constante d + C + c = D para obtener la ecuaci´ n o 2 T (n) ≤ Dn + n n−1 T (i) i=1 (7.3.38) y intentamos solucionarla con la adivinanza T (n) ≤ αn log n. donde α es un constante suficientemente grande.

(log n − 1) i=1 i + log n  n 2  ( n + i) log n 2 n 2 +i   i= n +1 2 (i log i)   n −1 2 −1 + n2 4 n2 4 i=1 n 2 n 2 − − + + i (n 2 n2 8  − 1) · n 4 1+ n 2 2 −1 − (7. . ¿cu´ nto tiempo toma? ı a Para formalizar el concepto. .128 ´ ´ CAPITULO 7. Para el caso de valores pares de n. . se aplica una operaci´ n O en la estructura. La motivaci´ n de complejidad amortizada es poder “pron´ stio o car” con mayor exactitud el tiempo de ejecuci´ n del uso del algoritmo en el “mundo real”: o si uno t´picamente quiere realizar ciertos tipos de cosas. No es necesario que las operaciones de la sucesi´ n sean o o iguales ni del mismo tipo. tenemos  n n−1 2 n−1 T (n) ≤ Dn + 2 n αi log i = Dn + n 2 2α n i=1 = Dn + 2α n    n −1 2 (i log i) + i=1 ( n + i) log 2 n −1 2  (i log i) + n 2 i=1 = Dn + 2α n = Dn + ≤ = = ≤ ≤ 2α n +  i=1 n 2 i=1 i(log n − 1) + n 2 i=1 1+ n n 2α 2 + log n Dn + n (log n − 1) 2 · 2 2 2 Dn + 2α log n n + n − n − n + log n n 8 4 8 4 1 Dn + α log n(n − 1) − n − 2 4 Dn + αn log n − α · n 4 αn log n. el estado o e de la estructura ser´ Di . On .4. . Esta cota superior est´ dividido o a por el n´ mero de operaciones n para obtener la complejidad amortizada (ingl´ s: amortized u e complexity) de una operaci´ n. Para valores o e impares de n. Denotamos la sucesi´ n de operaciones como O1 . An´ lisis de complejidad amortizada a La idea en el an´ lisis de complejidad amortizada es definir una sucesi´ n de n operaciones a o y estimar una cota superior para su tiempo de ejecuci´ n.40) con logaritmos de base dos y por aplicar la suma de sucesi´ n aritm´ tica. El a o “costo” computacional de operaci´ n Oi puede ser muy distinto del costo de otra operaci´ n o o . Despu´ s de i operaciones. sea D0 el estado inicial de una estructura de datos.39) porque para todo i aplican log i ≤ log n = log n − 1 2 log n + i ≤ log(n − 1) ≤ log n 2 (7. si α ≥ 4D. el an´ lisis es muy parecido. En cada momento. 7. Estas calculaciones verifican la adivinanza a T (n) = αn log n. ANALISIS DE ALGORITMOS que T (i) ≤ αi log i.

´ 7.4. ANALISIS DE COMPLEJIDAD AMORTIZADA

129

Oj . La idea es sumar los costos y pensar en t´ rminos de “costo promedio”. Para que tenga e sentido ese tipo de an´ lisis, la sucesi´ n de operaciones estudiada tiene que ser la peor a o posible — si no lo es, no hay guarant´a ninguna que se pueda generalizar el an´ lisis para ı a sucesiones m´ s largas. a

7.4.1. Arreglos din´ micos a
Como un ejemplo, evaluamos la complejidad de operar un arreglo din´ mico: se duplica el a tama˜ o siempre cuando hace falta a˜ adir un elemento (y se corta el tama˜ o a mitad cuann n n do se ha liberado tres cuartas partes del espacio). Evaluamos la sucesi´ n de 2k inserciones o en tal arreglo. Al realizar la primera inserci´ n, se crea un arreglo de un elemento. Con la o segunda, se duplica el tama˜ o para lograr a guardar el segundo elemento. En pr´ ctica, n a esto significa que se reserva un arreglo nuevo del tama˜ o doble en otra parte y mueve n cada clave que ya estaba guadrara en el arreglo al espacio nuevo. Con la tercera inserci´ n, o se crea espacio para dos elementos m´ s, etc´ tera. a e Entonces, con la sucesi´ n de operaciones definida, vamos a tener que multiplicar el tao ma˜ o del arreglo k veces y las otras 2k − k inserciones van a ser “baratas”. La comn plejidad de una inserci´ n barata es O (1). Cuando el tama˜ o del arreglo es n, el costo o n de duplicar su tama˜ o es O (n). Entonces, la complejidad de una inserci´ n “cara” es n o O (1) + O (n) ∈ O (n) y para la inserci´ n dif´cil n´ mero i, el tama˜ o va a ser 2i . Entono ı u n ces la suma de la complejidad de las k inserciones dif´ciles es ı
k

O

2i
i=1

= O 2k+1 .

(7.41)

La complejidad total de los 2k − k operaciones f´ ciles es O 2k − k ∈ O 2k porque a cada una es de tiempo constante. Entonces, la complejidad de la sucesi´ n completa de 2k o k+1 k k inserciones es O 2 + 2 ∈ O 3 · 2 . Dividimos este por el n´ mero de operaciones u k 2 para obtener la complejidad amortizada por operaci´ n: o O 3 · 2k 2k = O (3) ∈ O (1) . (7.42)

Entonces, si hacemos n operaciones y cada uno tiene complejidad amortizada constante, cada sucesi´ n de puras inserciones tiene complejidad amortizada lineal, O (n). o

Para poder incluir las eliminaciones en el an´ lisis, hay que cambiar la t´ cnica de an´ lia e a sis. Utilizamos el m´ todo de potenciales, tambi´ n conocido como el m´ todo de cuentas e e e bancarias), donde se divide el costo de operaciones caras entre operaciones m´ s baratas. a

Supone que al comienzo nos han asignado una cierta cantidad M de pesos. Cada operaci´ n b´ sica de tiempo constante O (1) cuesta un peso. Vamos a realizar n operaciones. El o a costo planeado de una operaci´ n Oi es pi = M pesos. Si una operaci´ n no necesita todos o o n sus M pesos asignados, los ahorramos en una cuenta bancaria com´ n. Si una operaci´ n u o n M o necesita m´ s que n pesos, la operaci´ n puede retirar fondos adicionales de la cuenta a

130

´ ´ CAPITULO 7. ANALISIS DE ALGORITMOS

bancaria. Si en la cuenta no hay balance, la operaci´ n los toma prestados del banco. Todo o el pr´ stamo habr´ que pagar con lo que ahorran operaciones que siguen. Denotamos el e a balance de la cuenta despu´ s de la operaci´ n n´ mero i, o sea, en el estado Di , con Φi — e o u este balance tambi´ n se llama la potencial de la estructura. La meta es poder mostrar que e la estructura siempre contiene “la potencial suficiente” para poder pagar la operaciones que vienen. Sea ri el costo real de la operaci´ n Oi. El costo amortizado de la operaci´ n Oi es o o ai = ti + Φi − Φi−1
pesos ahorrados

(7.43)

El costo amortizado total de las n operaciones es
n n

A=
i=1

a

i

=
i=1 n

(ri + Φi − Φi−1 )
n

=
i=1 n

ri +
i=1

(Φi − Φi−1 )

(7.44)

=
i=1

ri + Φn − Φ0 ,

por lo cual el costo real total es
n n

R=
i=1

r1 = Φ0 − Φn +

ai .
i=1

(7.45)

Para poder realizar el an´ lisis, hay que asignar los costos planeados pi , despu´ s de que se a e intenta definir una funci´ n de balance Φi : N → R tal que el costo amortizado de cada o operaci´ n es menor o igual al costo planeado: o ai = ri + Φi − Φi−1 ≤ pi . As´ tambi´ n aplicar´a ı e ı
n n

(7.46)

i=1

ri ≤ Φ0 − Φn +

pi .
i=1

(7.47)

La transacci´ n con el banco (ahorro o pr´ stamo) de la operaci´ n Oi es de pi − ri pesos. o e o T´picamente queremos que Φi ≥ 0 para cada estado Di . Si esto aplica, tenemos que ı
n n

i=1

ri ≤ Φ0 +

pi .
i=1

(7.48)

Com´ nmente adem´ s tenemos que Φ0 = 0, en cual caso la suma de los costos planeados u a es una cota superior a la suma de los costos reales. Entonces, si uno elige costos planeados demasiado grandes, la cota ser´ cruda y floja y la estimaci´ n de la complejidad no a o

´ 7.4. ANALISIS DE COMPLEJIDAD AMORTIZADA

131

es exacta, mientras haber elegido un valor demasiado peque˜ o de los costos planeados, n resulta imposible encontrar una funci´ n de balance apropiada. o Regresamos por ahora al caso de puras inserciones a un arreglo din´ mico. Hay que asea gurar que el precio de una inserci´ n cara se pueda pagar con lo que han ahorrado las o inserciones baratas anteriores. Suponemos que el tiempo de una inserci´ n f´ cil sea t1 y el o a tiempo de mover una clave al espacio nuevo (de tama˜ o doble) sea t2 . Entonces, si antes n de la inserci´ n cara, la estructura contiene n claves, el precio real total de la inserci´ n o o cara es t1 + nt2 . Vamos a definir una funci´ n de balance tal que su valor inicial es ceo ro y tambi´ n su valor despu´ s de hacer duplicado el tama˜ o es cero. En cualquier otro e e n momento, ser´ Φi > 0. La meta es llegar al mismo resultado del m´ todo anterior, o sea a e n o i=1 ri = O (n) para tener complejidad amortizada O (1) por operaci´ n.

Vamos a intentar el an´ lisis con pi = t1 + 2t2 : habr´ que poder pagar el costo de a˜ adir la a a n clave nueva (t1 ) y preparar para mover la clave misma despu´ s a un arreglo nuevo de tae ma˜ o doble (t2 ) adem´ s de preparar mover todas las claves anteriores (uno por elemento, n a el otro t2 ). Queremos cumplir con ecuaci´ n 7.46: para todo i, necesitamos que o ai = ri + Φi − Φi−1 ≤ pi = t1 + 2t2 . (7.49)

Denotamos por ci el n´ mero de claves guardados en el arreglo en el estado Di . Claramente u ci = ci−1 + 1. Intentamos con la funci´ n o Φi = 2t2 ci − t2 ei , (7.50)

donde ei es el espacio total del arreglo despu´ s de la operaci´ n Oi . Para inserciones f´ cie o a les, aplica ei = ei−1 , mientras con las dif´ciles aplica ei = 2ei−1 = 2ci−1 . ı El caso de una inserci´ n f´ cil ser´ entonces o a a ai = t1 + (2t2 (ci−1 + 1) − t2 ei−1 ) − (2t2 ci−1 − t2 ei−1 ) = t1 + 2t2 = pi . (7.51)

Entonces el costo amortizado es igual al costo planeado. Para las inserciones dif´ciles, ı tenemos ai = (t1 + t2 ci−1 ) + (2t2 (ci−1 + 1) − t2 2ci−1 ) − (2t2 ci−1 − t2 ci−1 ) (7.52) = t1 + 2t2 = pi , que tambi´ n cumple con lo que quer´amos: tenemos que ai = t1 + 2t2 para todo i. Ene ı tonces cada operaci´ n tiene costo amortizado O (1) y el costo real de una serie de n o operaciones es O (n).

Ahora podemos considerar eliminaciones: si un arreglo de tama˜ o ei contiene solamente n 1 1 ci ≤ 4 ei claves, su tama˜ o ser´ cortado a la mitad: ei+1 = 2 ei . El costo de la reducn a ci´ n del tama˜ o es t2 ci , porque habr´ que mover cada clave. Marcamos el precio de una o n a eliminaci´ n simple (que no causa un ajuste de tama˜ o) con t3 . o n Vamos a cubrir el gasto del reducci´ n por cobrar por eliminaciones que ocurren cuando o ei el arreglo cuenta con menos que 2 claves guardadas en el estado Di . Entonces, por cada

132

´ ´ CAPITULO 7. ANALISIS DE ALGORITMOS

eliminaci´ n de ese tipo, ahorramos t2 pesos. Al momento de reducir el tama˜ o, hemos o n ei ahorrado ( 4 − 1) pesos (nota que ei 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´ da m´ s. Elegimos a a ahora una funci´ n de balance definido por partes: o Φi = 2t2 ci − t2 ei , e1 t − t2 ci , 2 2 si ci ≥ si ci <
ei , 2 ei . 2

(7.53)

Analizamos primero el caso de inserciones: Para el caso ci > ei , no cambia nada a la 2 situaci´ n anterior: ai = t1 + 2t2 . Para el otro caso ci < ei , tenemos o 2 ai = ri + Φi − Φi−1 = t1 + t22ei − t2 ci − = t1 − t2 ,
t2 ei−1 2

− t2 ci−1

(7.54)

porque para estas inserciones, siempre tenemos ei = ei−1 (nunca causan que se duplique el espacio). Para las inserciones “especiales” que ocurren justo cuando cambia la definici´ n de la funci´ n de balance (o sea, el caso donde ci = ei ), obtenemos o o 2 ai = = = = ri + Φi − Φi−1 i−1 t1 + 2t2 ci − t2 ei − t2 e2 + t2 ci−1 t1 + 2t2 ci − 2t2 ci − t2 ci + t2 (ci − 1) t1 − t2 .

(7.55)

Para el caso de ci =

Para las eliminaciones, empezamos con el caso de eliminaciones f´ ciles sin ahorro, o sea a ci ≥ e i : 2 ai = ri + Φi − Φi−1 = t3 + (2t2 ci − t2 ei ) − (2t2 ci−1 − t2 ei−1 ) (7.56) = t3 + 2t2 (ci−1 − 1) − 2t2 ci−1 = t3 − 2t2 .
ei 2

− 1 al cambio de definici´ n de Φ obtenemos o ri + Φi − Φi−1 t3 + t22ei − t2 ei − (2t2 ei−1 − t2 ei ) 2 t3 + 3t2ei − t2 (ei−1 − 1) − 2t2 ci−1 t3 + 3t2 ci−1 − t2 ei−1 + t2 − 2t2 ci−1 t3 + t2 .
e1 −1 2

ai = = = = =

(7.57)

Para las eliminaciones con ahorro, o sea cuando ci < ai = = = =

cuando ci−1 ≥

ei +1, 4

tenemos

ri + Φi − Φi−1 e i−1 t3 + t2 2i 1 − t2 ci − t2 e2 − t2 ci−1 t3 − t2 (ci−1 − 1) + t2 ci−1 t3 + t2 .

(7.58)

´ 7.4. ANALISIS DE COMPLEJIDAD AMORTIZADA
Para el ultimo caso, el eliminaci´ n, ci−1 = ´ o ai = = = = =
ei−1 , 4

133

obtenemos

ri + Φi − Φi−1 i−1 t3 + t2 ci − t22ei − t2 e2 − t2 ci−1 t2 ei−1 t2 ei−1 t3 + 4 − 2 + t2 ci−1 i−1 i−1 t3 − t2 e4 + t2 e4 t3 .

(7.59)

Entonces en todos los casos llegamos a tener una complejidad amortizada constante O (1) por operaci´ n, por lo cual la complejidad de cualquier combinaci´ n de n inserciones y/o o 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´ s: credit invae riant) durante toda la sucesi´ n. El invariante del ejemplo de arreglos din´ micos consiste o a de las siguientes reglas: 1. Si ci =
ei , 2

el balance Φi es cero.

2. Si ( ei ≤ ci < ei ), el balance Φi es igual a la cantidad de celdas libres en las 4 2 posiciones de la segunda cuarta parte del arreglo. 3. Si ci > ei , el balance Φi es igual a dos veces la cantidad de claves guardados en las 2 posiciones de la segunda mitad del arreglo.

´ 7.4.2. Arboles biselados
El siguiente ejemplo del an´ lisis amortizado son los arboles biselados. Denotamos la cana ´ tidad de claves guardadas en el arbol por n y el n´ mero de operaciones realizados al arbol ´ u ´ con m. Queremos mostrar que la complejidad amortizada de cualquier sucesi´ n de m o operaciones es O (m log n). Marcamos con R(v) el ramo la ra´z de cual es el v´ rtice v y ı e con |R(v)| el n´ mero de v´ rtices en el ramo (incluyendo a v). Definimos u e µ(v) = ⌊log |R(v)|⌋. Sea r la ra´z del arbol completo. El costo planeado de las operaciones ser´ ı ´ a pi = O (log n) = O (log |R(r)|) = O (µ(r)) . (7.61) (7.60)

Cada operaci´ n de un arbol adaptivo (ver secci´ n 6.3.5) constituye de un n´ mero conso ´ o u tante de operaciones splay y un n´ mero constante de operaciones simples, basta con u establecer que la complejidad amortizada de una operaci´ n splay es O (µ(r)). o Pensamos en este caso que cada v´ rtice del arbol tiene una cuenta propia, pero el balance e ´ e est´ en uso de todos. Mantenemos el siguiente invariante de costo: cada v´ rtice v siempre a tiene por lo menos µ(v) pesos en su propia cuenta.

67) .134 ´ ´ CAPITULO 7. o o La demostraci´ n del teorema es la siguiente: la operaci´ n splay consiste de una sucesi´ n o o o de rotaciones (ver figura 6. Aplica que µdespu´s (u) = µantes (t) y que o e µdespu´s (t) ≤ µdespu´s (u). pero no un e e abuelo. En el caso que el v´ rtice u que contiene la llave de inter´ s tenga un padre t.62) El peso que sobra se gasta en las operaciones de tiempo constante y cantidad constante por operaci´ n splay (comparaciones. A) requiere al m´ ximo (3 (µ(A) − µ(v)) + 1) o a unidades de costo para su aplicaci´ n y la actualizaci´ n del invariante de costo. necesitamos pesos: e e µdespu´s (u) + µdespu´s (t) − (µantes (u) + µantes t)) = µdespu´s (t) − µantes (u)) e e e ≤ µdespu´s (u) − µantes (u). o sea. Mostramos que a µdespu´s (u) = µantes (u) (7.64) (7.65) Si logramos tener µdespu´s (u) > µantes (u). u tiene adem´ s del padre t un abuelo t′ . e e e Por la estructura de la rotaci´ n aplica que o µdespu´s (u) = µantes (t′ ).69) (7. o e Necesitamos asegurarnos que T ≤ 0. El costo total de mantener e el invariante es T = µdespu´s (u) + µdespu´s (t) + µdespu´s (t′ ) − µantes (u) − µantes (t) − µantes (t′ ). e e e Las ecuaciones 7. nos queda por lo menos un peso para ejecutar la e operaci´ n.68) (7.63) (7. empujando el abuelo abajo a la derecha y despu´ s para mover u mismo al lugar nuevo del padre. etc´ tera).66) e es una suposici´ n que llega a una contradicci´ n con o o µdespu´s (u) + µdespu´s (t) + µdespu´s (t′ ) ≥ µantes (u) + µantes (t) + µantes (t′ ). Hay que analizar el caso que µdespu´s (x) = µantex (x). no nos cuesta nada mantener el invariante v´ lido.64 dan que µantes (t′ ) = µdespu´s (u) = µantes (u) e lo que implica µantes (u) = µantes (t) = µantes (t′ ) (7. e por lo cual T = = ≤ = µdespu´s (t) + µdespu´s (t′ ) − µantes (u) − µantes (t) e e (µdespu´s (t) − µantes (u)) + (µdespu´s (t′ ) − µantes (t)) e e (µdespu´s (u) − µantes (u)) + (µdespu´s (u) − µantes (u)) e e 2 (µdespu´s (u) − µantes (u)) . Para mantener el invariante. Cada operaci´ n splay(v. actualizaciones de punteros.8). e (7. o e En el segundo caso. hace falta una rotaci´ n simple derecha.32. ANALISIS DE ALGORITMOS Teorema 7.66 y 7. Hay que hacer dos rotaciones a derechas — primero para mover t al lugar del abuelo. e (7.

73) (7. hay que asignarle O (log n) pesos. cada operaci´ n tiene costo amortizado O (log n). tenemos o µdespu´s (t) ≤ µdespu´s (u) y µdespu´s (t′ ) ≤ µdespu´s (u). que es una contradicci´ n con µantes (u) = µdespu´s (u). e El tercer caso de splay es una rotaci´ n doble izquierda-derecha y omitimos sus detalles.72) (7. Entonces a o o µdespu´s (u) + µdespu´s (t) + µdespu´s (t′ ) ≥ 3 µantes (t′ ) = 3µdespu´s (u) e e e e y adem´ s a µdespu´s (t) + µdespu´s (t′ ) ≥ 2µdespu´s (u).4. o e e o Habr´ que analizar el caso q1 > q2 igualmente — tambi´ n llega a una contradicci´ n.75) . por ecuaci´ n 7. esto significa que ⌊log(q1 + q2 + 1)⌋ ≥ ⌊log 2q1 ⌋ = ⌊log q1 ⌋ + 1 > ⌊log q1 ⌋. a Entonces. o En resumen: al insertar un elemento el el arbol. por lo cual T < 0.´ 7. e e e Por la estructura de la rotaci´ n. Cada operaci´ n puede gastar ´ ı o O (log n) pesos en ejecutar las operaciones splay y el mantenimiento del invariante de costo y las operaciones adicionales que se logra en tiempo O (1).70) Sea q1 el tama˜ o de R(u) antes de la operaci´ n y q2 el tama˜ o de R(t′ ) despu´ s de la n o n e operaci´ n. µdespu´s (u) = µantes (u). e e e (7.71 da o o µdespu´s (u) = µdespu´s (t) = µdespu´s (t′ ).74) (7. Por definici´ n de µ tenemos o o µantes (u) = ⌊log q1 ⌋ µdespu´s (t′ ) = ⌊log q2 ⌋ e µdespu´s (u) = ⌊log(q1 + q2 + 1)⌋ e que juntos con la condici´ n combinada de o µantes (u) = µdespu´s (u) = µdespu´s (t′ ) e e llegamos a tener ⌊log q1 ⌋ = ⌊log(q1 + q2 + 1)⌋ = ⌊log q1 ⌋.64 llegamos a o µantes (u) = µantes (t) = µantes (t′ ) = µdespu´s (u) = µdespu´s (t) = µdespu´s (u). ANALISIS DE COMPLEJIDAD AMORTIZADA 135 porque t est´ en el camino desde u a t′ antes de la operaci´ n. por definici´ n de µ. o ´ (7. se asigna a la ra´z nueva O (log n) pesos.71) (7.76) (7. por lo cual la complejidad amortizada de cualquier o sucesi´ n de m operaciones en un arbol biselado es O (m log n). Al ´ unir dos arboles.78) (7. Si q1 ≤ q2 . Entonces. e e e e que en combinaci´ n con ecuaci´ n 7.77) (7. e e e Ahora.

Hay que recordar que la manera de eliminar un elemento cualquiera es por primero disminuir su valor a −∞ y despu´ s quitando el m´nimo. hay que a˜ adirle dos pesos al abuelo. o o ı Demostramos que con estos costos uno puede realizar las operaciones mientras manteniendo el invariante de costo propuesto. El tiempo total es constante. la operaci´ n en s´ toma tiempo O (1). solamente unimos las listas de ra´ces. Esta ı o operaci´ n no causa ning´ n cambio en el invariante. el costo de esta operaci´ n es O (1). O (1). . Adem´ s depositamos ı o ı a un peso en cada hijo directo del v´ rtice eliminado. decrementaci´ n del valor de clase y unir dos mont´culos son un peso por o o ı operaci´ n. Al insertar una clave.3. ANALISIS DE ALGORITMOS 7. Para eliminar el m´nimo. solamente actualizar unos punteros. Para disminuir el valor de una clave existente.4. gastamos los pesos de las ra´ces mismas. Esto toma tiempo O (1) + O (log n) ∈ e ı O (log n). lo unico que se hace es crear una ra´z nueva con la clave nueva y un ´ ı peso. El otro peso el v´ rtice padre lleva consigo.136 ´ ´ CAPITULO 7.2 utilizamos el siguiente invariante de ı o costo: cada ra´z tiene un peso y cada v´ rtice marcado tiene dos pesos.1 los costos de operaciones en algunas estructuras de datos. Por la contracci´ n de ı ı o las listas que se realiza al eliminar el m´nimo. e ı Si el padre est´ marcado.4. Esto toma tiempo constante O (1). mientras la eliminaci´ n del m´nimo tiene costo planeado de O (log n) pesos. por lo cual la complejidad amortizada de la operaci´ n ı ı o es O (log n). Despu´ s depositamos de nuevo un peso ı ı e en cada ra´z. completamos en cuadro 7. Mont´culos de Fibonacci ı Para los mont´culos de Fibonacci (de secci´ n 6. su movimiento a la lista de ra´zes se paga por el peso extra a ı que tiene el v´ rtice marcado — tambi´ n se le quita la marca por la operaci´ n. n Para unir dos mont´culos. Si hay que marcar el e abuelo. Los costos planeaı e dos de inserci´ n. por lo cual ı a no hay que copiar nada. Para recorrer y contraer la lista de e ra´ces. Hay que tomar en cuenta que estamos o u pensando que las listas de ra´ces est´ n implementadas como listas enlazadas. Con estos valores. por lo cual e e o no sufre el invariante. Son O (log n) ra´ces. movemos el v´ rtice con la clave a la lista de ra´ces en tiempo O (1) junto con un peso.

mont´culos (M). arboles balanceados (A).´ 7. ´ ı mont´culos binomiales (B) y mont´culos de Fibonacci (F).4. Operaci´ n o Inserci´ n o Ubicar m´nimo ı Eliminar m´nimo ı Eliminaci´ n o Disminuir clave Unir dos L Θ (n) O (1) O (1) O (1) Θ (n) Θ (n) A O (log n) O (1) O (log n) O (log n) O (log n) Θ (n) M O (log n) O (1) O (log n) O (log n) O (log n) Ω (n) B O (log n) O (log n) O (log n) O (log n) O (log n) O (log n) F O (1) O (1) O (log n) ∗ O (log n) ∗ O (1) ∗ O (1) .1: Complejidad (asint´ tica o amortizada) de algunas operaciones b´ sicas en o a diferentes estructuras de datos: listas (L). Las complejidades amortizadas ı ı llevan un asterisco (∗ ). ANALISIS DE COMPLEJIDAD AMORTIZADA 137 Cuadro 7.

ANALISIS DE ALGORITMOS .138 ´ ´ CAPITULO 7.

ı e 139 .Cap´tulo 8 ı ˜ T´ cnicas de diseno de algoritmos e La meta al dise˜ ar un algoritmo es encontrar una manera eficiente a llegar a la soluci´ n n o deseada. En este cap´tulo presentamos algunas t´ cnicas comunes del dise˜ o de algoritmos ı e n que aplican a muchos tipos de problemas. donde se procesa objetos geom´ tricos como puntos. en vez de considerar todas las alternativas para poder despu´ s elegir vorazmente o con otra heur´stica una de ellas. mientras en otros casos ı ´ terminan en una soluci´ n factible que no es la optima.1) o recursivo (por ejemplo los algoritmos de dividir y conquistar de la secci´ n 8. los problemas tienen problemas e o duales que tienen la misma soluci´ n pero pueden resultar m´ s f´ ciles de resolver.1. En algunos casos es mejor hacer cualquier aumento.2) que permiten pensar en el problema a o en t´ rminos de otro problema. a o La idea de los algoritmos de aumentaci´ n es la formaci´ n de una soluci´ n optima por meo o o ´ joramiento de una soluci´ n factible. o aunque no sea el mejor ni localmente. La composici´ n de tal o algoritmo puede ser iterativo (por ejemplo los algoritmos de l´nea de barrer de la secci´ n ı o 8.2). En general. mientras en optimizaci´ n. El dise˜ o empieza por buscar un punto de vista n adecuado al problema: muchos problemas tienen transformaciones (como las reducciones del an´ lisis de clases complejidad en la secci´ n 5.4). Este tipo de soluci´ n se llama un optimo local. Algoritmos de l´nea de barrer ı Los algoritmos de l´nea de barrer (ingl´ s: sweep line o scan line) dividen el problema ı e en partes que se puede procesar en secuencia. o a a Muchos problemas se puede dividir en subproblemas tales que la soluci´ n del problema o entero estar´ compuesta por las soluciones de sus partes y las partes pueden ser solua cionados (completamente o relativamente) independientemente. los algoritmos que logran esto cuentan con programaci´ n o din´ mica (de la secci´ n 8. Son particularmente com´ nes para los prou blemas de geometr´a computacional. Hay o casos donde los mismos subproblemas ocurren varias veces y es importante evitar tener que resolverlos varias veces. o ´ 8. algoritmos e ı heur´sticos pueden llegar al optimo (global) en algunos casos. pero ninguna de las operaciones de o ´ aumento utilizados logra mejorarla.

se puede imaginar que una l´nea mueva en el ı plano. o Para el caso que es espacio sea un plano. El movimiento de la l´nea sigue uno de los ejes u otra l´nea fija y la l´nea se para en puntos relevanı ı ı tes al problema. Sin embargo. en vez de una l´nea basta con usar un punto.21: Intersecciones de segmentos Dado: Pregunta: n segmentos de l´neas en plano de dos dimensiones ı ¿cu´ les son los puntos de intersecci´ n entre todos los sega o mentos? El algoritmo ingenuo procesa cada uno de los n(n − 1) = Θ (n2 ) pares de segmentos si ∈ S y sj ∈ S tal que i = j y computa su intersecci´ n.1: Una instancia del problema de intersecciones de segmentos. La instancia del problema est´ compuesta por la informaci´ n ı ı e a o de la ubicaci´ n de los objetos en un espacio definido. o Problema 8. Para dimensiones mayores o ı n. pol´gonos. habr´ que calcular todas ´ a las intersecciones en cualquier caso y solamente imprimir la lista de las instrucciones ya toma Θ (n2 ) tiempo. cruzando la parte relevante del espacio donde se ubican los objetos. l´neas. Para un ejemplo. Si el espacio tiene una o sola dimensi´ n. en una instancia promedia o t´pica.1. pero los factores esenciales de ı la soluci´ n del problema no deben cambiar de una parada a otra. En el peor caso. Tambi´ n ı o n e se puede aprovechar de otras estructuras de datos auxiliares. los papeles relativos de los objetos pueden cambiar. Entre dos paradas de la o a a ı l´nea. el n´ mero de puntos de intersecci´ n ı u o k es mucho menor que n(n − 1). se “barre” con un hiperplano de dimensi´ n n − 1. TECNICAS DE DISENO DE ALGORITMOS Figura 8.140 ´ ´ ˜ CAPITULO 8. Los puntos de parada se guarda en un mont´culo. esto es el o comportamiento optimo: si todos los segmentos se intersectan. El algoritmo mejor imaginable tuviera complejidad asint´ tica O (n + k). La inicializaci´ n del ı o mont´culo y su actualizaci´ n son asuntos importantes en el dise˜ o del algoritmo. etc´ tera. vea la figura 8. por ejemplo para guardar informaci´ n sobre cu´ les objetos est´ n actualmente bajo de la l´nea. porque se necesita tiempo O (n) para leer la entrada y tiempo O (k) o .

o sea.2: Los puntos de inicio y fin de la instancia de la figura 8. Las actualizaciones necesarias del a ı mont´culo tomar´ n O (log n) tiempo cada una.1 y la direcci´ n de o procedimiento del algoritmo de l´nea de barrer. por definici´ n no hay ninguna intersecci´ n. se saca el segmento del arbol. guardamos en un arbol binario balanceado los segmentos que quedan actual´ mente bajo de la l´nea de barrer. Se guardar´ los puntos de parada en un mont´culo.1.´ 8. y ´ (III ) cuando se intersectan dos segmentos. Son n puntos de comienzo. los segmentos ı que intersectan con la l´nea de barrer mientras mueva de un punto de parada al siguiente ı no cambia. ALGORITMOS DE LINEA DE BARRER 141 Figura 8. o Por el hecho que el orden est´ seg´ n la coordenada y. Aqu´ presentamos un algoritmo de l´nea de barrer que corre en ı ı tiempo O ((n + k) log n). Adem´ s. La l´nea de barrer mover´ en perpendicular al eje x. ´ (II ) cuando termina un segmento. n puntos finales y k intera o secciones. el o o a subconjunto de segmentos cuales quedan “bajo” de la l´nea de barrer. el segmento que antes estaba arriba se cambia por abajo y viceversa — en este ultimo caso tambi´ n se imprime el punto de ´ e intersecci´ n encontrada a la salida. El arbol nos da acceso en tiempo O (log n). o sea. a Entonces. y adem´ s. al momento de llegar a la intera u . en paralelo al eje ı a y. Se insertar´ n ı ´ a seg´ n el orden de la coordenada y del punto de intersecci´ n del segmento con la l´nea de u o ı barrer y se actualizar´ el orden en las siguientes situaciones: a (I) cuando comienza un segmento. el orden de los puntos de intersecci´ n en comparaci´ n a cualquier a o o de los dos ejes est´ fijo. Los puntos de parada ser´ n todos los puntos donde empieza o termina un segmento y a adem´ s los puntos de intersecci´ n. ı a Entre dos puntos de parada. ı para imprimir la salida. se inserta el segmento en el lugar adecuado en el arbol binario.

solamente con una instancia de entrada m´ s simple. e o Para que sea eficiente el m´ todo para el problema entero. Adem´ s se inserta al m´ ximo dos puntos al mont´culo. (8. de costo O (log n) ´ cada uno. El n´ mero m´ ximo n u a de puntos de parada nuevos encontrados al haber hecho una parada es dos. La idea u o es que el tama˜ o m´nimo sea constante y su soluci´ n lineal en su tama˜ o por lo cual la n ı o n soluci´ n de tal instancia tambi´ n es posible en tiempo constante desde el punto de vista o e del m´ todo de soluci´ n del problema entero. Ser vecinos quiere decir que son v´ rtices o e hoja del arbol que est´ n uno al lado del otro en el nivel bajo. En cada punto preproceo ı ´ sado se realiza una inserci´ n o un retiro de un elemento de un arbol binario balanceado. al haber actuali´ a zado la estructura. las que ya o n ı no se divide recursivamente.142 ´ ´ ˜ CAPITULO 8.1 muestra el agoritmo en pseudoc´ digo. Entonces. la altura de cual determina el n´ mero de niveles de divisi´ n. o La construcci´ n del mont´culo al comienzo toma O (n) tiempo. Las soluciones a los subproblemas est´ n combinadas a formar una a soluci´ n del problema entero. normalmente es deseable dividir un problema ´ a subproblemas de m´ s o menos el mismo tama˜ o en vez de dividir a unos muy grandes a n y otros muy peque˜ os. El cuadro 8. Se a˜ ade al n m´ ximo dos elementos al mont´culo por cada inserci´ n y al m´ ximo un elemento por caa ı o a da retiro hecho. necesariamente son “vecinos” en el arbol por lo menos o ´ justo antes de llegar al punto de intersecci´ n. Juntas necesitan O (n log n) tiempo. es importante que el costo compun a tacional de dividir un problema a subproblemas sea bajo y tambi´ n que la computaci´ n e o de juntar las soluciones de los subproblemas sea eficiente. Un buen ejemplo del m´ todo dividir y conquistar es ordenamiento n e por fusi´ n que tiene complejidad asint´ tica O (n log n). por lo cual se necesita O (k log n) tiempo. Hasta o ahora todo necesita O (n log n) tiempo. ´ u o Para lograr un arbol abstracto balanceado. Las divisiones a subproblemas genera un arbol abstracto. de costo O (log n) por a a ı inserci´ n. es decir. En total son k intersecciones. Despu´ s se soluciona todos los subproblemas de a e una manera recursiva. o Son en total 2n de tales operaciones. En los puntos de intersecci´ n se intercambian posiciones dos segmentos. adem´ s de tener un algoritmo de e a tiempo constante para las instancias peque˜ as b´ sicas. TECNICAS DE DISENO DE ALGORITMOS secci´ n de dos segmentos si y sj .1) 8. lo unico que tenemos que hacer es calcular las puntos de intersecci´ n ´ o de los vecinos actuales y a˜ adirles en la cola de puntos de parada. o o . Para las instancias del tama˜ o m´nimo. Cada operaci´ n necesita O (log n) tiempo y son O (n) operaciones. se utiliza alg´ n procedimiento de soluci´ n simple.2. Esto se puede o implementar con dos retiros seguidos por dos inserciones al arbol. El o tiempo total es entonces O (n log n) + O (k log n) = O ((n + k) log n) . Dividir y conquistar El m´ todo dividir y conquistar divide un problema grande en varios subproblemas tal e que cada subproblema tiene la misma pregunta que el problema original.

y1). M := un mont´culo vac´o ı ı para todo si ∈ S. y ′).2. DIVIDIR Y CONQUISTAR 143 Cuadro 8. i. y) := el elemento m´nimo de M ı remueve (x. y ′) de si y sℓ o si x′ > x insertar en M el dato [(x′ . i. y) . y2 ). y ) de si y sr o ′′ si x > x insertar en M el dato [(x′′ . y ′′) de si y sr o si x′′ > x insertar en M el dato [(x′′ . −] insertar en M el dato [(x2 . si = (x1 . ℓ. C. y) es de tipo “intersecci´ n” o i := el primer ´ndice definido en el dato ı j := el segundo ´ndice definido en el dato ı intercambia las posiciones de si y sj en B si el nuevo vecino izquiero de sj en B est´ definido y est´ sℓ a a ′ ′ computar la intersecci´ n (x . r] si (x. −] B := un arbol binario balanceado vac´o ´ ı mientras M no est´ vac´o a ı (x. y ′) de sℓ y sr o si x′′ > x insertar en M el dato [(x′ . I. ℓ] si el nuevo vecino derecho de si en B est´ definido y est´ sr a a ′′ ′′ computar la intersecci´ n (x . y2) tal que x1 ≤ x2 insertar en M el dato [(x1 . I. r] si (x. a computar la intersecci´ n (x′ . F. y ′′ ). y1 ). r] imprimir (x. I. y ′′ ). ℓ. i. y) es de tipo F como “final” sℓ := el segmento a la izquierda de si en B sr := el segmento a la derecha de si en B remueve si de B si est´ n definidos ambos sℓ y sr . (x2 . y) de M si (x. I. j. y ) de sj y sℓ o si x′ > x insertar en M el dato [(x′ .1: Un algoritmo de l´nea de barrer para encontrar los puntos de intersecci´ n de ı o un conjunto S de n segmentos en R2 . y) es de tipo C como “comienzo” insertar si a B ordenado seg´ n la clave y u si el vecino izquiero de si en B est´ definido y es sℓ a computar la intersecci´ n (x′ . i. I.8. y ′). y ′). i] si el vecino derecho de si en B est´ definido y es sr a ′′ computar la intersecci´ n (x .

. asegurando que la l´nea infinita definida por el segmento entre los dos puntos elegidos no corta ninı guna de las dos cubiertas. La cubierta de un s´ lo punto es el punto mismo. Cubierta convexa Como otro ejemplo del m´ todo dividir y conquistar. Hay que dise˜ ar c´ mo avanzar en elegir nuevos pares utilizando alguna heur´stica que observa cu´ les de las dos cubiertas est´ n cortadas por el candidato actual.3. Una regi´ n es convexa si todos los ı o puntos de un segmento de l´nea que conecta dos puntos incluidos en la regi´ n. el caso donde o una est´ completamente a la izquierda de la otra es f´ cil: basta con buscar dos segmena a tos de “puente” que tocan en cada cubierta pero no corten ninguna (ver figura 8.4). 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) n o la coordinada x. ver´ mos la computaci´ n de la cue e o bierta convexa de un conjunto de puntos en R2 . 8.144 ´ ´ ˜ CAPITULO 8. ı a a Lo importante es que cada punto est´ visitado por m´ ximo una vez al buscar uno de los a a dos puentes. Tales puentes se encuentra por examinar en orden los puntos de las dos cubiertas. Para juntar dos cubiertas. Tambi´ n hay que asegurar que las dos puentes no corten uno al e otro. Es bastante simple dividir el conjunto en dos partes tales que uno est´ completae mente a la izquierda del otro por ordenarlos seg´ n su coordenada x (en tiempo O (n log n) u para n puntos). TECNICAS DE DISENO DE ALGORITMOS Figura 8. Una instancia de ejemplo se muestra en la figura 8.3: Una instancia del problema de cubierta convexa de un conjunto de puntos en el plano.1. La cubierta convexa es la regi´ n convexa o m´nima que contiene todos los puntos del conjunto. tambi´ n ı o e est´ n incluidos en la misma regi´ n. a o La idea del algoritmo es dividir iterativamente el conjunto de puntos en dos subconjuntos de aproximadamente el mismo tama˜ o. calcular la cubierta de cada parte y despu´ s junn e tar las soluciones de los subproblemas iterativamente a una cubierta convexa de todo el conjunto.2.

A11 · B12 . Si k = 1. A22 · B21 . DIVIDIR Y CONQUISTAR 145 Figura 8. A12 · B22 . sea n = k 2 para alg´ n entero u positivo k. o La complejidad de tal algoritmo se caracteriza por la siguiente ecuaci´ n: o S(n) = y su soluci´ n es O (n log n).4: Dos “puentes” (en rojo) que juntan las soluciones de dos subproblemas de cubierta convexa a la soluci´ n del problema completo. por lo cual la complejidad asint´ tica del algoritmo ino 3 genuo es Θ(n ). El algoritmo o ingenuo para su multiplicaci´ n est´ basada en la formula AB = C = (cij ) donde o a n O (1) .2) cij = k=1 aik bkj . calculamos sus multiplicacioo 2 2 nes A11 · B11 . 2 si n = 1. utilizamos el m´ todo ingenuo. Para estas partes.5) A21 · B11 . A21 · B12 . en otro caso (8. En otro caso.4) tal que cada parte tiene dimensi´ n n × n . divimos las matrices de e entrada en cuatro partes: A11 A12 A21 A22 B11 B12 B21 B22 (8. o Multiplicaci´ n de matrices o Otro ejemplo del m´ todo de dividir y conquistar es el algoritmo de Strassen para multiplie car dos matrices. A22 · B22 .3) La computaci´ n de cada cij toma tiempo Θn (n multiplicaciones y n − 1 sumaciones) o y son exactamente n2 elementos. (8.2. 2S( n ) + O (n) . A12 · B21 . Sean A = (aij ) y B = (bij ) matrices de dimensi´ n n × n. El otro algoritmo tiene la siguiente idea. (8.8.

La complejidad de tiempo total es u T (n) ≤ La solucionamos por abrirla: T (2) = a + b xT (4) = a + ab + b T (8) = a3 + a2 b + ab . ℓ−1 2 2 = = = = A11 · B11 A11 · B12 A21 · B11 A21 · B12 + + + + A12 · B21 A12 · B22 A22 · B21 A22 · B22 (8. n Para analizar el algoritmo. El truco del algoritmo de Strassen es lograr a tener a = 7 y as´ lograr complejidad ı .8) 4 2 4 2 2 2 +b 8 2 2 T (2 ) = a + b i=0 ℓ−1 ℓ ℓ 2ℓ−i 2 ai = aℓ + b i=0 22ℓ−2i i ·a 4 ℓ−1 22ℓ = a +b 4 ℓ i=0 a ℓ 4 a 4 i 22ℓ = a +b 4 ℓ −1 a −1 4 >1. (8. TECNICAS DE DISENO DE ALGORITMOS y sumamos para obtener partes de la matriz C: C11 C12 C21 C22 tal que C= que es exactamente e˜ producto AB.146 ´ ´ ˜ CAPITULO 8. 2 2 si k = 1 para k > 1. por lo cual T (n) = O (n3 ) y no hay ahorro asegurado. En el algoritmo anterior tenemos a = 8. marcamos con a el n´ mero de multiplicaciones hechas y con u b el n´ mero de sumaciones. .6) C11 C12 C21 C22 (8.si a>4 ≤ a + ba = O aℓ ℓ ℓ = O alog n = O 2log a·log n = O nlog a . aT ( n ) + b ( n )2 .7) a + b. .

Por aplicar un algoritmo de ordenaci´ n de un arreglo. cn 1−q . Para i = 2 . 8.3. Para saber d´ nde continuar.81 ): o S1 S2 S3 S4 S5 S6 S7 147 = = = = = = = tal que C11 C12 C21 C22 (A12 − A22 ) · (B21 + B22 ) (A11 + A22 ) · (B11 + B22 ) (A11 − A21 ) · (B11 + B12 ) (A11 + A12 ) · B22 A11 · (B12 − B22 ) A22 · (B21 − B11 ) (A21 + A22 ) · B11 = = = = S1 + S2 − S4 + S6 S4 + S5 S6 + S7 S2 − S3 + S5 − S7 . Un algoritmo ingenuo cuadr´ tico ser´a buscar el m´nimo y eliminarlo i veces. analizamos la b´ squeda entre n claves de la clave en posici´ n i en u o n orden decreciente de los datos. solamente hay que comprar i con |A| y o |B|. o o llegamos a la complejidad as´nt´ tica Θ(n log n). llegando a a ı ı la complejidad asint´ tica Θ(i · n).3. con e e la diferencia que despu´ s de dividir.8. Continuamos de una manera recursiva solamente con uno de los dos conjuntos A y B: lo que contiene al elemento i´ simo en e orden decreciente. Una consecuencia o buena es que tampoco hay que unir soluciones de subproblemas. ı o Un m´ todo podar-buscar parecido al ordenaci´ n r´ pida llega a complejidad mejor: elegie o a 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. El truco en este algoritmo es en la elecci´ n del elemento pivote as´ que la divisi´ n sea o ı o 1 buena: queremos asegurar que exista un constante q tal que 2 ≤ q < 1 tal que el conjunto mayor de A y B contiene nq elementos. PODAR-BUSCAR asint´ tica O nlog 7 ≈ O (n2. As´ podr´amos llegar a la complejidad ı ı T (n) = T (qn) + Θ(n) ≤ cn ∞ i=0 qi = = O (n) . Podar-buscar El m´ todo podar-buscar (ingl´ s: prune and search) es parecido a dividir-conquistar. Como un ejemplo. lo que se busca es el mediana del conjunto. el algoritmo ignora la otra mitad por saber que la e soluci´ n completa se encuentra por solamente procesar en la otra parte.

(8. El elemento p ser´ el pivote. 4.9) 3 Tambi´ n sabemos que el n´ mero de elementos mayores a p es por m´ ximo 4 n para n ≥ e u a 20. 10 4 (8.2: n |M| = ⌈ ⌉ 5 (8. a n De esta manera podemos asegurar que por lo menos ⌊ 10 ⌋ medianas son mayores a p y para cada mediana mayor a p hay dos elementos mayores m´ s en su grupo. ´ 2. por lo cual el a n´ mero m´ ximo de elementos menores a p son u a 3⌊ 3 n ⌋ < n para n ≥ 20. por lo cual aplica que n 3n ≤p≥ para n ≥ 20. |B|} ≤ a .11) a por lo cual la llamada recursiva pivote(⌈ |M | ⌉. Divide los elementos en grupos de cinco (o menos en el ultimo grupo). T ( n + T ( 3n ) + cn.12) 4 por lo cual la llamada recursiva del ultimo paso toma al m´ ximo tiempo T ( 3n ). hacemos las sio guientes observaciones sobre el cuadro 8. ´ a 4 para alg´ n constante c tenemos que u T (n) = c. o a . TECNICAS DE DISENO DE ALGORITMOS El m´ todo de elecci´ n del pivote puede ser por ejemplo el siguiente: e o 1. 2 5 Tambi´ n sabemos que e 3n m´x{|A| . (8. 5. 6. M) toma tiempo T (⌈ n ⌉) por m´ ximo. Denota el n´ mero de grupos por k = ⌈ n ⌉. o a Para analizar la complejidad asint´ tica T (n) del algoritmo desarrollado. Entre las k medianas. elige su mediana p utilizando este mismo algoritmo recursivamente.148 ´ ´ ˜ CAPITULO 8.2. 5 4 si n < 20 si n ≥ 20. (8. Entonces.10) 4 4 El pseudoc´ digo del algoritmo est´ en el cuadro 8. u 5 3. Elige la mediana de cada grupo. Ordena en tiempo O (5) ∈ O (1) cada grupo.13) Con inducci´ n llegamos bastante f´ cilmente a T (n) ≤ 20cn.

4. Su utilidad est´ en problemas donde la soluci´ n del o a o problema completo contiene las soluciones de los subproblemas — una situaci´ n que o ocurre en algunos problemas de optimizaci´ n.4. Si uno lo aplica de la manera dividir y conquistar. PROGRAMACION DINAMICA 149 Cuadro 8. llegando a la complejidad asint´ tica n o Ω n k 2n =Ω √ n . Dividir D a A y B tal que a ∈ A si a < p. Programaci´ n din´ mica o a En programaci´ n din´ mica. procedure pivote(i ∈ Z. es necesario volver a calcular a varias veces algunos coeficientes peque˜ os. if |A| ≥ i return pivote(i.14) aunque guardando las soluciones parciales (o sea. return D[i] else Dividir D en ⌈|D| /5⌉ grupos de cinco elementos Ordena cada grupo de cinco elementos. b ∈ B si b ≥ p.´ ´ 8. D ⊆ R) if |D| < 20 ordenar(D). o Un ejemplo b´ sico es el c´ mputo de los coeficientes bin´ micos con ecuaci´ n 1.9 (en a o o o p´ gina 2). guardando las soluciones en una forma sistem´ tica para a n a construir soluciones a problemas mayores. cada coeficiente ya calculado). A) else return pivote(i − |A| . T´picamente las soluciones parciales est´ n ı a guardadas en un arreglo para evitar a tener que solucionar un subprobelma igual m´ s a tarde el la ejecuci´ n del algoritmo.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. |B|) 8. M := las medianes de los grupos de cinco. llegamos a la complejidad O (nk) (de tiempo — la de espacio crece). M ). uno empieza a construir la soluci´ n desde las soluciones de o a o los subproblemas m´ s peque˜ os. (8. p ← pivote(⌈|M | /2⌉. El arreglo del algoritmo de programaci´ n din´ mica para los coeficientes bin´ micos resulta ser el tri´ ngulo de Paso a o a .

a . .6). . uno podr´a resolver el problema por examinar cada triangulaci´ n de cada lado. 1 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 1 3 1 6 4 1 10 10 5 1 15 20 15 6 1 21 35 35 21 7 1 28 56 70 56 28 8 1 36 84 126 126 84 36 9 1 45 120 210 252 210 120 45 10 . incluyendo un tri´ ngulo degenerado que consiste en el lado o a a s´ lo (ver figura 8. . si i = j m´ {T [i.4. j)} . k. . ı o empezando del lado entre el primero y el segundo punto.15) 1 8. . . j] = 0. o ¿Cu´ l divisi´ n del pol´gono a tri´ ngulos da la suma m´nima a o ı a ı de los largos de los lados de los tri´ ngulos? a Si el n´ mero de los puntos es n + 1. Alguno de estos tri´ ngulos necesariamente pertenece a la trianguo a laci´ n optima. cada uno de los n lados del pol´gono tiene n opciones u ı de asignaci´ n a tri´ ngulos.. k y j. (8. j. i. El resto de la tarea es triangular el area o las areas que quedan afuera del o ´ ´ ´ tri´ ngulo elegida. i = j ın i≤k≤j−1 (8.150 cal: k n 0 1 2 3 4 5 6 7 8 9 10 . El precio de la triangulaci´ n optima es o ´ T [i. j) es el costo del tri´ ngulo definido por los tres puntos i − 1. Definimos como el “precio” de cada tri´ ngulo degeneı a rado cero y suponemos que estamos triangulizando el pol´gono parcial definido por los ı puntos i − 1. TECNICAS DE DISENO DE ALGORITMOS 2 3 4 5 6 7 8 9 10 . . .22: Pol´gono convexo ı Dado: Pregunta: Un pol´gono convexo de n lados en formato de la lista de los ı n + 1 puntos finales de sus lados en la direcci´ n del reloj. a Entonces. 0 1 ´ ´ ˜ CAPITULO 8. k. y continuando recursivamente para los otros lados del pol´gono. . j − 1. k] + T [k + 1. Triangulaci´ n optima de un pol´gono convexo o ´ ı Nuestra segundo ejemplo de programaci´ n din´ mica es el siguiente problema: o a Problema 8.1. j] + w(i − 1.16) donde w(i − 1.

Los puntos est´ n dibujados como c´rculos negros. . .´ ´ 8. j) fueron utilizados para saber de cu´ les tri´ ngulos consiste la triangulaci´ n. La tabla se completa diagonal por diagonal hasta llegar al elemento T [1. j] el valor cero para todo T [i. PROGRAMACION DINAMICA 151 Figura 8.5: Una instancia de triangulaci´ n de un pol´gono convexo con una soluci´ n faco ı o tible (aunque su optimalidad depende de cu´ l funci´ n objetivo est´ utilizada — la de la a o a formulaci´ n presentada u otra. i = 1. .4. . Habr´ que recordar cu´ les a o ´ ı a a w(i − 1. . i]. a a o El tiempo de c´ mputo por elemento de la tabla es Θ(n) y son Θ(n2 ) elementos en total. mientras o a ı el pol´gono est´ dibujado en l´nea negra y los tri´ ngulos en colores variados. ı a ı a Lo primero del algoritmo es guardar en la tabla de los T [i. n] que ser´ el costo de la triangulaci´ n optima de todo el pol´gono. n. o por lo cual el algoritmo corre en tiempo Θ(n3 ). k.

6: Las opciones de n tri´ ngulos los cuales puede pertenecer un lado del pol´gono a ı en una triangulaci´ n optima. TECNICAS DE DISENO DE ALGORITMOS Figura 8.152 ´ ´ ˜ CAPITULO 8. o ´ .

que tiene la misma complejidad que el problema de decio si´ n de la existencia de una soluci´ n factible. eligiendo al final la soluci´ n cual dio el mejor valor. la manera ingenua de solucionar problemas es hacer una o lista completa de todas las soluciones factibles y evaluar la funci´ n objetivo para cada o una. Una manera de aproximaci´ n es utilizar ı o m´ todos heur´sticos. Desaforo tunadamente el n´ mero de soluciones factibles suele ser algo como Ω (2n ). El forma “normal” de la transformaci´ n es la siguiente (para problemas a ı o de minimizaci´ n — la extensi´ n a problemas de maximizaci´ n es f´ cil): o o o a Problema 9. lo transformamos o ı en un problema de decisi´ n y demostramos que el problema de decisi´ n es NP-completo o o (o ma´ s dif´cil). no es imposible utilizar un algoritmo ı exponencial. o sea.23: O PT D EC Dado: Pregunta: Una instancia x de un problema de optimizaci´ n y un costo o c. La complejidad de ese tipo de o soluci´ n es por lo menos Ω (|F |) donde F es el conjunto de soluciones factibles. No es posible que sea m´ s f´ cil solucionar o o a a el problema de optimizaci´ n que el problema de decisi´ n a cual est´ basado. por lo cual u el algoritmo ingenuo tiene complejidad asint´ tica exponencial. Si uno tiene un m´ todo o e eficiente para generar en una manera ordenada soluciones factibles y r´ pidamente decidir a s´ o no procesarlos (en el sentido de podar-buscar). ı e Muchos problemas de optimizaci´ n combinatoria consisten de una parte de construcci´ n o o de cualquier soluci´ n factible. Otra opci´ n es buscar por soluciones aproximadas. soluciones cerca de ser optio ´ ma sin necesariamente serlo (ver cap´tulo 10).Cap´tulo 9 ı Optimizaci´ n combinatoria o En optimizaci´ n combinatoria. o la heur´stica es voraz (tambi´ n se dice glotona). ¿Existe una soluci´ n i ∈ Sx con costo menor o igual a c? o 153 . Si uno e ı siempre elije el candidatos que desde el punto de vista de evaluaci´ n local se ve el mejor. donde uno aplica una regla simple para elegir candidatos. para mostrar que un problema de optimizaci´ n es dif´cil. o o a Formalmente.

´ 9. El algoritmo e termina cuando todos los v´ rtices est´ n en el mismo arbol. 9. logramos a encontrar la soluci´ n optima con una heur´stio ´ ı ca voraz: siempre elige la arista con menor peso para a˜ adir en el arbol que est´ bajo n ´ a construcci´ n. Para saber cuales v´ rtices fueron visitados. OPTIMIZACION COMBINATORIA En un sentido. Para construir un arbol cubriente cualquiera – o sea. ´ ı o Un m´ todo de este tipo es el algoritmo “vuelta atr´ s” (ingl´ s: backtracking).1. cuidando n a a no formar ciclos por marcar v´ rtices al haberlos tocado con una arista. son NP-duros. y continuar al vecino e indicado. Otra posibilidad es empezar a a˜ adir aristas.2. una soluci´ n ´ o factible — podemos empezar de cualquier v´ rtice. Su idea es e a e .3). es esencial saber “guiar” la b´ squeda de o u la soluci´ n y evitar evaluar “candidatos malos”. podemos con o uan reducci´ n trivial decidir el problema de decisi´ n. empezamos por incluir en el arbol la arista de peso m´nimo ´ ı y marcando los puntos finales de esta arista. y como problemas de optimizaci´ n o o o por definici´ n no pertenecen a NP (NP siendo una clase de problemas de decisi´ n). En cada paso. e Con mont´culos normales se obtiene complejidad de O (m log n) y con mont´culos de ı ı Fibonacci complejidad de O (m + n log n). se guarda el “costo” de a˜ adir un v´ rtice en un o n e arreglo auxiliar c[v] y asignamos c[v] = ∞ para los que no son vecinos de v´ rtices ya e marcados.1). Este m´ todo se conoce como el algoritmo de Kruskal y su ´ e complejidad es O (m log m) + O (m · ( unir-encontrar )) = O (m log m) = O (m log n). En una implementaci´ n simple. si el problema de decisi´ n es NP-completo. se elige entre los vecinos de los v´ rtices marcados el v´ rtice que se puede a˜ adir con el menor peso entre los candie e n datos. elegir una arista. Un ejemplo de ese tipo de t´ cnica es el o e m´ todo podar-buscar (de la secci´ n 8. Ramificar-acotar En los algoritmos de optimizaci´ n combinatoria que evaluan propiedades de varios y o posiblemente todos los candidatos de soluci´ n. de la menos pesada a la m´ s pesada. se necesita una estructura de datos. asegurando al a˜ adir aristas que nunca regresamos a un v´ rtice ya visitado con n e anterioridad. o En el algoritmo de Prim . el problema de optimizaci´ n es o o NP-duro.154 ´ ´ CAPITULO 9. De los libros de texto sobre optimizaci´ n combinatoria cabe mencionar el libro de Papao dimitriou y Steiglitz [16]. porque si tenemos un algoritmo para el problema de optimizaci´ n. En este problema. por lo cual una estructura tipo e a ´ unir-encontrar resulta muy util. Algoritmos que avancen siempre en el candidato e o localmente optimo se llaman voraces (por ejemplo los algoritmos de construcci´ n de o ´ arboles cubriente de peso m´nimo de la secci´ n 9. Arbol cubriente m´nimo ı Estudiamos algunos algoritmos de encontrar un arbol cubriente m´nimo en grafos pon´ ı derados no dirigidos. en o o vez de ser NP-completos.

e e Es recomendable utilizar m´ todos tipo ramificar-acotar solamente en casos donde uno no e conoce un algoritmo eficiente y no basta con una soluci´ n aproximada. 2. el paso “ramificar” es el siguiente: 1. Adem´ s sabemos que para cualquier ruta R el costo de la o a a arista incidente a cada v´ rtice es por lo menos el costo de la arista m´ s barata incidente a e ese v´ rtice. w} resultar´a que uno de los v´ rtices v o w tenga menos que dos ı e aristas incidentes para la ruta. Los ramos de o la computaci´ n consisten de soluciones factibles distintas y la subrutina para encontrar o una cota (superior para maximizaci´ n y inferior para minimizaci´ n) deber´a ser r´ pida. Si al incluir {v. o 3. e ı o . vi+1 )) . w} se generar´a un ciclo en la ruta actua sin haber incluido todos ı los v´ rtices todav´a. Al procesar la arista {v.9. Si al excluir {v. ignoramos el ramo de inclusi´ n. Para el largo L(R) de cualquier ruta R ı a aplica que n 1 L(R) = (L(vi−1 . por lo cual para la ruta m´ s corta Rm´ aplica que e a ın L(Rm´ ) ≥ ın 1 2 v∈V suma de los largos de las dos aristas m´ s baratas incidentes a v.1) 2 i=1 donde los v´ rtices de la ruta han sido numerados seg´ n su orden de visita en la ruta tal e u que el primer v´ rtice tiene dos n´ meros v1 y vn+1 y el ultimo se conoce como vn y v0 para e u ´ dar continuidad a la ecuaci´ n. ignoramos el ramo de inclusi´ n. El arbol de soluciones consiste en decicir para cada uno de los n o ´ ´ 2 aristas del grafo s´ o no est´ incluida en el ciclo. el algoritmo vuelve a examinar un ramo de aumento donde no todos los a candidatos han sido examinados todav´a. podemos pensar que el grafo sea no dirigido y completo. uno busca por el ciclo o o de menor costo/peso en un grafo ponderado. En el caso general. la t´ cnica se llama ramificar-acotar (ingl´ s: branch and bound).2. (9. vi ) + L(vi . 9.1. o o ı a Normalmente el recorrido del arbol de soluciones factibles se hace en profundidad — ´ cada hoja del arbol corresponde a una soluci´ n factible. ignoramos el ramo de excluirla. mientras los v´ rtices internos son ´ o e las operaciones de aumento que construyen las soluciones factibles.2. RAMIFICAR-ACOTAR 155 aumentar una soluci´ n parcial utilizando candidatos de aumento. 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. a (9. Si al incluir {v. En cuanto una soluci´ n o o est´ encontrada. w} resultar´a que uno de los v´ rtices v o w tenga m´ s que dos aristas ı e a incidentes para la ruta.2) Suponemos que el orden de procesamiento de las aristas es fijo. w}. Cuando uno utiliza cotas para decidir cu´ les ı a ramos dejar sin explorar. Utilizamos un m´ todo tipo ramificar-acotar para buscar e la soluci´ n optima. Problema de viajante En la versi´ n de optimizaci´ n del problema de viajante (T SP).

Si ya conocemos una soluci´ n mejor a la cota as´ obtenida para el ramo. ignoramos el ramo. . OPTIMIZACION COMBINATORIA Despu´ s de haber eliminado o inclu´do aristas as´. computamos un nuevo valor de Rm´ e ı ı ın para las elecciones hechas y lo utilizamos como la cota inferior. o ı Al cerrar un ramo. regresamos por el arbol (de la manera D FS) al nivel anterior que todav´a ´ ı tiene ramos sin considerar.156 ´ ´ CAPITULO 9. Cuando ya no queda ninguno. el algoritmo termina.

ese m´ todo se e a o llama una esquema de aproximaci´ n (de tiempo polinomial) (ingl´ s: (polynomial-time) o e approximation scheme). Si existe e un m´ todo sistem´ tico para aproximar la soluci´ n a factores arbitrarios. vale la pena considerar la posilibidad de usar una soluci´ n aproximada. o Un libro de texto recomendable sobre algoritmos de aproximaci´ n es lo de Vazirani [17]. es com´ n o a u ejecutarlo varias veces y elegir el mejor de las soluciones aproximadas as´ producidas. Un algoritmo de aproximaci´ n puede o ´ o ser determinista o no determinista — en segundo caso ser´ atentido el el cap´tulo 11. ı Un algoritmo de aproximaci´ n bien dise˜ ado cuenta con un an´ lisis formal que muestra o n a que la diferencia entre su soluci´ n y la soluci´ n optima es de un factor constante. En el caso de tiempo polinomial se utiliza la abreviaci´ n P TAS.Cap´tulo 10 ı Algoritmos de aproximaci´ n o En situaciones donde todos los algoritmos conocidos son lentos. o ´ ´ Depende del area de aplicaci´ n s´ o no se puede hacer esto eficientemente. o 157 . Si a ı el algoritmo de aproximaci´ n no es determinista y ejecuta muy r´ pidamente. pero no necesariamente el optimo mismo. Un algoritmo de aproximaci´ n tiene tasa o e o constante si el valor de la soluci´ n encontrada es por m´ ximo un m´ ltiple constante del o a u valor optimo. Este o o ´ factor constante se llama el factor de aproximaci´ n y es menor a uno para problemas de o maximizaci´ n y mayor a uno para problemas de minimizaci´ n. una soluci´ n que tiene un valor o o de la funci´ n objetivo cerca del valor optimo. o sea. En muchos ´ o ı casos es posible llegar a una soluci´ n aproximada muy r´ pidamente mientras encontrar o a la soluci´ n optima puede ser imposiblemente lento. ´ Tambi´ n habr´ que mostrar formalmente que el algoritmo de aproximaci´ n tiene complee a o jidad polinomial (o polinomial con alta probabilidad en el caso no determinista). El valor extremo e ı o o ´ de ese factor sobre el conjunto de todas las instancias del problema (el m´nimo para proı blemas de maximizaci´ n y el m´ ximo para los de minimizaci´ n) se llama la tasa o ´ndice o a o ı de aproximaci´ n (ingl´ s: approximation ratio). Depende de la aplicaci´ n o o o qu´ tan cerca deber´a ser la soluci´ n aproximada a la soluci´ n optima.

1.3) En una versi´ n generalizada del problema de la mochila. si ϕ ∈ M.4) .158 ´ ´ CAPITULO 10. y aplican restricciones para cada variable xi que representa la inclusi´ n de un o cierto tipo de art´culo en M: ı (xi ∈ Z) ∧ (0 ≤ xi ≤ ci ). Entonces las variables ya no son binaria. tenemos una cierta cantidad o ı ci del art´culo ϕi disponible. / (10.i · xi . (10. (10.24: Knapsack Dado: Pregunta: una lista de N diferentes art´culos ϕi ∈ Φ donde cada obı jecto tiene una utilidad ν(ϕi ) y un peso ψ(ϕi ) y una mochila que soporta peso hasta un cierto l´mite Ψ ı ¿c´ mo elegir un conjunto de art´culos M ⊆ Φ con la reso ı tricci´ n o Ψ≥ ψ(ϕ) ϕ∈M tal que m´x a M ⊆Φ ϕ∈M ν(ϕ) . si ϕ ∈ M. la utilidad total es m´ xima? a Para solucionar este problema atrav´ s de programaci´ n entera asignamos para cada e o art´culo ϕi una variable binaria xi tal que ı xi = 1.i = ψ(ϕi )): o N i=1 aN +1. o sea.1) La funci´ n objetivo es la suma de utilidades y su coeficiente es ν(ϕi ): o N f (x) = m´x a x i=1 ν(ϕi ) · xi .2) Una restricci´ n limita la suma de pesos tal que b1 = Ψ y aN +1. sino enteras en general. Ejemplos En problema de la mochila (ingl´ s: knapsack) es un problema cl´ sico de optimizaci´ n e a o combinatoria: Problema 10. (10. 0. ALGORITMOS DE APROXIMACION 10.

Los n objetos habr´ que empaquetear en cajas de tama˜ o fijo T tal que a n T ≥ m´x{t(ϕi ) | ϕi ∈ Φ} a (10. o a Procesamos los objetos en orden. Podemos mejorar a´ n por ordenar los objetos tal que intentamos primeo ´ u ro el m´ s grande y despu´ s el segundo m´ s grande. Recorre el arbol con D FS en tiempo O (m + n) e imprime cada v´ rtice a la primera ´ e visita (o sea. Una versi´ n aun m´ s general no tiene l´mite superior: o a ı (xi ∈ Z) ∧ (xi ≥ 0). e 3. o sea. podemos pensar en el recorrido como una ´ ′ ruta larga R que visita cada v´ rtice por lo menos una vez. ´ ı 2. w) + d(w. (10. ´ Si tomamos una versi´ n del problema del viajante donde los pesos un grafo completo o ponderado son distancias entre los v´ rtices d(v. ϕ2 .1. Primero intentamos poner el objecto actualmente procesado en la primera caja de la fila. Por “cortar” de la ruta larga R′ cualquier visita a un v´ rtice que ya ha sido visitado.5) En el problema de empaquetear a cajas (ingl´ s: bin packing) tenemos un conjunto finito e de objetos Φ = {ϕ1 . Esto significa que nunca alejamos a m´ s de 70 por ciento de la a 10 soluci´ n optima. (10. EJEMPLOS 159 La funci´ n objetivo y la restricci´ n de peso total se formula igual como en el caso de 0–1 o o del problema original. Iterando as´ obtenemos alguna asignaci´ n de objetos a cajas. w) que cumplen con la desigualdad de e tri´ ngulo a d(v. Este problema es NP-completo. El D FS recorre cada arista del arbol dos veces. que nos da una distancia m´ xima de a unos 22 por ciento del optimo. 4. Si cabe. en preorden). intentamos en la ı siguiente caja. u). en cual caso se puede mostrar que a e a 11 a llegamos a utilizar al m´ ximo 9 OPT(Φ) + 4 cajas. Elige un v´ rtice de inicio cualquiera v.7) que tambi´ n es un problema NP-completo. e . Se puede mostrar que el algoritmo de aproximaci´ n simple utiliza al m´ ximo ´ o a 17 OPT(Φ) + 2 cajas. u) ≤ d(v. y si no. lo ponemos all´. ϕN }. . Un algoritmo de aproximaci´ n simple y r´ pido empieza por ordenar las cajas en una fila. Construye un arbol cubriente m´nimo en tiempo O (m log n). Denotamos ı o con OPT(Φ) el n´ mero de cajas que contienen por lo menos un objeto en la asignaci´ n u o optima. Imprime v en tiempo O (1). pero varias v´ rtices m´ s de una e e a vez.10. El algoritmo siguiente encuentra en tiempo e polinomial una soluci´ n aproximada. cada uno con un tama˜ o definido t(ϕi ) ∈ R.6) y queremos encontrar un orden de empaquetear que minimiza el n´ mero de cajas utilizau das. . imprime una lista de v´ rtices que define un o e orden de visitas que efectivamente fija la ruta R: 1. .

Sin p´ rdida de generalidad. Las tres variaciones t´picas para guiar una b´ squeda local son ı u 1. ´ ı Para lograr a comparar el resultado con el optimo. si marcamos el costo de la ruta R con c(R). (10. Un problema combinatorial se define por un conjunto espec´fico de ı instancias que son objetos combinatoriales y de la tarea de minimizar o maximizar.1. La tarea relacionada a la instancia del problema es encontrar una soluci´ n globalmente o optima i∗ ∈ S tal que f (i∗ ≤ f (i) para todo i ∈ S. recocido simulado (ingl´ s: simulated annealing). u e 2. hay que analizar el optimo en t´ rminos ´ ´ e de arboles cubrientes: si eliminamos cualquier arista de la ruta optima ROPT . Entonces. Denotamos por f ∗ = f (i∗ ) el costo ´ de la soluci´ n optima y por S ∗ el conjunto de soluciones globalmente optimas. obtenemos ´ ´ un arbol cubriente. hill-climbing). uno cuenta con una representaci´ n compacta del conjunto de las soluciones ı o factibles y un algoritmo polinomial para verificar si i ∈ S y (posiblemente otro algoritmo polinomial) para calcular el valor f (i) para cualquier i ∈ S. e a ′ sabemos que la ruta R no puede ser m´ s cara que la ruta larga R . f ) donde S es un conjunto de soluciones factibles y f : S → R es una funci´ n objetivo. resumimos las definiciones utilizadas en el libro de texto editado por o Aarts y Lenstra [1]. Por la desigualdad de tri´ ngulo. Libros buenos o ı o de b´ squeda local incluyen el libro de de Aarts y Lenstra [1] y el libro de Hoos y St¨ tzle u u [9]. . Una instancia de un problema combinatorial es un par (S. hemos ´ ı mostrado que necesariamente c(R) ≤ c(R′ ) = 2C ≤ 2c(ROPT ).2.2. podemos intentar mejorarla por b´ squeda local donde uno o u aplica operaciones peque˜ as y r´ pidamente realizadas para causar cambios peque˜ os en n a n la soluci´ n as´ que la soluci´ n mantiene factible y puede ser que mejora. b´ squeda tabu (ingl´ s: tabu search). o ´ ´ T´picamente. Definiciones b´ sicas a En esta secci´ n. o e consideramos solamente problemas de minimizaci´ n.8) ´ 10. ALGORITMOS DE APROXIMACION logramos el efecto de imprimir los v´ rtices en preorder. y u e 3. b´ squeda voraz (ingl´ s: greedy local search. Busqueda local Cuando hemos obtenido una soluci´ n heur´stica y aproximada de manera cualquiera a o ı un problema de optimizaci´ n. El costo total de R′ es a dos veces el costo del arbol cubriente m´nimo.160 ´ ´ CAPITULO 10. ya que uno puede convertir cualo quier problema de maximizaci´ n a una problema de minimizaci´ n por minimizar −f en o o vez de maximizar f . El peso de este arbol es por lo menos el mismo que el peso de un ´ ´ arbol cubriente m´nimo C. e 10.

la soluci´ n actual es una optimo local. rk u] B = [vw1 w2 . sean {s.2. . a creando una ruta nueva R′ con costo total menor tal que R′ = [tr1 r2 . aplicada en el problema del viajante en un u grafo ponderado no dirigido G = (V. . t} y {u. si no existe tal vecino. f ) si el conjunto de soluciones localmente optimas es igual al conjunto ´ de soluciones globalmente optimas. u}. t} y {s. rk uswℓ wℓ−1 . .2. wℓ st] Si el grafo G tambi´ n contiene las aristas {v. E). Se dice que la funci´ n Γ u o ´ es exacta para (S.2. t} y {u.´ 10. podemos llegar a un costo total menor por reemplazar las aristas originales {s. 10. La figura 10. t). wℓ s] R = [tr1 r2 . . w} por c(v. el vecindario del algoritmo Simplex es ´ exacto y Simplex es una b´ squeda local voraz. w2 w1 vt].2. BUSQUEDA LOCAL 161 Una funci´ n de vecindario es un mapeo Γ : S → 2S que define para cada i ∈ S un o conjunto de vecinos Γ (i) ⊆ S tal que los vecinos de una soluci´ n i son en alg´ n sentido o u “cercanos” a i. v}. t) + c(u.3. u) + c(v. Cada soluci´ n o que no tiene ning´ n vecino con menor costo es un optimo local.10) (10. t} y {s. . rk uvw1w2 . u Una opci´ n que evita tener que evaluar el costo de todos los vecinos en cada paso es o agarrar el primer vecino que ofrece una mejora. .1 ilustra el intercambio realizado. Igualmente. Una b´ squeda local voraz empieza con una soluci´ n inicial arbitraria y mueve iterativau o mente siempre al vecino con menor costo hasta que ya no exista tal vecino. Por ejemplo. o ´ Vecindarios t´picos est´ n construidos por intercambiar elementos de las instancias comı a binatoriales (por ejemplo la presencia y ausencia de un elemento o las posiciones de dos elementos). w) > 0. (10. . v} en la ruta R por las aristas m´ s baratas {v.11) ´ 10.9) En el caso que esto es verdad. Complejidad de busqueda local Consideramos ahora el problema siguiente: . . 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 = [tr1 r2 . . denotamos el costo de una arista {v. . evaluamos si e c(s. Elegimos (al azar) dos aristas de la ruta R. Ejemplo: 2-opt En esta secci´ n veremos un ejemplo de las operaciones de modificaci´ n: la la elecci´ n o o o de pares. u}. abreviada com´ nmente como 2-opt. . . v) > c(s. (10.

habr´ que presentar un vecino suyo con menor costo como un contraejemplo. y si lo es. Γx ) y una soluci´ n i. fx . si (x. La clase PLS fue dise˜ ado para capturar la complejidad n de b´ squeda local. fx ) de L. La clase NPS consiste de u ∗ relaciones R ⊆ {0. |y| = O (() g(|x|) donde g es un polinomio (polinomialmente acotada). y) ∈ R. o 1. (I) Dada una palabra x del lenguaje {0. Los cuatro vera n ı ı tices que son puntos finales de las aristas involucradas est´ n dibujados en mayor tama˜ o a n que los otros v´ rtices..1: Una modificaci´ n 2-opt para el problema del viajante: la ruta original R o est´ marcada por las flechas azules y la ruta m´ s econ´ mica R′ por las flechas verdes. 1}∗ . 1} × {0. si i no es localmente optima. BL y CL tales que.. produce un vecino i ∈ Γx con costo (estrictamente) ´ mejor al costo de i. (III ) Dada una instancia x = (Sx . el algoritmo BL determina si i ∈ Sx . . las a a o aristas eliminadas est´ n en gris y las a˜ adidas en l´nea negro descont´nua. Figura 10. calcula el costo fx (i). o ¿Es i localmente optima (por contraejemplo)? ´ Dado: Pregunta: ´ a Entonces. ALGORITMOS DE APROXIMACION . Podemos definir versiones de b´ squeda de las clases P y NP.162 ´ ´ CAPITULO 10. 1}∗ tal que para una relaci´ n R. (II ) Dada una instancia x (en su representaci´ n binaria) y un i (en representaci´ n binao o ria). AL determina si x es una representaci´ n o binaria de una instancia (Sx . f ) y una soluci´ n factible i ∈ S. el algoritmo CL determina si i o es un optimo local. y si no lo es. e Problema 10.. produce alguna soluci´ n factible o i0 ∈ Sx . y . Un problema de b´ squeda local L pertenece a PLS si existen tres u u algoritmos de tiempo polinomial AL ..25: L OCAL O PT Una instancia (S. y si lo es.

. se puede demostrar que o a PS ⊆ PLS ⊆ NPS .´ 10. e como por ejemplo T SP y M AX C UT. produce un a (x. Adem´ s. (10. dado x. Tambi´ n han definido reducciones para la clase PLS y encontrado problemas completos. BUSQUEDA LOCAL 163 2.12) aunque no se sabe si son subconjuntos propios. Si adem´ s existe un algoritmo polinomial que decide a R (o sea.2. existe un algoritmo polinomial que determina si un dado par (x. la relaci´ n pertenece a la clase o PS . y) ∈ R si tal par existe y reporta “no” en otro caso). Parece improbable que sean iguales PS y PLS y hay fuertes indicaciones (aunque no demostraci´ n formal) que PLS no coindica o con NPS . Aplica que PS = NPS si y s´ lo si P= NP. y) pertenece a R (polinomialmente reconocida).

164 ´ ´ CAPITULO 10. ALGORITMOS DE APROXIMACION .

proa n babilidades tambi´ n juegan un papel importante en an´ lisis del caso promedio (secci´ n e a o 7. En esta secci´ n esperamos que el lector tenga conocimientos b´ sicos de probabilidad — o a buenos libros de texto sobre probabilidad incluyen el libro de Milton y Arnold [12]. (11. E [X] es la ˜ esperanza (matem´ tica) (tambiA c n: valor esperado) a E [X] = x x Pr [X = x] . X y Y son variables aleatorias. Pr [X = x] es la probabilidad que X tenga el valor x.3).Cap´tulo 11 ı Algoritmos aleatorizados Algoritmos aleatorizados son algoritmos que incorporan adem´ s de instrucciones detera ministas algunas elecciones al azar. (11. el an´ lisis del comportamiento del n a algoritmo necesariamente involucra calculaciones de probabilidades para determinar propiedades tales como ¿Con qu´ probabilidad el algoritmo da el resultado correcto? e ¿Qu´ es la esperanza del n´ mero de los pasos de computaci´ n necesarios para su e u o ejecuci´ n? o (En el caso de algoritmos de aproximaci´ n aleatorizadas:) ¿Qu´ es la deviaci´ n o e o esperada de la soluci´ n optima? o ´ 165 . Seg´ n u nuestra notaci´ n.2) Al dise˜ ar un algoritmo que haga elecciones al azar. x y y son algunas valores que pueden o tomar estas variables. y Var [X] la varianza o Var [X] = E (X − E [X])2 = E X 2 − (E [X])2 .1) donde la sumaci´ n extiende por todo x en el rango de X. Adem´ s del dise˜ o de algoritmos aleatorizados. Un ejemplo simple de un algoritmo aleatorio ser´a una versi´ n de la ordenaci´ n r´ pida ı o o a donde el elemento pivote est´ elegido uniformemente al azar entre los elementos para a ordenar.

los certificados concisos de los problemas NP). Si tenemos un algoritmo Monte Carlo con probabilidad de error 0 < p < 1. no todos los algoritmos aleatorizados dan resultados incorrectos — el caso ideal ser´a que un resultado incorrecto sea imposible o ı que ocurra con probabilidad muy peque˜ a. . Un algoritmo de decisi´ n tipo Monte o ´ 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”. E [f (X)] ≥ f (E [X]). Cada algoritmo Monte Carlo que sabe distinguir entre haberse equivocado se puede convertir a un algoritmo Las Vegas por repertilo hasta obtener exito — este tiene obviamente ´ efectos en su tiempo de ejecuci´ n. El m´ todo del momentum segundo Sea X una variable aleatoria entera. Tambi´ n si tenemos un algoritmo r´ pido para verificar o e a si una dada “soluci´ n” es correcta (cf. Entonces Pr [X ≥ µ] > 0 y Pr [X ≤ µ] > 0. o podemos convertir un algoritmo Monte Carlo a un algoritmo Las Vegas por repetirlo.166 ´ CAPITULO 11. Pr [|X − E [X]| ≥ α] ≤ α−2 Var [X]. Desigualdad de Chebyshev Para todo α > 0. igual como el libro de Motwani y Raghavan [14]. Cotas de Chernoff Para α > 0. n Algoritmos con una probabilidad no cero de fallar (y probabilidad no cero de dar el resultado correcto) se llaman algoritmos Monte Carlo. Un algoritmo que siempre da el resultado correcto se dice un algoritmo Las Vegas. mientras al definir algoritmos (deterministas) exigimos que siempre termine su ejecuci´ n o y que el resultado sea el deseado. o Desigualdad de Markov Sea X una variable aleatoria no negativa. Para todo α > 0. la parte aleatoria est´ limitada al tiempo de ejecuci´ n del algoritmo. para todo t > 0 aplica que Pr [X ≥ α] ≤ e−tα E etX y para todo t < 0 aplica que Pr [X ≤ α] ≤ e−tα E etX . Tal algoritmo tiene error unilateral si siempre contesta correctamente en uno de los dos casos pero tiene probabilidad no cero de equivocarse en el otro. ALGORITMOS ALEATORIZADOS Una observaci´ n interesante aqu´ es que estamos utilizando una definici´ n m´ s “flexible” o ı o a de algoritmo: un algoritmo aleatorizado tiene “permiso” para dar una salida incorrecta. El libro de texto de Mitzenmacher y Upfal ´ [13] contiene varios ejemplos concretos de su uso. Pr [X ≥ α] ≤ α−1 E [X]. lo podemos convertir a un algoritmo Monte Carlo con probabilidad de error arbitrariamente peque˜ a n 0 < q ≤ p simplemente por repetir ejecuciones independientes del algoritmo original k veces tal que pk ≤ q. Resumimos ahora algunos resultados de la teor´a de probabilidad que pueden resultar ı utiles al contestar las preguntas mencionadas. Desigualdad de Jensen Si f es una funci´ n convexa. Entonces e Pr [X = 0] ≤ (E [X])−2 Var [X]. mientras a o los algoritmos Monte Carlo tienen hasta sus salidas “aleatorias”. En tal algoritmo. Sin embargo. El m´ todo probabilista Sea X una variable aleatoria definida en el espacio de probabie lidad S tal que E [X] = µ.

COMPLEJIDAD COMPUTACIONAL 167 11.1.5) x ∈ L ⇐= Pr [A(x) = “s´”] < 1 . ingl´ s: probabilistic polya e e nomial time) que consiste de los lenguajes L para las cuales existe un algoritmo aleatorizado A con tiempo de ejecuci´ n de peor caso polinomial y para todo x ∈ Σ∗ aplica o que x ∈ L ⇐= Pr [A(x) = “s´”] > 1 .11. ingl´ s: zero-error probabilistic polynomial time): e ZPP = RP ∩ coRP. ı x ∈ L ⇐= Pr [A(x) = “s´”] = 0. El algoritmo A es entonces un algoritmo Monte Carlo con error unilateral. ı 1 x ∈ L ⇐= Pr [A(x) = “s´”] ≤ 4 . Problemas abiertos interesantes incluyen por ejemplo si BPP es un subclase de NP. ingl´ s: o a 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´ n de peor caso polinoo ∗ mial y para todo x ∈ Σ aplica que 3 x ∈ L ⇐= Pr [A(x) = “s´”] ≥ 4 . / ı 2 Por ejecutar A varias veces. ı 2 (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.3) donde p > 0 (com´ nmente se define p = 0. ingl´ s: randomized polynomial time) es la e clase de todos los lenguajes L que cuenten con un algoritmo aleatorizado A con tiempo de ejecuci´ n polinomial del peor caso tal que para cada entrada x ∈ Σ∗ o x ∈ L ⇐= Pr [A(x) = “s´”] ≥ p. pero la elecci´ n del valor de p es de verdad u o arbitraria).5. o e Una versi´ n m´ s estricta de PP se llama BPP (tiempo polinomial aleatorizado. pero no podemos garantizar que un n´ mero peque˜ o de repeticiones basta para mejorar significativamente u n la situaci´ n. Para m´ s informaci´ n sobre las clases de complejidad aleatorizada. / ı (11. Complejidad computacional La clase RP (tiempo polinomial aleatorizado. recomendamos el libro de a o Papadimitriou [15] y el libro de Motwani y Raghavan [14]. .1. La existencia de un algoritmo Las Vegas polinomial muestra que un lenguaje pertenece a las clases RP y coRP las dos. De hecho. / ı (11. La clase coRP es la clase con error unilateral en el caso x ∈ L pero sin error con / las entradas x ∈ L. (11. esta clase de lenguajes con algoritmos Las Vegas polinomiales se denota por ZPP (tiempo polinomial aleatorizado cero-error.4) Una clase m´ s d´ bil es la PP (tiempo polinomial aleatorizada. podemos reducir la probabilidad de error.

Todo lo que mostramos u aplicar´a tambi´ n para grafos (simples o multigrafos) ponderados con pesos no negativos. permitimos que entre un par de v´ rtices exista e m´ s que una arista en el grafo de entrada G. y para toda arista {s. El a mejor algoritmo determinista conocido para el flujo m´ ximo tiene complejidad asint´ tica a o O (nm log(n2 /m)) y habr´a que repetirlo n(n − 1) veces para considerar todos los pares ı de fuente-sumidero en la forma m´ s simple. Considerando que un grafo simple es un a caso especial de un multigrafo. todo esto significa que para resolver el problema de corte m´nimo. “movemos” la arista a apuntar a w / por reemplazarla por {s. Eso. que hace esa complejidad todav´a bastante lento. Si contraemos un conjunto F ⊆ E. La arista contra´da e e ı desaparece. el nombre del conjunto combinado en la estructura ser´ w y sus miembros son u u w. Ahora vamos a considerar multigrafos. w} para todo s ∈ {u.2. aunque es polinomial. en tiempo O n (log n) a . / Con una estructura unir-encontrar. La operaci´ n “b´ sica” del algoritmo ser´ la contracci´ n de una arista. ALGORITMOS ALEATORIZADOS 11.2) C ⊆ V de G. se puede demostrar que basta con (n − 1) repeticiones. o Despu´ s de las contracciones. ı e Para que sea interesante el problema. v}. u} por aristas {s. a Sin embargo. Problema de corte m´nimo ı Como un ejemplo. el corte m´nimo con capacidad cero se obtiene por agrupar algunos componentes en C y los ı dem´ s en V \ C. Al contraer la arista {u. Con unos trucos m´ s se puede mejorar la situaci´ n a o 2 as´ que la complejidad de M IN C UT queda tambi´ n en O (nm log(n /m)). Para grafos ı e densos. originalmente cada v´ rtice tiene su a e propio conjunto.168 ´ CAPITULO 11. si elegimos iterativamente al azar entre las aristas presentes una para contracci´ n hasta que quedan s´ lo dos v´ rtices. el o o e n´ mero de aristas en el multigrafo final entre esos dos v´ rtices corresponde a un corte de u e G. Igualmente reemplazamos aristas {s. u} tal que s ∈ {u. el resultado no depende del orden de contracci´ n. podemos f´ cilmente mantener informaci´ n sobre los a o subgrafos representados. Empezando con el grafo de entraga G. Estamos buscando un corte (ver secci´ n 4. v} reemplazamos los dos v´ rtices u u v por un v´ rtice nuevo w. veremos un algoritmo aleatorizado para el problema M IN C UT.5. los v´ rtices que quedan representan subgrafos conexos del e e grafo original. habr´ que suponer que la entrada G sea conexo a (verificado por ejemplo por D FS en tiempo polinomial) — con varios componentes. podemos imprimir los conjuntos C y V \ C que corresponden . v}. suele ser algo lento en la pr´ ctica. Al contraer la arista o a a o {u. tenemos un algoı 2 ritmo determinista de tiempo Ω (n m). Entonces. v}. pero en cualquier caso. el resultado del algoritmo que presentamos aplica igual a grafos simples. V \ o o C). La figura 11. ı En esta secci´ n desarrollamos un algoritmo aleatorizado que resuelve a M IN C UT m´ s o a 2 O(1) r´ pidamente. La capacidad del corte es el n´ mero de aristas que lo crucen.1 muestra un ejemplo. o sea. a El problema M IN C UT se puede resolver por un algoritmo que compute el flujo m´ ximo a del grafo de entrada. m ∈ O (n2 ). w}. una partici´ n (C. o sea.

Por la tercera observaci´ n. ı u e ı El n´ mero de aristas satisface m ≥ 1 nk si la capacidad del corte m´nimo es k. e a e a los dos v´ rtices que quedan en la ultima iteraci´ n. . Quedan ni = n − i + 1 aristas en el grafo actual ı Gi . por la segunda observaci´ n. u 2 La capacidad del corte m´nimo en G despu´ s de la contracci´ n de una arista es ı e o mayor o igual a la capacidad del corte m´nimo en G. o En cada iteraci´ n eliminamos un v´ rtice. Denotamos |F | = k.´ 11. por lo menos 1 ni k aristas. ı Fijamos un corte m´nimo de G = (V. PROBLEMA DE CORTE MINIMO 169 Figura 11.2. podr´amos aumentar la probabilidad de haber ı ı encontrado el corte m´nimo. Las siguientes observaciones nos ayudan: ı Si la capacidad del corte m´nimo es k. El grafo Gi tiene. aunque (posiblemente) en forma contraida. E) con las aristas F ⊆ E siendo las aristas que ı cruzan de C a V \ C. el conjunto de aristas F todav´a define un corte m´nimo o ı ı en el grafo actual Gi y los v´ rtices de los dos lados del corte definido por las aristas en F e corresponden a los conjuntos C y V \ C. ning´ n v´ rtice puede tener grado menor a k.1: La arista gruesa roja en el grafo original (un fragmento mostrado a la izquierda) est´ contraida as´ que sus puntos finales (los v´ rtices amarillos) est´ n reemplazados a ı e a por un s´ lo v´ rtice (rojo en el frangmento modificado a la derecha) y las aristas entrantes o e de los v´ rtices eliminados est´ n “redirigidas” al v´ rtice de reemplazo. As´ por repetir el algoritmo. por lo cual el algoritmo de contracci´ n tiene o e o complejidad cuadr´ tica en n. e ´ o La elecci´ n uniforme de una arista para contraer se puede lograr en tiempo lineal O (n). a Lo que queda mostrar es que el corte as´ producido sea el m´nimo con una probabiliı ı dad no cero. por lo cual la o 2 probabilidad que la siguiente iteraci´ n contraiga una de las aristas de F es menor o igual o Suponemos que estamos en la iteraci´ n i del algoritmo de contracci´ n y que ninguna o o arista en F ha sido contraida todav´a.

hay que aumentar a a la probabilidad de que un corte m´nimo pase por el algoritmo sin ser contraido. As´ podemos acotar la probabilidad p que ninguna arista de F sea contraida ı durante la ejecuci´ n del algoritmo: o n−2 p ≥ = i=1 n −1 2 (1 − 2(n − i + 1)−1 ) = 2 . n(n−1) (11. Como cada grafo tiene por lo o menos un corte m´nimo. digamos O (n2 log n) veces ya da raz´ n de esperar que el corte o de capacidad m´nima encontrado sea el corte m´nimo del grafo de entreda. ALGORITMOS ALEATORIZADOS a 2ni −1 . Si en vez de contraer hasta ı ı √ e que queden dos v´ rtices.170 ´ CAPITULO 11. un an´ lisis detallado muestra que llegamos a la complejidad a O n2 (log n)O(1) . ı ı Para hacer que el algoritmo Monte Carlo resultante sea m´ s r´ pida.7) Hemos establecido que un corte m´nimo espec´fido de G corresponde al resultado del ı ı algoritmo de contracci´ n con probabilidad p ∈ Ω (n−2 ). ı ´ Si repetimos el algoritmo. contraemos primero hasta aproximadamente n/ 2 v´ rtices y e despu´ s hacemos dos llamadas recursivas independientes del mismo algoritmo con el e grafo Gi que nos queda. la probabilidad de exito del algoritmo es por lo menos Ω (n−2 ). Una ı posibilidad de mejora est´ basada en la observaci´ n que la probabilidad de contraer una a o arista del corte m´nimo crece hac´a el final del algoritmo. La mayor´a de los detalles de la demostraci´ n est´ n explicados en el ı o a libro de Motwani y Raghavan [14]. .

Dos atomos con interacci´ n ferromagn´ tica llegan a su estado de energ´a m´nima cuando ´ o a ı ı tienen el mismo sentido. Tal organizaci´ n permanece vigente por e ´ o algo de tiempo a´ n despu´ s de haber eliminado el campo magn´ tico que lo caus´ . estudiamos un fen´ meno interesante de complejidad en algunos probleı o mas. Los atomos del material ı e e ´ pueden acoplarse aleatoriamente de la manera ferromagn´ tica o altenativamente de la e manera antiferromagn´ tica. ı ı El modelo matem´ tico de Ising representa las interacciones como aristas y los atomos a ´ 171 . pero al someter el material a tal campo a magn´ tico. Este cap´tulo est´ basada en el libro de Hartmann y Weigt [8]. en algunas ocaciones se ha observado que ciertas combinaciones de los par´ metros a de generaci´ n causan que instancias del mismo tama˜ o tienen un tiempo de ejecuci´ n o n o promedio mucho m´ s largo de lo que uno obtiene con otras combinaciones. ı a o 12. En la presencia de un ı ´ campo magn´ tico muy intenso. Los dos tipos de magnetismo se pierde en ´ u temperaturas altas. e En ferromagnetismo. Ese “pico” a en el tiempo de ejecuci´ n con una cierta combinaci´ n de par´ metros se conoce como una o o a transici´ n de fase. se puede causar que se piera algo del antiferromagnetismo e y que los atomos se alinean seg´ n el campo.Cap´tulo 12 ı Transiciones de fase En este cap´tulo. En falta de presencia de un campo magn´ tico o e intenso. mientras dos atomos con interacci´ n antiferromagn´ tica llegan ´ o e a su estado de energ´a m´nima al tener sentidos opuestos. u e e o En antiferromagnetismo. Al generar instancias del problema aleatoriamente seg´ n alg´ n conjunto de par´ meu u a tros. los atomos gradualmente se alinean. los atomos se alinean en la misma direcci´ n pero sentido inverso ´ o as´ que un atomo tiene el sentido opuesto al sentido de sus vecinos. todos los momentos magn´ ticos de los part´culos de la materia se e ı alignan en la misma direcci´ n y sentido.1. las alineaciones pueden est´ r aleatorias. Modelo de Ising Un vidrio de esp´n (ingl´ s: spin glass) es un material magn´ tico.

Cada v´ rtice puede tener uno de dos valores. hasta determinar el valor m´nimo a ı alcanzable para la funci´ n hamiltoniana se complica. Denotamos el sistema por G = o (V. Una funci´ n Jij da la fuerza de la interacci´ n entre los v´ rtices i y j (cero si no hay o o e interacci´ n) y un valor no cero implica la presencia de una arista en E. Jij > 0.2) Es una medida de energ´a total del sistema G. Figura 12. Al subir la temperatura del sistema. e En temperaturas bajas el sistema queda organizado para minimizar “conflictos” de interacciones. a La funci´ n hamiltoniana se define como o H(G) = − Jij σi σj . Se usa el t´ rmino frustraci´ n a referir a situaciones donde las combinaciones de interace o ciones que no permiten a todo los part´ culos llegar a su estado de energ´a m´nima (ver u ı ı figura 12.172 ´ CAPITULO 12. mientras interacciones antiferromagn´ ticas tienen e e Jij < 0. {i. T´picamente. por lo menos una interacci´ n o est´ en conflicto (marcado con una zeta sobre la arista). las aristas forman una reja regular — para dos dimensiones.j}∈E (12. en un cierto valor cr´tico Tc de repente se ı pierde la organizaci´ n global. En una interacci´ n o o ferromagn´ tica entre i y j. e e σi = {−1. el problema de encontrar .1: Un sistema de tres atomos (representados por los v´ rtices) con dos inter´ e acciones ferromagn´ ticas (aristas azules) y una interacci´ n antiferromagn´ tica (aristas e o e rojas) que no puede alcanzar estado de energ´a m´nima. o Cuando ambos tipos de interacciones est´ n presentes.1) que representan los dos posibles sentidos de alineaci´ n. TRANSICIONES DE FASE como v´ rtices σi . mientras ı los valores de σi pueden cambiar seg´ n la temperatura ambiental. 1} (12.1 para un ejemplo). en los casos estudiao ı dos. En cada una de las ocho posiı ı bles configuraciones de los sentidos (marcados con ∧ y ∨). En temperatura T = 0. u el sistema alcanza su energ´a m´nima. Las configuraciones que tienen energ´a m´nima se ı ı ı ı llaman estados fundamentales (ingl´ s: ground state). Pensamos en Jij como algo fijo. E).

12.78. mientras para valores n a grandes de ℓ (mayores a uno). La probabilidad de encontrar un ciclo hamiltoniano de largo D depende obviamente de una manera inversa del superficie elegido A y del n´ mero de v´ rtices. p ≈ 0. p ≈ 1.12. A y D. aunque no lo alcanzamos en el nivel formalidad.4) ℓ= √ An 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 fijo A. 12.78 [18]. Entonces. Por ejemplo. Tambi´ n e has estudiado sistemas tipo Ising en grafos aleatorios uniformes. por colocar n v´ rtices (o sea. es exponencial. u e Al estudiar el tiempo de ejecuci´ n de un cierto algoritmo tipo ramificar-acotar para T SP D. j) = (x1 − xj )2 “(yi − yj )2 .5). PROBLEMA DEL VIAJANTE (TSPD) 173 un estado fundamental es polinomial.3) La pregunta es si la instancia contiene un ciclo hamiltoniano de costo total menor o igual a un presupuesto D. uno observa que con peque˜ os valores de ℓ (menores a 0. o sea. Seguimos por mayor parte el libro de texto de Bollobas [3]. la variaci´ n de decisi´ n del problema de viao o jante. Los costos de las aristas e ser´ n las distancias euclidianas de los puntos de los v´ rtices: a e dist (i.3. Familias y propiedades Una familia G de grafos incluye todos los grafos que cumplen con la definici´ n de la o familia. hay que elegir los valores n. 12. Las curvas de p versus ℓ suben r´ pidamente desde cero hasta uno cerca del valor ℓ = 0. La definici´ n est´ t´picamente compuesta por par´ metros que controlen el tama˜ o o a ı a n e de la familia. (12. todos los grafos con k v´ rtices forman una familia y todos los grafos k-regulares otra familia (y su intersecci´ n no es vac´a). ciudades) aleatoriamente en un plano cuadr´ tico de e a superficie A.2. o ı . para crear una instancia del problema. un ejemplo cl´ sico de o a transiciones de fase de cierto tipo. Con diferentes valores de n.1.2. denotamos las coordenadas de v´ rtice i por xi y yi . Problema del viajante (T SP D) Generamos instancias para el T SP D. u e Definimos un “largo escalado” D (12. o los tiempos mayores ocurren con instancias que tienen valores de ℓ cerca de 0. independientemente del n´ mero de v´ rtices. Grafos aleatorios uniformes En esta secci´ n estudiamos comportamiento de grafos aleatorios. pero en tres dimensiones.3.

El segundo modelo se conoce como Gn. (12. n} y generamos E de la manera siguiente: considera a la vez cada uno de los n pares de v´ rtices distintos u y v e incluye la arista {u. . si aplica que G y G′ sea isomorfos. (12. e Decimos que “casi cada grafo” G = (V. . 6]: fijar los dos n y m y o o e elegir uniformemente al azar uno de los posibles conjuntos de m aristas. Con este modelo. . . Modelos de generaci´ n Para generar un grafo aleatorio uniforme (simple. Un ejemplo de tal propiedad ser´a “el grafo contiene un tri´ ngulo” o “el grafo contieı a ne un camino de largo k” — por a˜ adir aristas o v´ rtices al grafo. . Lo que significa ser cerrado es que al tener dos grafos G ∈ P y G′ ∈ G. es decir Gt = (V. Una propiedad es convexa si el hecho que G′ es subgrafo de G y G′′ es subgrafo de G′ tales que G′′ . . no dirigido). 1. E).p . se fija n y una probabilidad p. Et ) — lo que cambia durante el proceso es el conjunto de las aristas. . TRANSICIONES DE FASE Una propiedad P es monotona si de G ∈ P y G es subgrafo de G′ . no es posible hacer n e desaparecer estas propiedades. Para generar un grafo G = (V. implica que tambi´ n G′ ∈ P. G ∈ P. El n´ mero de u posibles maneras de elegir las aristas entre v´ rtices distintos es e n 2 m . necesariamente G′ ∈ P tambi´ n. 2. .2. Una tercera opci´ n para generar grafos uniformes dado un conjunto de n v´ rtices V = o e N {1. E) de la familia Gn la definici´ n de cual depende o de n = |V | tiene P si para G ∈ G n→∞ l´ Pr [G ∈ P] = 1. ım (12. v} indepene 2 dientemente al azar con probabilidad p.174 ´ CAPITULO 12. .5) o 12. tenemos n (12.6) E [m] = p 2 E [deg (u)] = p(n − 1). . asignamos V = {1. hay dos modelos b´ sicos: a en el modelo de Gilbert. se dice que “el grafo G tiene la propiedad P”. .7) La otra opci´ n fue estudiada en detalle por Erd˝ s y R´ nyi [5. 2. n}. . N tal que (I) cada Gt es un grafo en el conjunto V . conodido como el modelo Gn. .m .8) aunque en realidad los automorfismos reducen el n´ mero de grafos distintos que se pueda u generar.3. Cuando graf o ∈ P. e Una propiedad de grafos de la familia G es un subconjunto cerrado P ⊆ G. implica que G′ ∈ P. es definir un proceso (estoc´ stico) como una sucesi´ n (Gt )0 donde t reprea o senta el tiempo discreto que toma valores t = 0.

o sea. .m . Llamamos o 0 el momento τ cuando Gt ∈ P el tiempo de llegada (ingl´ s: hitting time) del proceso a la e propiedad. Se ha mostrado. n−1 +1 . ın (12. que varias propiedades o e monotonas aparecen muy de repente en tales procesos: casi ning´ n Gt los tiene antes de u un cierto momento y casi todos Gt lo tienen despu´ s de ese momento. y (IV ) N = n 2 .3. en G0 cada v´ rtice est´ aislado y GN es el grafo completo de n vertices. τ = τ (n) = m´ {Gt ∈ P} . sobre el conjunto e de todos los N! procesos posibles. |Et | = t. (12.12.m son todos posibles resultados intermedios de todos los procesos posibles que cumplan con la definici´ n. 12. Definimos P como la propiedad que el grafo sea conexo. Comportamiento repentino Suponemos que P sea una propiedad monotona de grafos. 175 (III ) Gt−1 es un subgrafo de Gt . EN .10) con cualquier funci´ n f (n) → ∞. GRAFOS ALEATORIOS UNIFORMES (II ) Gt tiene t aristas para cada valor de t. El cota superior es el ´ o .3. empezando de G0 y terminando en GN : E0 ⊂ E1 ⊂ .3. Aparici´ n de un componente gigante o Continuamos con los procesos (Gt )N y estudiamos el tama˜ o de los componentes conen 0 o e a xos de Gt . Kn . En t´ rminos vagos. o 12. . Podemos definir un mapeo entre el espacio de todos los procesos posibles en el momento t = m y los grafos Gn.3. Observamos el proceso de generaci´ n (Gt )N y checamos en cada instante t si o no Gt tiene la propiedad P. La cota inferior viene del caso “mejor”: las primeras n − 1 aristas forman un arbol de expansi´ n. 2 el grafo llega a tener la propiedad P por la primera vez. Gt ∈ P para todo t ≥ τ y que τ puede variar entre diferentes instancias del proceso con un valor n fijo. En alg´ n u momento. Podemos definir una funci´ n umbral para la propiedad P en t´ rminos del valor de n o e utilizado al definir el proceso: U(n) es la funci´ n umbral de P si aplica que o Pr U(n)f (n)−1 < τ (n) < U(n)f (n) → 1 (12.4.9) t≥0 Nota que por ser monotona P. la funci´ n umbral es el “tiempo o e o cr´tico” antes de que es poco probable que Gt tenga P y despu´ s de que es muy probable ı e que la tenga. Por definici´ n. ya desde el trabajo de Er˝ s y R´ nyi.11) τ ∈ n − 1. por lo cual los grafos Gn.

q es bajo.13) n n n 1 Entonces. cuando el grado promedio del grafo llega a aproximadamente uno (o sea c ≈ 2 ). q es alto. o De la ecuaci´ n 12. .176 ´ CAPITULO 12. aparece un componente gigante en el Gt . Interpretando el valor de c llegamos a notar que est´ relacionado con el grado promedio a de los v´ rtices: e 2m 2⌊cn⌋ v∈V deg (v) = = ≈ 2c. pero para c > 1 — que es todav´a un valor muy peque˜ o — un ı 2 Gt cuando t = m tiene un componente conexo de aproximadamente ǫn v´ rtices donde e ǫ > 0 unicamente depende del valor de c y el resto de los v´ rtices pertecen a componentes ´ e mucho menores. n En vez de estudiar exactamente el momento cuando todo el grafo ya sea conexo. El resultado interesante sobre los tama˜ os de los componentes es n 2 1 que con c < 2 . (12. Fijamos un valor m con la ayuda de un par´ metro constante a c tal que m = ⌊cn⌋. de nuevo se encuentra que para valores bajos de x. tenemos que el grado promedio k de un v´ rtice en tal grafo es o e k = p(n − 1) = c n−1 ≈ c.14) y podemos hablar del par´ metro c como en grado promedio (para grandes valores de n). resumimos algunos resultados sobre la cantidad de aristas necesarias para que el grafo tenga un componente conexo grande. y la subida ocurre de una manera repentina en un cierto valor de x sin importar el valor de n. n (12.7. e mientras para valores grandes de x. (12.p tal que p = c/n.4. usando como el modelo de generaci´ n el Gn.12) donde c ∈ [0. 12. (n−1)] . TRANSICIONES DE FASE peor caso: uno de los n v´ rtices permanece aislado as´ que todas las aristas a˜ adidas caen e ı n entre los dem´ s hasta que ellos ya formen una camarilla de n − 1 v´ rtices. despu´ s de que a e e ya necesariamente se conecta el grafo al a˜ adir la arista siguiente. a Estudiando la probabilidad q de la existencia de una cubierta con una cierta candidad x de v´ rtices cuando se fija c. el tama˜ o del mayor componente conexo en un Gt cuando t = m es de n ı n orden logar´tmico en n. Cubierta de v´ rtices (V ERTEX C OVER ) e Tambi´ n en el problema de cubierta de v´ rtices se encuentra una transici´ n de fase con un e e o algoritmo ramificar-acotar.

Hungary. Morgan Kaufmann. H. 3:1259–1263. Akad´ miai Kiad´ . Phase Transitions in Combinatorial Optimization Problems : Basics. In Selected Papers of Alfr´ d a o e e e R´ nyi. San Francisco. W. Freeman. 1962. Boston. McGraw-Hill Book Co. ´ [10] Jon Kleinberg and Eva Tardos. USA. Landis. Reading. volume 3 of The Art of Computer Programming. o [7] Michael R. [11] Donald E. Budapest. USA. MA. USA. 1976. Hungary.Bibliograf´a ı [1] Emile Aarts and Jan Karel Lenstra. Sorting and Searching. CA. 1998. Charles E. 2006. Wiley-VCH. Akad´ miai Kiad´ . second edition. 2005. Kut. 177 . [4] Thomas H. [5] P´ l Erd˝ s and Alfr´ d R´ nyi. pages 308–315. volume 2. San Francisco. First publication in M TA Mat. Addison-Wesley. Weinheim. MA. [8] Alexander K. 1960. 1979. Garey and David S. Int. UK. 2001. UK. K¨ zl. Leiserson. second edition.. Number 73 in Cambridge Studies in Advanced e a Mathematics. CA. Johnson. Cormen. Introduction to Algorithms. In Selected Papers a o e e of Alfr´ d R´ nyi. Budapest. MA. Inc. Math. e e e o 1976. USA. volume 2. second edition. Hartmann and Martin Weigt. [9] Holger H. pages 482–525. On the evolution of random graphs. [3] B´ la Bollob´ s. On random graphs i. M. Adel’son-Vel’skii and E. Rivest.. First e e o publication in Publ. USA. Local Search in Combinatorial Optimization. John Wiley & Sons. Stochastic Local Search: Foundations and u Applications. Soviet Mathematics Doklady. 1997. Addison-Wesley / Pearson Education. An algorithm for the organization of information. Germany. M.. and Clifford Stein. Cambridge. Cambridge University Press. Boston. Hoos and Thomas St¨ tzle. Debrecen 1959. [6] P´ l Erd˝ s and Alfr´ d R´ nyi. [2] G. Random Graphs. Ronald L. 2001. Algorithms and Statistical Mechanics. Knuth. Algorithm Design. Computers and Intractability : A Guide to the Theory of NP-Completeness. Chichester. Inc. 2005.

USA. 1995. Lecture Notes in Economics e & Mathematical Systems. Cambridge University Press. Vidal. Computational Complexity. Germany. Singapore. Randomized Algorithms. USA. third edition. MA. Papadimitriou. . USA. Introduction to Probability and Statistics : Principles and Applications for Engineering and the Computing Sciences. NY. [16] Christos H. 1995. Approximation Algorithms. Berlin / Heidelberg.. McGrawHill. Arnold. [17] Vijay V. 2005. [18] Ren´ V. editor.178 ´ BIBLIOGRAFIA [12] Janet Susan Milton and Jesse C. Springer-Verlag GmbH. 1993. [13] Michael Mitzenmacher and Eli Upfal. 2001. Cambridge University Press. Dover Publications. Inc. Cambridge. Probability and Computing : Randomized Algorithms and Probabilistic Analysis. Germany. Reading. Springer-Verlag GmbH. Berlin. Applied Simulated Annealing. Combinatorial Optimization : Algoritms and Complexity. NY. 1994. UK. Papadimitriou and Kenneth Steiglitz. V. [14] Rajeev Motwani and Prabhakar Raghavan. England. New York. Vazirani. 1998. [15] Christos H. Addison Wesley. Mineola.

Listas de s´mbolos ı Elementos y ordenamiento a. b. . a=b a=b a≈b a<b a>b a≤b a≥b a≪b a≫b elementos el elemento a es igual al elemento b el elemento a no es igual al elemento b el elemento a es approximadamente igual al elemento b el elemento a es menor al elemento b el elemento a es mayor al elemento b el elemento a es menor o igual al elemento b el elemento a es mayor o igual al elemento b el elemento a es mucho menor al elemento b el elemento a es mucho menor al elemento b 179 . . .

An o el conjunto que es complemento del conjunto A la diferencia de los conjuntos A y B un par ordenado de elementos el producto cartesiano de los conjuntos A y B el factorial de k el coeficiente binomial Ai i=1 n Ai i=1 ¯ A A\B (a. B. . . an } a∈A a∈A / |A| {a | a ∈ A} A=B A=B A⊆B A⊂B A B A∪B A∩B n conjuntos el conjunto de los n´ meros reales u el conjunto de los n´ meros enteros u el conjunto vaci´ o un conjunto de n elementos el elemento a pertecene al conjunto A el elemento a no pertenece al conjunto A la cardinalidad del conjunto A el conjunto de los elementos a que cumplen con la propiedad que a ∈ A los conjuntos A y B contienen los mismos elementos los conjuntos A y B no contienen todos los mismos elementos el conjunto A es un subconjunto de B o igual a B el conjunto A es un subconjunto propio de B el conjunto A no es un subconjunto de B la uni´ n de los conjuntos A y B o la intersecc´on de los conjuntos A y B ı´ la uni´ n de los n conjuntos A1 . . .180 ´ BIBLIOGRAFIA Conjuntos y conteo A. . . . An o la intersecci´ n de los n conjuntos A1 . . . . b) A×B k! n k . A2 . . a2 . . . R Z ∅ {a1 . . A2 . .

entonces b o la equivalencia: a si y s´ lo si b o cuentificaci´ n universal: para todo a ∈ A o cuantificaci´ n existencial: existe un a ∈ A o . x > 0 f (n) = O (g(n)) |f (n)| ≤ c |g(n)| para alg´ n constante c y valores suficienu temente grandes de n f (n) = Ω (g(n)) |f (n)| ≥ |g(n)| para alg´ n constante c y valores suficienteu mente grandes de n f (n) = Θ (g(n)) c′ |g(n)| ≤ |f (n)| ≤ c |g(n)| para algunos constantes c. c′ y valores suficientemente grandes de n g:A→B L´ gica matem´ tica o a a xi ⊤ ⊥ T φ T |= φ |= φ ¬a a∨b a∧b a→b a↔b ∀a ∈ A ∃a ∈ A una proposici´ n l´ gica o o una variable booleana verdadero falso una asignaci´ n de valores o una expresi´ n booleana o T satisface φ φ es una tautolog´a ı la negaci´ n: no a o la disyunci´ n: a o b o la conjunci´ n: a y b o la implicaci´ n: si a.´ BIBLIOGRAFIA 181 Mapeos y funciones un mapeo del conjunto A al conjunto B. donde A es el dominio y B el rango g(a) la imagen del elemento a ∈ A en el rango bajo el mapeo g −1 g (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´ n f o |x| el valor absoluto de x ∈ R logb (x) el logaritmo a base b de x ∈ R.

E) v´ rtices e una arista no dirigida entre los v´ rtices v y w e una arista dirigida del v´ rtice v al v´ rtice w e e el peso de la arista {v. Z. u. w el grado del v´ rtice v e el grado de entrada del v´ rtice v e el grado de salida del v´ rtice v e la distancia del v´ rtice v al v´ rtice w e e el di´ metro del grafo G a la densidad del grafo G el grafo completo de orden k el grafo bipartitio completo de conjuntos de v´ rtices de care dinalidades k y ℓ Probabilidad X.ℓ un conjunto de v´ rtices e un conjunto de aristas el orden de un grafo el n´ mero de aristas de un grafo u un grafo G = (V. . . w} v. . y. w) diam (G) δ (G) Kk Kk. w. w ω (v) w deg (v) ← − deg (v) − → deg (v) dist (v. {v. Y. . x. . .182 ´ BIBLIOGRAFIA Grafos V E n m G v. . Pr [X = x] Pr [X = x | Y = y] E [X] Var [X] variables aleatorias valores posibles de variables aleatorias la probabilidad que X asume el valor x la probabilidad condicional que X = x dado que Y = y el valor esperado de X la varianza de X . z. w} o v. . .

Lista de abreviaciones B FS C NF D FS D NF N TM P TAS R AM T SP Ingl´ s e breadth-first search conjuntive normal form depth-first search disjuntive normal form nondeterministic Turing machine polynomial-time approximation scheme random access machine travelling salesman problem ˜ Espanol b´ squeda en anchura u forma normal conjuntiva b´ squeda en profundidad u forma normal disyunctiva m´ quina Turing no determin´stica a ı esquema de aproximaci´ n de tiempo o polinomial m´ quina de acceso aleatorio a problema del viajante 183 .

184 ´ BIBLIOGRAFIA .

˜ Minidiccionario espanol-ingl´ s e acomplamiento aleatorio algoritmo an´ lisis asint´ tica a o arbol ´ arbol binario ´ arbol cubriente ´ arbol de expansi´ n ´ o arista arreglo barrer biselado b´ sque o bucle burbuja b´ squeda u cadena capa camarilla camino ciclo clausura clave cola cota complejidad conexo conjunto cubierta dirigido estructura de datos enlazada flujo fuerza bruta matching random algorithm asymptotic analysis tree binary tree spanning tree spanning tree edge array sweep splay forest loop bubble search string layer clique path cycle closure key queue bound complexity connected set cover directed data structure linked flow brute-force 185 .

186 grafo hashing hoja hijo intratable lista mont´culo ı no dirigido orden posterior orden previo ordenaci´ n o padre patr´ n o peor caso pila podar ponderado successi´ n o ra´z ı ramificar-acotar ramo recorrido red rojo-negro v´ rtice e voraz vuelta atr´ s a unir-encontrar graph dispersi´ n o leaf child intractable list heap undirected postorder preorder sorting parent pattern worst case stack prune weighted series root branch and bound branch traversal network red-black vertex greedy backtracking union-find ´ BIBLIOGRAFIA .

˜ Minidiccionario ingl´ s-espanol e algorithm array asymptotic analysis backtracking binary tree bound branch branch and bound brute-force bubble child clique closure complexity connected cover cycle data structure directed dispersi´ n o edge flow forest graph greedy heap intractable key layer leaf linked list loop matching algoritmo arreglo an´ lisis asint´ tica a o vuelta atr´ s a arbol binario ´ cota ramo ramificar-acotar fuerza bruta burbuja hijo camarilla clausura complejidad conexo cubierta ciclo estructura de datos dirigido hashing arista flujo b´ sque o grafo voraz mont´culo ı intratable clave capa hoja enlazada lista bucle acomplamiento 187 .

188 network parent path pattern postorder preorder prune queue random red-black root search series set sorting spanning tree spanning tree splay stack string sweep traversal tree undirected union-find vertex weighted worst case red padre camino patr´ n o orden posterior orden previo podar cola aleatorio rojo-negro ra´z ı b´ squeda u successi´ n o conjunto ordenaci´ n o arbol cubriente ´ arbol de expansi´ n ´ o biselado pila cadena barrer recorrido arbol ´ no dirigido unir-encontrar v´ rtice e ponderado peor caso ´ BIBLIOGRAFIA .

. . . . . 10}. . . . . . . . . . . . . . .1. . . . . . con ejes de escala logar´tmica hasta x = 64. . . . 4. . . En azul se muestra el acoplamiento actual.2. . . Una instancia de ejemplo para problemas de flujos: los v´ rtices grises e son el fuente (a la izquierda) y el sumidero (a la derecha). Se muestra cuatro cortes con sus capacidades respectivas.1. Un ejemplo del m´ todo de camino aumentante para mejorar un acoplae miento. . . . . . . . 4. . . . . . . en a o escala lineal. . 5. . Ejemplos de cubiertas: los v´ rtices verdes cubren todas las aristas y las e aristas amarillas cubren todos los v´ rtices. . . . . 4. . .5. . .3. Los gadgets de la reducci´ n de 3S AT a H AMILTON PATH: a la izquiero da. . . . y a la derecha. mientras a la derecha.4. . 5. . . el eje y tiene escala logar´tmica (ver ı la secci´ n 1. . . 718 es el n´ mero neperiano. . . . ı 2. Las funciones logar´tmicas por tres valores t´picos de la base: b ∈ ı ı u {2. . Nota que el ordenaci´ n seg´ n magnitud cambia al comieno u zo. . . . . . . . . e 4. . . . .1. . . . . . .2. . . . Un acoplamiento de un grafo peque˜ o: las aristas gruesas negras forman n el acoplamiento y los v´ rtices azules est´ n acoplados. . . . e. . . . Se puede aumentar el tama˜ o intercambiando la pertenencia con la no pertenencia al acoplan miento de las aristas del camino aumentante indicado. Crecimiento de algunas funciones com´ nmente encontrados en el an´ lisis u a de algoritmos. . . . . Se muestra la capacidad de cada arista. . . e a 4. o 1.3. en el centro. . Gr´ ficas de la funci´ n exponencial f (x) = exp(x): a la izquierda. . .2. . . . . el gadget de consistencia y a la o derecha. . .4). . . . donde e ≈ 2. En ejemplo de un grafo con flujo y su grafo residual. . . . . . . . . o 29 49 49 50 51 52 74 78 189 . . . . . . . . . . . . Un ejemplo de un grafo que es una instancia de un problema de flujos. . . .´ Indice de figuras 1. . 5 7 15 1. pero para valores suficientemente grandes ya no hay cambios. . . el gadget de restricci´ n. .1. . . . . . . . . . . . . . . . . Gr´ ficas de las potencias de dos: a la izquierda. . . . . . . el gadget de elecci´ n. con ejes lineales hasta a x = 7.

. . . . . La definici´ n recursiva de un arbol bin´ mico Bk+1 en t´ rminos de dos o ´ o e copias de Bk . . . . . . . 101 o 6. .16. . . . . . . .6. . . . . . . las aristas azules son retrocedentes y las aristas verdes transversas. . . . . x < a[i] para todo i. . . . . . 103 o 6.29. . . Una rotaci´ n doble derecha-derecha. . . . . La ra´z del componente est´ dibujado en o o ı a gris y la flecha no continua es un camino. 113 6. . . . . . . . .7. . . . 6. . .1. . no necesariamente una arista directa. El peor caso de ordenaci´ n con el algoritmo burbuja: los elementos est´ n o a al comienzo en orden creciente y el orden deseado es decreciente. . . . . . . . . .3. . . . . . . . . . . . . . a 6. . .13. compuesto por cinco arboles ı o ´ bin´ micos. . . . Un ejemplo de los punteros padre de una arbol con n claves posibles para ´ poder guardar su estructura en un arreglo de tama˜ o n. . La uni´ n de dos arboles biselados. 102 ı e 6. . . . . . . . . . . . . . Un arbol binario de peor caso versus un arbol binario de forma optima. . hijos del cual ser´ n los v´ rtices o e a e hojas de a y b. . . . Las aristas de arbol est´ n dibujados ´ a en negro y otros v´ rtices (del mismo componente) en blanco. . . . . . ı a n 6. . . . . . . . . . . . . . . . . . . o a hay una l´nea nueva. . . . . e 6. . . . . . Un ejemplo de c´ mo dividir un arbol de ´ndice en varias p´ ginas de meo ´ ı a moria: las l´neas agrupan juntos sub´ rboles del mismo tama˜ o. . . . . . .2. . . . . . . .15. . . . . . . . . 6. o 84 6. . . . . . . . . . . . . . . . . . . . . . . . 112 e 6. . . . . . Al eliminar una hoja con clave b. Situaciones en las cuales dos v´ rtices (en gris) pueden pertenecer en el e mismo componente fuertemente conexo. . . . . . . . . . . . . . La posici´ n del procesamiento est´ marcada con letra negrita y por cada cambio. . . . Un grafo dirigido peque˜ o con dos componentes fuertemente conexos. . . . . . . . Estamos buscando para el elemento peque˜ o x en un arreglo que no lo contiene. . . . . . . . . . ´ 6. Un ejemplo de un arbol binario. . . . . . . La ra´z de Bk+1 es el v´ rtice gris. . . . . . . .9. 91 92 92 95 96 96 98 6. . . . el v´ rtice de ruteo con e e el valor a est´ eliminado. Las iteraciones est´ n separadas por l´neas horizontales. . . . . . . . . ´ ´ ´ ambos con ocho v´ rtices hojas. . . . . . .5. .12.17. . . . . .190 ´ INDICE DE FIGURAS 6. . . . . El peor caso de la b´ squeda binaria: el elemento pivote es a[k] tal que k = u n n ⌊ 2 ⌋. .10. La situaci´ n de la ecuaci´ n 6.8. . . . . . tambi´ n su padre. . . . Un ejemplo de un mont´culo bin´ mico. . . 100 o ´ 6. Las dos rotaciones de los arboles rojo-negro son operaciones inversas una ´ para la otra. . . . . . . .14. . . . . . . . . . . . . . . . . 111 n 6. . .4. La inserci´ n de un elemento nuevo con la clave b tal que b < a resulta en o la creaci´ n de un v´ rtice de ruteo nuevo c. . . . . . . La parte dibujada en gris est´ rechazada a en cada iteraci´ n. . . . . . 88 ı a ı 6. . . . . . . . . . . . . 117 n . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cuatro rotaciones b´ sicas de arboles binarios para restablecer balance de a ´ las alturas de los ramos.11. . . . .

. . . . . . . 151 a 8. . . . . . . . Los puntos de inicio y fin de la instancia de la figura 8. . . . Los puntos est´ n dibuo jados como c´rculos negros. . . . . . . . . . . .162 a n e 11. . . . mientras el pol´gono est´ dibujado en l´nea ı ı a ı negra y los tri´ ngulos en colores variados. .3. . . 141 ı 8. . Las opciones de n tri´ ngulos los cuales puede pertenecer un lado del a pol´gono en una triangulaci´ n optima. . . Un sistema de tres atomos (representados por los v´ rtices) con dos in´ e teracciones ferromagn´ ticas (aristas azules) y una interacci´ n antiferroe o magn´ tica (aristas rojas) que no puede alcanzar estado de energ´a m´nima. . . . . las aristas eliminadas est´ n en gris y las a˜ adidas en a n l´nea negro descont´nua. . . Una instancia de triangulaci´ n de un pol´gono convexo con una soluci´ n o ı factible (aunque su optimalidad depende de cu´ l funci´ n objetivo est´ utia o a a lizada — la de la formulaci´ n presentada u otra. 172 . . . . .1. Dos “puentes” (en rojo) que juntan las soluciones de dos subproblemas de cubierta convexa a la soluci´ n del problema completo. . . . 145 o o 8. . . . . . . . . Una instancia del problema de intersecciones de segmentos. . Una modificaci´ n 2-opt para el problema del viajante: la ruta original o R est´ marcada por las flechas azules y la ruta m´ s econ´ mica R′ por a a o las flechas verdes. . . . . . . . . . . . . . . . . . Una instancia del problema de cubierta convexa de un conjunto de puntos en el plano. .´ INDICE DE FIGURAS 191 8. . . 140 8. . . . . . . . .1. . . . . . 169 e 12. 144 8. . . . . . . La arista gruesa roja en el grafo original (un fragmento mostrado a la izquierda) est´ contraida as´ que sus puntos finales (los v´ rtices amarillos) a ı e est´ n reemplazados por un s´ lo v´ rtice (rojo en el frangmento modificaa o e do a la derecha) y las aristas entrantes de los v´ rtices eliminados est´ n e a “redirigidas” al v´ rtice de reemplazo.1. . . . . . 152 ı o ´ 10. . . . .6. . . . . . por lo menos una interacci´ n est´ en conflicto (marcado o a con una zeta sobre la arista).4. .1 y la direcci´ n de o procedimiento del algoritmo de l´nea de barrer.5. . . . . . . . . . . . . . . . .1.2. Los cuatro vertices que son puntos finales de las ı ı aristas involucradas est´ n dibujados en mayor tama˜ o que los otros v´ rtices. . e ı ı En cada una de las ocho posibles configuraciones de los sentidos (marcados con ∧ y ∨). . . . . . . . . . . .

192 ´ INDICE DE FIGURAS .

. . .1. . . . . . . . . . . .1. κ es el contador del programa que determina cual instrucci´ n o de Π se est´ ejecutando. ı n n 3. . . lo marcamos simplemente como ≈ ∞. . . .1. La notaci´ n x significa que puede ser reemplazado o por cualquier de los tres operadores j. Instrucciones de las m´ quinas de acceso aleatorio (R AM). . . . . . . . . . . . horas (h). lo que nos da como resultado φ(I) = 4. o sea. . . . y) = |x − y| para enteros aro bitrarios x. Aqu´ j es un a ı entero. 10). . . . . . . . . .2. . . . rj es el contenido actual del registro Rj . . 2k = x . . Pseudoc´ digo del procedimiento de b´ squeda en un arbol binario ordeo u ´ nado con los datos en las hojas. . . . . . u 2. . . . . . Una R AM para computar la funci´ n φ(x. a a a ı 6. Algunas potencias del n´ mero dos. minutos (min). . . . . . . . . . al minuto entero mayor si menores a una hora. Las configuraciones para a el ejemplo se muestra a la derecha. la hora entera mayor si menores a un d´a. . . . mientras los n menores a un segundo son ≈ 0. . . ij es el contenido del registro de entrada Ij . . . . . . . . 5. . . d´as o ı (d) o a˜ os (a)) para un algoritmo necesita exactamente f (n) operaciones n b´ sicas del procesador para encontrar soluci´ n y el procesador es capaz de a o ejecutar un mill´ n de instrucciones por segundo. . . . . ↑ j o = j — x′ es el resultado de tal reemplazo. . . a 3. . . . .´ Indice de cuadros 1. . El redondeo con tiempos mayores a un segundo est´ n redondeados a un segundo entero mayor si menos de un a minuto. . . . . . . La entrada del ejemplo es I = (6. . y el a˜ o entero mayor si medidos en a˜ os. Si el tiempo de ejecuci´ n o o es mayor a 1025 a˜ os. . . . mientras el programa general est´ a la izquierda.1. . . . . . x = 6 y y = 10.1. . . . . . En la tabla (originalmente de [10]) se muestra para diferentes valores de n el tiempo de ejecuci´ n (en segundos (s). 16 30 34 35 54 93 193 . . La jerarqu´a de complejidad computacional con ejemplos: arriba est´ n las ı a tareas m´ s f´ ciles y abajo las m´ s dif´ciles. . . . . y. . . .

.2. . . . Se asume acceso global al grafo y las estructuras auxiliares. .1. . . . . ´ mont´culos (M). Un algoritmo de l´nea de barrer para encontrar los puntos de intersecci´ n ı o 2 de un conjunto S de n segmentos en R . Las complejidades amortizadas llevan un asterisco (∗ ). . . 137 8. . . . . . .1. . . . . . . . . . . . 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 . . . . . . . mont´culos binomiales (B) y mont´culos de Fibonacci ı ı ı (F). arboles balanceados (A). .194 ´ INDICE DE CUADROS 6. . . . . Un algoritmo basado en D FS para determinar los componentes fuertemente conexos de un grafo dirigido.2. Complejidad (asint´ tica o amortizada) de algunas operaciones b´ sicas o a en diferentes estructuras de datos: listas (L). . . . . 115 7. . . . . 143 8. . . . . . .

107 m´nimo. 48 d´ ficit. 70 3S AT. 107 antiferromagnetismo. 159 ı multicamino. 28 o complejidad promedio. 19 de arbol. 109 ´ dirigida. 25 de burbuja. 72 acoplamiento. 23. 139. 7 arista. 25 Las Vegas. 162 INDEPENDENTSET. 165 calidad. 109 reflexiva. 166 recursivo. 22 ´ cubriente. 102 o binario balanecado. 2. 125 antepasado. 48 M IN C UT. 166 Monte Carlo. 109 transversa. 24 aleatorizado. 19 procedente. 108. 49 e m´ ximo. 160 local. 107. 139. 11 ´ ´ndice. 108. 129 a 195 . 19 retrocedente. 99 cubriente. 22 o atomo. 154 de Strassen. 106 alcance. 161 CLIQUE. 98 balanceado. 85 de Kruskal. 109 arreglo. 97 optimo ´ global. 49 u iterativo. 22 ı de expansi´ n. 108 an´ lisis a asint´ tico. 48 3S AT. 95 bin´ mico. 91 ´ B. 171 aproximaci´ n o de Stirling. 25 voraz. 22 m´nimo.´ Indice alfab´ tico e arbol. 145. 108. 139 ı de Prim. 99 rojo-negro. 83 din´ mico. 81 PLS. 91 ı de aproximaci´ n. 48 n´ mero de. 46 H´ ngaro. 157 o arbol. 24 eficiente. 146 determinista. 154 de l´nea de barrer. 49 u adyacencia. 24. 29 Floyd-Warshall. 168 NP-completo fuertemente. 48 a maximal. 46 algoritmo. 20 lista de. 154 altura. 141 biselado.

85 o asignaci´ n o de verdad. 17 bilateral. 19 burbuja. 111 condici´ n o de balance AVL. 21. 53 clase de magnitud. 51 de arista. 3 transitiva. 27 promedio. 10 b´ squeda. 12 coeficiente binomio. 2 cola. 27. 106 u binaria. 154 base. 17 complejidad amortizada. 2 coeficiente binomio. 106 tabu. 114 coma flotante. 19 lenguaje. 49. 91 u backtracking. 22 C NF. 109 en anchura. 11 axioma. 159 binaria. 160 b´ squedas. 27 peor. 22. 21 simple. 166 bin packing. 65 componente conexo. 125 complemento. 51 cardinalidad. 75. 109 fuertements. 84 en profundidad. 69 ciclo. 85 bucle. 27 ´ ´ INDICE ALFABETICO cerrado. 1 caso amortizado. 45 clase complejidad. 22 BPP. 93 . 15 bipartito. 174 bajo reducciones. 5 bosque. 91. 2 completo. 114 de adjunto. 15 camarilla. 106 alternante. 155 bubble sort. 28 clausura reflexiva. 71 cl´ usula a Horn. 22 largo. 65 certificado conciso. 113 clique. 106 cintas m´ ltiples. 50 camino. 85 byte. 21 bisecci´ n o m´ xima. 36 u circuito mon´ tono. 73 disjunto. 43 problema. 128 promedio. 49 aumentante. 15 biyectivo. 108 en profundidad. 21 capacidad corte. 167 branch and bound. 21. 41 clase de complejidad. 90 de prioridad. 43 subconjunto. 106.196 ordenaci´ n. 14 C IRCUITSAT . 52 a bit. 3 clave. 54 conjunto. 2 de un grafo. 62 o circuito booleano.

5. 51 constante de Napier. 144 de aristas. 110 fuertemente. 4 duro. 51 m´nimo. 11 l´ gica. 5 contracci´ n. 50 creciente. 168 ı costo amortizado. 23 o definici´ n. 116 expresi´ n. 28 o superior asint´ tica. 130 planeado. 49 e decisi´ n. 11 familia. 171 Fibonacci mont´culo. 157 o factorial. 4 equivalencia. 166 esp´n. 21. 106 distribuci´ n o probabilidad. 174 corte. 65 elemento pivote. 157 o estructura unir-encontrar. 14 universal. 107 desigualdad de tri´ ngulo. 11 o factible. 142 D NF. 58 epiyectivo. 22 dif´cil. 111 conjunto. 171 ı esperanza. 72 vac´o. 24 factor de aproximaci´ n. 48. 84 eliminaci´ n. 2. 159 a D FS. 129 real. 10 o densidad. 11 conexo. 1 independiente. 139. 91 o entrada. 133 cuantificaci´ n o existencial.´ ´ INDICE ALFABETICO conectividad. 65 ı diferencia de conjuntos. 50 e d´ ficit. 2 distancia. 130 cota inferior asint´ tica. 50 de v´ rtices. 1 ı conservaci´ n o de flujo. 21 descendiente. 21 a no definido. 6 credit invariant. 125 dividir y conquistar. 52. 7 falso. 10 o demostraci´ n. 106 di´ metro. 24 equivalente. 173 ferromagnetismo. 105 u flujo 197 . 168 o convexo. 22 conectivo. 28 o cover. 103 ı mont´culo. 166 unilateral. 136 ı n´ mero de. 12 o error bilateral. 14 cubierta. 51 capacidad de. 165 esquema de aproximaci´ n. 124 u n´ mero. 50 convexa. 12 dominio.

5 creciente. 19 ı H ALTING. 172. 5 o booleana. 10 o a inserci´ n. 19 h´pergrafo. 80. 111 funci´ n. 26 n instrucci´ n. 114 o booleana mon´ tona. 4 isomorfo. 74 simple. 172 o fuente. 113 heap. 62 o correcta. 37 de salida. 11 o implicaci´ n o cl´ usula Horn. 19 plano. 175 gadget. 17 Gn.m. 22 denso. 5 inyectiva. 45 imagen. 158 Kruskal. 19 regular. 6 de balance. 19 ponderado. 17 knapsack. 53 hamiltoniana. 91 o instancia. 43 hamiltoniano. 133 inyectiva. 174 grado de entrada. 12 conjunctiva. 114 umbral. 172 hash. 23 tama˜ o. 173 hash table. 154 . 6 magnitud. 21 completo. 51 o mayor. 19 escaso. 20 residual. 50 fuertemente conexo. 21 ı bipartito. 12 frustraci´ n.p . 4 implicaci´ n. 6 inyectivo. 102 heur´stica. 18 funci´ n o de dispersi´ n. 18 piso.198 conservaci´ n. 13 convexa. 130 exponencial. 153 ı hexadecimal. 17 techo. 17 hijo. 21 dirigido. 45 a inducci´ n matem´ tica. 107 H ORNSAT. 12 disyunctiva. 121 parte entera. 21 ´ ´ INDICE ALFABETICO completo. 24 o invariante de costo. 51 forma normal. 28 multiplicativa. 22 kilobyte. 20 de no determinismo. 72 gigabyte. 22 fuertemente. 22 no reflexivo. 19 ac´clico. 20 conexo. 75 positivo. 75 posible. 4 inversa. 19 no conexo. 174 Gn. 107 hoja. 21 etiquetado. 20 grafo.

109 previo. 166 multigrafo. 103 mont´culo bin´ mico. 174 mont´culo. 10 lenguaje. 112 o 199 . 129 mantisa. 11 primer orden. 102 ı posterior. 71 nivel. 33 linked list. 105 de Fibonacci. 27 mergesort. 41 O (f (n)).´ ´ INDICE ALFABETICO l´ gica o booleana. 102 ı bin´ mico. 75 lema. 37 universal. 139 ı largo. 33 completo. 17 operaci´ n o b´ sica. 102 ı o mont´culo ı de Fibonacci. 62 o monotono. 21 Las Vegas. 89 literal. 34 Turing. 145 multiplicativo. 85 por fusi´ n. 3 n´ mero u Fibonacci. 86 mochila problema de la. 94 NAESAT. 121 n-eada. 17 matching. 76 multiplicaci´ n o de matrices. 86 o por inserci´ n. 20 multiplicaci´ n. 85 o r´ pida. 129 de potenciales. 38 m´ todo e de cuentas bancarias. 6. 29 natural. 145 o M AX 2S AT. 26 a optimizaci´ n. 109 ordenaci´ n o r´ pida. 31 no determinista. 136 Monte Carlo. 17 memoria consumo. 90 o por selecci´ n. 19. 48 matriz de adyacencia. 11 lleno. 108 NP. 106 enlazada. 12 o l´nea de barrer. 65 dif´cil. 102. 166 layered network. 89 lista de adyacencia. 87 a topol´ gica. 104 o de Fibonacci. 23 o orden de mont´culo. 65 ı duro. 14 proposicional. 91 logaritmo. 125 a ordenaci´ n o de arreglos. 41 NTIME (f (n)). 124 n´ mero u de Fibonacci. 71 megabyte. 6 neperiano. 65 recursivamente numerable. 28 octal. 6 m´ quina a acceso aleatorio. 14 l´ gicamente equivalente. 80 mon´ tono. 33 recursivo.

58 regi´ n o convexa. 147. 69 representaci´ n o punto fija. 149 o a propiedad. 46 de decisi´ n. 174 producto cartesiano. 3 programaci´ n o din´ mica. 154 problema. 84 plano. 109 Prim. 147 pseudo-polinomial. 107 pal´ndromo. 155 del viajante. 23 o de viajante. 3 parte entera. 107 preorder. 43 de alcance. 29. 3 sim´ trica. 25 ı par ordenado. 18 reducci´ n. 80 programaci´ n din´ mica. 19 pila. 125 ra´z. 87. 107 ı R AM. 34 relaci´ n o reflexiva. 24 o optimizaci´ n. 109 PP. 167 preorden. 108 rango. 3 recorrido. 17 flotante. 80 lineal. 4 abierto. 34 ramificar-acotar. 91 a padre. 81 puntero. 154 postorden. 4 o peso arista. 144 registro. 17 queue. 24 o minimizaci´ n.200 ordenamiento por fusi´ n. 80. 155 ramo. 47. 161 intratable. 58 espacio logar´tmico. 23 o polinomial. 174 monotona. 3 cerrado. 29 sin soluci´ n. 75 red-black tree. 17 . 17 flotante. 107 postorder. 59 o Cook. 89 piso. 23 o de empaquetear a cajas. 159 de la mochila. 19 podar-buscar. 58 ı Karp. 168 o permutaci´ n. 139 a ´ ´ INDICE ALFABETICO entera. 158 de optimizaci´ n. 97 redondeo. 90 quicksort. 17 pivote. 106 red de capas. 142 o P. 3 e transitiva. 23 combinatorial. 43 o proceso. 174 prune and search. 58. 58 reducible. 174 convexa. 41 p´ gina. 3 relaci´ n o polinomialmente balanceada. 18 partici´ n. 29 maximizaci´ n. 24. 51. 160 complemento. 89 punto fija.

153. 48 sumidero. 154 a ZPP. 92 salida. 12 satisfiabilidad. 174 subgrafo. 175 unilateral. 4 soluci´ n o optima. 22 sucesi´ n o Fibonacci. 139 selection sort. 51 rotaci´ n. 110 o de ruteo. 161 vecino. 116 unir-encontrar. 11 binaria. 50 valor esperado.´ ´ INDICE ALFABETICO restricci´ n o de capacidad. 15 varianza. 41 transici´ n o de fase. 161 verdad. 50 sweep line. 12 ı techo. 19 e v´ rtice e acoplado. 11 satisfactible. 175 TIME (f (n)). 14 o splay tree. 157 o dorada. 113 o tasa de aproximaci´ n. 173 T SP. 165 vecindario. 89 Stirling aproximaci´ n. 9 e sobreyectivo. 69 tiempo de llegada. 167 201 . 2 cerrado. 96 o RP. 139 t´ rmino. 48 de articulaci´ n. 94 tautolog´a. 10 testigo polinomial. 165 valor absoluto. 146 subconjunto. 24 S AT. 171 ı voraz. 171 travelling salesman problem. 24 ´ sorteo topol´ gico. 47 tri´ ngulo a de Pascal. 99 stack. 44 satisfacer. 92 fuente. 116 v´ rtice. 18 teoremas. 47 T SP. 5 variable. 145. 2 o Strassen. 11 vertex vecino. 155 umbral. 20 vidrio de esp´n. 86 serie. 150 T SP D. 20. 50 libre. 94 sumidero. 7 aritm´ tica. 161 exacto. 7 e tabla de dispersi´ n. 167 ruteo. 166 union-find. 20. 8 e geom´ trica. 44 scan line. 154 vuelta atr´ s.

Sign up to vote on this title
UsefulNot useful