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

. . Arboles . . .1.8. . .1. . . . ´ 1. . . . . . . . . . . . . . . . . . .5. . . . . 2. . . . . . . . . .1. . Tama˜ o de la instancia . . . . .3. . . . . .2. . . . . . . . Problema de decisi´ n . Algoritmo recursivo . . o 2.2. . . . . . . . . . 4. . . Funciones de complejidad . . . . . . . . . . . . . . . . . . . . . . . . . . a o 3. . . . . . . . . . M´ quina Turing universal . . . . . . .8. . . . . .3. . . .4. . . . . . . . . . . . . . Clases de complejidad de tiempo . . . . . .5. . . . .5. . . . . . o 4. Algoritmo . . . . . An´ lisis asint´ tico . 2. . . . . . . . . .2. . . . . . .5. . . . Problema complemento . . . . . n 2. Calidad de algoritmos . . . . . . . . . . a 3. .2. . . . . .3. . . Problema de optimizaci´ n . . . . . . . . . .4. . . . . .2.2. 5. . . . . 2. . . . 4. .1. . . . . . . . . . . . . . . . . . . Clases de complejidad 5. . . . . . . . . . . . . . . .5. . . . . . . . . . . .1. . . . .4. . 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. .3. Modelos de computaci´ n o 3. . . . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . 2. . . . . . . 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . 2. . . . M´ quinas de acceso aleatorio (R AM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 3. . Problemas de grafos . . . 2. . . . M´ quinas Turing no deterministas . . . . Algunos problemas fundamentales . . . . . . o 4. . . . . . . . . . . .1. . . 4. . . . . . . . M´ quinas Turing . . . . . . . . . . . . . . . . . . . . . . o 2. Jer´ rquias de complejidad . . . . . . . . . .7. . . Complejidad computacional de problemas 4. . . . . . . . Consumo de memoria . . . . . . . . . . . . . . . . Operaci´ n b´ sica . . . . . . . . . . . . . . . . . a 3. . . . . . . . Problemas de l´ gica booleana . . .3. . .3. . . . . .3. . . . . . . . . . . . . . . .2. . . . . . . . . . . . . . . . . . . Problemas sin soluci´ n . . . . . . . . . . . . . . . o a 2. . .1. . . . . . . . . . . . . . . . . . . . . . .1. . . . . .3. Problema . . . . . . . . . . . . . . . .1. M´ quina Turing precisa . . a 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Subgrafos . Clases de complejidad de espacio . . . . . .3. . . . . . . Problemas y algoritmos 2. . . . .8.IV ´ INDICE GENERAL 1. a 3. . . . . . . . . . .

. . 6. . . . . . . . . Arboles biselados . . . . . . . . . . . . . . . . . . . . . . . . . .3. . . . Ordenaci´ n de arreglos . . . . . . . . . . . . . . . 5. . . . . . . . . . . . . 5.5. . . ´ 6. .3. ´ 6. . . . . . Problemas kS AT . . . . . . . . . . . . . . . . . . . . . Problemas completos . . .5. .3. . u 6. . . . 5. . . . . . . Estructuras de datos 6. . . . . . . . . .2. . . . . . . . .3. . . . . . . . . 6. . . . . . Conjuntos y n´ meros . . . . . . . Arboles rojo-negro . . . . . . . . . . . . . . . . . . . . . 5. . . . . Caracterizaci´ n por relaciones: certificados . . . ´ 6. . . . .4. .3. . . Pilas . . . . . . . . . o ´ 6. . . . . . . . .2. . . . . . .1. . . . . . El problema de corte m´nimo . . 5. . . . . . . . . . . . . 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. . . . . . .2. .1. . . . . o 6. ı 5. . . . . . . . . . . . . . . . . . . . . 6. . . . . . . . . . Colas . ´ 6. . . 5. . .4. . . . Reducciones . .4. . . . . .´ INDICE GENERAL 5. . . . Complejidad de problemas de grafos . . . .2. . Ordenaci´ n de listas . . . .1. . . . . .4. . . . . . . . . . .2. . . .6. . .3. . . . . . . . . . . . Mont´culos bin´ micos . . . . .7. . . . Arboles AVL . . . . . . . . . . . . . . . . . . . . . . . .5. . . . . . . . . . . .2. . . . . Algoritmos pseudo-polinomiales . . . . . . . . . . . .1. . . . . Coloreo . . . . . . . . . . . .2. . . . . . . 102 ı 6. . . . . . . . . . . . . . . . a 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . .3. . . . El problema de flujo m´ ximo . . . .2. . . . . . . . Arreglos . . . . . . . . . . . . . 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5. . . . . . . . . . . . 5. S AT de “no todos iguales” (NAESAT) . . . . . . .1. . . . . . Caminos y ciclos de Hamilton . . . . . .2. . 5. . . . . . . Arboles binarios . . . . . .1. Problemas NP-completos . . . . .2.4. . . 5. . . . 6. . . . . . . . . Listas . . . . . . . . .3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5. . . . . . . . . . .1. . 6. . . . . . . . . . .5. . . . . . . . . . Problemas fuertemente NP-completos . . . .3. . . Arboles . . . . . . . . . . . . .2. . . . Arboles B . . .4. . . . . . . . 102 ı o 6. Complejidad de algunas variaciones de S AT . . . . u 5. .4. . .4. .2.3. . . . 5. . . . .1. . . . . . . . . . . . . Mont´culos de Fibonacci . . . . . . . . . . . . . .5. . . . . . .5. . . B´ squeda binaria . . Mont´culos . . o 5. . . . . . . . . . . . . . . . . . . . .3. . . . . . . . . . . . . .3. . . . . . . . . 103 ı . . . . . . .1. . .

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

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

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

Si el elemento a no pertenece al conjunto A.1. u Se denota por |A|. 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. |B|}. u El cardinalidad de un conjunto A es el n´ mero de elementos que pertenecen al conjunto. |B|} y |A ∩ B| ≤ m´ {|A| . se puede definir para cada par de elementos si uno est´ maa a yor. 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) . 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.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. se escribe a ∈ A.Cap´tulo 1 ı Definiciones matem´ ticas y a computacionales 1. c} . / Z es el conjunto de n´ meros enteros y R es el conjunto de n´ meros reales.1) Si el elemento a pertenece a un conjunto A. o e a Nota que necesariamente |A ∪ B| ≥ m´x {|A| . Por ejemplo. u u Si un conjunto est´ ordenado. El a ın conjunto vac´o que no contiene ning´ n elemento se denota con ∅. se escribe a ∈ A. menor o igual a otro seg´ n el orden definido. b. |a| = 3. la cardinalidad del conjunto A = {a. b. b y c forman un conjunto. ı u 1 . (1. (1. c} es tres. Conjuntos y permutaciones Si unos elementos a.

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

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

bi ) ∈ Rg (es decir g(a) = bi ) son la imagen de a en B. A tiene n! o permutaciones. Un mapeo g : A → B es sobreyectivo (tambi´ n epiyectivo. Un mapeo es inyectivo (ingl´ s: injection o one-to-one) si e ∀a1 . Nota que se puede asignar varios elementos de A a un elemento de B y viceversa. Un mapeo es t´ cnicae mente equivalente a una relaci´ n Rg . (1. b) ∈ Rg es la imagen inversa de b. puede ser que a1 = a2 tambi´ n. 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. pero no necesariamente todos. c.15) o sea. b. la imagen inversa de todo b ∈ B tiene cardinalidad menor o igual a uno. e . c. Permutaciones Una permutaci´ n de un conjunto A es un orden de los elementos. Por ejemplo. 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. El conjunto o de los elementos bi ∈ B para las cuales aplica (a. pero t´picamente se escribe g(a) = b para significar o ı que (a. El conjunto A se llama el dominio de la relaci´ n y el conjunto B el rango. DEFINICIONES MATEMATICAS Y COMPUTACIONALES 1.1.16) (1. b.2. d} y k = 3. pero no es necesariamente as´ en la direcci´ n cone a ı o traria: g(a1 ) = g(a2 ) no implica que necesariamente sea a1 = a2 . 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.14) Por ejemplo. d}. los 12 ordenes son abc abd acd bac bad bcd cab cad cbd dab dbc dcb 1. El conjunto de los elementos de A que corresponden a un cierto elemento b ∈ B tal que (a. a2 ∈ A tales que a1 = a2 ⇔ g(a1 ) = g(a2 ). Si |A| = n. si A = {a. si A = {a.3. b) ∈ Rg . 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! . g −1 (b). (n − k)! (1.4 ´ ´ CAPITULO 1.

−x. 1] o El valor absoluto de x ∈ R es una funci´ n de valores reales a valores reales positivos: o |x| = (1. el eje y tiene escala logar´tmica (ver la secci´ n 1.17) Una funci´ n f : R → R es convexa si para todo x1 .18) 1.3. 718281828 es el constante de Napier. x2 y α ∈ [0. Una definici´ n alternativa es por l´mite: o ı x n . (1. f (αx1 + (1 − α)x2 ) ≤ αf (x1 ) + (1 − α)f (x2 ). ı o o o sea.1: Gr´ ficas de la funci´ n exponencial f (x) = exp(x): a la izquierda.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. 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+ + + . o El s´mbolo f refiere a la funci´ n misma. 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. en escala a o lineal. (1. si x ≥ 0 si x < 0. i! 2! 3! (1.3. 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. el elemento del rango B a lo cual corresponde el elemento del dominio x ∈ A. mientras a la derecha.4). ı o La funci´ n exponencial comparte las propiedades de exponentes sin importar la base b... x. o a Una funci´ n f : A → B es un mapeo sobreyectivo pero no necesariamente una inyectiva.1 muestra su forma.19) donde e ≈ 2.21) 1 ba . La figura 1. mientras f (x) refiere al valor de la funci´ n en x.´ 1.

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)

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

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

o (III ) Si φ = φ1 ∧ φ2 . es v´ lido que T |= o a x1 ∨ x2 . 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 |= φ. 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 . la expresi´ n es una tautolog´a y se lo denota por |= φ. si tenemos la asignaci´ n T (x1 ) = ⊤ y T (x2 ) = ⊥. aplica T |= φ si y s´ lo si T |= φ1 y T |= φ2 . Se puede asumir que ninguna cl´ usula ni implicante sea repetido en una forma a a normal. (1. DEFINICIONES MATEMATICAS Y COMPUTACIONALES (II ) Si φ = ¬φ′ .51) Existen formas normales de escribir expresiones booleana. Una conjunci´ n de literales se llama un implicante y una disyunci´ n de literales se llama una o o cl´ usula. En este o a caso. aplica T |= φ si y s´ lo si T |= φ′ (lee: T no satisface a φ′ ). 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.50) Por ejemplo. a Una expresi´ n booleana φ es v´ lida si para toda T imaginable aplica que T |= φ. pero T |= (x1 ∨ ¬x2 ) ∧ (¬x1 ∧ x2 ). 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. 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 . aplica T |= φ si y s´ lo si T |= φ1 o T |= φ2 .12 ´ ´ CAPITULO 1. En general aplica que |= φ si o ı y s´ lo si ¬φ es no satisfactible. (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 . o La equivalencia l´ gica se denota por φ1 ≡ φ2 . o (IV ) Si φ = φ1 ∨ φ2 . o (1. y tampoco se repiten literales dentro de las cl´ usulas o los implicantes.

52) Despu´ s de aplicar esas reglas tantas veces como posible.53) Si la meta es lograr la forma normal disyuntiva. 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. LOGICA MATEMATICA 13 expresi´ n que ya no contiene el s´mbolo auxiliar → no permitido en las formas o ı normales. 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. El conectivo ¬ corresponde a una funci´ n unaria f ¬ : {⊤. ⊥}. para ahorrar espacio. . ⊥} → {⊤. ⊥} definida por o la ecuaci´ n 1. queda una expresi´ n de puros e o literales con los conectivos ∧ y ∨. Los conectivos ∨. 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 ). o o Para dar un ejemplo de la transformaci´ n. ⊥}. (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.´ ´ 1. ⊥} → {⊤. ∧.55) o Una funci´ n booleana de n-dimensiones f es un mapeo de {⊤. utilizamos la notaci´ n o siguiente para las variables: a = x1 . Cada l´nea en el proceso es l´ gicamente equivalente con todas las versiones ı o anteriores por las equivalencias ya definidas.46. (1. b = x2 y c = x3 . Para lograr una forma normal conjunctiva. (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 .7.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. ⊥}n al conjunto {⊤. → y ↔ definen cada uno una funci´ n binaria o o 2 f : {⊤. (1.

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

Un byte (se pronuncia “bait”) a es una sucesi´ n de ocho bits. ı 1. o En la memoria de una computadora. 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. 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. Informaci´ n digital o Bit El bit es la unidad b´ sica de informaci´ n digital. con ejes de escala logar´tmica hasta x = 64. se usa un bit auxiliar de signo. a y a la derecha.7.3. ın k∈Z Para incluir los enteros negativos. empezando con la potencia m´ s grande que a quepa en el n´ mero e iterando hasta llegar a la suma correcta. Por lo general.1 y la figure 1.3: Gr´ ficas de las potencias de dos: a la izquierda. 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). con ejes lineales hasta x = 7. u Representamos la presencia de una cierta potencia con un bit de valor 1 y su ausencia por un bit de valor 0. Byte El byte es la unidad b´ sica de capacidad de memoria digital. (1.59) b = m´ k | 2k > x .7. 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 .3). Entonces se necesita seis bits para representar el valor 61.´ ´ 1. se expresa los n´ meros enteros con sumas de potenu cias de dos (ver el cuadro 1. 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.

16 ´ ´ CAPITULO 1.1: Algunas potencias del n´ mero dos. DEFINICIONES MATEMATICAS Y COMPUTACIONALES Cuadro 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 .

Los n´ meros a o o u binarios tienen base b = 2 y com´ nmente en c´ lculo utilizamos b = 10. Normalmente el prefix kilo implica un mil. son 256 valores posibles por un byte. 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.7. Nota que aplica en general la igualdad k 2 k+1 −1 = 2i . hay que definir hasta que exactitud u se guarda los decimales del n´ mero.61. En comparaci´ n.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. u a para corresponder a los prefixes. LOGICA MATEMATICA 17 y entonces. contando cero. Tambi´ n existen u a e sistemas en base b = 8 (el sistema octal) y b = 16 (el sistema hexadecimal). 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γ . 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.7. Representaci´ n de punto flotante o Para representar n´ meros reales por computadora. pero como mil no es ning´ n potencia de dos. 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. (1. i=0 (1. mientras permite guardar valores de un rango mucho m´ s amplio. El par´ metro b en ecuaci´ n 1. eligieron la potencia m´ s cercana.´ ´ 1. como el espacio para guardar un n´ mero entero u u est´ limitada a un tama˜ o constante. 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.60) Un kilobyte es 1024 bytes. 210 = 1024. un megabyte es 1024 kilobytes (1048576 bytes) y un gigabyte es 1024 megabytes (1073741824 bytes). a y∈Z (1. el m´ todo de punto flotante causa variaciones en la exactitud de la o e representaci´ n.4.62) . La mantisa t´picamente tiene un tama˜ o m´ ximo limitado a una cierta cantidad fija ı n a de bytes.61 es la base del sistema de representaci´ n. 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} .

ın y∈Z (1.66) 2 la verificaci´ n de que se deja como ejercicio.18 ´ ´ CAPITULO 1. int b = (int)a. 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} .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.63) ⌊k + x⌋ = k + ⌊x⌋. se asigna a b el valor ⌊a⌋.69) Aplica por definici´ n que o Se deja como ejercicio verificar que tambi´ n para x ∈ R. (1. 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. se asigna a b el valor ⌈a⌉.67) (1. x ≤ ⌈x⌉ < x + 1. x ∈ R que e x < 2⌊log2 x⌋ ≤ x. (1.76. 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. Acumulando uno despu´ s de otro.68) (1.64) ⌊x⌋ ≤ x < ⌊x + 1⌋ (1. y cuando a < 0. tenemos Tambi´ n. Por ejemplo. DEFINICIONES MATEMATICAS Y COMPUTACIONALES Por definici´ n. como o o implica p´ rdida de datos. ı a o (1. Por ejemplo. en algunas implementaciones una sucesi´ n instrucciones como o . El redondeo t´pico de x ∈ R al entero m´ s pr´ ximo es equivalente a [x + 0. para todo k ∈ Z y x ∈ R aplica e x − 1 < ⌊x⌋ ≤ x (1. x > 0 aplica e x ≤ 2⌈log2 x⌉ < 2x.5]. La funci´ n que captura esta comportamiento es la funci´ n parte entera o o [x] : R → Z. los errores de redondeo se e e pueden amplificar y causar comportamiento no deseado en el programa. Si a ≥ 0. en C se permite la construcci´ n sio guiente float a = 3.70) Hay que tener mucho cuidado con la operaci´ n de parte entera en programaci´ n. siempre aplica para todo x ∈ R que o donde la igualdad ocurre solamente cuando x ∈ Z.

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

a En un grafo simple no reflexivo. vw } ∩ {w1 . vn .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. El grado total de un v´ rtice de un grafo dirigido es e ← − − → deg (v) = deg (v) + deg (v) . (1. Una arista es incidente a un v´ rtice si esta lo une a otro v´ rtice.8.77) Si todos los v´ rtices tienen el mismo grado k. e Para representar la adyacencia de multigrafos. Para grafos ponderados. 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. (1. Nota que siempre aplica deg (v) = 2m. La matriz de adyacencia de un grafo no dirigido es sim´ trica.2. . . o mejor dicho. (1. Para grafos dirie u − → gidos.75) En un grafo simple no dirigido.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). w2}| ≥ 1 (1. k-regular.73) (el valor puede ser mayor a uno solamente en un multigrafo). v2 } y {w1 . 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 . o para construir la matriz.20 ´ ´ CAPITULO 1. v∈V (1. ij El grado deg (v) de un v´ rtice v es el n´ mero de aristas incidentes a v. DEFINICIONES MATEMATICAS Y COMPUTACIONALES 1. el grafo es regular. w2 } de un grafo son adyacentes si tienen un v´ rtice en com´ n: e u |{v1 . vj } o cero si no hay tal arista en el grafo. w} ∈ E. . Adyacencia Dos aristas {v1 . el grado deg (vi ) del v´ rtice vi es la suma de la ij´ sima e e fila de A. v2 . cada v´ rtice est´ conectado a cada otro v´ rtice por una arista. . e ´ e Dos v´ rtices v y w son adyacentes si una arista los une: e {v. La matriz A que corresponde a la relaci´ n E se llama la matriz de adyacencia del grafo. es necesario etiquetar los v´ rtices para que sean identificados e como v1 . . aplica deg (v) = |Γ (v)| . e En un grafo n − 1-regular. es mejor usar una matriz (real) A′′ donde el elemento a′′ contiene el peso de la arista {vi . e a e Se llama un grafo completo y se denota por Kn .

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

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

la respuesta es ı “no”. En los primeros. la ı respuesta a la pregunta del problema es “si”. 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 conjunto de restricciones. Si existen soluciones.1. ı Los dos tipos de problemas que estudiamos son los problemas de decisi´ n y los problemas o de optimizaci´ n . Un problema es un conjunto (posiblemente infio nita) de instancias junto con una pregunta sobre alguna propiedad de las instancias. Problema de decisi´ n o En un problema de decisi´ n. la respuesta es siempre “s´“ o “no”. Problema de optimizaci´ n o Para problemas de optimizaci´ n. 2.Cap´tulo 2 ı Problemas y algoritmos En este curso.1.2. y adem´ s una funci´ n objetivo que asigna un valor a o 23 . y si el subconjunto es vac´o.1. e o 2. veremos c´ mo analizar de complejidad de dos conceptos diferentes de o computaci´ n: problemas y algoritmos. Un algoritmo es un proceso formal para encontrar la respuesta correcta a la pregunta de un problema para una cierta instancia del problema. la instancia est´ compuesta por un conjunto de configuo a raciones.1. junto con una relaci´ n que asocia para cada instancia del problema un subconjunto o de soluciones (posiblemente vac´o). 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. Problema Problemas en general son conjuntos de instancias al cual corresponde un conjunto de soluciones. 2.

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

Calidad de algoritmos Las dos medidas m´ s importantes de la calidad de un algoritmo son a . . o a a Como ejemplo. Un algoritmo recursivo simplemente examinar´a la primera y la ı ultima letra.1.3.2.3. j = n. que se lee igual hacia adelante que hacia atr´ s. 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.2. Si son iguales. j := j − 1. Al recibir una sucesi´ n de un s´mbolo o vac´o. 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. while i < j if ℓi = ℓj return false . Un ejemplo de tal ı a palabra es “reconocer”. o sea. En ı o muchos casos. Un algoritmo que en vez de e llamarse a si mismo repite en una manera c´clica el mismo c´ digo se dice iterativo. if ℓ1 = ℓ2 return rpal(ℓ2 ℓ3 . ℓn−1 ℓn ) i = 1. . . Algoritmo recursivo Un algoritmo recursivo es un algoritmo donde una parte del algoritmo utiliza a si misma como subrutina. e o ı ı el algoritmo da la respuesta “s´”: ı procedure rpal(palabra P = ℓ1 ℓ2 . . else i := i + 1. 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 . t´picamente ignorando los acutes de las letras) es un n ı pal´ndromo. . CALIDAD DE ALGORITMOS 25 2. veremos dos algoritmos para verificar si o no una dada palabra (una sola palabra de puras letras. 2. return true . 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. ℓn−1 ℓn ) if n ≤ 1 return true . en espa˜ ol. ℓn−2 ℓn − 1). . aunque t´picamente hace da˜ o a la eficiencia del algoritmo hacer tal ı n conversi´ n. 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.

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

y dividiendo por a o el n´ mero de instancias. 5.3. un byte o una variable de tama˜ o consa n tante de un cierto tipo. En tal caso. o Funci´ n del caso promedio o Formamos una funci´ n de complejidad f : Z+ → R tal que para un valor n. 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. si es posible. 1] que la lista [1. CALIDAD DE ALGORITMOS 27 2. La complejidad amortizada sirve para evaluar la eficiencia de un algoritmo en tal caso. 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. calculando el tiempo total de ejecuci´ n. 9. como la segunda ya est´ ordenada. 3. ordenando las instancias de la peor manera posible (para consumir m´ s recursos). La unica dificultad es identificar o construir la instancia que es el peor posible n ´ para la ejecuci´ n del algoritmo. caso promedio y el caso amortizado. Las soluciones incluyen el uso del caso peor. el valor o f (n) representa el n´ mero promedio de operaciones b´ sicas sobre todas las instancias u a de tama˜ o n. a ´ Complejidad amortizada En algunos casos.4. 7]. 2. La idea es ejecutar el algoritmo varias veces en secuencia con diferentes instancias. todav´a hay variaciones en la cantidad de n ı tiempo requerido para la ejecuci´ n del algoritmo. es posible que el tiempo de ejecuci´ n de un algoritmo depende de o las ejecuciones anteriores. 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.3.3. En muchos casos. el consumo de memoria es una medida importante o en la evaluaci´ n de calidad de algoritmos. 2. Lo que a queremos nosotros es tal caracterizaci´ n de la calidad de un algoritmo que nos facilita o hacer comparaciones entre algoritmos. 5. las funciones de peor caso y caso u promedio pueden resultar pesimistas. resulta m´ s util estudiar el caso promedio. e a si el peor caso es muy raro.2. es m´ s dif´cil ordenar o a ı la lista [3.3. Por ejemplo. El caso peor de consumo de memoria es la cantidad de unidades de . 6. Consumo de memoria Igual como el tiempo de ejecuci´ n. la computaci´ n de la complejidad amortizada u o resulta razonable y no demasiado compleja. 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.

3. si tenemos que (f (n) ∈ Ω (g(n)) ∧ g(n) ∈ Ω (h(n))) ⇒ f (n) ∈ Ω (h(n)) .1) Como este aplica para Ω (f (n)) y O (f (n)) los dos. Tampoco son interesantes los o o tiempos de computaci´ n para instancias peque˜ as. Otra propiedad util es que si ´ (f (n) ∈ O (h(n)) ∧ g(n) ∈ O (h(n))) ⇒ f (n) + g(n) ∈ O (h(n)) . necesitamos las definiciones siguientes. Para funciones f : Z+ → R y g : Z+ → R.2) (2. La tercera definici´ n quiere decir que las dos funciones crecen asint´ ticamente o o o iguales. escribimos (I) f (n) ∈ O (g(n)) si ∃c > 0 tal que |f (n)| ≤ c |g(n)| para suficientemente grandes valores de n. Sin embargo. normalmente todos los algoritmos producen resultados r´ pidamente. (2. aplica por definici´ n tambi´ n para o e Θ (f (n)). Igualmente. La funci´ n O (f (n)) es una cota ı o superior asint´ tica al tiempo de ejecuci´ n. a Se define el caso promedio y el caso amortizado igual como con el tiempo de ejecuci´ n. g(n) El s´mbolo ∈ se reemplaza frecuentemente con =. (II ) f (n) ∈ Ω (g(n)) si ∃c > 0 tal que |f (x)| ≥ c |g(x)| para suficientemente grandes valores de n.5. (2. o a o 2. u Estas definiciones son transitivas: (f (n) ∈ O (g(n)) ∧ g(n) ∈ O (h(n))) ⇒ f (n) ∈ O (h(n)) . PROBLEMAS Y ALGORITMOS memoria que el algoritmo tendr´ que ocupar simultaneamente en el peor caso imaginable.3) . 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.28 ´ CAPITULO 2. n a Para definir clases de magnitudes. Las definiciones se generalizan para funciones de argumentos m´ ltiples. mientras la Ω (f (n)) es una cota inferior o o asint´ tica. 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. 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. sino que instancias grandes — con una o n instancia peque˜ a. (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.

Para ilustrar el efecto del tiempo de ejecuci´ n. cada polinomial crece asint´ ticamente m´ s lentamente que cualquiera expresi´ n o a o exponencial.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. 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. Un problema que cuenta con o o por lo menos un algoritmo eficiente es un problema polinomial. o u . CALIDAD DE ALGORITMOS 1e+07 1e+06 100000 10000 1000 100 10 1 0. f (n) + g(n) ∈ O (f (n)).25 para cambiar la base de un logaritmo. Esto nos permite f´ cilmente formar a O (f (n)) de polinomios y muchas otras expresiones.3.2. O (f (n)) es la notaci´ n de complejidad asint´ tica m´ s com´ nmente utilizado. Por lo e e general. 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). como loga (n) = Θ (logb n). En t´ rminos no muy exactos. llegamos a tener o loga (n) = 1 logb (n) ∈ Θ (logb n) . se dice que un algoritmo es eficiente si su tiempo de ejecue ci´ n tiene una cota superior asint´ tica que es un polinomio. Por definici´ n. Nota que el ordenaci´ n seg´ n magnitud cambia al comienzo. Utilizando la definici´ n de o o ecuaci´ n 1. pero para o u valores suficientemente grandes ya no hay cambios. o o Otra relaci´ n importante es que para todo x > 1 y todo k > 0.1: Crecimiento de algunas funciones com´ nmente encontrados en el an´ lisis u a de algoritmos. el cuadro 2. aplica que nk ∈ O (xn ) — o es decir. Tambi´ n se dice que un problema u e sin soluci´ n si no cuenta con algoritmo ninguno. podemos ignorar o coeficientes num´ ricos de los t´ rminos de la expresi´ n. Un problema es intratable si no existe ning´ n algoritmo eficiente para resolverlo.1 (adaptado de [10]) muestra o la dependencia del tiempo de ejecuci´ n del n´ mero de operaciones que se necesita.4) porque logb (a) es un constante. no hay necesidad de marcar la base en una expresi´ n de complejidad asint´ tica con logaritmos. Si g(n) ∈ O (f (n)). Entonces. u x aplica que logb (n) ∈ O (n ) (por la definici´ n de logaritmo). logb (a) (2. El el siguiente cap´tulo formulamos estes o ı tipos de conceptos formalmente.

minutos (min). 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. 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. al minuto a entero mayor si menores a una hora. 5n ≈0 ≈0 11 min 12. la hora entera mayor si menores a un d´a. o o 25 Si el tiempo de ejecuci´ n es mayor a 10 a˜ os.1: En la tabla (originalmente de [10]) se muestra para diferentes valores de n el tiempo de ejecuci´ n (en segundos (s). El redondeo con tiempos mayores a un segundo est´ n redondeados a un segundo entero mayor si menos de un minuto.30 ´ CAPITULO 2. y el a˜ o ı n entero mayor si medidos en a˜ os. o n mientras los menores a un segundo son ≈ 0. 892 a ≈∞ ≈∞ ≈∞ ≈∞ 2n ≈0 18 min 36 a 17 a˜ os 10 n ≈∞ ≈∞ ≈∞ ≈∞ n! 4s 1025 a ≈∞ ≈∞ ≈∞ ≈∞ ≈∞ ≈∞ . horas (h). PROBLEMAS Y ALGORITMOS Cuadro 2. lo marcamos simplemente como ≈ ∞.

Si el puntero mueve fuera de la sucesi´ n o a o de entrada a la derecha. 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.1) (IV ) un estado de alto “alto”. El largo de la a o 31 . (3. ← (izquierda) y − (sin mover). se define una m´ quina Turing M = ı a (K. Σ. “no”}) × Σ × {→. D). ρ es el s´mbolo que ser´ escrito en el lugar de σ y D ∈ {→.1. ı (3.Cap´tulo 3 ı Modelos de computaci´ n o 3. (II ) un conjunto finito de s´mbolos Σ. la funci´ n δ nos da ı o δ(q.2) donde p es el estado nuevo. un estado de acepto “s´” y un estado de rechazo “no” y ı (V) direcciones del puntero: → (derecha). “s´”. Si el estado actual es q ∈ K y el o a s´mbolo actualmente bajo el puntero es σ ∈ Σ. σ) = (p. 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. ←. ı (III ) una funci´ n de transici´ n o o δ : K × Σ → (K ∪ {“alto”. −} es la direcci´ n a la cual mover´ el puntero. ← ı a . 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. Formalmente. ⊲ ∈ Σ. La funci´ n δ captura el “programa” de la m´ quina. ρ. δ. que se llama el alfabeto de M que contiene dos ı s´mbolos espaciales ⊔.

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

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

(j2 . .2. Π = (π1 . a Un modelo ideal de computaci´ n es lo de m´ quinas de acceso aleatorio (ingl´ s: random o a e access machines. R1 . R AM) . Un R AM es capaz de manejar n´ meros enteros de tama˜ o arbiu n trario.1: Instrucciones de las m´ quinas de acceso aleatorio (R AM). ij es el contenido del registro de entrada Ij . . πm ). a El primer registro r0 sirve como una acumuladora y las instrucciones posibles se muestra en el cuadro 3. κ := j si r0 < 0. con diferencia polinomial. ∅). 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.. rj1 ). In . Aqu´ j es un entero. I2 . donde κ es el contador del programa que detero mina cual instrucci´ n de Π se est´ ejecutando y R = {(j1 . R2 . . .1 Una configuraci´ n es un par C = (κ. posiblemente negativo. La notaci´ n x significa que puede ser reemplazado por cualquier de los tres operadores j. Se define una o . . . La entrada o al programa est´ guardada en un arreglo finito de registros de entrada I1 . a ı rj es el contenido actual del registro Rj . ↑ j o o = j — x′ es el resultado de tal reemplazo. MODELOS DE COMPUTACION Cuadro 3. . R). La configuraci´ n inicial es (1. κ es el contador del programa que determina cual instrucci´ n de Π se est´ ejecutando. M´ quinas de acceso aleatorio (R AM) a Una pregunta interesante es si se puede implementar cualquier algoritmo como una m´ quina Turing. . rj2 ). 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. Un programa R AM es una sucesi´ n finita de instrucciones de tipo assembler. . . cada uno con capacidad de un entero cualquiera. rjk )} es o a un conjunto finito de pares registro-valor. (jk . . π2 . κ := j si r0 = 0. κ := j κ := 0 3. . La estructura de datos de un R AM es un arreglo de registros R0 . . . . a lo de m´ quinas Turing.34 ´ ´ CAPITULO 3.

x = 6 y y = 10. La entrada del ejemplo es I = (6. 6). El largo de la entrada entera L(I) u es la suma de los largos de los enteros en estos t´ rminos. a Π. (2. 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. e as´ que (0. 10). 10). Las configuraciones para el ejemplo se muestra a la derecha. a Programa Configuraci´ n o READ 2 (1. (1. 10)}) READ 1 (3. 10). R) → (κ′ . (1. 10)}) SUB 2 (5. La abstracci´ n normalmente considerala sumaci´ n de eno o o teros grandes como es algo que no se puede hacer r´ pidamente. (1. 6)}) LOAD 2 (9. (1. mientras el programa general est´ a la izquierda. y) = |x − y| para enteros arbitrarios o x. {(0. 6)}) relaci´ n de un paso o (κ.6) instrucci´ n en posici´ n κ del programa Π. ∅) STORE 2 (2. 10). 10). {(0. (2. 10). {(0. Como un ejemplo.I k en k pasos”) y → (“da eventualmente”) como en el caso de las m´ quinas Turing. {(0. 6)}) HALT (0. 6). 10).2: Una R AM para computar la funci´ n φ(x. 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. 6)}) SUB 1 (10.´ 3. −4). 10)}) STORE 1 (4. x′ ) a˜ adido seg´ n la Π. o Para valores negativos. y) = |x − y| en el cuadro 3. {(0. (2. (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.I (3. x) puede haber sido removido y alg´ n par (j ′ . R) Π. {(0. lo que nos da como resultado φ(I) = 4. (2. (2. y. {(0. φ(I)) ∈ R. ∅) → (0. (1. (2. 6)}) HALT (8. Esta relaci´ n induce otras relaciones → (“da o o o Si D es una sucesi´ n finita de enteros. 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.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. 10). (2.2. 4).2. {(0. −4). (2. o sea. El largo del entero en el contexto R AM es el n´ mero de bits en bi .I ∗ (3. pensamos que hay un bit “gratuito” para el signo. 4). MAQUINAS DE ACCESO ALEATORIO (RAM) 35 Cuadro 3. {(0. tenemos la R AM que computa la funci´ n ı o φ(x. R′ ) Π. . 10). 6)}) JNEG 8 (6.

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

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

Nk (3. ς} . δ. s) est´ representada por Mb = bΣ . 2. .14) Ahora. podemos codificarlo utilizando a n´ meros enteros de la manera siguiente. δ. 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. x) = M(x). →. . u) o ı (3.4. Σ. 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. e . . “no”} ı = = = = {1. {ς + 1. para lograr un alfabeto finito. ρ. ς + k + 2. . ς + 2. cada m´ quina Turing es capaz de resolver un cierto problema. “alto”. (III ) Aplicar la regla. donde ς = |Σ| y k = |K|: u Σ K d´ nde s o {←. u) ⇒ k ≤ f (|x|) . ı Habr´ que ver c´ mo representar una m´ quina Turing por una cadena se s´mbolos de alg´ n a o a ı u alfabeto. ⊲. La m´ quina universal U necesita adem´ s de la cinta de entrada donde tiene x. ς + k + 6} . (p.”: M = (K. ⊲. . −. 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. w. u).12) para algunas cadenas w y u. w. . . . . codificamos todo esto con las representaciones binarias y el s´mbolo “. (3. s). D)) de la funci´ n de transici´ n δ utilizando o o las representaciones binarias de sus componentes. M´ quina Turing universal a Como las hemos definido. x) → (“s´”. a 3. “s´”. Dada una m´ quina Turing M = (K. (II ) Buscar en S1 para la regla de δ que corresponde al estado actual. (IV ) En cuanto M para. (q. 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} . w. Adem´ s. 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. . 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. x) → (q. ς + 1 y finalmente {ς + k + 1. . tambi´ n U para. Σ.38 ´ ´ CAPITULO 3. bK .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|). σ). .

5. 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. con o sin entrada y a u salida. 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. Lo mismo se puede definir para espacio en vez de tiempo. M´ quina Turing precisa Sea M una m´ quina Turing con m´ ltiples cintas. determinista o no. .5. alterando la construcci´ n de M ′ as´ que en la simulaci´ n de M. 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. La m´ quina M es precisa si existen funciones f y g tales que para todo n ≥ 0. MAQUINA TURING PRECISA 39 a 3. se ocupa exactamente o ı o f (|x|) unidades de espacio.´ 3. Entonces necesariamente existe una m´ quina o a ′ Turing precisa M que decide L en tiempo O (f (n)).

40 ´ ´ CAPITULO 3. MODELOS DE COMPUTACION .

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).4.Cap´tulo 4 ı Complejidad computacional de problemas 4. a Definici´ n 4. El conjunto NP contiene todos los lenguajes decididos por m´ quinas Tuo a ring no deterministas en tiempo polinomial. 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. (4. (4. 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).3. El conjunto P contiene todos los lenguajes decididos por m´ quinas Turing o a (deterministas) en tiempo polinomial.1.1) Definici´ n 4. NP = k>0 NTIME nk .1.2) 41 . P= k>0 TIME nk . a Definici´ n 4.2.

. .3. la m´ quina M continua con la siguiente ı ı a secuencia en su lista. wk . M rechaza la entrada. . sea N = (K. ǫ. 1. s) una N TM y denota por d el grado de no determinismo de N. 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.3.3) Para comprobar Teorema 4. Entonces f (n) existe una m´ quina Turing determinista M que decide L en tiempo O cN . ⊲. ǫ. la necesidad de memoria. o sea. Σ. . es decir. M tambi´ n termina con ı e “s´”. con la secuencia (c1 . ∆. 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. u1 . x. . w1. . . . Clases de complejidad de espacio Para considerar complejidad del espacio. 4. . 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. Eso implica que NTIME (f (n)) ⊆ TIME cf (n) . donde a cN > 1 es un constante que depende de N. .5) donde |wi ui | es el largo (en cantidad de s´mbolos) de la cadena concatenada de las dos ı cadenas wi y ui . (4. . 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. la secuencia de selecciones en un camino de computaci´ n de N se representa como una secuencia de t enteros. Numeramos las opciones disponibles a cada momento de decisi´ n o con los enteros 0. Dada una N TM N con k cintas. d − 1. . Supone que una N TM N decide un lenguaje L en tiempo f (n). o Si M llega a simular una secuencia que resulta a “s´” en N. ⊲. . .4) y el costo de simular cada secuencia O 2f (n) . Si una secuencia no resulta en “s´” para N. c>1 (4. ⊲. . c2 .2. COMPLEJIDAD COMPUTACIONAL DE PROBLEMAS Teorema 4.42 ´ CAPITULO 4. Despu´ s de haber simulado todas las secuencias sin llegar a “s´” (o e ı sea. Entonces. . siempre ha llegado a “no” o “alto”). hay que definir una N TM con cintas m´ ltiples. . ) → (q. uk ) ⇒ k−1 i=2 N∗ |wi ui | ≤ f (|x|).

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

En el otro caso.44 ´ CAPITULO 4. (Teorema de Rice) Sea R el conjunto de lenguajes recursivamente numerables y ∅ = C ⊂ R. Aplica que S AT ∈ NP. S dice “no”. e ¯ Teorema 4. El problema complemento de ı S AT es: Problema 4.5.5. o a ¿aplica que L(M) ∈ C si L(M) es el lenguaje aceptado por M? 4. el complemento H de H (el lenguaje del problema H ALTING) no es recursivamente numerable. 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.5. 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) := ⊥. la respuesta es “no”. El siguiente problema es sin soluci´ n: dada una m´ quina Turing M. pero no se sabe si S AT est´ tambi´ n en P. S dice “s´” y si ML acepta a x. COMPLEJIDAD COMPUTACIONAL DE PROBLEMAS ¯ Teorema 4.2: S AT Dado: Pregunta: una expresi´ n booleana φ en C NF o ¿es φ satisfactible? Para demostrar que S AT ∈ NP.6. la respuesta es “s´”. Algunos problemas fundamentales 4. Resulta que cualquier propiedad no trivial de las m´ quinas Turing no a tiene soluci´ n: o Teorema 4. Cada lenguaje recursivo es tambi´ n recursivamente numerable. Un lenguaje L es recursivo si y s´ lo si los ambos lenguajes L y L son o recursivamente numerables.3: S AT Complement Utilizando tablas completas de asignaciones. Si ML acepta a ¯ a x. su complemento L tambi´ n lo es.1. se puede resolver el problema S AT en tiempo O (n2 · 2n ).4. ı ¯ ¯ Entonces. a e Dado: Pregunta: una expresi´ n booleana φ en C NF o ¿es φ no satisfactible? . Si resulta que T |= φ. Si un lenguaje L es recursivo. Problemas de l´ gica booleana o El problema de satisfiabilidad (S AT) es el siguiente: Problema 4.

vuelve a repetir el paso II . . se llama implicaci´ n por la raz´ n siguiente: la cl´ usula Horn o o a (¬x1 ) ∨ (¬x2 ) ∨ .7. . . el resultado es que φi es no satisfactible y as´ φ tampoco ı lo es. a (II ) Si hay una implicaci´ n o φi = (x1 ∧ x2 ∧ · · · ∧ xn ) → y ∈ S tal que (X(φi ) \ {y}) ⊆ T pero y ∈ T . / Si no existe tal literal. φi = ¬x1 ∨ · · · ∨ ¬xn : Si existe un literal ¬xi tal que xi ∈ T . (III ) Si T cambi´ . o (IV ) Cuando ya no haya cambios en T . (¬∨)xk ∨ xp es l´ gicamente equivalente a la expresi´ n o o (x1 ∧ x2 ∧ .5.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: C IRCUITSAT . El problema H ORNSAT es el siguieno o te: Problema 4. 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. 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.11) (4. verifica para todas las cl´ usulas en S que consisa ten de puros literales negados. por lo cual H ORNSAT ∈ P.1. (V) Si todas las cl´ usulas negativas son satisfactibles. ∧ xl ) → xp (4. todas menos una variable tienen que ser negadas). Una cl´ usula Horn es una disyunci´ n que contiene por m´ ximo un literal a o a positivo (es decir. Si una cl´ usula Horn a contiene un literal positivo. a e Problema 4. haz que y sea verdadera por asignar T := / T ∪ {y}.4.10) por las reglas de transformaci´ n de la secci´ n 1. . el resultado es que φi es satisfactible. φ tambi´ n lo es.

E) tal que V = {1. E) y dos v´ rtices v.2. . . j. Problemas de grafos Problema de alcance (R EACHABILITY) Un problema b´ sico de grafos es el problema de alcance : a Problema 4.8: R EACHABILITY Complement Dado: Pregunta: un grafo G = (V. pero C IRCUITVALUE ∈ P. 4. tenemos dos opciones: e la primera es que el camino m´ s corto con etiquetas menores o iguales a k + 1 utiliza a . El algoritmo compara todos los caminos posibles entre todos los a pares de v´ rtices en un grafo de entrada. 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. u ∈ V e ¿existe un camino de v a u? Dado: Pregunta: Su problema complemento es obviamente Problema 4. 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.6: C IRCUITVALUE Dado: Pregunta: un circuito booleano C que no contenga variables ¿tiene el valor ⊤ la salida del circuito? C IRCUITSAT ∈ NP. ´ Etiquetamos los v´ rtices de G = (V. n}. Utilizamos como e subrutina cc(i. 2.5. ⊥} tal que la salio da del circuito tenga el valor verdad? Problema 4. no es necesario definir un T como X(C) = ∅.7: R EACHABILITY un grafo G = (V. Para construir un camino de i a j e con solamente v´ rtices intermedios con menores o iguales a k + 1. E) y dos v´ rtices v. Para C IRCUITVALUE. . 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. .46 ´ CAPITULO 4. COMPLEJIDAD COMPUTACIONAL DE PROBLEMAS Dado: Pregunta: un circuito booleano C ¿existe una asignaci´ n T : X(C) → {⊤.

k) primero con k = 1. 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. Iterando esto para computar cc(i. contie nuando hasta k = n para cada par. el uso de memoria es lineal. k − 1). para los pares que no corresponden a una arista. Entonces. j. j) ∈ E y para grafos no ponderados cc(i. j. cc(i. j. k − 1)} . donde el costo es la suma de los pesos de las aristas incluidas en el ciclo. ın (4.12) con la condici´ n inicial siendo para grafos ponderados que cc(i. 0) = 1 para cada arista de G = (V. k − 1) + cc(k.11: T SP D . j. Esta observaci´ n nos ofrece una formulaci´ n recursiva de cc(): o o cc(i. j. j. La problema de decisi´ n que corresponde a la versi´ n ponderada es T SP D: o o Problema 4. despu´ s con k = 2. En ambos casos. E) ¿existe un camino C en G tal que C visite cada v´ rtice exace tamente una vez? Dado: Pregunta: Problema 4. E).10: H AMILTON C YCLE un grafo G = (V. j. cc(i. j) es el peso de la arista (i. j) donde o w(i. Los pesos tienen que ser no negativos para que funcione el algoritmo. 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.9: H AMILTON PATH un grafo G = (V. 0) = ∞.4. k. 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. o El tiempo de computaci´ n es O (n3 ) — es un ejercicio f´ cil ver porqu´ .5. k) = m´ {cc(i. 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) = w(i.

pero no todos los maximales a deben de ser m´ ximos. 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. Un v´ rtice v est´ acoplado si M contiene una arista incidente a v. 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. u} ∈ E: e Problema 4.48 ´ CAPITULO 4.1 muestra un ejemplo simple. el conjunto que resulta ya no es un acoplamiento. E). C es un conjunto o ¯ independiente en el grafo complemento G. conjuntos de v´ rtices C ⊆ V tales que ∀v. a .12: C LIQUE Dado: Pregunta: grafo no dirigido G = (V. COMPLEJIDAD COMPUTACIONAL DE PROBLEMAS Dado: Pregunta: un grafo ponderado G = (V. Acoplamiento Un acoplamiento (ingl´ s: matching) es un conjunto M ⊆ E de aristas disjuntas no e adyacentes. n Todos los acoplamientos m´ ximos deben ser maximales.13: I NDEPENDENT S ET Dado: Pregunta: grafo no dirigido G = (V. el v´ rtice est´ libre. si se a˜ ade una arista a tal M. u ∈ C aplica que {v. 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. u ∈ I aplica que {v. o sea. 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.? Una observaci´ n importante es que si C es una camarilla en G = (V. u} ∈ E: / Problema 4. Ena tonces. La figura 4. Si no e a est´ acoplado. 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. No es necesariamente unico.

4. E) es |Mm´x |. (4. 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.2 muestra un ejemplo del intercambio por un camino aumentante.1: Un acoplamiento de un grafo peque˜ o: las aristas gruesas negras forman el n acoplamiento y los v´ rtices azules est´ n acoplados. La a o u figura 4. El n´ mero de v´ rtices libres u u e a (dado G y M) se llama el d´ ficit del acoplamiento en G. 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. ALGUNOS PROBLEMAS FUNDAMENTALES 49 Figura 4.2: Un ejemplo del m´ todo de camino aumentante para mejorar un acoplamiento.13) Un acoplamiento M es m´ ximo si y s´ lo si no contiene ning´ n camino aumentante. e En azul se muestra el acoplamiento actual.5. 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. u 2 Para mejorar un acoplamiento existente. Un e camino alternante es un camino en G al cual sus aristas alternativamente pertenecen y no pertenecen a M. a . Cada acoplamiento perfecto es m´ ximo y maximal y tiene un e a n´ mero de acoplamiento igual a |n| . Se puede aumentar el tama˜ o intercambiando n la pertenencia con la no pertenencia al acoplamiento de las aristas del camino aumentante indicado. Un camino aumentante A es un camino alternante de un v´ rtice libre v e a otro v´ rtice libre u. Figura 4. e a El n´ mero de acoplamiento de G = (V. donde M′ = M \ (M ∩ A) ∪ A \ (M ∩ A) . e Dado un camino aumentante A. se utiliza el m´ todo de caminos aumentantes.

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

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.15) La figura 4. En el caso especial de cortar un grafo de flujo. v ∈ V : 0 ≤ f (u.17) v∈C w∈C / f (v. 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. o o ∀u ∈ V \ {s. 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. w) ≤ 0. los valores de las aristas se llaman capacidades c(v. c(v. (4.4 e / muestra un ejemplo de un grafo que puede ser una instancia de un problema sobre flujos. w).14) y la restricci´ n de conservaci´ n de flujo: el flujo que entra es igual al flujo que sale. 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. u) = v∈V v∈V f (u. Se muestra la capacidad de cada arista. w} ∈ E ⇒ c(v. En el grafo de entrada ponderado. v) ≤ c(u. (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. se exige que s ∈ C y t ∈ C. se define: {v. 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. .5 muestra una instancia de un problema de flujos con cuatro cortes y sus capacidades. w) = 0.5. Un flujo positivo es una funci´ n f : V × V → R que satisface dos restricciones: la o restricci´ n de capacidad: o ∀u. v). 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. w ∈ C}| . u} ∈ E | v ∈ C. / (4.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). |{{v. La figura 4. v) (4.

Un corte m´nimo de G = (V. los tama˜ os de los dos “lados” del ı n corte.16: k-C OLORING Dado: Pregunta: un grafo no dirigido G = (V. la cantidad de flujo que cruza un corte es igual a cada corte del grafo. El problema de la m´ xima bisecci´ n es el a o siguiente: Problema 4. 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. |C| y |V \ C| no suelen ser arbitrarios.15: M AX B ISECTION Dado: Pregunta: un grafo G = (V.52 ´ CAPITULO 4. 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. ı 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. Se muestra cuatro cortes con sus capacidades respectivas. E) es un corte cuya capacidad es m´nima entre todos los ı ı cortes de G. u} ∈ E tenga el u e mismo color? . u ∈ V tal que {v. Cuando establecido un flujo en el grafo. Adem´ s. 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.5: Un ejemplo de un grafo que es una instancia de un problema de flujos. El problema de encontrar el corte m´nimo tiene soluci´ n polinomial. En la mayor´a de las aplicaciones de cortes de grafos.

n. etc´ tera. o e (III ) el recurso el uso del cual se controla por la definici´ n: tiempo. o e (IV ) la cota que se impone al recurso (es decir. una funci´ n f correcta de complejidad). donde ⊓ es un s´mbolo “casi-blanco”. 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. n.Cap´tulo 5 ı Clases de complejidad Es posible definir diferentes tipos de clases de complejidad computacional. n!. no determinista.1) donde n es el par´ metro de la funci´ n. y c es un constante. (5. etc´ tera.2) . ⌈log n⌉. 2n . n3 + 3n. 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. f · g y 2f son funciones correctas. o e a (II ) la modalidad de computaci´ n: determinista. Algunos ejemplos de funciones de complejidad son √ c. n2 .. qu´ tipo de m´ quina Turing se utiliza). log2 n. o Dada una funci´ n correcta de complejidad f . Los requisitos para definir una clase son (I) fijar un modelo de computaci´ n (es decir. M necesita al m´ ximo f (|x|) unidades del recurso definido en III . e Formalmente. f (n). n log n. espacio. 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|) . tambi´ n f + g. a donde f es la funci´ n de IV . obtenemos las clases siguientes: o  determinista TIME (f )   tiempo  no determinista NTIME (f ) determinista SPACE (f )   espacio  no determinista NSPACE (f ) 53 (5.

(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. Otras clases que se encuentra frecuentemente son L = SPACE (log(n)) y NL = NSPACE (log(n)) Para cada clase de complejidad C.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. podemos utilizar una familia de funciones f cambiando a un par´ metro k ≥ 0. CLASES DE COMPLEJIDAD Cuadro 5.4) Todas las clases deterministas de tiempo y espacio son cerradas bajo el complemento. P = coP. 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. 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. Se puede mostrar tambi´ n que las clases de espacio no deterministas est´ n cerradas bajo e a complemento. Por ejemplo. ¯ L|L∈C . . 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. pero es una pregunta abierta si tambi´ n aplica para clases no deterministas e de tiempo.3) TIME 2n = j>0 TIME 2n j = EXP.54 ´ CAPITULO 5. existe una clase coC que es la clase de los complementos. Es decir.

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

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

(Teorema de Savitch) R EACHABILITY∈ SPACE log2 n . Teorema 5. como f (n) es una funci´ n correcta de complejidad. todav´a no se sabe si P = NPo no. Se llega a o a probar que para toda funci´ n correcta f (n) ≥ log n. aplica que o NSPACE (f (n)) ⊆ SPACE (f (n))2 . 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) . Si ninguna sucesi´ n acepta. La demostraci´ n del teorema est´ en el libro de texto de Papadimitriou [15]. 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 .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. el espacio que necesitamos es sou lamente f (n) como lo hacemos una por una.11) La pregunta interesante con ese corolario es donde aplica A ⊂ B en vez de A ⊆ B. (5. tenemos L ⊂ PSPACE por L = SPACE (log(n)) ⊂ SPACE (log(n) log(log(n))) ⊆ SPACE (n2 ) ⊆ PSPACE. El problema es que no se sabe cu´ l. Adem´ s. NSPACE (f (n)) ⊆ TIME clog n+f (n) . ı .1.10.11 sean todos de u o tipo A ⊂ B. Lo que s´ se ha establecido ı ı que por lo menos una de las inclusiones entre L y PSPACE es de ese tipo.14) Adem´ s. (5. es decir.11. y tambi´ n e que por lo menos una entre P y EXP es de ese tipo. (5. 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. se demostraci´ n que PSPACE = NPSPACE. (5.12) Es com´ nmente aceptado que las inclusiones inmediatas en ecuaci´ n 5. la primera o a o secuencia se puede generar en espacio f (n). M ′ rechaza su ı e ı o entrada. Con los resultados ya establecidos.´ 5. pero todav´a no se ha establecido tal resultado. Una secuencia del teorema es que L ⊆ NL ⊆ P ⊆ NP ⊆ PSPACE ⊆ EXP. JERARQUIAS DE COMPLEJIDAD 57 M para con “s´”. La demostraci´ n del teorema siguiente se encuentra en el libro de texto de Papadimitriou o [15]: Teorema 5. M ′ tambi´ n para con “s´”. entre que clases podemos probar que existe una diferencia: algunos elementos pertenecen a una pero no a la otra. Aunque el n´ mero de simulaciones es exponencial.

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

en otro caso.18) Ahora veremos ejemplos de reducciones entre dos problemas: de un problema B a otro problema A.20) M(x). (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 ). 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). la idea de la reducci´ n es la siguiente: dada la entrada Mb .2. (5. para mostrar que A no tiene soluci´ n. x | ∃y : M(x) = y} (III ) {Mb . E). x. x) ∈ A. 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. 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. “alto” si x = y. En cada caso. o . Algunos o ejemplos de lenguajes no recursivos son (I) {Mb | M para con cada entrada} (II ) {Mb . x de H AL o TING a una entrada t(Mb . el resultado R(G) o es una conjunci´ n de cl´ usulas (o sea. x ∈ H ⇔ M para con x ⇔ M ′ para con toda entrada ⇔ M ′ ∈ A. a Entonces. x | para computar M(x) se usa todos los estados de M} (IV ) {Mb . necesariamente tiene que existir un algoritmo para H ALTING. x ∈ H si y s´ lo si t(Mb . hay que establecer una ı reducci´ n R de H AMILTON PATH a S AT: para un grafo G = (V. hacemos ahora una reducci´ n de H AMILTON PATH a S AT.5. x. y | M(x) = y} Para el primero. se transforma la entrada Mb . Como un ejemplo. 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.19) (5. REDUCCIONES Ejemplos de reducciones 59 Si queremos mostrar que un problema A no tenga soluci´ n. se construye o la siguiente m´ quina M ′ a M ′ (y) = para la cual aplica que Mb .

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

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

La salida del circuito R(G) es ⊤ si y s´ lo si g1nn es ⊤. lo unico es etiquetar v = 1 y u = n e ´ y la reducci´ n est´ completa. Llegamos a una asignaci´ n correcta ı o de valores a hijk y gijk por inducci´ n en k = 0. 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. n. el circuito asigna por definici´ n gijk = gij(k−1) ∨ hijk . Por el hip´ tesis. Entonces. lo unico que necesitamos son tres contadores para computar el circuito R(G): ´ se puede hacer esto en O (log n) espacio. . Para comprobar que es correcta la reducci´ n. 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. CLASES DE COMPLEJIDAD • Cada gijk es una puerta tipo ∨ con dos entradas: la salida de gij(k−1) y la salida de hijk . u ∈ V para el problema R EACHABILITY. por cu´ l reo a a sulta que el circuito R(G) de hecho implementa el algoritmo Floyd-Warshall para el problema de alcance. 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. Como cada puerta de entrada es de tipo ⊤ o de tipo ⊥ en la ausencia de variables. (5. Una observaci´ n importante es que R(G) es un o circuito mon´ tono: no contiene ninguna puerta tipo ¬. Para k > 0. . hacemos el an´ lisis siguiente.62 ´ CAPITULO 5. e Para k > 0.28) ¬(a ∨ b) ⇔ (¬a) ∧ (¬b) para “empujar” todas las negaciones hasta las puertas de entrada. aplicamos ¬⊤ = ⊥ y ¬⊥ = ⊤ y ya no hay puertas de negaci´ n. 1. 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. El circuito R(G) es no c´clico y libre de variables. Dado dos v´ rtices v. 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. . La puerta g1nn es la salida del circuito R(G).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. o a Entonces. . . el circuito asigna o hijk = gik(k−1) ∧ gkj(k−1). 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 ⊤. El caso b´ sico k = 0 aplica por o a definici´ n. el valor de la funci´ n no puede cambiar de o ⊤ a ⊥.

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

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

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

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

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

normalmente se a e dirige el esfuerzo de investigaci´ n a o estudiar casos especiales. En muchos casos es importante identificar cu´ les requisitos exactamente causan que el a problema resulte NP-completo versus polinomial. que es la versi´ n que pertenece a la clase NP. 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 quiz´ s a ninguna. ı o (III ) Construir un reducci´ n R de un problema P conocido y NP-completo al problema o Q. Nota que si alg´ n problema NP-completo perteneciera u a NP. la cono ı sistencia y restricciones. 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. la pregunta es si existe por lo o o menos una configuraci´ n que cumpla con los requisitos del problema. donde la mejor construcci´ n posible es la soluci´ n deseada. aplicar´a NP = P. En la versi´ n o o o o de decisi´ n. 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. muchos problemas resultan NP-completos. 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. o e ı En la construcci´ n t´picamente se busca por representar las elecciones hechas. 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´”. o . o e ı (V) Probar que con la entrada x. 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. e Cuando ya est´ establecido que un problema de inter´ s es NP-completo. 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´”.68 ´ CAPITULO 5. (IV ) Probar que con la entrada R(x). porque este implicar´a que el problema es entre los menos proe ı bables de pertenecer en la clase P. 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. CLASES DE COMPLEJIDAD optimizaci´ n. algoritmos de aproximaci´ n. ı Si se sube a un nivel suficientemente general. El libro de Garey o y Johnson [7] es la referencia cl´ sica de los problemas NP-completos.

y | (x. e En los problemas t´picos que tratan de la existencia de un objeto matem´ tico que cumple ı a ı con ciertos criterios. Como N decide a L. ı 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. Por ejemplo. (5. 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.2. y) ∈ R para alg´ n y ∈ Σ∗ } . y adem´ s se puede deo a cidir R en tiempo polinomial.39) Habr´ que razonar la equivalencia l´ gica tambi´ n en la otra direcci´ n: suponga que L ∈ a o e o NP. (5.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. u exactamente como quer´amos. Una relaci´ n R est´ polinomialmente balanceada si o a Sea L ⊆ Σ∗ un lenguaje. Esta R est´ polinomialmente o o a balanceada.5. como cada computaci´ n de N tiene cota 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. u Para entender porqu´ est´ definici´ n es v´ lida. PROBLEMAS COMPLETOS an´ lisis asint´ tica del caso promedio. tenemos o o L = {x | (x. y) ∈ R.3. 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.3. y) ∈ R → (∃k ≥ 1 tal que |y| ≤ |x|k ). u (5. si se trata n o se encontrar un cierto subgrafo. 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. e ı u 69 5. el subgrafo tiene tama˜ o no mayor al tama˜ o del grafo n n de entrada. suponga que existe tal relaci´ n R. 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. (x. 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 para alg´ n y} . a o algoritmos aleatorizados. y) ∈ R} en tiempo a polinomial. algoritmos exponenciales para instancias peque˜ as o n m´ todos heur´sticos de b´ squeda local. 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.38) Definimos la relaci´ n R en la manera siguiente: (x. . tambi´ n llamado un testigo polinomial.

. .4.19. la segunda por x2 . Entonces. a˜ ademos las cl´ usulas siguientes en φ: n a (¬x1 ∨ x2 ).70 ´ CAPITULO 5. etc´ tera. 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 φ.1. 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. 3S AT es NP-completo.40) Denota por φ′ la expresi´ n que resulta cuando cada ocurrencia extra de una variable en φ o ha sido procesada de esta manera. 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. Las variables x de φ y sus negaciones x forman el conjunto de v´ rtices de G(φ). o a ¯ ¯ tambi´ n {xj . (¬xk ∨ x1 ). Entonces. e ¯ ¯ Como NL est´ cerrada bajo el complemento. resulta que 2S AT∈ NL (habr´ que recordar que NL ⊆ P). es el conjunto de expresiones booleanas φ ∈ S AT (en C NF) en las cuales cada cl´ usula contiene exactamente k literales. Para asegurar que las variables nuevas tengan e todas el mismo valor. 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 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(φ). . Para cada instancia φ de 2S AT. Problemas kS AT El lenguaje kS AT. a Teorema 5. a La demostraci´ n es una reducci´ n donde cada instancia φ ∈ 3S ATest´ transformada a o o a eliminar las propiedades no permitidas. a a . 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. Es decir. sabemos que 2S AT es ¯ polinomial. la frontera entre problemas polinomiales y problemas NPcompletos est´ entre 2S ATy 3S AT. donde k ≥ 1 es un entero. . 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 φ. (¬x2 ∨ x3 ). poo a demos “aumentar” cada cl´ usula de uno o dos literales a tener tres simplemente por copiar a literales. xk y reemplazamos la primera ocurrencia de x en φ por x1 . CLASES DE COMPLEJIDAD 5. . (5. si {xi . Adem´ s. . Considera una variable x que aparece k > 3 veces en φ. Introducimos variables nuevas x1 . xi } ∈ E. Resulta que φ′ ya cumple con las propiedades deseadas y que φ es satisfactible si y s´ lo si φ es satisfactible. .18. . a a Teorema 5. o Para problemas kS AT. tenemos una reducci´ n de C IRCUITSAT a 3S AT. xj } ∈ E.4. existe un algoritmo a polinomial basado en el problema R EACHABILITY en un grafo G(φ). Complejidad de algunas variaciones de S AT 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. Teorema 5. por lo cual alg´ n literal es necesariamente asignado el valor ⊤ en a u T para cada cl´ usula. si C es satisfactible. por la reducci´ n a a o o de C IRCUITSAT a S AT.5. (¬g ∨ h′ ∨ z). tenemos que C ∈ C IRCUITSAT si y s´ lo si R(C) ∈S AT. En la direcci´ n (⇒). En ninguna cl´ usula a de Rz (C) es permitido que todos los literales tengan el valor ⊤ (y tampoco que todos tengan el valor ⊥). est´ n satisfechas por T . El problema M AX 2S AT es una generalizaci´ n de 2S AT: o Problema 5. 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. 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 φ. las cl´ usulas ´ o a tienen la forma (¬g ∨ h ∨ z). Entonces extendemos T para Rz (C) por asignar T (z) = ⊥. por lo cual todas o las cl´ usulas originales est´ n satisfechas en esta asignaci´ n. Entonces. NAESAT es NP-completo. En el caso de ∧. (g ∨ ¬h ∨ ¬h′ ). 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.4. por lo cual contienen z y T (z) = ⊥. ⊥. 5.41) .4. Cada cl´ usula que corresponde a una puerta tipo ⊤.20. existe una asignaci´ n de valores T que satisface o o a Rz (C). existe una asignaci´ n que satisface el circuito. (5. 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. ¬ 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. a Los unicos casos de preocupaci´ n son puertas de tipo ∧ y ∨. o En la direcci´ n (⇐). Sin embargo. si una asignaci´ n de valores T satisface a la expresi´ n original R(C) o o o ¯ en el sentido de NAESAT. 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. todas las literales tengan el o a mismo valor ⊤ o ⊥.2.

a o Suponga que tal conjunto I existe. no todas las tres pueden tener el valor ⊤ porque as´ no es posible satisfacer a las dos primeras. Complejidad de problemas de grafos En esta secci´ n. Como un ejemplo. Es decir. (5. donde i = j. 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. es decir. por construcci´ n I a o necesariamente contiene un v´ rtice de cada uno de los k tri´ ngulos. una camarilla de tres v´ rtices. CLASES DE COMPLEJIDAD donde las primeras dos tienen z con su valor ⊥. {vai . consideramos solamente grafos no dirigidos.21. se puede construir un grafo que corresponde a φ = (x1 ∨ x2 ∨ x3 ) ∧ (¬x1 ∨ = x2 ∨ ¬x3 ) ∧ (¬x1 ∨ x2 ∨ x3 ). 5. I NDEPENDENT S ET es NP-completo. vci} que forman el tri´ ngulo de los tres v´ rtices de la cl´ usula Ci . a Por construcci´ n. necesitamos un “gadget”: el tri´ ngulo. 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. hay que conectar las cl´ usulas que comparten variables. a habr´ n v´ rtices vai . obviamente en ese tipo de grafo ning´ n conjunto independiente puede o u tener cardinalidad mayor a t. generamos un tri´ ngulo a a en el grafo G = R(φ). solamente uno de los tres a e participantes del tri´ ngulo puede ser considerado para formar un conjunto independiente.5. En la tercera. 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. vbi }. a porque en un conjunto independiente. a e a Adem´ s. El conjunto I no puee a de contener ning´ n par de v´ rtices que corresponda una ocurrencia positiva de un variable u e . Como φ tiene k cl´ usulas y |i| = k. tenemos definida nuestra reducci´ n. vbi y vci en el grafo G y adem´ s las tres aristas {vai . El caso de ∨ es ı parecido. Entonces.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. vci} y a e a {vbi . a Para demostrar el teorema.72 ´ CAPITULO 5. Adem´ s. 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). 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. ning´ n par de v´ rtices puede compartir una arista. pero el literal es positivo en e Ci y negativo en Cj . o Teorema 5. 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. bi y ci las tres literales de una cl´ usula Ci . 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 . Si el grafo de entrada contiene un tri´ ngulo. Sean ai .

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

w) f (w.44) La capacidad de aumento de la arista {v. v) si {v. ni de o capacidades ni de balance. o Primero construyamos un grafo residual que captura las posibilidades de mejoramiento que tenemos. w)) ∨ (f (w. v} ∈ E. w). w} ∈ E. w) = c(v. El grafo residual Gf = (V. w) − f (v. Por la manera en que elegimos a δ. E) con respeto a un flujo f tiene {v. Cuando ya no existe camino aumentante ninguno. y sea δ = m´ C δ(v.74 2/4 5/5 3/7 3/3 ´ CAPITULO 5. no rompemos ninguna restricci´ n. 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 ). v) > 0) . La eficiencia del m´ todo presentado depende de c´ mo se construye los caminos aumene o tantes. Este procedimiento se itera hasta que ya no existan caminos aumentantes. El valor de δ es igual al capacidad de aumento m´nimo del camino. Se podr´a resolver el ı ı . (5. 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. O (nm2 ) = O (n5 ). Ef ) del grafo G = (V. La mayor eficiencia se logra por elegir siempre el camino aumentante de largo m´nimo. w} ∈ Ef se define como c′ (v. el flujo es maximal.45) Para un ejemplo de un grafo residual. Cada camino simple entre s y t en el grafo residual Gf es un camino aumentante de G. 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. (5. si {w.1. el algoritmo que resulta es polinomial. w} ∈ E | (f (v. ver la figura 5.1: En ejemplo de un grafo con flujo y su grafo residual. w) < c(v.

(5. 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).v}∈Gf {v. o . Su construcci´ n es la siguiente: e o se asigna a cada v´ rtice un valor de “capa” que es su distancia desde s. Ahora actualizamos las capacidades de las aristas afectadas y memorizamos el flujo generado y el camino que toma. 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. 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. por lo cual la construcci´ n se repite O (n) veces. Computamos de nuevo los flujos posibles y eliminamos de nuevo v´ rtices con flujo posie ble cero juntos con sus aristas adyacentes. vf = m´ ın   ′ ′ {u. 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. Una arista {v. el flujo construido es ı a ı el flujo mayor en G′f . Si s y t quedaron fuera.5. sumando los flujos generados hasta que s y t ya no est´ n ı e ′ conectados en Gf . Es decir. cada arista que cruza el corte (A.46) c′ (u. 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 . Para elegir los caminos aumentantes m´ s cortos en el grafo residual. v). Iteramos as´.5. o Sea A el conjunto de v´ rtices que en el ultimo grafo residual Gf se puede alcanzar desde s. COMPLEJIDAD DE PROBLEMAS DE GRAFOS 75 problema de flujo m´ ximo por empezar con el flujo cero. Entonces. La complejidad asint´ tica de la a o construcci´ n de G′f es O (m). ı 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. w) . o En el grafo G′f .w}∈Gf Primero sacamos de G′f todos los v´ rtices con flujo posible cero y cada arista adyacente a e estos v´ rtices. 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. utilizamos b´ squeda a u en anchura desde s. el algoritmo del flujo mayor tiene complejidad asint´ tica O (n3 ). “Empujamos” e e e ı una cantidad de flujo igual al flujo posible de v desde v hac´a t. la capacidad del corte es igual al flujo actual. cada camino de s a t tiene el mismo largo. 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. 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. por construcci´ n en el grafo original G. Si todav´a est´ n. repetimos el proceso de elegir el m´nimo y empujar y retirar flujo. pero en el peor caso es igual en complejidad al problema original. Cada iteraci´ n de construcci´ n de una red de capas G′f utiliza a o o caminos m´ s largos que el anterior. El mejor aumento ser´a igual ı ′ al flujo m´ ximo en Gf . e ´ Entonces. Solamente v´ rtices e e ′ con distancias finitas est´ n incluidas.

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

Adem´ s. La reducci´ n es de 3S AT a H AMILTON PATH: dada una expresi´ n φ en C NF con las o o variables x1 . 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. . por lo cual V \ S contiene los literales que tienen asignado el valor ⊥. . La demostraci´ n es una reducci´ n de M AX B ISECTION: la instancia es un grafo G = o o (V. Para lograr que sea mayor o igual a 5m la capacidad del corte.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. Entonces. En la otra direcci´ n es f´ cil: dada una asignaci´ n T a φ en el sentido de NAESAT. habr´ que ser 2r aristas que son aristas a de los tri´ ngulos representando a las cl´ usulas cruzando el corte. e Antes definimos un problema de bisecci´ n m´ xima (M AX B ISECTION).5.5. en total 3r aristas. Caminos y ciclos de Hamilton Teorema 5. Como ahora cada variable y su negaci´ n est´ n el lados difeo a rentes. M AX B ISECTION es NP-completo. 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|. . M IN B ISECTION es NP-completo.26. . As´ cada uno de los r e ı tri´ ngulos necesariamente contribuye dos aristas. 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. aunque ya sabemos que M IN C UT∈ P: o e Problema 5. . H AMILTON PATH es NP-completo. xn y cl´ usulas C1 . COMPLEJIDAD DE PROBLEMAS DE GRAFOS 77 Sea S el conjunto de literales asignadas ⊤. a o o n 5. es decir. contribuyen una arista por ocurrencia en φ. el e grafo original tiene un corte (S. o sea.25. . a a .27. 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. Cm tal que cada cl´ usula contiene tres literales. podemos o a o agrupar los v´ rtices a darnos un corte con capacidad mayor o igual a 5r. M IN C UT con el requisito de ser una o bisecci´ n. la asignaci´ n e a o satisface a φ en el sentido de NAESAT.5. n El problema de minimizaci´ n correspondiente.3. 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. . E) con un n´ mero par de v´ rtices n = 2c. tambi´ n es NP-completo. . cada tri´ ngua a a lo tiene que estar separado: dos v´ rtices en un lado y uno al otro. 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.

La reducci´ n ser´ de H AMILTON PATH a T SP D: dado un grafo G = (V. o a Como una consecuencia. 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. gadgets de restricci´ n que garantizan que cada cl´ usula sea satisfecha.78 ´ CAPITULO 5. 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. o un grafo G(φ) est´ construida tal que G(φ) contiene un camino de Hamilton si y s´ lo si a o φ es satisfactible.2: gadgets de elecci´ n que eligen la asignaci´ n a las variables xi . 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. Adicionalmente se a˜ ade aristas para conectar todos los tri´ ngulos. obtenemos un resultado sobre el problema del viajante: Teorema 5. Otro v´ rtice auxiliar w est´ a˜ adido y conectado con una arista a v. el gadget de consistencia y a la derecha. E) con n v´ rtices.2: Los gadgets de la reducci´ n de 3S AT a H AMILTON PATH: a la izquierda. Se omite las detalles de verificar que est´ funcional la o e e reducci´ n. 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. o a Los gadgets de elecci´ n de las variables se conecta en serie. el o gadget de elecci´ n. En consecuencia.28. dej´ ndolas como un ejercicio. Cada cl´ usula tiene un gadget o a de restricci´ n. 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. CLASES DE COMPLEJIDAD = Figura 5. 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. 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. el gadget de o restricci´ n. en el centro.

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

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.30.48) ϕ∈M Cada instancia del problema de la mochila se puede resolver en tiempo O (N · Ψ).6. c) en T que no comparten ning´ n componente entre cualesquiera dos triples? u Teorema 5. . aunque el problema es NP-completo.5. b. Entonces. (5. cada uno con n elementos y una relaci´ n ternaria T ⊆ A × B × C o ¿existe un conjunto de n triples (a.80 ´ CAPITULO 5. 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 Ψ. 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. Cada uno de los V (w. CLASES DE COMPLEJIDAD ´ 5. mientras o o programaci´ n lineal pertenece a P. lo que se muestra por un problema de conjuntos (cubierto exacto. i). . i)} a (5. Algoritmos pseudo-polinomiales Tambi´ n el famoso problema de la mochila (K NAPSACK.50) . o 5. 3M ATCHING es NP-completo. . 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 ).5. Conjuntos y numeros El problema de 3M ATCHING es el siguiente: Problema 5. . B y C. N se puede calcular a trav´ s de la ecuaci´ n recursiva siguiente: e o V (w.49) ω (ϕ) ϕ∈M (5. i) con w = 1. . Definimos variables auxiliares V (w. con la restricci´ n ı o Ψ≥ se aspira maximizar la utilidad total ν(ϕ) ≥ k. . i + 1) = m´x{V (w. vi+1 + V (w − wi+1 . ingl´ s: exact e cover). . Ψ y i = 1. .20: 3M ATCHING Dado: Pregunta: tres conjuntos A. ingl´ s: knapsack) es NPe e completo. La reducci´ n es de 3S ATy est´ presentado en el libro de texto de Papadimitriou [15].

Entonces.5. La respuesta de la problema o de decisi´ n es “s´” unicamente en el caso que alg´ n valor 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 Ψ ).7. ¿c´ mo puede ser esto un problema NP-completo? Para pertenecer a P. i) conociendo algunos otros y en total son NΨ elementos. o ı ´ u Entonces. i) = −∞ si w ≤ 0. 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. por ejemplo. PROBLEMAS FUERTEMENTE NP-COMPLETOS 81 donde V (w. i) sea mayor o igual a k. .7. 0) = 0 para todo w y V (w. T SP D y H AMILTON PATH. pero K NAPSACK no lo es. neo cesitar´a tener un algoritmo polinomial en el tama˜ o de la instancia. Este algoritmo tiene tiempo de ejecuci´ n O (N · Ψ). M AX C UT. podemos calcular en tiempo constante un valor de V (w. Los problemas S AT. 5. Un problema fuertemente NP-completo no puede tener u algoritmos pseudo-polinomiales salvo que si aplica que P sea igual a NP. ı 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.

82 ´ CAPITULO 5. CLASES DE COMPLEJIDAD .

. . (6.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. Por defecto. . Si el elemento no est´ en el arreglo.2) Hay que cuidar que se use las ´ndices consistentemente. . a2 . La complejidad de identificar si un arreglo no ordenado a[] contiene u un cierto elemento x es O (n). Arreglos sirven bien para situaciones donde el n´ mero de elementos que se necesita es u conocido y no muy variable. . Arreglos Un arreglo es una estructura capaz de guardar en un orden fijo n elementos. se asume con los elementos guardados en un arreglo no est´ n ordenados e por ning´ n criterio. bn−1 . 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. 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. Si el tama˜ o no est´ fijo ni conocido. . El tiempo de acceso del elemento en posici´ n ı o k en un arreglo es O (1). como habr´ que comprar cada elemento a[k] con x y el a algoritmo termina al encontrar igualdad.1) 83 . an−1 ] o alternativamente de uno b[] = [b1 . tenemos el a peor caso de exactamente n comparaciones. Se refiere com´ nmente al eleı u mento con ´ndice k como a[k] en vez de ak . . Los ´ndices ı de las posiciones pueden empezar de cero a[] = [a0 . o o 6.1. bn ]. (6. a1 . b2 . .

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

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

. la segunda tiene n − 2. habr´ que siempre buscar el elemento mayor entre i a y el fin del arreglo. Entonces. k ≥ 1 ≪ n. si la entrada son dos listas A y B de n´ meros enteros u ordenaros del menor a mayor. o La ordenaci´ n por fusi´ n (ingl´ s: mergesort) funciona por divisiones parecidas a las de la o o e b´ squeda binaria. . por ejemplo uno de los dos ya presentados. ahoo o a rramos varias operaciones en comparaci´ n con la ordenaci´ n por burbuja.+ n− 2 + n− 1 = j= j=1 j=0 j= n(n − 1) 2 (6. (III ) Si bℓ [iℓ ] ≥ br [ir ]. 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 ⌋. hay ´ n−1 n−1 1 + 2 +. Ambos 2 2 subarreglos est´ n divididos de nuevo hasta que contengan k elementos. e Para ordenar en orden decreciente. ı o (VI ) Itera hasta que i est´ en el fin del arreglo. En el peor caso. 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. Al a llegar al nivel donde la lista tiene k elementos. ı 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. En total. pero en pr´ ctica. etc´ tera.86 ´ CAPITULO 6. asigna b[i] := bℓ [iℓ ] y despu´ s actualiza los ´ndices relacionados: e ı iℓ := iℓ + 1 y i := i + 1. cuando los valores del arreglo est´ n en orden reverso a lo deseado. asigna b[i] := br [ir ] y despu´ s actualiza los ´ndices relacionados: e ı ir := ir + 1 y i := i + 1. En este idea se basa el algoritmo siguiente de ordenaci´ n.. ir := 0 y i := 0 (II ) Si bℓ [iℓ ] < br [ir ]. la lista combinada se crea por leer el primer elemento de A y el primer elemento de B. a[i] := t. la a primera iteraci´ n tiene n − 1 comparaciones.35. se utiliza otro algoritmo de sortearlo. Opcionalmente se podr´a fijar k = 1.3) por ecuaci´ n 1. (V) Incrementa el ´ndice de posici´ n actual: i := i + 1. hasta que o e el ultimo solamente tiene una. Por ejemplo. la complejidad asint´ tica es O (n2 ). ESTRUCTURAS DE DATOS (IV ) Intercambia los valores de a[i] y a[k]: a[k] := a[i]. Este algoritmo se llama ordenaci´ n por selecci´ n (ingl´ s: selection o o e sort). 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.

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

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. .88 ´ CAPITULO 6. . Las a ı iteraciones est´ n separadas por l´neas horizontales. . . . . a ı . 8 9 . hay una l´nea nueva. La posici´ n del proceo samiento est´ marcada con letra negrita y por cada cambio. 7 8 8 . 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 . 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.

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

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

3. o m´ s sim´ ı a ´ plemente. 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.´ 6. Arboles Un arbol de n v´ rtices etiquetados 1. 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). 2. .3. Arboles permiten realizar eficientemena te operaciones como inserciones. n se puede guardar en un arreglo a[] de n ´ e posiciones. . ı 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.1. etc´ tera. eliminaciones y b´ squedas de los elementos guardados. En un arbol binario. donde el valor de a[i] es la etiqueta del v´ rtice padre del v´ rtice i. adaptado de Knuth ı [11]. ´ a la ra´z ı hijo izquierdo hijo derecho ramo derecho de la ra´z ı Figura 6. . tal como el orden alfab´ tico o orden creciente num´ rico. u El unico requisito es que exista un orden sobre el espacio de las claves de los elementos ´ que se maneja.4 contiene un ejemplo. grupos de datos que habr´ que ordenar. 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. La figura 6.3. Para un ejemplo.3: Un ejemplo de un arbol binario.5). ´ 6. . ´ Arboles son estructuras muy utiles para servir como ´ndices de bases de datos. Si ning´ n v´ rtice tiene solamente un hijo. ARBOLES 91 ´ 6. Arboles binarios ´ Arboles binarios son una clase de arbol en uso muy com´ n. 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. . ve la figura 6. se u e dice que el arbol est´ lleno. ´ Su uso como ´ndices es relativamente f´ cil tambi´ n para bases de datos muy grandes.3.

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. ambos ´ ´ ´ con ocho v´ rtices hojas. Cuando la b´ squeda llega a una hoja.5: Un arbol binario de peor caso versus un arbol binario de forma optima. el arbol no contiene la clave i en u ´ ninguna parte.3. los arboles que resultan son arboles llenos. Utilizamos en e ´ ´ los ejemplos enteros positivos como las claves.1. El pseudoc´ digo de la b´ squeda est´ en el cuadro 6. e ´ 6. 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.2. 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. u se eval´ a si el valor de la hoja es i o no. o u a El arbol est´ balanceado si el largo m´ ximo es k.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. Los v´ rtices que no son hojas ahora se llaman v´ rtices de ruteo . el largo m´nimo tiene que ser mayor o ´ a a ı . ESTRUCTURAS DE DATOS Figura 6. ı a n Un arbol balanceado con n = 8 y profundidad tres. ´ El peor caso de falta de balance para n = 8 tiene profundidad seis. e Por el uso de v´ rtices de ruteo. Figura 6. Para buscar la hoja con clave i.92 ´ CAPITULO 6. Si no es i. 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.

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

por lo cual tambi´ n para esos arboles aplica que su tiempo de acceso a cualquier e ´ clave es O (log2 n). 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. la diferencia en el largo de los caminos es un constante. El n´ mero de v´ rtices de ruteo en el ramo de una hoja es cero.9) La sustituci´ n que hicimos era 1 + R(k) = F (k). 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. A los n´ meros de Fibonacci aplica que u φa F (a) > √ − 1 5 (6. 1. (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). (6. 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. si k = 1 Fk = (6. 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. donde el elemento en posici´ n k se llama el k-´ cimo n´ mero de o o e u Fibonacci:  si k = 0  0.10)  Fk−1 + Fk−2. como F (0) = 0 < R(0) + 1 = 0 + 1 = 1 F (1) = 1 < R(1) + 1 = 1 + 1 = 2. 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. 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. para k > 1.11) √ donde φ = 1+2 5 es la tasa dorada. ESTRUCTURAS DE DATOS Para un arbol balanceado.12) . La sustituci´ n 1 + R(k) = o o F (k) tampoco aplica desde el comienzo. 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.94 ´ CAPITULO 6.

el largo m´ ximo de ı a a logφ (R(a) + 2) = a + 2 − logφ ( 5) a ≈ 1.6 muestra un ı a ejemplo. es decir. El elemento a e a menor de vh y vn ser´ el hijo izquierdo y el mayor el hijo derecho.440 log(R(a) + 2) − 0.440 log(n + 2) − 0. Llegando a la hoja vh donde deber´a estar la clave. o o Las operaciones de insertar y eliminar claves modifican la forma del arbol. Para cada arbol que cumple con la condici´ n de balance AVL. 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. hay que crear ı un v´ rtice de ruteo vr nuevo. 8. 1. ARBOLES 95 a c b a Figura 6. 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. .´ 6. .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. podemos escribir para cada k que R(k) = F (k + 2) + 1. 233. A ´ o 1.31. ´ ı o Para insertar un elemento nuevo al arbol de ´ndice. .3. .328. 144. primero hay que buscar la ubicaci´ n de la clave del elemento. 1. 55. (6.328. 34.13) — ¡son F (2) y F (3)! Entonces. 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. o e a e Sin embargo. 89. La garant´a ´ ı de tiempo de acceso O (log n) est´ solamente v´ lida a arboles balanceados. 377. 13. hijos del cual ser´ n los v´ rtices hojas de a y b. 610. 3. 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 .14) √ Ya sabemos que n > R(A) porque H > 0 — siempre hay hojas si el arbol no est´ com´ a pletamente vac´o. El valor del v´ rtice a e de ruteo vr as´ creado ser´ igual al valor de su hijo derecho. 21. 2. 5. Para eliminar un elemento del arbol.7 muestra un ejemplo. Entonces aplica que siguiente: ı Teorema 6. los valores 1 y 2 tambi´ n aparecen en la sucesi´ n de Fibonacci: e o 0. La figura 6. La figura 6. 987.

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

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

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

´ 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 ´

primero disminuimos su valor a −∞ en tiempo O (log n) y despu´ s quitamos el m´nimo en tiempo O (log n). e ı 6. Cada v´ rtice contiene. 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). o Para eliminar el elemento m´nimo. Entonces el tiempo total para esta operaci´ n es tambi´ n O (log n).2. . o Entonces. Si hay dos. el grado y un marcador.13: Un ejemplo de un mont´culo bin´ mico. Cada v´ rtice del mont´culo tiene guardado adem´ s de su propia clave. Esta operaci´ n necesita O (log n) tiempo. adem´ s de su clave. o e Para disminuir el valor de una clave. sus dos hermanos (a la izquierda y a la derecha). dando una complejidad total de O (log n) para la inserı ci´ n. se los junta ı ´ n a un arbol Bi+1 . para insertar un elemento. hay que recorrer las listas de ra´ces de los dos mont´culos simultaneamente. formando una lista doblemente e enlazada. La lista se completa por hacer que el ultimo v´ rtice sea el hermano izquierdo ´ e del primero.4. MONTICULOS 103 Figura 6. Las ra´ces est´ n ´ o e e ı a en una cadena a trav´ s de los punteros a los hermanos.´ 6. su grado (en este e ı a contexto: el n´ mero de hijos que tiene) y tres punteros: a su padre. le quitamos y creaı mos otro mont´culo de sus hijos en tiempo O (log n). 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 . a su hermano y a su u hijo directo. 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. Si uno de los mont´culos ya cuenta con un Bi+1 se los junta recursiva´ ı mente. Unimos los dos mont´culos en ı ı tiempo O (log n). creamos un B0 en tiempo O (1) y lo juntamos en el mont´culo en tiempo O (log n). ı ı Para eliminar un elemento cualquiera.4. 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. punteros ı e a a su padre. compuesto por cinco arboles bin´ miı o ´ o cos. Al encontrar dos arboles del mismo tama˜ o Bi . Esta operaci´ n ´ ı a ´ o se realiza en tiempo O (1). lo buscamos en tiempo O (log n). ı o ı Para unir dos mont´culos bin´ micos.

Si el padre w de v llevaba ı el valor uno en su marcador. Si el elemento ya est´ ocupado. ı Sea h ≥ 0 y Fh un arbol de un mont´culo Fibonacci donde la ra´z v tiene h hijos. En el peor caso. hay dos opciones: si est´ en una ra´z. En el e ı otro caso.104 ´ CAPITULO 6. pero ´ ı ı donde la cantidad de otros v´ rtices es m´nima.19) Entonces. los v´ rtices forman un e ı e s´ lo arbol. En el otro caso. . se marca el v´ rtice w (por poner el valor uno en el marcador). . ambos e ı . ı a Para disminuir el valor de una clave. Lo unico que hay que establecer a e ı ´ es que los ramos de los hijos de la ra´z tienen que ser grandes. se crea un arbol con un ı ´ s´ lo v´ rtice con marcador en cero (en tiempo O (1)). es trivial a ı (solamente modificando su valor). log2 |Bk | = log2 2k = k log2 2 = k. 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. 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. Los hijos son ´ o ı ı B0 . Es importante notar que despu´ s de haber compresionado la lista de ra´ces. Aplica que k−1 |Bk | = 1 + i=0 |Bi | = 2k . (6. se junta ı a los dos arboles y libera el elemento del arreglo. En un mont´culo bin´ mico. Esto claramente hay que aplicar recur´ sivamente. Mostramos de la misma manera que en un mont´culo Fibonacci un v´ rtice tiene al m´ ximo ı e a O (log n) hijos. 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. el elemento ı u ´ m´nimo se encuentra en tiempo O (1). . por el orden de mont´culo y el manejo del n´ mero de arboles. Despu´ s de la eliminaci´ n. 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. habr´ que quitar el v´ rtice v con la a e clave de la lista de hermanos y convertirlo a una ra´z nueva. 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. que nos da el resultado deseado de O (log n). tambi´ n se quita w y lo convierte en una ra´z nueva. donde la ra´z tiene muchos hijos y no hay muchos otros v´ rtices. Aqu´ la dificultad viene de encontrar eficientemente las ı ´ ı ra´ces con grados iguales para juntarlos. . se repite una operaci´ n de compresi´ n hasta que ı e o o o las ra´ces tengan grados unicos. 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. ESTRUCTURAS DE DATOS De nuevo. Al momento de juntar el hijo Hi . o ´ ı e Denotamos por Bk el arbol bin´ mico m´nimo donde la ra´z tenga k hijos. Para insertar un elemento. 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. 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). Bk−1 y Bi tiene i hijos. En el peor caso.

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

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

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

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

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

un recorrido no puede pasar de alg´ n componente a otro sin pasar por v. aplica que la intersecci´ n de dos componentes distintos e o que son ambos 2-conexos consiste por m´ ximo un v´ rtice. 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. I(v) := 0. (6.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).110 Componentes doblemente conexos ´ CAPITULO 6.28) De hecho. En el sentido de v´ rtices distintos. El a procedimiento de inicializaci´ n ser´ o a inicio := 0. tiene ´ ı ´ necesariamente por lo menos dos hijos. para todo v ∈ V . P := ∅. u} es una arista retrocedente} . . De tal ramo no es posible tener una arista retrocedente a ning´ n u antepasado. podemos incorporar en el D FS original la calculaci´ n de los R(v) de todos los o v´ rtices. 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. a las aristas del componente est´ n encima de la pila y se puede quitarlas con facilidad. o Cuando el algoritmo est´ “de vuelta” y encuentra un componente doblemente conexo. 2-conexo). e Para facilitar la implementaci´ n. se puede guardad aristas en una pila P al procesarlos. 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). para todo v ∈ V . 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. porque por definici´ n de los v´ rtices de articulao e ci´ n. Tal v´ rtice se llama un v´ rtice a e e e de articulaci´ n. o u Si v no es la ra´z. Utilizamos esta definici´ n para llegar a un algoritmo para encontrar los o o componentes 2-conexos de un grafo no dirigido. un e o o arbol cubriente de cada componente conexo — el mismo D FS que identifica los com´ ponentes conexos simples genera tal arbol). 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. Si v es la ra´z de un arbol cubriente.

O (1). I(v) := inicio. R(v) := m´ ın{R(v). El tiempo de procesamiento de un e v´ rtice o una arista es constante. 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. Sus componentes fuertemente conexos son los subgrafos mae ximales fuertemente conexos. v ′ }. R(u)}. Las aristas entre los componentes fuertemente conexos o . GRAFOS 111 Figura 6. R(v) := m´ ın{R(v). n padre(u) := v. Los componentes fuertemente conexos de G = (V. 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. Entonces la complejidad del algoritmo completo e es O (n + m). u} en P.5.6. doblemente-conexo(u). si R(u) ≥ I(v) elimina aristas de P hasta e inclusa {v. I(u)} El algoritmo visita cada v´ rtice y recorre cada arista.14 muestra un ejemplo. R(v) := I(v) para cada {v.14: Un grafo dirigido peque˜ o con dos componentes fuertemente conexos. n si I(v) = 0 doblemente-conexo(v) y el procedimiento recursivo que realiza el algoritmo procedure doblemente-conexo(v) inicio := inicio +1. u} ∈ E si I(u) = 0 a˜ ade {v. La figura 6. en otro caso si u = padre(v).

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

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

Primero se copia todas las claves ´ n existentes con sus valores en la area nueva. el elemento m´ s importante. T´picamente a ı se reserva una area de tama˜ o doble de lo anterior. en cual a caso el proceso de b´ squeda cambia un poco: para ver si est´ o no una clave. 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). 5. consultar el elemento m´nimo. hay que reservar m´ s. ı 3. 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. aunque existen tambi´ n variantes multidimensionales. insertar un elemento. ı . pero el caso peor es Ω (n) para una inserci´ n y Ω (n2 ) para un total de n o inserciones. reducir el valor de un elemento. Las colas de prioridad se puede implementar con mont´culos. se puede por ejemplo asignar el elemento al espacio libre siguiente. 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. 2. retirar el elemento m´nimo. juntar dos colas. 6. Las operaciones son 1. ı 4.114 ´ CAPITULO 6. o ı sea. Entonces. Cuando toda la memoria reservada ya est´ siendo utilizada (o alternativamente cuando el a porcentaje utilizado supera una cota pre-establecida). En el caso que la posici´ n indicada ya o o o est´ ocupada. “casi todas” las operaciones de inserci´ n son f´ ciles (de tiempo o a constante). 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. despu´ s de que se puede empezar a a˜ adir ´ e n claves nuevas. Este implica que es necesario que tengan un orden los a elementos procesados por la cola de prioridad. Su implementaci´ n t´pica es por arreglos o ı unidimensionales. El menor valor corresponde a la prioridad m´ s urgente.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. 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.

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

El conjunto de todos los elementos es su propio padre. T . La estructura de los punteros padre est´ mostrada en el ejemplo de la figura 6. Hay que asignar que sea su propio padre: P(c) := c. find(i): devuelva la lista de elementos que est´ n en el mismo conjunto con i. el arreglo) desde le v´ rtice con la clave deseada: ´ e . porque cada elemento pertenece a un s´ lo conjunto en C. Un subconjunto es un v´ rtice intermedio. S) que forma un conjunto S = {ı} y lo a˜ ade en C: C := C ∪ {S}. 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. El v´ rtice padre de unas hojas representa el conjunto de los e ´ e elementos representadas por sus v´ rtices hijos. 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.17 a La operaci´ n de crear un arbol nuevo es f´ cil: crear el primer v´ rtice v. habr´ que recorrir el o u a arbol (o sea. Marcamos su o ´ a e clave (´ nica) con c. recuerda que por definici´ n o S ∩ T = ∅. j): une el conjunto en el cual pertenece i con el conjunto en el cual pertenece j.116 ´ CAPITULO 6.1.8.8. Conjuntos 6. Esto toma u tiempo constante O (1). La operaci´ n de b´ squeda del conjunto a cual pertenece una clave c. Entonces. e e el padre de cual es su superconjunto. 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. Sus opera´ ciones b´ sicas son a form(i. no n est´ permitido que el elemento i pertenezca a ning´ n otro conjunto de la estructura. a u union(S. ´ 6. ESTRUCTURAS DE DATOS 6.8. 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.2. No es realmente necesario asignar nombres a los conjuntos. T }) ∪ {U}. e union(i. se puede definir las operaciones tambi´ n en la o e manera siguiente: form(i): C := C ∪ {ı}.

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 . o .8. n p := c. 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). que ya es mejor. 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. while P(p) = p p := P(p). ı o En el peor caso. Condensaci´ n del camino: traer los v´ rtices intermedios a la ra´z o e ı Para juntar dos conjuntos. la altura siendo un u ı o ´ n´ mero menor o igual al tama˜ o. CONJUNTOS 117 1 2 5 6 3 4 7 9 10 11 8 12 Figura 6. ´ ´ n a se puede demostrar que la altura del arbol que resulta es O (log n). u n o pero solamente necesitamos O (log log n) bits para guardar la altura.6. A´ n mejor ser´a guardar informaci´ n sobre la altura de cada arbol. el arrego se ha degenerado a una lista.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. Podemos considerar la complejidad de una sucesi´ n de operaciones. Por ejemplo. Si aseguramos que el juntar dos arboles. Hay diferentes opciones para modificar los caminos cuando uno realiza una b´ squeda de u conjunto en la estructura. el arbol de menor tama˜ o ser´ hecho hijo del otro. La ventaja de la complejidad asint´ tica queda igual. si creao mos n conjuntos. por lo cual tenemos complejidad asint´ tica O (n). return p. 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 tiempo total es a u o 2 Θ(n + n − 1 + 2(n − 1)n) = Θ(n ). Esta operaci´ n necesita tiempo O (1).

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

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

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

11) donde a y b son constantes y d : Z+ → R+ . n n (7. o sea d(xy) = o a k−j d(x)d(y). tomamos la ecuaci´ n siguiente a o T (1) = 1 T (n) = a(n/b) + d(n). . cuando d es multiplicativo. no habr´ parte heterog´ nica. tenemos   O nlogb a .12) En el caso que d(n) ≡ 0. Para simplificar la situaci´ n. Soluci´ n general de una clase comun o En forma m´ s general.13) = ak T k + ak−1 d k−1 + . T (n) =  O nlogb d(b) logb n . Para la parte homog´ nica a aplica que ak = alogb n = nlogb a . . COMPLEJIDAD DE ALGORITMOS RECURSIVOS 121 ´ 7. (7.1.2.2. o o En algunos casos la soluci´ n es m´ s simple: si d es multiplicativa. a −1 d(b) (7. En el an´ lisis de ordenaci´ n e a o k por fusi´ n tenemos a = b = 2. . 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 . + 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 ). 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 . parte heterog´ nica e (7. si si si a > d(b) a < d(b) a = d(b). . (7. se supone o k que n = b por alg´ n k ≥ 0 (o sea k = log b).14) Entonces.15) . O nlogb d(b) . 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 ) .7. en cual caso a = n (dejamos el an´ lisis mismo de o a ordenaci´ n por fusi´ n como ejercicio).

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

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.25) = 2R(n − i − 1) + (n − i) | × 2 . |× 1 |× 2 |× 4 i (7. e (7. COMPLEJIDAD DE ALGORITMOS RECURSIVOS Como otro ejemplo.2. donde n ≥ 2. R(n − (n − 2)) = 2R(1) + 2 | × 2n−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) + .2. d(n) = n log n no es multiplicatie va.23) (7.. (7. .2. . . . veremos la ecuacion siguiente: R(1) = 1 R(n) = 2 R(n − 1) + n.21) (7. . 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).. Como un ejemplo.22) 7.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) . + 1) = 2k k(k+1) = 2k−1 k(k + 1). 2 o sea. analizamos la ecuaci´ n o T (1) = 1 T (n) = 2T n 2 123 + n log n (7. 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 .20) donde la parte homog´ nica es ak = 2log n = nlog 2 = n.

.30) .3. . el n´ simo n´ mero de Fibonacci . + 20 + 21 + . T (n) = T (n − 1)T (n − 2). con = 1 = 2 . . Transformaciones Para simplificar la soluci´ n. . U(n) = U(n − 1) + U(n − 2).26) n veces i n−1 veces n−1 n−1 n−2 veces n−1 i+1 1 vez = 20 + . + 22 + . 7. podemos hacer una asignaci´ n cambiando el dominio o el o o rango del mapeo T .27) (7. 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) + . si n ≥ 1. . si n ≥ 2 podemos asignar U(n) = log T (n). o sea. . 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 . . si n = 2k > 1. + 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. . Otro ejemplo es T (1) = 1 T (n) = 3T (n/2) + n. + 2n−2 2 = n + 2(n − 1) + 4(n − 2) + ..124 ´ ´ CAPITULO 7. Esto nos deja con = 0 = 1 .28) Hemos llegado a tener U(n) = Fn . + 21 + 22 + . (7. Por ejemplo. U(0) U(1) T (0) T (1) (7. Entonces e u Fn T (n) = 2 .. + 2n−2 2 + 2n−1 n−1 = i=0 2i (n − i) (7. . .2.29) (7. ... . si n ≥ 2.

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

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

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. = = = ≤ 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). ANALISIS DE COMPLEJIDAD PROMEDIO 127 T (n) =   d.    1 n 1 n 1 n n = 1. donde α es un constante suficientemente grande. Para u a simplificar.3. Para el caso n > 2. n > 1.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). n−1 (n−1)! n! T (0) + T (n) + cn + i=1 n−1 (T (i) + T (n − i) + cn) . asumimos que para todo i < n aplica 2 . (7. 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.38) y intentamos solucionarla con la adivinanza T (n) ≤ αn log n. aplica la ecuaci´ n ı´ o o siempre y cuando α ≥ D + d . Adem´ s sabemos que T (1) = d. La demostrac´on es por inducci´ n: para n = 2.´ 7.

. Denotamos la sucesi´ n de operaciones como O1 . 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.40) con logaritmos de base dos y por aplicar la suma de sucesi´ n aritm´ tica.128 ´ ´ CAPITULO 7. No es necesario que las operaciones de la sucesi´ n sean o o iguales ni del mismo tipo. ¿cu´ nto tiempo toma? ı a Para formalizar el concepto. Despu´ s de i operaciones. sea D0 el estado inicial de una estructura de datos. . 7. 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. ANALISIS DE ALGORITMOS que T (i) ≤ αi log i. Para el caso de valores pares de n. En cada momento. se aplica una operaci´ n O en la estructura. 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. . . (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. On .39) porque para todo i aplican log i ≤ log n = log n − 1 2 log n + i ≤ log(n − 1) ≤ log n 2 (7.4. el estado o e de la estructura ser´ Di . el an´ lisis es muy parecido. Estas calculaciones verifican la adivinanza a T (n) = αn log n. si α ≥ 4D. El a o “costo” computacional de operaci´ n Oi puede ser muy distinto del costo de otra operaci´ n o o . 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.

´ 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.

e e e Las ecuaciones 7. o e Necesitamos asegurarnos que T ≤ 0.67) .69) (7.66 y 7. nos queda por lo menos un peso para ejecutar la e operaci´ n. actualizaciones de punteros. 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.65) Si logramos tener µdespu´s (u) > µantes (u). etc´ tera). Cada operaci´ n splay(v. 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′ ). Aplica que µdespu´s (u) = µantes (t) y que o e µdespu´s (t) ≤ µdespu´s (u).134 ´ ´ CAPITULO 7. 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). Mostramos que a µdespu´s (u) = µantes (u) (7. o sea. o e En el segundo caso. hace falta una rotaci´ n simple derecha. Hay que hacer dos rotaciones a derechas — primero para mover t al lugar del abuelo. 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. En el caso que el v´ rtice u que contiene la llave de inter´ s tenga un padre t.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′ ). Para mantener el invariante.63) (7. Hay que analizar el caso que µdespu´s (x) = µantex (x). u tiene adem´ s del padre t un abuelo t′ . 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)) .32. e (7.64 dan que µantes (t′ ) = µdespu´s (u) = µantes (u) e lo que implica µantes (u) = µantes (t) = µantes (t′ ) (7.62) El peso que sobra se gasta en las operaciones de tiempo constante y cantidad constante por operaci´ n splay (comparaciones. empujando el abuelo abajo a la derecha y despu´ s para mover u mismo al lugar nuevo del padre. no nos cuesta nada mantener el invariante v´ lido.8). e (7.68) (7.64) (7. pero no un e e abuelo. ANALISIS DE ALGORITMOS Teorema 7. e e e Por la estructura de la rotaci´ n aplica que o µdespu´s (u) = µantes (t′ ).

que es una contradicci´ n con µantes (u) = µdespu´s (u).71 da o o µdespu´s (u) = µdespu´s (t) = µdespu´s (t′ ).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. por ecuaci´ n 7. a Entonces.72) (7. tenemos o µdespu´s (t) ≤ µdespu´s (u) y µdespu´s (t′ ) ≤ µdespu´s (u).75) . Entonces. 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). e e e e que en combinaci´ n con ecuaci´ n 7. e e e Ahora. e e e Por la estructura de la rotaci´ n.4. Al ´ unir dos arboles. por lo cual T < 0. e e e (7.76) (7. esto significa que ⌊log(q1 + q2 + 1)⌋ ≥ ⌊log 2q1 ⌋ = ⌊log q1 ⌋ + 1 > ⌊log q1 ⌋. 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).´ 7.74) (7. e El tercer caso de splay es una rotaci´ n doble izquierda-derecha y omitimos sus detalles. por definici´ n de µ. o e e o Habr´ que analizar el caso q1 > q2 igualmente — tambi´ n llega a una contradicci´ n.73) (7.77) (7. µdespu´s (u) = µantes (u).78) (7. o En resumen: al insertar un elemento el el arbol.71) (7. 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). cada operaci´ n tiene costo amortizado O (log n). por lo cual la complejidad amortizada de cualquier o sucesi´ n de m operaciones en un arbol biselado es O (m log n). o ´ (7. ANALISIS DE COMPLEJIDAD AMORTIZADA 135 porque t est´ en el camino desde u a t′ antes de la operaci´ n. Si q1 ≤ q2 . hay que asignarle O (log n) pesos. se asigna a la ra´z nueva O (log n) pesos.

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

4. ANALISIS DE COMPLEJIDAD AMORTIZADA 137 Cuadro 7. arboles balanceados (A).´ 7. Las complejidades amortizadas ı ı llevan un asterisco (∗ ). mont´culos (M).1: Complejidad (asint´ tica o amortizada) de algunas operaciones b´ sicas en o a diferentes estructuras de datos: listas (L). 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) . ´ ı mont´culos binomiales (B) y mont´culos de Fibonacci (F).

ANALISIS DE ALGORITMOS .138 ´ ´ CAPITULO 7.

pero ninguna de las operaciones de o ´ aumento utilizados logra mejorarla. 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. Este tipo de soluci´ n se llama un optimo local. los problemas tienen problemas e o duales que tienen la misma soluci´ n pero pueden resultar m´ s f´ ciles de resolver.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. los algoritmos que logran esto cuentan con programaci´ n o din´ mica (de la secci´ n 8. o ´ 8. mientras en optimizaci´ n. En algunos casos es mejor hacer cualquier aumento. mientras en otros casos ı ´ terminan en una soluci´ n factible que no es la optima.2). 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.4). ı e 139 . 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. en vez de considerar todas las alternativas para poder despu´ s elegir vorazmente o con otra heur´stica una de ellas. o aunque no sea el mejor ni localmente.1) o recursivo (por ejemplo los algoritmos de dividir y conquistar de la secci´ n 8. En general. algoritmos e ı heur´sticos pueden llegar al optimo (global) en algunos casos. En este cap´tulo presentamos algunas t´ cnicas comunes del dise˜ o de algoritmos ı e n que aplican a muchos tipos de problemas.1.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. 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. 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. donde se procesa objetos geom´ tricos como puntos.

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

La l´nea de barrer mover´ en perpendicular al eje x. Adem´ s.1. el orden de los puntos de intersecci´ n en comparaci´ n a cualquier a o o de los dos ejes est´ fijo. Se guardar´ los puntos de parada en un mont´culo.´ 8. ´ (II ) cuando termina un segmento. se saca el segmento del arbol. n puntos finales y k intera o secciones. 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. guardamos en un arbol binario balanceado los segmentos que quedan actual´ mente bajo de la l´nea de barrer.2: Los puntos de inicio y fin de la instancia de la figura 8. o sea. Son n puntos de comienzo. 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. y ´ (III ) cuando se intersectan dos segmentos. El arbol nos da acceso en tiempo O (log n). ALGORITMOS DE LINEA DE BARRER 141 Figura 8. se inserta el segmento en el lugar adecuado en el arbol binario. Los puntos de parada ser´ n todos los puntos donde empieza o termina un segmento y a adem´ s los puntos de intersecci´ n. Aqu´ presentamos un algoritmo de l´nea de barrer que corre en ı ı tiempo O ((n + k) log n). o sea. por definici´ n no hay ninguna intersecci´ n. ı para imprimir la salida. ı a Entre dos puntos de parada. el o o a subconjunto de segmentos cuales quedan “bajo” de la l´nea de barrer. los segmentos ı que intersectan con la l´nea de barrer mientras mueva de un punto de parada al siguiente ı no cambia. en paralelo al eje ı a y. al momento de llegar a la intera u . o Por el hecho que el orden est´ seg´ n la coordenada y. 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. y adem´ s. a Entonces.

Cada operaci´ n necesita O (log n) tiempo y son O (n) operaciones. e o Para que sea eficiente el m´ todo para el problema entero. TECNICAS DE DISENO DE ALGORITMOS secci´ n de dos segmentos si y sj . de costo O (log n) por a a ı inserci´ n. Despu´ s se soluciona todos los subproblemas de a e una manera recursiva. ´ u o Para lograr un arbol abstracto balanceado. 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. Para las instancias del tama˜ o m´nimo. al haber actuali´ a zado la estructura. En los puntos de intersecci´ n se intercambian posiciones dos segmentos. 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. de costo O (log n) ´ cada uno. En total son k intersecciones. El o tiempo total es entonces O (n log n) + O (k log n) = O ((n + k) log n) . En cada punto preproceo ı ´ sado se realiza una inserci´ n o un retiro de un elemento de un arbol binario balanceado. la altura de cual determina el n´ mero de niveles de divisi´ n. Esto se puede o implementar con dos retiros seguidos por dos inserciones al arbol. adem´ s de tener un algoritmo de e a tiempo constante para las instancias peque˜ as b´ sicas.1 muestra el agoritmo en pseudoc´ digo. 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. es decir. 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. se utiliza alg´ n procedimiento de soluci´ n simple. las que ya o n ı no se divide recursivamente. El cuadro 8. Juntas necesitan O (n log n) tiempo. 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. 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. Entonces. Las divisiones a subproblemas genera un arbol abstracto. o La construcci´ n del mont´culo al comienzo toma O (n) tiempo. (8.1) 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. Las soluciones a los subproblemas est´ n combinadas a formar una a soluci´ n del problema entero. solamente con una instancia de entrada m´ s simple. necesariamente son “vecinos” en el arbol por lo menos o ´ justo antes de llegar al punto de intersecci´ n. o Son en total 2n de tales operaciones. 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). El n´ mero m´ ximo n u a de puntos de parada nuevos encontrados al haber hecho una parada es dos. o o . Adem´ s se inserta al m´ ximo dos puntos al mont´culo.142 ´ ´ ˜ CAPITULO 8. Hasta o ahora todo necesita O (n log n) tiempo. por lo cual se necesita O (k log n) tiempo.2.

y ′).8. M := un mont´culo vac´o ı ı para todo si ∈ S. y2) tal que x1 ≤ x2 insertar en M el dato [(x1 . y1). si = (x1 . a computar la intersecci´ n (x′ . y1 ). y2 ). ℓ. y ′). y) .2. −] B := un arbol binario balanceado vac´o ´ ı mientras M no est´ vac´o a ı (x. y ′). 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 . I. DIVIDIR Y CONQUISTAR 143 Cuadro 8. y ′) de si y sℓ o si x′ > x insertar en M el dato [(x′ . y ′′ ). i. (x2 . 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′ . 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 . y) := el elemento m´nimo de M ı remueve (x. i. r] si (x. C. i. y ′′) de si y sr o si x′′ > x insertar en M el dato [(x′′ . r] imprimir (x. I. j. y ) de sj y sℓ 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 . r] si (x. ℓ. i] si el vecino derecho de si en B est´ definido y es sr a ′′ computar la intersecci´ n (x . I. I. I. y ′′ ). ℓ] si el nuevo vecino derecho de si en B est´ definido y est´ sr a a ′′ ′′ computar la intersecci´ n (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 . F. y ′) de sℓ y sr o si x′′ > x insertar en M el dato [(x′ . y) de M si (x. i.

Una instancia de ejemplo se muestra en la figura 8. a o La idea del algoritmo es dividir iterativamente el conjunto de puntos en dos subconjuntos de aproximadamente el mismo tama˜ o. ver´ mos la computaci´ n de la cue e o bierta convexa de un conjunto de puntos en R2 . Cubierta convexa Como otro ejemplo del m´ todo dividir y conquistar. Tales puentes se encuentra por examinar en orden los puntos de las dos cubiertas. 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. asegurando que la l´nea infinita definida por el segmento entre los dos puntos elegidos no corta ninı guna de las dos cubiertas.1. tambi´ n ı o e est´ n incluidos en la misma regi´ n. . 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.4). 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.3: Una instancia del problema de cubierta convexa de un conjunto de puntos en el plano. 8. La cubierta convexa es la regi´ n convexa o m´nima que contiene todos los puntos del conjunto. La cubierta de un s´ lo punto es el punto mismo. ı a a Lo importante es que cada punto est´ visitado por m´ ximo una vez al buscar uno de los a a dos puentes.144 ´ ´ ˜ CAPITULO 8.3. Tambi´ n hay que asegurar que las dos puentes no corten uno al e 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) n o la coordinada x. 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). 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. TECNICAS DE DISENO DE ALGORITMOS Figura 8.2. Para juntar dos cubiertas.

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

n Para analizar el algoritmo. . por lo cual T (n) = O (n3 ) y no hay ahorro asegurado. (8. aT ( n ) + b ( n )2 .6) C11 C12 C21 C22 (8. marcamos con a el n´ mero de multiplicaciones hechas y con u b el n´ mero de sumaciones. ℓ−1 2 2 = = = = A11 · B11 A11 · B12 A21 · B11 A21 · B12 + + + + A12 · B21 A12 · B22 A22 · B21 A22 · B22 (8. . En el algoritmo anterior tenemos a = 8. El truco del algoritmo de Strassen es lograr a tener a = 7 y as´ lograr complejidad ı . 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 . 2 2 si k = 1 para k > 1.146 ´ ´ ˜ CAPITULO 8.7) a + b. 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.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.si a>4 ≤ a + ba = O aℓ ℓ ℓ = O alog n = O 2log a·log n = O nlog a .

3. PODAR-BUSCAR asint´ tica O nlog 7 ≈ O (n2. solamente hay que comprar i con |A| y o |B|. o o llegamos a la complejidad as´nt´ tica Θ(n log n). Para i = 2 . llegando a a ı ı la complejidad asint´ tica Θ(i · n). 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.3. Podar-buscar El m´ todo podar-buscar (ingl´ s: prune and search) es parecido a dividir-conquistar. el algoritmo ignora la otra mitad por saber que la e soluci´ n completa se encuentra por solamente procesar en la otra parte. con e e la diferencia que despu´ s de dividir. Como un ejemplo. lo que se busca es el mediana del conjunto. As´ podr´amos llegar a la complejidad ı ı T (n) = T (qn) + Θ(n) ≤ cn ∞ i=0 qi = = O (n) .8.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 . analizamos la b´ squeda entre n claves de la clave en posici´ n i en u o n orden decreciente de los datos. cn 1−q . Para saber d´ nde continuar. ı 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. 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. Un algoritmo ingenuo cuadr´ tico ser´a buscar el m´nimo y eliminarlo i veces. Por aplicar un algoritmo de ordenaci´ n de un arreglo. Una consecuencia o buena es que tampoco hay que unir soluciones de subproblemas. 8.

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

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

. j.. . 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. k] + T [k + 1. k. i.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. ı o empezando del lado entre el primero y el segundo punto. j] = 0. a . . a Entonces. 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.15) 1 8. El precio de la triangulaci´ n optima es o ´ T [i. . Alguno de estos tri´ ngulos necesariamente pertenece a la trianguo a laci´ n optima.16) donde w(i − 1.6). . TECNICAS DE DISENO DE ALGORITMOS 2 3 4 5 6 7 8 9 10 . . j − 1. (8. k. incluyendo un tri´ ngulo degenerado que consiste en el lado o a a s´ lo (ver figura 8.4. si i = j m´ {T [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. . y continuando recursivamente para los otros lados del pol´gono. 0 1 ´ ´ ˜ CAPITULO 8. k y j.150 cal: k n 0 1 2 3 4 5 6 7 8 9 10 . 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. . cada uno de los n lados del pol´gono tiene n opciones u ı de asignaci´ n a tri´ ngulos. j)} . .1. j) es el costo del tri´ ngulo definido por los tres puntos i − 1. j] + w(i − 1. 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 . uno podr´a resolver el problema por examinar cada triangulaci´ n de cada lado.

. Los puntos est´ n dibujados como c´rculos negros. n. a a o El tiempo de c´ mputo por elemento de la tabla es Θ(n) y son Θ(n2 ) elementos en total. j] el valor cero para todo T [i. i]. . ı a ı a Lo primero del algoritmo es guardar en la tabla de los T [i. PROGRAMACION DINAMICA 151 Figura 8. . i = 1. o por lo cual el algoritmo corre en tiempo Θ(n3 ). . j) fueron utilizados para saber de cu´ les tri´ ngulos consiste la triangulaci´ n.´ ´ 8. . k.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. Habr´ que recordar cu´ les a o ´ ı a a w(i − 1. mientras o a ı el pol´gono est´ dibujado en l´nea negra y los tri´ ngulos en colores variados. La tabla se completa diagonal por diagonal hasta llegar al elemento T [1. n] que ser´ el costo de la triangulaci´ n optima de todo el pol´gono.4.

152 ´ ´ ˜ CAPITULO 8. o ´ .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.

soluciones cerca de ser optio ´ ma sin necesariamente serlo (ver cap´tulo 10). que tiene la misma complejidad que el problema de decio si´ n de la existencia de una soluci´ n factible. o o a Formalmente. o la heur´stica es voraz (tambi´ n se dice glotona).Cap´tulo 9 ı Optimizaci´ n combinatoria o En optimizaci´ n combinatoria. 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). Desaforo tunadamente el n´ mero de soluciones factibles suele ser algo como Ω (2n ). para mostrar que un problema de optimizaci´ n es dif´cil. ı e Muchos problemas de optimizaci´ n combinatoria consisten de una parte de construcci´ n o o de cualquier soluci´ n factible. o sea. 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. 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. Si uno e ı siempre elije el candidatos que desde el punto de vista de evaluaci´ n local se ve el mejor. ¿Existe una soluci´ n i ∈ Sx con costo menor o igual a c? o 153 . La complejidad de ese tipo de o soluci´ n es por lo menos Ω (|F |) donde F es el conjunto de soluciones factibles. por lo cual u el algoritmo ingenuo tiene complejidad asint´ tica exponencial. donde uno aplica una regla simple para elegir candidatos. 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). 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.23: O PT D EC Dado: Pregunta: Una instancia x de un problema de optimizaci´ n y un costo o c. no es imposible utilizar un algoritmo ı exponencial. eligiendo al final la soluci´ n cual dio el mejor valor. Otra opci´ n es buscar por soluciones aproximadas.

2. Para construir un arbol cubriente cualquiera – o sea. de la menos pesada a la m´ s pesada. cuidando n a a no formar ciclos por marcar v´ rtices al haberlos tocado con una arista. porque si tenemos un algoritmo para el problema de optimizaci´ n. 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. o En el algoritmo de Prim . En una implementaci´ n simple. Otra posibilidad es empezar a a˜ adir aristas. 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). 9. podemos con o uan reducci´ n trivial decidir el problema de decisi´ n.1). En este problema. si el problema de decisi´ n es NP-completo. Ramificar-acotar En los algoritmos de optimizaci´ n combinatoria que evaluan propiedades de varios y o posiblemente todos los candidatos de soluci´ n.154 ´ ´ CAPITULO 9. Arbol cubriente m´nimo ı Estudiamos algunos algoritmos de encontrar un arbol cubriente m´nimo en grafos pon´ ı derados no dirigidos. el problema de optimizaci´ n es o o NP-duro. En cada paso.1. por lo cual una estructura tipo e a ´ unir-encontrar resulta muy util. 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. Un ejemplo de ese tipo de t´ cnica es el o e m´ todo podar-buscar (de la secci´ n 8. ´ 9. empezamos por incluir en el arbol la arista de peso m´nimo ´ ı y marcando los puntos finales de esta arista. OPTIMIZACION COMBINATORIA En un sentido. Para saber cuales v´ rtices fueron visitados.3). es esencial saber “guiar” la b´ squeda de o u la soluci´ n y evitar evaluar “candidatos malos”. Su idea es e a e . El algoritmo e termina cuando todos los v´ rtices est´ n en el mismo arbol. en o o vez de ser NP-completos. 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. y continuar al vecino e indicado. una soluci´ n ´ o factible — podemos empezar de cualquier v´ rtice. se necesita una estructura de datos. 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). elegir una arista. asegurando al a˜ adir aristas que nunca regresamos a un v´ rtice ya visitado con n e anterioridad. ´ ı o Un m´ todo de este tipo es el algoritmo “vuelta atr´ s” (ingl´ s: backtracking). son NP-duros. 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. 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). De los libros de texto sobre optimizaci´ n combinatoria cabe mencionar el libro de Papao dimitriou y Steiglitz [16].

2. mientras los v´ rtices internos son ´ o e las operaciones de aumento que construyen las soluciones factibles. Si al incluir {v. 9. vi ) + L(vi . o 3. Si al excluir {v. Para el largo L(R) de cualquier ruta R ı a aplica que n 1 L(R) = (L(vi−1 . 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.9. ignoramos el ramo de excluirla.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. uno busca por el ciclo o o de menor costo/peso en un grafo ponderado. 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. w}. Utilizamos un m´ todo tipo ramificar-acotar para buscar e la soluci´ n optima. ignoramos el ramo de inclusi´ n. w} se generar´a un ciclo en la ruta actua sin haber incluido todos ı los v´ rtices todav´a.2. w} resultar´a que uno de los v´ rtices v o w tenga menos que dos ı e aristas incidentes para la ruta.2.1. Problema de viajante En la versi´ n de optimizaci´ n del problema de viajante (T SP). a (9. vi+1 )) . e ı o . ignoramos el ramo de inclusi´ n. En el caso general. RAMIFICAR-ACOTAR 155 aumentar una soluci´ n parcial utilizando candidatos de aumento. el algoritmo vuelve a examinar un ramo de aumento donde no todos los a candidatos han sido examinados todav´a. 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) Suponemos que el orden de procesamiento de las aristas es fijo. 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. 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. podemos pensar que el grafo sea no dirigido y completo. En cuanto una soluci´ n o o est´ encontrada. Al procesar la arista {v. Cuando uno utiliza cotas para decidir cu´ les ı a ramos dejar sin explorar. 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. la t´ cnica se llama ramificar-acotar (ingl´ s: branch and bound). w} resultar´a que uno de los v´ rtices v o w tenga m´ s que dos aristas ı e a incidentes para la ruta. (9. el paso “ramificar” es el siguiente: 1. Si al incluir {v. 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.

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

Si a ı el algoritmo de aproximaci´ n no es determinista y ejecuta muy r´ pidamente. En el caso de tiempo polinomial se utiliza la abreviaci´ n P TAS. Un algoritmo de aproximaci´ n puede o ´ o ser determinista o no determinista — en segundo caso ser´ atentido el el cap´tulo 11. pero no necesariamente el optimo mismo. 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. Depende de la aplicaci´ n o o o qu´ tan cerca deber´a ser la soluci´ n aproximada a la soluci´ n optima. vale la pena considerar la posilibidad de usar una soluci´ n aproximada. 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. o 157 . 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). o Un libro de texto recomendable sobre algoritmos de aproximaci´ n es lo de Vazirani [17].Cap´tulo 10 ı Algoritmos de aproximaci´ n o En situaciones donde todos los algoritmos conocidos son lentos. ı 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. 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. o ´ ´ Depende del area de aplicaci´ n s´ o no se puede hacer esto eficientemente. ese m´ todo se e a o llama una esquema de aproximaci´ n (de tiempo polinomial) (ingl´ s: (polynomial-time) o e approximation scheme). ´ 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). es com´ n o a u ejecutarlo varias veces y elegir el mejor de las soluciones aproximadas as´ producidas. Si existe e un m´ todo sistem´ tico para aproximar la soluci´ n a factores arbitrarios. una soluci´ n que tiene un valor o o de la funci´ n objetivo cerca del valor optimo. o sea.

0. tenemos una cierta cantidad o ı ci del art´culo ϕi disponible.1. (10.i · xi . Entonces las variables ya no son binaria. si ϕ ∈ M.3) En una versi´ n generalizada del problema de la mochila. ALGORITMOS DE APROXIMACION 10.i = ψ(ϕi )): o N i=1 aN +1. o sea. (10.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 .4) . Ejemplos En problema de la mochila (ingl´ s: knapsack) es un problema cl´ sico de optimizaci´ n e a o combinatoria: Problema 10.2) Una restricci´ n limita la suma de pesos tal que b1 = Ψ y aN +1.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 ν(ϕ) . 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. (10. si ϕ ∈ M.158 ´ ´ CAPITULO 10. sino enteras en general. / (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 ).

que nos da una distancia m´ xima de a unos 22 por ciento del optimo. e 3. Se puede mostrar que el algoritmo de aproximaci´ n simple utiliza al m´ ximo ´ o a 17 OPT(Φ) + 2 cajas. 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. u). 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. 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. o sea. Imprime v en tiempo O (1).10. u) ≤ d(v. Recorre el arbol con D FS en tiempo O (m + n) e imprime cada v´ rtice a la primera ´ e visita (o sea. intentamos en la ı siguiente caja. (10. Una versi´ n aun m´ s general no tiene l´mite superior: o a ı (xi ∈ Z) ∧ (xi ≥ 0). Construye un arbol cubriente m´nimo en tiempo O (m log n). Este problema es NP-completo. w) + d(w. . pero varias v´ rtices m´ s de una e e a vez. podemos pensar en el recorrido como una ´ ′ ruta larga R que visita cada v´ rtice por lo menos una vez. Si cabe. ϕ2 .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. Por “cortar” de la ruta larga R′ cualquier visita a un v´ rtice que ya ha sido visitado. El D FS recorre cada arista del arbol dos veces. Primero intentamos poner el objecto actualmente procesado en la primera caja de la fila. e .5) En el problema de empaquetear a cajas (ingl´ s: bin packing) tenemos un conjunto finito e de objetos Φ = {ϕ1 . o a Procesamos los objetos en orden. 4. en preorden). w) que cumplen con la desigualdad de e tri´ ngulo a d(v. ´ ı 2.1. ´ 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. . cada uno con un tama˜ o definido t(ϕi ) ∈ R. Esto significa que nunca alejamos a m´ s de 70 por ciento de la a 10 soluci´ n optima. Un algoritmo de aproximaci´ n simple y r´ pido empieza por ordenar las cajas en una fila. Elige un v´ rtice de inicio cualquiera v. Iterando as´ obtenemos alguna asignaci´ n de objetos a cajas. El algoritmo siguiente encuentra en tiempo e polinomial una soluci´ n aproximada. lo ponemos all´. Denotamos ı o con OPT(Φ) el n´ mero de cajas que contienen por lo menos un objeto en la asignaci´ n u o optima. . en cual caso se puede mostrar que a e a 11 a llegamos a utilizar al m´ ximo 9 OPT(Φ) + 4 cajas.7) que tambi´ n es un problema NP-completo. y si no. ϕN }. (10.

1.2. resumimos las definiciones utilizadas en el libro de texto editado por o Aarts y Lenstra [1]. ALGORITMOS DE APROXIMACION logramos el efecto de imprimir los v´ rtices en preorder. y u e 3.8) ´ 10. 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 10.2. 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 costo total de R′ es a dos veces el costo del arbol cubriente m´nimo. El peso de este arbol es por lo menos el mismo que el peso de un ´ ´ arbol cubriente m´nimo C. f ) donde S es un conjunto de soluciones factibles y f : S → R es una funci´ n objetivo. hill-climbing). Las tres variaciones t´picas para guiar una b´ squeda local son ı u 1. Sin p´ rdida de generalidad. u e 2. b´ squeda voraz (ingl´ s: greedy local search. Por la desigualdad de tri´ ngulo. Un problema combinatorial se define por un conjunto espec´fico de ı instancias que son objetos combinatoriales y de la tarea de minimizar o maximizar. (10. ´ ı Para lograr a comparar el resultado con el optimo. Entonces. . hay que analizar el optimo en t´ rminos ´ ´ e de arboles cubrientes: si eliminamos cualquier arista de la ruta optima ROPT . b´ squeda tabu (ingl´ s: tabu search). Busqueda local Cuando hemos obtenido una soluci´ n heur´stica y aproximada de manera cualquiera a o ı un problema de optimizaci´ n. hemos ´ ı mostrado que necesariamente c(R) ≤ c(R′ ) = 2C ≤ 2c(ROPT ). 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. e a ′ sabemos que la ruta R no puede ser m´ s cara que la ruta larga R .160 ´ ´ CAPITULO 10. obtenemos ´ ´ un arbol cubriente. Definiciones b´ sicas a En esta secci´ n. o e consideramos solamente problemas de minimizaci´ n. 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]. Denotamos por f ∗ = f (i∗ ) el costo ´ de la soluci´ n optima y por S ∗ el conjunto de soluciones globalmente optimas. o ´ ´ T´picamente. Una instancia de un problema combinatorial es un par (S. 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. recocido simulado (ingl´ s: simulated annealing). si marcamos el costo de la ruta R con c(R).

Igualmente.11) ´ 10. 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ℓ st] Si el grafo G tambi´ n contiene las aristas {v. E). t} y {s. podemos llegar a un costo total menor por reemplazar las aristas originales {s. . . t). . 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. Se dice que la funci´ n Γ u o ´ es exacta para (S. rk uvw1w2 .2. rk u] B = [vw1 w2 . Cada soluci´ n o que no tiene ning´ n vecino con menor costo es un optimo local. Complejidad de busqueda local Consideramos ahora el problema siguiente: . . la soluci´ n actual es una optimo local. aplicada en el problema del viajante en un u grafo ponderado no dirigido G = (V. u}. Por ejemplo.9) En el caso que esto es verdad. . si no existe tal vecino. . . v) > c(s. . f ) si el conjunto de soluciones localmente optimas es igual al conjunto ´ de soluciones globalmente optimas. 10. sean {s. u}.2. abreviada com´ nmente como 2-opt.10) (10. el vecindario del algoritmo Simplex es ´ exacto y Simplex es una b´ squeda local voraz.1 ilustra el intercambio realizado. wℓ s] R = [tr1 r2 . . . . Elegimos (al azar) dos aristas de la ruta R. v} en la ruta R por las aristas m´ s baratas {v. La figura 10. t} y {s. u) + c(v. t} y {u. rk uswℓ wℓ−1 .2. v}. a creando una ruta nueva R′ con costo total menor tal que R′ = [tr1 r2 . (10.2.3. 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. t) + c(u. . 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. 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.´ 10. w2 w1 vt]. w) > 0. t} y {u. 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. (10. w} por c(v.

(II ) Dada una instancia x (en su representaci´ n binaria) y un i (en representaci´ n binao o ria). Γx ) y una soluci´ n i.. (III ) Dada una instancia x = (Sx . ALGORITMOS DE APROXIMACION . La clase NPS consiste de u ∗ relaciones R ⊆ {0. 1} × {0. 1}∗ tal que para una relaci´ n R. el algoritmo BL determina si i ∈ Sx . |y| = O (() g(|x|) donde g es un polinomio (polinomialmente acotada). Podemos definir versiones de b´ squeda de las clases P y NP. y si lo es.. 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. habr´ que presentar un vecino suyo con menor costo como un contraejemplo. el algoritmo CL determina si i o es un optimo local. si (x.162 ´ ´ CAPITULO 10. Un problema de b´ squeda local L pertenece a PLS si existen tres u u algoritmos de tiempo polinomial AL . (I) Dada una palabra x del lenguaje {0. produce alguna soluci´ n factible o i0 ∈ Sx . o 1.25: L OCAL O PT Una instancia (S. 1}∗ . e Problema 10. fx . fx ) de L. . calcula el costo fx (i). BL y CL tales que. AL determina si x es una representaci´ n o binaria de una instancia (Sx . y . o ¿Es i localmente optima (por contraejemplo)? ´ Dado: Pregunta: ´ a Entonces. y) ∈ R.. y si no lo es.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.. y si lo es. produce un vecino i ∈ Γx con costo (estrictamente) ´ mejor al costo de i. La clase PLS fue dise˜ ado para capturar la complejidad n de b´ squeda local. f ) y una soluci´ n factible i ∈ S. las a a o aristas eliminadas est´ n en gris y las a˜ adidas en l´nea negro descont´nua. si i no es localmente optima. Figura 10.

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

164 ´ ´ CAPITULO 10. ALGORITMOS DE APROXIMACION .

Adem´ s del dise˜ o de algoritmos aleatorizados. x y y son algunas valores que pueden o tomar estas variables. Pr [X = x] es la probabilidad que X tenga el valor x. 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 .Cap´tulo 11 ı Algoritmos aleatorizados Algoritmos aleatorizados son algoritmos que incorporan adem´ s de instrucciones detera ministas algunas elecciones al azar. (11. 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.1) donde la sumaci´ n extiende por todo x en el rango de X.2) Al dise˜ ar un algoritmo que haga elecciones al azar. 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]. y Var [X] la varianza o Var [X] = E (X − E [X])2 = E X 2 − (E [X])2 . proa n babilidades tambi´ n juegan un papel importante en an´ lisis del caso promedio (secci´ n e a o 7. E [X] es la ˜ esperanza (matem´ tica) (tambiA c n: valor esperado) a E [X] = x x Pr [X = x] .3). X y Y son variables aleatorias. (11. Seg´ n u nuestra notaci´ n.

En tal algoritmo. 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. Resumimos ahora algunos resultados de la teor´a de probabilidad que pueden resultar ı utiles al contestar las preguntas mencionadas. los certificados concisos de los problemas NP). 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. Desigualdad de Chebyshev Para todo α > 0. Tambi´ n si tenemos un algoritmo r´ pido para verificar o e a si una dada “soluci´ n” es correcta (cf. 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. Desigualdad de Jensen Si f es una funci´ n convexa. El m´ todo del momentum segundo Sea X una variable aleatoria entera. o podemos convertir un algoritmo Monte Carlo a un algoritmo Las Vegas por repetirlo. El libro de texto de Mitzenmacher y Upfal ´ [13] contiene varios ejemplos concretos de su uso. Pr [X ≥ α] ≤ α−1 E [X]. 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. Pr [|X − E [X]| ≥ α] ≤ α−2 Var [X]. Entonces Pr [X ≥ µ] > 0 y Pr [X ≤ µ] > 0. E [f (X)] ≥ f (E [X]). mientras al definir algoritmos (deterministas) exigimos que siempre termine su ejecuci´ n o y que el resultado sea el deseado. Sin embargo. Para todo α > 0. o Desigualdad de Markov Sea X una variable aleatoria no negativa. Si tenemos un algoritmo Monte Carlo con probabilidad de error 0 < p < 1. la parte aleatoria est´ limitada al tiempo de ejecuci´ n del algoritmo. El m´ todo probabilista Sea X una variable aleatoria definida en el espacio de probabie lidad S tal que E [X] = µ. Entonces e Pr [X = 0] ≤ (E [X])−2 Var [X]. Cotas de Chernoff Para α > 0. . 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”.166 ´ CAPITULO 11. igual como el libro de Motwani y Raghavan [14]. mientras a o los algoritmos Monte Carlo tienen hasta sus salidas “aleatorias”. Un algoritmo que siempre da el resultado correcto se dice un algoritmo Las Vegas. 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 . n Algoritmos con una probabilidad no cero de fallar (y probabilidad no cero de dar el resultado correcto) se llaman algoritmos Monte Carlo. 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.

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

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

podr´amos aumentar la probabilidad de haber ı ı encontrado el corte m´nimo.2. El grafo Gi tiene. por lo cual el algoritmo de contracci´ n tiene o e o complejidad cuadr´ tica en n. 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.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. e ´ o La elecci´ n uniforme de una arista para contraer se puede lograr en tiempo lineal O (n). por lo menos 1 ni k aristas. As´ por repetir el algoritmo. Por la tercera observaci´ n. . o En cada iteraci´ n eliminamos un v´ rtice. E) con las aristas F ⊆ E siendo las aristas que ı cruzan de C a V \ C. ı Fijamos un corte m´nimo de G = (V. Denotamos |F | = k. aunque (posiblemente) en forma contraida. por la segunda observaci´ n. a Lo que queda mostrar es que el corte as´ producido sea el m´nimo con una probabiliı ı dad no cero. PROBLEMA DE CORTE MINIMO 169 Figura 11.´ 11. e a e a los dos v´ rtices que quedan en la ultima iteraci´ n. ning´ n v´ rtice puede tener grado menor a k. 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. Las siguientes observaciones nos ayudan: ı Si la capacidad del corte m´nimo es k. 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. Quedan ni = n − i + 1 aristas en el grafo actual ı Gi . ı u e ı El n´ mero de aristas satisface m ≥ 1 nk si la capacidad del corte m´nimo es k.

ı ´ Si repetimos el algoritmo. n(n−1) (11. . 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. La mayor´a de los detalles de la demostraci´ n est´ n explicados en el ı o a libro de Motwani y Raghavan [14]. Como cada grafo tiene por lo o menos un corte m´nimo. 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 . un an´ lisis detallado muestra que llegamos a la complejidad a O n2 (log n)O(1) . 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. ALGORITMOS ALEATORIZADOS a 2ni −1 . la probabilidad de exito del algoritmo es por lo menos Ω (n−2 ). ı ı Para hacer que el algoritmo Monte Carlo resultante sea m´ s r´ pida. Si en vez de contraer hasta ı ı √ e que queden dos v´ rtices.170 ´ CAPITULO 11. 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.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 ).

Al generar instancias del problema aleatoriamente seg´ n alg´ n conjunto de par´ meu u a tros. ı ı El modelo matem´ tico de Ising representa las interacciones como aristas y los atomos a ´ 171 . 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. ı a o 12. 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. 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´ . los atomos gradualmente se alinean. estudiamos un fen´ meno interesante de complejidad en algunos probleı o mas.1. las alineaciones pueden est´ r aleatorias. Dos atomos con interacci´ n ferromagn´ tica llegan a su estado de energ´a m´nima cuando ´ o a ı ı tienen el mismo sentido. pero al someter el material a tal campo a magn´ tico. Modelo de Ising Un vidrio de esp´n (ingl´ s: spin glass) es un material magn´ tico. u e e o En antiferromagnetismo. todos los momentos magn´ ticos de los part´culos de la materia se e ı alignan en la misma direcci´ n y sentido. Los atomos del material ı e e ´ pueden acoplarse aleatoriamente de la manera ferromagn´ tica o altenativamente de la e manera antiferromagn´ tica. 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. Los dos tipos de magnetismo se pierde en ´ u temperaturas altas. Este cap´tulo est´ basada en el libro de Hartmann y Weigt [8]. e En ferromagnetismo. 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. En falta de presencia de un campo magn´ tico o e intenso. En la presencia de un ı ´ campo magn´ tico muy intenso. mientras dos atomos con interacci´ n antiferromagn´ tica llegan ´ o e a su estado de energ´a m´nima al tener sentidos opuestos.

el problema de encontrar . Al subir la temperatura del sistema. En una interacci´ n o o ferromagn´ tica entre i y j. por lo menos una interacci´ n o est´ en conflicto (marcado con una zeta sobre la arista).2) Es una medida de energ´a total del sistema G.1) que representan los dos posibles sentidos de alineaci´ n. 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. en un cierto valor cr´tico Tc de repente se ı pierde la organizaci´ n global. En cada una de las ocho posiı ı bles configuraciones de los sentidos (marcados con ∧ y ∨). a La funci´ n hamiltoniana se define como o H(G) = − Jij σi σj . Jij > 0. mientras interacciones antiferromagn´ ticas tienen e e Jij < 0.172 ´ CAPITULO 12. u el sistema alcanza su energ´a m´nima. 1} (12. En temperatura T = 0. o Cuando ambos tipos de interacciones est´ n presentes. Cada v´ rtice puede tener uno de dos valores. Las configuraciones que tienen energ´a m´nima se ı ı ı ı llaman estados fundamentales (ingl´ s: ground state). las aristas forman una reja regular — para dos dimensiones. e En temperaturas bajas el sistema queda organizado para minimizar “conflictos” de interacciones. 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. e e σi = {−1. mientras ı los valores de σi pueden cambiar seg´ n la temperatura ambiental.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. hasta determinar el valor m´nimo a ı alcanzable para la funci´ n hamiltoniana se complica.j}∈E (12. TRANSICIONES DE FASE como v´ rtices σi . E). Figura 12. T´picamente. Denotamos el sistema por G = o (V. {i. en los casos estudiao ı dos.1 para un ejemplo). Pensamos en Jij como algo fijo.

Familias y propiedades Una familia G de grafos incluye todos los grafos que cumplen con la definici´ n de la o familia. 12. independientemente del n´ mero de v´ rtices. 12. un ejemplo cl´ sico de o a transiciones de fase de cierto tipo. 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. por colocar n v´ rtices (o sea.1. Grafos aleatorios uniformes En esta secci´ n estudiamos comportamiento de grafos aleatorios.12. o ı . j) = (x1 − xj )2 “(yi − yj )2 . denotamos las coordenadas de v´ rtice i por xi y yi . hay que elegir los valores n. para crear una instancia del problema.78 [18]. ciudades) aleatoriamente en un plano cuadr´ tico de e a superficie A. 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). Entonces. mientras para valores n a grandes de ℓ (mayores a uno). p ≈ 0.3. 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. pero en tres dimensiones. es exponencial. La definici´ n est´ t´picamente compuesta por par´ metros que controlen el tama˜ o o a ı a n e de la familia.5). Con diferentes valores de n. la variaci´ n de decisi´ n del problema de viao o jante.78. Por ejemplo. 12. Los costos de las aristas e ser´ n las distancias euclidianas de los puntos de los v´ rtices: a e dist (i. p ≈ 1. 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. A y D. u e Definimos un “largo escalado” D (12. o los tiempos mayores ocurren con instancias que tienen valores de ℓ cerca de 0.2. Las curvas de p versus ℓ suben r´ pidamente desde cero hasta uno cerca del valor ℓ = 0. Problema del viajante (T SP D) Generamos instancias para el T SP D. o sea.2. Tambi´ n e has estudiado sistemas tipo Ising en grafos aleatorios uniformes.3. Seguimos por mayor parte el libro de texto de Bollobas [3]. u e Al estudiar el tiempo de ejecuci´ n de un cierto algoritmo tipo ramificar-acotar para T SP D. uno observa que con peque˜ os valores de ℓ (menores a 0.

TRANSICIONES DE FASE Una propiedad P es monotona si de G ∈ P y G es subgrafo de G′ . asignamos V = {1. (12. (12. conodido como el modelo Gn.174 ´ CAPITULO 12. . 6]: fijar los dos n y m y o o e elegir uniformemente al azar uno de los posibles conjuntos de m aristas. 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. tenemos n (12. Una tercera opci´ n para generar grafos uniformes dado un conjunto de n v´ rtices V = o e N {1. .p . . ım (12.2. .7) La otra opci´ n fue estudiada en detalle por Erd˝ s y R´ nyi [5. 1.8) aunque en realidad los automorfismos reducen el n´ mero de grafos distintos que se pueda u generar. . N tal que (I) cada Gt es un grafo en el conjunto V .m . .6) E [m] = p 2 E [deg (u)] = p(n − 1). . Para generar un grafo G = (V.3. . 2. es decir Gt = (V. v} indepene 2 dientemente al azar con probabilidad p. implica que tambi´ n G′ ∈ P. El segundo modelo se conoce como Gn. . si aplica que G y G′ sea isomorfos.5) o 12. E). implica que G′ ∈ P. El n´ mero de u posibles maneras de elegir las aristas entre v´ rtices distintos es e n 2 m . se fija n y una probabilidad p. hay dos modelos b´ sicos: a en el modelo de Gilbert. se dice que “el grafo G tiene la propiedad P”. Una propiedad es convexa si el hecho que G′ es subgrafo de G y G′′ es subgrafo de G′ tales que G′′ . no es posible hacer n e desaparecer estas propiedades. . . 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. no dirigido). Et ) — lo que cambia durante el proceso es el conjunto de las aristas. n}. Cuando graf o ∈ P. e Una propiedad de grafos de la familia G es un subconjunto cerrado P ⊆ G. necesariamente G′ ∈ P tambi´ n. . 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. . Modelos de generaci´ n Para generar un grafo aleatorio uniforme (simple. Lo que significa ser cerrado es que al tener dos grafos G ∈ P y G′ ∈ G. 2. Con este modelo. G ∈ P. e Decimos que “casi cada grafo” G = (V. 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.

. empezando de G0 y terminando en GN : E0 ⊂ E1 ⊂ . 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. 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. o 12. |Et | = t. y (IV ) N = n 2 . 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.10) con cualquier funci´ n f (n) → ∞. Observamos el proceso de generaci´ n (Gt )N y checamos en cada instante t si o no Gt tiene la propiedad P. n−1 +1 .3. τ = τ (n) = m´ {Gt ∈ P} . Kn .3. ya desde el trabajo de Er˝ s y R´ nyi.m . (12. EN . . 12.9) t≥0 Nota que por ser monotona P.m son todos posibles resultados intermedios de todos los procesos posibles que cumplan con la definici´ n.11) τ ∈ n − 1. La cota inferior viene del caso “mejor”: las primeras n − 1 aristas forman un arbol de expansi´ n. 175 (III ) Gt−1 es un subgrafo de Gt . Por definici´ n.12. El cota superior es el ´ o . o sea. por lo cual los grafos Gn.4. En t´ rminos vagos.3. Podemos definir un mapeo entre el espacio de todos los procesos posibles en el momento t = m y los grafos Gn. Definimos P como la propiedad que el grafo sea conexo. Gt ∈ P para todo t ≥ τ y que τ puede variar entre diferentes instancias del proceso con un valor n fijo. GRAFOS ALEATORIOS UNIFORMES (II ) Gt tiene t aristas para cada valor de t. ın (12. 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.3. Comportamiento repentino Suponemos que P sea una propiedad monotona de grafos. 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 . sobre el conjunto e de todos los N! procesos posibles. 2 el grafo llega a tener la propiedad P por la primera vez. En alg´ n u momento. en G0 cada v´ rtice est´ aislado y GN es el grafo completo de n vertices.

el tama˜ o del mayor componente conexo en un Gt cuando t = m es de n ı n orden logar´tmico en n. (n−1)] . 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.12) donde c ∈ [0. 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. . y la subida ocurre de una manera repentina en un cierto valor de x sin importar el valor de n.p tal que p = c/n.4. o De la ecuaci´ n 12. (12.176 ´ CAPITULO 12. 12. cuando el grado promedio del grafo llega a aproximadamente uno (o sea c ≈ 2 ). (12. n En vez de estudiar exactamente el momento cuando todo el grafo ya sea conexo. despu´ s de que a e e ya necesariamente se conecta el grafo al a˜ adir la arista siguiente. Fijamos un valor m con la ayuda de un par´ metro constante a c tal que m = ⌊cn⌋. a Estudiando la probabilidad q de la existencia de una cubierta con una cierta candidad x de v´ rtices cuando se fija c. q es alto.14) y podemos hablar del par´ metro c como en grado promedio (para grandes valores de n). de nuevo se encuentra que para valores bajos de x. e mientras para valores grandes de x. resumimos algunos resultados sobre la cantidad de aristas necesarias para que el grafo tenga un componente conexo grande. 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.7. q es bajo. 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.13) n n n 1 Entonces. tenemos que el grado promedio k de un v´ rtice en tal grafo es o e k = p(n − 1) = c n−1 ≈ c. n (12. aparece un componente gigante en el Gt . El resultado interesante sobre los tama˜ os de los componentes es n 2 1 que con c < 2 . usando como el modelo de generaci´ n el Gn.

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

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

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 . . b.Listas de s´mbolos ı Elementos y ordenamiento a. . .

A2 . . A2 . . B. R Z ∅ {a1 . . . . . . . a2 . . 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. 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 . An o la intersecci´ n de los n conjuntos A1 . . b) A×B k! n k . . . . . .180 ´ BIBLIOGRAFIA Conjuntos y conteo A.

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.´ 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. 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.

. . u. Z. 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. y. w.ℓ 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} o v. . {v. x. w) diam (G) δ (G) Kk Kk. Y. .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} v. . . . 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. . w ω (v) w deg (v) ← − deg (v) − → deg (v) dist (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 .

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

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

. . . Los cuatro vertices que son puntos finales de las ı ı aristas involucradas est´ n dibujados en mayor tama˜ o que los otros v´ rtices. 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. . Los puntos de inicio y fin de la instancia de la figura 8. 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. . . . . . .4. . . . . . .3. 151 a 8. . . . . Dos “puentes” (en rojo) que juntan las soluciones de dos subproblemas de cubierta convexa a la soluci´ n del problema completo. . Los puntos est´ n dibuo jados como c´rculos negros. . . . . . . . . . . . . . .´ INDICE DE FIGURAS 191 8. 141 ı 8. . 145 o o 8. las aristas eliminadas est´ n en gris y las a˜ adidas en a n l´nea negro descont´nua.1. . . . . . . 172 . . . . . . . . .1 y la direcci´ n de o procedimiento del algoritmo de l´nea de barrer. . . . . . . . . . . . 144 8. . . . . . . por lo menos una interacci´ n est´ en conflicto (marcado o a con una zeta sobre la arista). . . . . . . . . . . . . . . . . . . mientras el pol´gono est´ dibujado en l´nea ı ı a ı negra y los tri´ ngulos en colores variados.2. . e ı ı En cada una de las ocho posibles configuraciones de los sentidos (marcados con ∧ y ∨). . 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. . 140 8.6. 169 e 12. 152 ı o ´ 10. . . . . . . . . . Una instancia del problema de cubierta convexa de un conjunto de puntos en el plano. Una instancia del problema de intersecciones de segmentos. . . Las opciones de n tri´ ngulos los cuales puede pertenecer un lado del a pol´gono en una triangulaci´ n optima. . . . . . . . . . . . . . . . . . .1. . . . . . . . . . .162 a n e 11. . . 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. . . . . . . .5. .1. .

192 ´ INDICE DE FIGURAS .

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

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

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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful