P. 1
Complejidad Computacional Dra. Elisa Schaeffer

Complejidad Computacional Dra. Elisa Schaeffer

|Views: 25|Likes:
Published by Brian Baloa

More info:

Published by: Brian Baloa on Aug 28, 2010
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

05/24/2012

pdf

text

original

Sections

  • Definiciones matem´aticas y computacionales
  • 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 ´ON EXPONENCIAL 5
  • 1.3. Funci´on exponencial
  • 1.4. Logaritmos
  • 1.5. Sucesiones
  • 1.5.1. Series aritm´eticas
  • 1.5.2. Series geom´etricas
  • 1.5.3. Otras series
  • 1.6. Demostraciones
  • 1.7. L´ogica matem´atica
  • 1.7.1. L´ogica booleana
  • 1.7.2. L´ogica proposicional
  • 1.7.3. Informaci´on digital
  • 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
  • 1.8.7. Subgrafos
  • 1.8.8. ´Arboles
  • Problemas y algoritmos
  • 2.1. Problema
  • 2.1.1. Problema de decisi´on
  • 2.1.2. Problema de optimizaci´on
  • 2.2. Algoritmo
  • 2.3. CALIDAD DE ALGORITMOS 25
  • 2.2.1. Algoritmo recursivo
  • 2.3. Calidad de algoritmos
  • 2.3.1. Operaci´on b´asica
  • 2.3.2. Tama˜no de la instancia
  • 2.3.3. Funciones de complejidad
  • 2.3.4. Consumo de memoria
  • 2.3.5. An´alisis asint´otico
  • Modelos de computaci´on
  • 3.1. M´aquinas Turing
  • 3.2. M´aquinas de acceso aleatorio (RAM)
  • 3.3. M ´AQUINAS TURING NO DETERMINISTAS 37
  • 3.3. M´aquinas Turing no deterministas
  • 3.4. M´aquina Turing universal
  • 3.5. M ´AQUINA TURING PRECISA 39
  • 3.5. M´aquina Turing precisa
  • Complejidad computacional de problemas
  • 4.1. Clases de complejidad de tiempo
  • 4.2. Clases de complejidad de espacio
  • 4.3. PROBLEMAS SIN SOLUCI ´ON 43
  • 4.3. Problemas sin soluci´on
  • 4.4. Problema complemento
  • 4.5. Algunos problemas fundamentales
  • 4.5.1. Problemas de l´ogica booleana
  • 4.5.2. Problemas de grafos
  • Clases de complejidad
  • 5.1. JER ´ARQUIAS DE COMPLEJIDAD 55
  • 5.1. Jer´arquias de complejidad
  • 5.2. Reducciones
  • 5.3. Problemas completos
  • 5.3.1. Problemas NP-completos
  • 5.3.2. Caracterizaci´on por relaciones: certificados
  • 5.4. Complejidad de algunas variaciones de SAT
  • 5.4.1. Problemas kSAT
  • 5.4.2. SAT de “no todos iguales” (NAESAT)
  • 5.5. Complejidad de problemas de grafos
  • 5.5.1. El problema de flujo m´aximo
  • 5.5.2. El problema de corte m´ınimo
  • 5.5.3. Caminos y ciclos de Hamilton
  • 5.5.4. Coloreo
  • 5.5.5. Conjuntos y n´umeros
  • 5.6. Algoritmos pseudo-polinomiales
  • 5.7. PROBLEMAS FUERTEMENTE NP-COMPLETOS 81
  • 5.7. Problemas fuertemente NP-completos
  • Estructuras de datos
  • 6.1. Arreglos
  • 6.1.1. B´usqueda binaria
  • 6.1.2. Ordenaci´on de arreglos
  • 6.2. Listas
  • 6.2.1. Pilas
  • 6.2.2. Colas
  • 6.2.3. Ordenaci´on de listas
  • 6.3. ´Arboles
  • 6.3.1. ´Arboles binarios
  • 6.3.2. ´Arboles AVL
  • 6.3.3. ´Arboles rojo-negro
  • 6.3.4. ´Arboles B
  • 6.3.5. ´Arboles biselados
  • 6.4. Mont´ıculos
  • 6.4.1. Mont´ıculos bin´omicos
  • 6.4.2. Mont´ıculos de Fibonacci
  • 6.5. Grafos
  • 6.5.1. B´usqueda y recorrido en grafos
  • 6.5.2. Componentes conexos
  • 6.6. Tablas de dispersi´on din´amicas
  • 6.7. Colas de prioridad
  • 6.8. Conjuntos
  • 6.8.1. Estructuras unir-encontrar
  • 6.8.2. Implementaci´on de un conjunto en forma de un ´arbol
  • An´alisis de algoritmos
  • 7.1. Algoritmos simples
  • 7.2. Complejidad de algoritmos recursivos
  • 7.2.1. Soluci´on general de una clase com´un
  • 7.2.2. M´etodo de expansi´on
  • 7.2.3. Transformaciones
  • 7.3. AN ´ALISIS DE COMPLEJIDAD PROMEDIO 125
  • 7.3. An´alisis de complejidad promedio
  • 7.3.1. Ordenaci´on r´apida
  • 7.4. An´alisis de complejidad amortizada
  • 7.4.1. Arreglos din´amicos
  • 7.4.2. ´Arboles biselados
  • 7.4.3. Mont´ıculos de Fibonacci
  • T´ecnicas de dise˜no de algoritmos
  • 8.1. Algoritmos de l´ınea de barrer
  • 8.2. Dividir y conquistar
  • 8.2.1. Cubierta convexa
  • 8.3. PODAR-BUSCAR 147
  • 8.3. Podar-buscar
  • 8.4. Programaci´on din´amica
  • 8.4.1. Triangulaci´on ´optima de un pol´ıgono convexo
  • Optimizaci´on combinatoria
  • 9.1. ´Arbol cubriente m´ınimo
  • 9.2. Ramificar-acotar
  • 9.2.1. Problema de viajante
  • Algoritmos de aproximaci´on
  • 10.1. Ejemplos
  • 10.2. B´usqueda local
  • 10.2.1. Definiciones b´asicas
  • 10.2.2. Ejemplo: 2-opt
  • 10.2.3. Complejidad de b´usqueda local
  • Algoritmos aleatorizados
  • 11.1. COMPLEJIDAD COMPUTACIONAL 167
  • 11.1. Complejidad computacional
  • 11.2. Problema de corte m´ınimo
  • Transiciones de fase
  • 12.1. Modelo de Ising
  • 12.2. PROBLEMA DEL VIAJANTE (TSPD) 173
  • 12.2. Problema del viajante (TSPD)
  • 12.3. Grafos aleatorios uniformes
  • 12.3.1. Familias y propiedades
  • 12.3.2. Modelos de generaci´on
  • 12.3.3. Comportamiento repentino
  • 12.3.4. Aparici´on de un componente gigante
  • 12.4. Cubierta de v´ertices (VERTEX COVER)
  • Listas de s´ımbolos
  • Conjuntos y conteo
  • Mapeos y funciones
  • L´ogica matem´atica
  • Grafos
  • Probabilidad
  • Lista de abreviaciones
  • Minidiccionario ingl´es-espa˜nol

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

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

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

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

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

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

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

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

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

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

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

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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4. a Definici´ n 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).1) Definici´ n 4.1.2. 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. a Definici´ n 4.3. NP = k>0 NTIME nk . (4. P= k>0 TIME nk .2) 41 . (4. Una clase de complejidad TIME (f (n)) es el conjunto de lenguajes L tales que una m´ quina Turing (determinista) decide L en tiempo f (n). El conjunto P contiene todos los lenguajes decididos por m´ quinas Turing o a (deterministas) en tiempo polinomial.Cap´tulo 4 ı Complejidad computacional de problemas 4.1.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Adem´ s. . Para asegurar que las variables nuevas tengan e todas el mismo valor. 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 φ. 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. a a . xi } ∈ E. Para cada instancia φ de 2S AT. a˜ ademos las cl´ usulas siguientes en φ: n a (¬x1 ∨ x2 ). Introducimos variables nuevas x1 . . 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(φ). la segunda por x2 .19. la frontera entre problemas polinomiales y problemas NPcompletos est´ entre 2S ATy 3S AT. . Las variables x de φ y sus negaciones x forman el conjunto de v´ rtices de G(φ). si {xi . . poo a demos “aumentar” cada cl´ usula de uno o dos literales a tener tres simplemente por copiar a literales. CLASES DE COMPLEJIDAD 5.18. Considera una variable x que aparece k > 3 veces en φ. 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 φ. . Claramente 3S AT ∈ NP por ser un caso especial de S AT y sabemos que S AT ∈ NP.4. e ¯ ¯ Como NL est´ cerrada bajo el complemento. a a Teorema 5.40) Denota por φ′ la expresi´ n que resulta cuando cada ocurrencia extra de una variable en φ o ha sido procesada de esta manera. donde k ≥ 1 es un entero. . o Para problemas kS AT. (¬x2 ∨ x3 ). Entonces. existe un algoritmo a polinomial basado en el problema R EACHABILITY en un grafo G(φ). (¬xk ∨ x1 ).4. o a ¯ ¯ tambi´ n {xj . resulta que 2S AT∈ NL (habr´ que recordar que NL ⊆ P). Complejidad de algunas variaciones de S AT 5. xk y reemplazamos la primera ocurrencia de x en φ por x1 . (5. 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. etc´ tera. . sabemos que 2S AT es ¯ polinomial.1. tenemos una reducci´ n de C IRCUITSAT a 3S AT.70 ´ CAPITULO 5. Es decir. podemos mostrar que 2S AT Complement ∈ a NL. a La demostraci´ n es una reducci´ n donde cada instancia φ ∈ 3S ATest´ transformada a o o a eliminar las propiedades no permitidas. a Teorema 5. xj } ∈ E. Resulta que φ′ ya cumple con las propiedades deseadas y que φ es satisfactible si y s´ lo si φ es satisfactible. es el conjunto de expresiones booleanas φ ∈ S AT (en C NF) en las cuales cada cl´ usula contiene exactamente k literales. . Problemas kS AT El lenguaje kS AT. Entonces. 3S AT es NP-completo. 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.

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. En ninguna cl´ usula a de Rz (C) es permitido que todos los literales tengan el valor ⊤ (y tampoco que todos tengan el valor ⊥).2.41) . existe una asignaci´ n que satisface el circuito. En el caso de ∧. 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. 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. por lo cual contienen z y T (z) = ⊥. (g ∨ ¬h ∨ ¬h′ ). (¬g ∨ h′ ∨ z).5. Entonces. si C es satisfactible. ⊥. est´ n satisfechas por T . 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. En la direcci´ n (⇒). Cada cl´ usula que corresponde a una puerta tipo ⊤.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. por lo cual alg´ n literal es necesariamente asignado el valor ⊤ en a u T para cada cl´ usula.4. El problema M AX 2S AT es una generalizaci´ n de 2S AT: o Problema 5. existe una asignaci´ n de valores T que satisface o o a Rz (C). 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. Entonces extendemos T para Rz (C) por asignar T (z) = ⊥. Teorema 5. (5. 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 φ. por la reducci´ n a a o o de C IRCUITSAT a S AT. 5. las cl´ usulas ´ o a tienen la forma (¬g ∨ h ∨ z).4. por lo cual todas o las cl´ usulas originales est´ n satisfechas en esta asignaci´ n. a Los unicos casos de preocupaci´ n son puertas de tipo ∧ y ∨. si una asignaci´ n de valores T satisface a la expresi´ n original R(C) o o o ¯ en el sentido de NAESAT. NAESAT es NP-completo. o En la direcci´ n (⇐).20. Sin embargo. todas las literales tengan el o a mismo valor ⊤ o ⊥. tenemos que C ∈ C IRCUITSAT si y s´ lo si R(C) ∈S AT.

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

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

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

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

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

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

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

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

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

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

82 ´ CAPITULO 5. CLASES DE COMPLEJIDAD .

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

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

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

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

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

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

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

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

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

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

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

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. 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.10)  Fk−1 + Fk−2. El n´ mero de v´ rtices de ruteo en el ramo de una hoja es cero. la diferencia en el largo de los caminos es un constante.11) √ donde φ = 1+2 5 es la tasa dorada. (6.12) . 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. 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.94 ´ CAPITULO 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. ESTRUCTURAS DE DATOS Para un arbol balanceado. si k = 1 Fk = (6. La sustituci´ n 1 + R(k) = o o F (k) tampoco aplica desde el comienzo. por lo cual tambi´ n para esos arboles aplica que su tiempo de acceso a cualquier e ´ clave es O (log2 n). 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). ´ Entonces la ecuaci´ n recursiva aplica para R(k) donde k ≥ 2. como F (0) = 0 < R(0) + 1 = 0 + 1 = 1 F (1) = 1 < R(1) + 1 = 1 + 1 = 2. Hemos llegado a la definici´ n de la o o sucesi´ n de Fibonacci. para k > 1.9) La sustituci´ n que hicimos era 1 + R(k) = F (k). 1. 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. (6. 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ANALISIS DE ALGORITMOS .138 ´ ´ CAPITULO 7.

donde se procesa objetos geom´ tricos como puntos. o aunque no sea el mejor ni localmente. Hay o casos donde los mismos subproblemas ocurren varias veces y es importante evitar tener que resolverlos varias veces. 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. o ´ 8. 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. 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. mientras en optimizaci´ n. 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. en vez de considerar todas las alternativas para poder despu´ s elegir vorazmente o con otra heur´stica una de ellas.1) o recursivo (por ejemplo los algoritmos de dividir y conquistar de la secci´ n 8. En este cap´tulo presentamos algunas t´ cnicas comunes del dise˜ o de algoritmos ı e n que aplican a muchos tipos de problemas.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. mientras en otros casos ı ´ terminan en una soluci´ n factible que no es la optima.4). los algoritmos que logran esto cuentan con programaci´ n o din´ mica (de la secci´ n 8. 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.1. algoritmos e ı heur´sticos pueden llegar al optimo (global) en algunos casos. En algunos casos es mejor hacer cualquier aumento. pero ninguna de las operaciones de o ´ aumento utilizados logra mejorarla.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. Son particularmente com´ nes para los prou blemas de geometr´a computacional. En general.2). ı e 139 .

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

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

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

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

4). Tambi´ n hay que asegurar que las dos puentes no corten uno al e otro. La cubierta convexa es la regi´ n convexa o m´nima que contiene todos los puntos del conjunto.3. 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).2. . 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. Una instancia de ejemplo se muestra en la figura 8. 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. 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. 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. TECNICAS DE DISENO DE ALGORITMOS Figura 8.144 ´ ´ ˜ CAPITULO 8. 8. 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. tambi´ n ı o e est´ n incluidos en la misma regi´ n.3: Una instancia del problema de cubierta convexa de un conjunto de puntos en el plano.1. 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. a o La idea del algoritmo es dividir iterativamente el conjunto de puntos en dos subconjuntos de aproximadamente el mismo tama˜ o. ı a a Lo importante es que cada punto est´ visitado por m´ ximo una vez al buscar uno de los a a dos puentes. Para juntar dos cubiertas. La cubierta de un s´ lo punto es el punto mismo. 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ALGORITMOS DE APROXIMACION .164 ´ ´ CAPITULO 10.

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

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

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

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

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

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

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

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

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

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

Podemos definir un mapeo entre el espacio de todos los procesos posibles en el momento t = m y los grafos Gn.3. n−1 +1 . por lo cual los grafos Gn.12. La cota inferior viene del caso “mejor”: las primeras n − 1 aristas forman un arbol de expansi´ n. Se ha mostrado. Observamos el proceso de generaci´ n (Gt )N y checamos en cada instante t si o no Gt tiene la propiedad P. (12. EN . En t´ rminos vagos.9) t≥0 Nota que por ser monotona P. Comportamiento repentino Suponemos que P sea una propiedad monotona de grafos.3. Definimos P como la propiedad que el grafo sea conexo. ya desde el trabajo de Er˝ s y R´ nyi. Por definici´ n. 2 el grafo llega a tener la propiedad P por la primera vez. . 175 (III ) Gt−1 es un subgrafo de Gt .m son todos posibles resultados intermedios de todos los procesos posibles que cumplan con la definici´ n.10) con cualquier funci´ n f (n) → ∞. ın (12. o sea. 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. sobre el conjunto e de todos los N! procesos posibles. El cota superior es el ´ o . o 12. τ = τ (n) = m´ {Gt ∈ P} . empezando de G0 y terminando en GN : E0 ⊂ E1 ⊂ . 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 .3.4.11) τ ∈ n − 1. 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. En alg´ n u momento.m . . y (IV ) N = n 2 . 12. que varias propiedades o e monotonas aparecen muy de repente en tales procesos: casi ning´ n Gt los tiene antes de u un cierto momento y casi todos Gt lo tienen despu´ s de ese momento. 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. Llamamos o 0 el momento τ cuando Gt ∈ P el tiempo de llegada (ingl´ s: hitting time) del proceso a la e propiedad. en G0 cada v´ rtice est´ aislado y GN es el grafo completo de n vertices.3. |Et | = t. Kn .

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

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

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

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

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

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. 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 . 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.´ BIBLIOGRAFIA 181 Mapeos y funciones un mapeo del conjunto A al conjunto B. 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.

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

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 .

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

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

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

192 ´ INDICE DE FIGURAS .

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

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

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

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

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

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

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

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

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

You're Reading a Free Preview

Download