ao ClO
Java
7 Sea rca
Ceea tie Rica
Peat oe en at
Cereus Dictate
Narre oe eee
cen Incas
Nee ree ecw)
enfoque actual, a través de la
Perea eit)
PIP cake
eeeate tie eres
ene Ruud
OMT eect ea kG
acto ee eee atic 1)
Cee erie Re tt anmery
Oca icc)
Peataeecn eran
Bee eee ceric
variedad de ejemplos practicos,
Pree tet ete an aca
er eeu na
Ete ees ace!
Ponte our
AOR eri ac)
e
Pee Cold
MARK ALLEN WEISS
(eerie nee
BPAY.
Caracteristicas
Ce eu ered
Cee ame rake ac)
entidad, cuyo cédigo original
Peer eit euler
NE Rc)
y revisado por un programador
cael
eae tes MEE)
eer Mec enue e Ce
Seca m rien amen ted
Pearce eek AUC}
(ue
See a ecu
PCS ie ue cca
BeOS cae acs?
al final de cada capitulo para
Peg teu eid
es
eee ete set iy
eee ee es cuces
asec ae
entre los distintos capitulos.
Nea COMM ele Me Mae Runa Cur
University. Se doctoré en Ciencias de la Computacién en la Universidad de
eee ae en RR eeu eel om eee les
PCE restated catch aru cect
Peer ace mane iis ie kt Cuca R Ck Ol ie
lenguajes estructurados mas modernos, que se ha materializado en diversos —__
Secrets ER Met erage RSet a eae kel)
ER hee Ce ie eit ea
eee ee Reem eee eee
TSBN a4 035-4
9 il il
bere ESO NN
Secon
AContenido
Prélogo | ce . _ . XIX
Un enfoque novedoso. were: “: ns wae XX
Prerrequisitos.... cone 2 — XX
Java.. . ce 7 ce = ‘XXI
Organizacién del libro: —e . a ee XXII
Organizacién del libro por capitulos........ suanmeeewe XXII
Dependencias entre capitulos . woe ce . XXIV
Partes independientes xe - — 2 XXIV
Fundamentos matemiaticos ae ane ws . XXV
Organizacién del curso....... XXV
Ejercicios ne XXVI
Detalles pedadégice . XXVI
Disponibilidad del cédigo.. eons XXVL
Gufa del profesor 0 eonaitiniitss., SOMME
Agradecimientos . XXVIT
Prélogo a la edicién en espafiol...... a wees XXIX,
PRIMERA PARTE
Un recorrido por Java
1. Java bésico. 3
1.2. El primer programa 5
1.2.1. Comentarios 5
1.2.2. main a e 6
Le Salida por pantalla 6
1.3.1. Los tipos primitivos . 6
1.3.3, Declaracidn e inicializacin de tipos primitivos .... z
1.3.4. Entrada y salida por terminal 8a 1.4. Operadores basicos...
‘ 8
1.4.1. Operadores de asignacién 8
1.4.2, Operadores aritméticos binarios 9
1.4.3. Operadores unarios. 10
14.4. Conversiones de tipo o 10
1.5, _Instrucciones condicionales..
1.5.1. Operadores relacionales y de igualdad u
15.2, Operadores l6gicos ul
15.3. La instruccién i£ 12
15.4. La instruccién white 13
155. La instruccién for. Fete nes ae
1.56. La instruccién do... TERRES . 15
15.7. break y continue... . i 15
1.5.8. La instrucein switch Fe — 16
1.5.9. El operador condicional ce ee _ - 17
1.6. Métodos 18
1.6.1. Sobrecarga de los nombres de los métodos . . 18
1.6.2. Clases de almacenamiento o cnn Fipiaeean 19)
Resumen...... ce 19
Elementos del juego sexepuaistie - croncares OO)
Errores comunes...... ss ce . nnmmacieess Bl
En Internet 2
Ejercicios. 2
Bibliografia.... 2 4
2. Referencias 25
2.1, Qué es una referencia?.... 25
2.2. Nociones bisicas sobre objetos y referencias. 1
2.2.1, El operador punto (.) 28
2.2.2. Declaracién de objeto: 28
2.2.3, Recogida de basura 29
2.24. El significado de =........ 29
2.2.5. Paso de parémetros . 30
2.2.6. El significado di 31
2.2.7. Sobrecarga de operadores para objetos 31
2.3. Cadenas de caracteres . ce 31
2.3.1. Conceptos bisicos de la manipulacién de Strings... 32
2.3.2. Concatenacién de cadenas 32
2.3.3. Comparando cadenas......... ‘ sts le 33
2.34. Otros métodos del tipo String... . gczateroeats! 38
2.3.5. Conversidn entre cadenas y tipos primitivos.............. cee BB
24. Vectores. . 34
24.1. Declaraci6n, asignacin y métodos. 4
2.4.2. Expansién dinémica de vectores 36
24.3. Vectores multidimensionales .... 3 sities cia? 37
2.4.4. Argumentos de la linea de comandos. r 39
2.5. Manejo de excepciones 39
2.5.1. Procesamiento de excepciones. 392. La cléusula finally...
2.5.3. Excepciones mas comunes
4, Las cléusulas throw y throws ..
2.6. Entrada y salida..
26.1. Operaciones bisicas de E/S
2.6.2. El objeto StringTokenizer....
2.6.3. Ficheros de acceso secuencial ..
Resumen
Elementos del juego
Errores_comunes
En Internet...
Ejercicios z
Referencias seimewsrenarnaense
Objetos y clases SI
3.1, {Qué es la programacién orientada a objetos? si
3.2. Un ejemplo sencillo 33
3.3. Javadoc : 34
34, Métodos 37
3.4.1, Constructores " 37
3.4.2. Métodos modificadores y de acceso 37
34.3. Salida y toString... cece cecceesseceseteetesesesseeeseeees 58
344. equals... 58
3.4.5. Métodos static....... 59
3.46. main.. 60
3.5. Paquetes 60
3.5.1, La directiva import 60
3.5.2. La instrucci6n package 61
3.5.3. La variable de entorno CLASSPATH. nei 62
3.54, Reglas de visibifidad amistosa dentro de un paquete 63
5. Compilacién separada 64
3.6. Construcciones adicionales 64
3.6.1, La referencia this. 64
3.62. La abreviatura this para constructores. 65
3.6.3. El operador instanceof . ha 65
3.6.4. Atributos estaticos... i 65
3.6.5. Inicializadores. estéticos 66
Resumen 67
Elementos del juego 68
Errores_ comunes 69
En Internet... 69
Ejercicios 70
Bibliogratia 1
Retenclalsa2 gcncsarvras mere eee us B
4.1. (Qué es la herencia? 3
4.2. Sintaxis basica de Java...... . . ‘caendectbitin a 76
4.2.1, Realas de visibilidad Tec RETR lscaeaa eee 164.2.2. El constructor y super
4.2.3, Métodos y clases finales ....
4.2.4. Sobreescribiendo un método
4.2.5. Métodos y clases abstractos
4.3. Ejemplo: extensidn de la clase Figura......
4.3.1. Disgresién: una introducci6n a ta ordenacién...
44. Herencia miltiple
45. El interfaz revere
4.5.1. Especificacién de una interfaz
4.5.2. Implementacién de una interfaz
4.5.3. Varios inferfaces.......
4.6. Implementacién de componentes genéricas.
Resumen... Seance ei
Elementos del juego..... vee
Errores_ comunes
En Internet
Ejercicios......,
Bibliografia....
SEGUNDA PARTE
Algoritmos y fundamentos de programacién
Analisis de algoritmos
5.1. {Qué es el andlisis de algoritmos?
5.2. Ejemplos de tiempo de ejecucién de algoritmos
5.3. El problema de la subsecuencia de suma maxima
5.3.1. El algoritmo O(N‘) obvio
5.3.2. Un algoritmo mejorado O(
5.33. Un algoritmo lineal
54, Reglas generales para la notacién O
5.5. Logaritmos
5.6. Problema de la bisqueda estética
5.6.1, Buisqueda secuencial
5.6.2, Baisqueda binaria
5.6.3, Buisqueda interpolada...
5.7. Comprobar el andlisis de un algoritmo cis
5.8. Limitaciones del andlisis 0 eae zi
Resumen -
Elementos del juego......... on RoR 7
Errores comunes.
En Internet
Ejercicios.
Bibliografia
Estructuras de datos
6.1. {Por qué necesitamos estructuras de datos? .
6.2. Las pilas
6.2.1. Las pilas y los lenguajes de programacién...7.
8.
63. Las colas .
6.4. Listas enlazadas
6.5. Arboles generales sepazn
6.6. Arboles binarios de biisqueda........
6.7. Tablas hash
6.8. Colas de prioridad
Resumen... spat SEEREBIRES .
Elementos del juego...
Errores_ comunes pounce
Eli INCRE cercecearversvexsnananaeta
Ejercicios
Bibliografia
Recursion...... eens ensisSSRTEHER
TA. (Qué es la recursién?.
7.2. Fundamentos: demostraciones por indu
7.3. Recursién basica oe .
73.1, Impresién de ntimeros en cualquier base we
7.3.2. (Por qué funciona? .........606+ 7
7.3.3. Cémo funciona na
7.34. Demasiada recursi6n puede ser pairs 8
7.3.5. Ejemplos adicionales
74. Aplicaciones numéricas
74.1. Aritmética modular...
7.4.2. Exponenciacin modular :
7.4.3, Maximo comiin divisor ¢ inversos multiplicativos .
7.4.4. Bl sistema de criptografia RSA
7.5. Algoritmos divide y vencerds
7.5.1. El problema de la subsecuencia de suma méxima...
7.5.2. Anilisis de un algoritmo divide y vencerés sencillo
1 Uina cota superior general para los tiempos de ejecucidn de fos algoritmos di-
vide y venceris
7.6. Programacién dinémica
7.1. Algoritmos de vuelta atris
Resumen
Elementos del juego
Errores. comunes
En Internet
Ejercicios. :
Bibliograffa
Algoritmos de ordenacién
8.1. {Por qué es importante la ordenacién?
8.2. Preliminares.
83. Andlisis de la ordenaci6n por insercin y otras ordenaciones simples.
8.4, Shellsort..
8.4.1. Rendimiento de Shellson
165
165
166
170
170
172
174
175
176
180
181
181
183
185
188
188
190
195
197
201
205
205
206
207
207
2u
213
213
215
215
217
21910.
8.5. Mergesort
8.5.1. Mezela lineal de vectores ordenados..
8.5.2. El algoritmo mergesort
8.6. Quicksort 5
8.6.1. El algoritmo quicksort
8.6.2. Andlisis de quicksort..
8.6.3. Seleccionando el pivote.
8.6.4. Estrategia de particién
8.6.5. Elements iguales al pivote
8.6.6. Particién con Ia mediana de tres
8.6.7. Vectotes _pequefios...
8.6.8. Rutina de quicksort en Java
8.7. Seleccién répida.....
88. Una cola inferior para la ordenacién
Resumen...
Elementos del juego...
Errores comunes. sesame —
En Internet ea — = .
Ejercicios....
Bibliografia
Nameros aleatorios 249,
9.1. {Por qué son necesarios los ntimeros aleatorios? . coe 249
9.2. Generadores de niimeros aleatorios 2
9.3. Niimeros aleatorios no uniformes.......
9.4. Generacién de una permutaci6n aleatoria
9.5. Algoritmos aleatorios... i oman
9.6. Test aleatorio de primalidad.
Resumen -
Elementos del juego.
Errores comunes
En Internet...
Ejercicios
Bibliografia....
TERCERA PARTE
Aplicaciones
Juegos y diversién 23
10.1. Sopas de letras a : foe 2B
10.1.1. Teorfa.. . womens 10TH
10.1.2. Implementacién en Java oxragy, 276
10.2. El juego de las tres en raya 281
10.2.1. Poda alfa-beta. ... 281
10.2.2, Tablas de transposicién 282
10.3. El ajedrez 285
Resumen . 287
Elementos del juego 28712.
13.
Errores comunes..
En Internet .
Ejercicios
Bibliografia
Las pilas y los compiladores ............2.....202-
11.1, Anatizador de simbolos equilibrados
11.1.1, El algoritmo basico
11.1.2. Implementacién
11.2. Una calculadora sencilla
11.2.1, Méquinas postfijas
11.2.2. Conversién de notacién infija a posttija
11.2.3, Implementacién
11.2.4, Arboles sintécticos de expresiones..
Resumen...
Elementos del juego
Enrorescomunes. vo
En Internet... ee
Ejercicios
Bibliografia. .
Utilidades .
12.1, Compresién de ficheros
12.1.1. Cédigos sin prefijos.
12.1.2. Algoritmo de Huffman...
12.1.3. La fase de codificaci6n..
12.1.4, La fase de decodificacién
12.1.5. Consideraciones précticas
12.2. Generador de referencias cruzadas.
12.2.1, Tdeas bisicas ....
122.2. Implementacién en Java
Resumen...
Elementos del juego
Errorescomunes.
En Internet
Ejercicios
Bibliograffa....
Simulacién
13.1. El problema Josephus
13.1.1. La soluci6n simple.......
13.1.2. Un algoritmo mis eficiente
13.2. Simulacién dirigida por eventos.
13.2.1. Ideas basicas
13.2.2. Bernt: simulacién de un banco de médems .
Resumen
Elementos del juego -15.
16.
Errores comunes.
En Internet
Ejercicios..
Grafos y caminos
14.1. Defin :
14.1.1. Representacin
14.2. Problema del camino minimo sin pesos.
142.1. Teorfa
14.2.2. Implementacién en Java.
14.3. Problema de los caminos minimos con pesos positivos.
143.1, Teorfa: algoritmo de Dijkstra......
143.2. Implementaci6n en Java 3 te
14.4. Problema del camino minimo con costes negativos...-
14.4.1. Teorfa
144.2. Implementacién en Java
14.5. Problemas de caminos en grafos aci
14.5.1, Ordenaci6n topoldgica .
I Teoria del algoritmo de caminos minimos con un grafo acielico
14.5.3. Implementaci6n en Java
1454. Una uplicacién: anilisis de caminos eriticos..
Resumen...
Elementos del juego.
Errores comunes.....
En Internet......
Ejercicios . fe
[BIB grat en-aumneawsicsanicurceveri Seen,
(CUARTA PARTE
Implementaciones
Plas y COO ie recrssnsanenemsconens soanttnizialc ceceeeee 395
15.1. Implementacién dinémica de vectores ..
15.1. Pilas .
15.1.2. Colas
15.2. Implementaciones con listas enlazadas
15.2.1. Pilas
15.2.2. Colas
153. Comparacién de los dos métodos.
15.4, Colas dobles
Resumen “
Elementos del juego.
Errores comunes 412
En Internet a 413
Ejercicios..... nn 13
Listas enlazadas 4s
16.1. Ideas basicas..... 4s
6.1.1. Nodos cabecera.. ' . 4177.
18.
16.2.
16.3.
164.
16.1.2,
Implementacién en Java...
Listas doblemente enlazadas y listas enlazdas circulares.
Listas enlazadas ordenadas
Resumen
Elementos del juego...
Errores comunes
En Internet.....-
Ejercicios
Clases iteradoras
generales....
Definiciones
Implementacién .
Una aplicacié:
binarios.
y recursi6n
Recorrido de arboles: clases iteradoras ..
Arboles...
17.1, Arboles
11d
171.2.
17.13.
17.2. Arboles
17.3. Arboles
174,
174.1
17.4.2.
17.43.
1744.
Resumen
Elementos del juego
Errores. comunes
En Internet
Ejercicios...
Recorrido en postorden -
Recorrido en orden simétrico
Recorrido en preorden.......
Recorrido por niveles
Arboles binarios de busqueda
18.1
18.2.
18.3,
184.
18.5.
18.6.
Ideas bisicas.....
18.1.1
18.1.2.
Baisqueda por posicis
18.2.1
Analisis de las operaciones de los arbotes binarios de basqueda
Las operaciones.
Implementacién en Java.
n en el orden.
Implementacién en Java.
Arboles AVL
18.4.1. Propiedades
18.4.2. Rotacién simple
18.4.3. Rotacién doble
18.4.4. Resumen de la insereién enun frbol AVL
Arboles. rojinegros
18.5.1, Insercién ascendente .
18.5.2. Arboles rojinegros descendentes
18.5.3. Implementaci6n en Java...
18.5.4. Eliminacién descendente
AA-Arboles ..
18.6.1. Insercién
18.6.2. Eliminacién
418
419
426
428
430
431
431
431
432
435
435
435
437
437
441
448.
450
453
457
458
459
461
461
462
462
463
467
467
468
470
477
477
481
484
485
487
490
492
493
495
497
503
505
506
50919.
20.
18.6.3. Implementacién en Java.........cccececeeeeeee 509
18.7. B-Arboles “. 2 walt L 512
Resumen 7 : 519
Elementos del “juego . . La . eee 520
Errores comunes .. 521
En Internet . eee sees wai 521
Ejercicios — a sine S22
Bibliogratia 524
Tablas hash...
19.1. Ideas basicas
19.2. Funcién de localizacién.
19.3. Exploracién lineal
19.3.1. Anilisis de la exploraci6n lineal ..
19.3.2. Lo que sucede realmente: la agrupacién primaria
19.3.3. Analisis de la operacién buscar
19.4. Exploracién cuadratica
19.4.1. Implementacién en Java...
19.4.2. Anilisis de In exploracién cuadrética
19.5. Hashing enlazado
Resumen
Elementos del juego...
Errores comunes..
En Internet
Ejercicios..
Bibliogratta
Una cola de prioridad: el monticulo 553
20.1. Ideas basieas 553
20.1.1. Propiedad estructural st 554,
20.1.2. Propiedad de ordenacién de los monticulos. 555
20.1.3. Operaciones permitidas. ‘ 556
20.2. Implementacién de las operaciones baSiCaS............2.00 = srs 559
20.2.1, insertar . 559
20.2.2. eliminarMin = 562
203, arregLartonticulo: construccién en tiempo lineal del monticulo S64
20.4. Operaciones avanzadas: reducirClave y mezclar. nse 568
20.5. Ordenacién interna: método del monticulo . - 568
20.6. Ordenacién externa... - tease sil
20.6.1. Por qué necesitamos nuevos algoritmos 2.0.2... asda 572
20.6.2. Modelo de ordenacién externa... : - 52
20.6.3, El algoritmo sencillo.. 572
20.64. Mercla multiaria arenes cols nates STE
20.6.5. Mezcla multifase exdtcticdadst ex OS
20.6.6. Selecci6n del reemplazo............. Bid oo . 516
Resumen... cece ceceeeee coe . TEN AM STS
Elementos del juego. . eats ee 578
Errores comunes BBs 57921.
22.
23.
En Internet
Ejercicios vies 3 <
Bibliografia. .. . Tas
QUINTA PARTE
Estructuras de datos avanzadas
Arboles de ensanchamiento...... aa cosas weaned
21.1. Auto-ajustamiento y anélisis amortizado .
21.1.1. Cotas de tiempo amortizadas
311.2 Una estrategia simple de auto-ajustamiento (que no funciona)
21.2. Arboles bisicos de ensanchamiento ascendente .
21.3. Operaciones basicas de los drboles de ensanchamiento........ i
21.4. Analisis del ensanchamiento ascendente ..
21.4.1. Demostracién de fa cota de ensanchamiento
21.5, Arboles de ensanchamiento descendent
21.6. Implementacién de los drboles con ensanchamiento descendente
2U7 Comparaciones de los arboles de ensanchamiento con otros drboles de bisqueda..
Resumen .
Elementos del juego.
Errores_comunes
En Internet..........+
Ejercicios....... were
Bibliografia.
Colas de prioridad con mezcla..
22.1. Los monticulos sesgados
22.1.1. La mezcla es importante
22.12, Mezcla simple de drboles con ordenacién de monticulos
22.1.3. El monticulo sesgado: una modificaci6n sencilla.
22.1.4. Analisis del monticulo sesgado...
22.2. Los monticulos de emparejamientos .
22.2.1. Operaciones del monticulo de emparejamientos y teoria.
22.2.2. Implementacién del monticulo de emparejamientos.
22.2.3. Aplicacion: el algoritmo de Dijkstra para la obtencién de caminos minimos.
Resumen
Elementos del juego
Errores_ comunes
En Internet...
Ejercicios..
Bibliografia
Estructura de particién
23.1. Relaciones de equivalencia ..
23.2. Equivalencia dinamicas y dos aplica
23.2.1. Aplicacién #1: arboles de recubrimiento minimo :
332.2, Aplicacién #2: el problema del antecesor comiin ms prOximo.-
579
580
583
587
587
588
589
591
593
594
597
613
613
613
614
615
616
618
618
620
626
629
629
630
630
630
631
633
633
634
635
637