v
{[NDICE GENERAL
Introduccién 1
11. ¢De qué trata este libro? 1
1.2. Repaso de matemiticas 3
1.2.1,
1.2.2.
123.
1.24,
125.
Exponentes 3
Logaritmos 3
Series 4
Aritmética modular 6
La palabra conD 6
13. Breve introduccién ala recursion 9 - ,
Resumen 13
Ejercicios 13 -
Referencias 15
Anilisis de algoritmos 17
2.1. Soporte matemético 17
2.2. Modelo 20
23. Qué analizar 20
24. — Célculo del tiempo de ejecucién 22
24.1.
2.4.2.
24.3.
2.4.4,
245,
246.
Un ejemplo sencillo 23
Reglas generales 24
Soluciones al problema de la suma de la subsecuencia
méxima 26
Logaritmos en el tiempo de ejecucién 32
Verificacion del andlisis 37
Un grano de sal 38 xiii
{NDICE GENERAL
3.1.
3.2.
3.3.
41.
42.
43,
Resumen 39
Ejercicios 39
Referencias 44
Listas, pilas y colas 45
Tipos de datos abstractos (TDA) 45
EI TDA lista 46
3.2.1. —Implaritacién de listas a base de arreglos sencillos 47
3.2.2. Listas enlazadas 47
3.2.3. Detalles de programacién 48
3.24, Errorescomunes 54
3.2.5. Listas doblemente enlazadas 56
3.2.6. Listas enlazadas circularmente 56
3.2.7. Ejemplos 57
3.2.8. Implantacién de listas enlazadas a base de cursores 62
ELTDA pila 66
3.3.1, Elmodelo pila 66
3.3.2. Implantacién de pilas 68
33.3, Aplicaciones 74
ELTDA cola 83
El modelo cola 83
Implantacién de colas a base de arreglos 83
Aplicaciones de colas 87
Resumen 88
Fjercicios 88
Arboles 93
Preliminares 93
4.1.1. Implantacion de arboles 95
4.1.2. Recorridos de 4rboles con una aplicacién 95
Arboles binarios 100
42.1. Implantacién 100
4.2.2, Arboles de expresién 101
Eltda arbol de busqueda: Arboles binarios de biisqueda 105
43.4, Crear_vacio 106
43.2. Buscar 106
433, Buscar_min y buscar_méx 107
43.4, Insertar 10844,
45.
46.
47.
INDICE GENERAL xiii
43.5. Hliminar 109
43.6. Anélisis del caso promedio 111
Arboles AVL 114
44.1. Rotacién sencilla 116
4.4.2. Rotaciéndoble 119
Arboles desplegados 126
4.5.1. Una idea sencilla (que no funciona) 127
45.2. Despliege 129
Recorridos de arboles (de nuevo) 137
Arboles-B 139
Resumen 144
Fjercicios 145
Referencias 152
Dispersién 155
51.
5.2,
5.3.
5.4.
5.5.
5.6.
Idea general 155
Funcién de dispersion 156
Dispersion abierta (encadenamiento separado) 159
Dispersién cerrada (direccionamiento abierto) 162
54.1 Exploracién lineal 162
5.4.2 Exploracién cuadratica 165
54.3 Dispersién doble 168
Redispersién 170
Dispersidn extensible 172
Resumen 175
Ejercicios 176
Referencias 179
Colas de prioridad (monticulos) 181
6.1.
6.2.
6.3.
6.4,
Modelo 182
Implantaciones simples 182
Monticulo binario 183
63.1. Propiedad de la estructura 183
63.2. Propiedad de orden de monticulo 184
6.3.3, Operaciones basicas sobre monticulos 185
6.3.4. Otras operaciones sobre monticulos 189
Aplidaciones de las colas de prioridad 194xiv
INDICE GENERAL
6.5.
6.6.
67.
6.8.
7A
7.2.
73.
7A.
75.
7.6.
77.
78.
7.9.
7.40.
7AL
64.1. * Elproblema de la seleecién 194
64.2. Simulaci6n de eventos 196
Monticulos-d_ 197
Monticulos a izquierda 198
66.1. Propiedad de monticulo a izquierda 198
6.6.2. Operaciones sobre monticulos a izquierda 200
Monticulos oblicuos 205
Colas binomiales 207
68.1. Estructura de cola binomial 208
682. Operaciones sobre colas binomiales 209
683. Implantacién de colas binomiales. 213
Resumen 216
Ejercicios 216
Referencias 221
Ordenaci6n 221
Preliminares 224
Ordenacién por insercién 224
21. Elalgoritmo 224
Anilisis de la ordenacién por insercién 225
Una cota inferior para algoritmos de ordenacién simples
225
Ordenacién de Shell 227
74.1. Analisis del peor caso de la ordenacion dle Shell 228
Ordenacién por monticulo 231
Ordenacién por intercalacién 233
7.6.1. Andlisis de la ordenacién por intercalacién 236
Ordenacién répida 240
771. Seleccién del pivo'
77.2. Estrategia de parti
773. Archivos pequefios 245
7.74. Rutinas reales de ordenaci6n répida_245
77.5. Anilisis de la ordenacién répida 247
7.7.6. Unalgoritmo de seleccién con un tiempo esperado Enea
251
Ordenacién de registros grandes 252
Una cota inferior general para la ordenacién 253
79.1. Arboles de decision 253
Ordenacién por cubetas 255
Ordenacién externa 256
7ALI. zPor qué necesitamos algoritmos nuevos? 256INDICE GENERAL.
7.11.2, Modelo para ordenacién externa 257
7.113. Elalgoritmo sencillo 257
7.11.4. Intercalacién de vias miltiples 258
7.11.5. Intercalacién polifasica 260
7.11.6. Seleccién de sustitucién 261
Resumen 262
Fjercicios 263
Referencias 267
EI TDA conjunto ajeno 271
8.1. Relaciones de equivalencia 271
82. El problema de la equivalencia dinamica 272
8.3. Estructura de datos bésica 274
8.4, Algoritmos de unién refinados 277 «
8.5. Compresién de caminos 280
86. Peor caso de Ja uni6n por rangos y compresion de caminos
281
86.1, Anélisis del algoritmo union/bisqueda 282
8.7. Unaaplicacion 288
Resumen 289
Fjercicios 289
Referencias 291
Algoritmos de grafos 293
9.1. Definiciones 293
9.1.1. Representacién de grafos 294
9.2. _- Ordenacién topolégica 296
9.3. Algoritmos del camino més corto 300
9.3.1, Caminos més cortos no ponderados 302
Algoritmo de
Grafos con aristas de costo negativo 315
Grafos aciclicos 316
Camino més corto entre todos los pares 320
9.4. ‘Problemas de flujo en redes 320
94.1. Unalgoritmo simple de flujo maximo 321
95. Arbol de extension minimo 325
9.5.1. Algoritmo de Prim 326xvi
INDICE GENERAL
10
9.6
97
95.2. Algoritmo de Kruskal 330
Aplicaciones de la biisqueda en profundidad 332
1. Grafos no dirigidos 333
2. Biconectividad 334
3. Cireuitos de Euler 338
964, Grafos dirigidos 342
9.65. Localizacién de componentes fuertes 344
Introduccién ala complecién NP 346
971. Facil vs. dificil 346
972. LaclaseNP 347
9.73. Problemas NP completos 348
Resumen 351
Ejercicios 351
Referencias 357
ou
ou
9.
Técnicas de disefio de algoritmos 361
10.1.
10.3.
10.4,
10.5.
Algoritmos 4vidos 361
Un problema simple de planificacién 362
Cédigos de Huffman 366
Empaquetamiento aproximado en recipientes 372
"Divide y vencerds” 381
10.2.1. Tiempo de ejecucién de algoritmos de "divide y vencerés"
382
10.2.2. El problema de los puntos mas cercanos 385
10.23. El problema de la seleccién 389
10.24. Mejoras te6ricas para problemas de aritmética 393
Programacién dinémica 397
10.3.1, Uso de una tabla en vez de la recursién 397
10.3.2. Ordenacién de multiplicaciones de matrices 400
103.3. Arbol binario de busqueda éptimo 402
103.4. Camino més corto entre todos los pares 407
Algoritmos aleatorizados 409
104.1. Generadores de niimeros aleatorios 410
10.4.2. Listas con saltos 414
10.43. Comprobacion de primalidad 417
Algoritmos con retroceso 418
105.1, El problema de la reconstrucci6n del camino de cuota 420
105.2. Juegos 425
Resumen 432
Fjercicios 432
Referencias 4401
INDICE GENERAL xvii
Anilisis amortizado 445
1.1.
11.2.
11.3,
11.4.
11.5.
Un acertijo no relacionado 446
Colas binomiales 446
Monticulos oblicuos 452
Monticulos de Fibonacci 454
11.4.1, Corte de nodos en montfculo a izquierda 455
11.4.2. Fusion perezosa de colas binomiales 458
i. Las operaciones del monticulo de Fibonacci 461
11.4.4. Demostracién de la cota del tiempo 463
Arboles desplegados 465
Resumen 469
Ejercicios 470
Referencias 471
Vocabulario técnico bilingiie 473
Indice de materias 479