Descripción
En el vasto universo de la ciencia de la computación, los algoritmos son la piedra angular que impulsa el funcionamiento de las aplicaciones y sistemas modernos. Comprender los algoritmos y ser capaz de implementarlos de manera eficiente es una habilidad esencial para cualquier desarrollador de software. En este artículo, nos sumergiremos en el libro «Algoritmos a Fondo con Implementaciones en C y Java», escrito por Pablo Augusto. Exploraremos las profundidades de esta obra, que se ha convertido en un recurso invaluable para estudiantes, profesionales y entusiastas de la programación en su búsqueda de dominar los algoritmos.
Este libro está diseñado para cubrir las necesidades de los alumnos universitarios que cursan las materias de algoritmos 1 2 y 3. Comienza desde cero explicando los conceptos de lógica algorítmica y programación estructurada y llega hasta el análisis, diseño e implementación de algoritmos complejos y estructuras de datos dinámicas no lineales. «Algoritmos a Fondo con Implementaciones en C y Java» se destaca por su enfoque didáctico y completo para enseñar algoritmos. Desde los fundamentos básicos hasta algoritmos más complejos, el libro cubre una amplia gama de conceptos y técnicas. El autor utiliza un lenguaje claro y conciso, evitando la jerga técnica innecesaria y enfocándose en transmitir el conocimiento de manera accesible para todos los niveles de experiencia.
Una de las fortalezas de este libro es la inclusión de implementaciones de algoritmos en dos lenguajes de programación ampliamente utilizados: C y Java. Esta elección permite a los lectores aprender y comparar las diferencias en la implementación de algoritmos en ambos lenguajes. Además, brinda una excelente oportunidad para mejorar las habilidades de programación en ambos entornos, ya que se incluyen explicaciones paso a paso y ejemplos prácticos para cada algoritmo.
«Algoritmos a Fondo con Implementaciones en C y Java» no solo se limita a la teoría de los algoritmos, sino que también se enfoca en su aplicación práctica. El libro presenta una amplia variedad de problemas y desafíos reales que pueden ser resueltos utilizando los algoritmos discutidos. Esto permite a los lectores comprender cómo aplicar eficazmente los algoritmos en situaciones del mundo real y desarrollar habilidades de resolución de problemas.
Además de su valor educativo, este libro se convierte en una valiosa herramienta para el crecimiento profesional de los desarrolladores de software. Los algoritmos son fundamentales en entrevistas técnicas y evaluaciones de habilidades en la industria, y dominarlos puede marcar la diferencia en la búsqueda de oportunidades laborales. «Algoritmos a Fondo con Implementaciones en C y Java» proporciona una base sólida para enfrentar estos desafíos y avanzar en la carrera profesional.
Modulo 1 Programación estructurada
1. Introducción a los algoritmos y a la programación de computadoras.1
1.1 Introducción.2
1.2 Concepto de algoritmo.2
1.2.1 Definición de algoritmo y problema.2
1.2.2 Análisis del enunciado de un problema.3
1.2.2.1 Análisis del problema.3
1.2.2.2 Datos de entrada.3
1.2.2.3 Datos de salida.4
1.2.3 Memoria y operaciones aritméticas y lógicas.4
1.2.4 Teorema de la programación estructurada.4
1.3 Conceptos de programación.5
1.3.1 Lenguajes de programación.5
1.3.2 Codificación de un algoritmo.6
1.3.3 Bibliotecas de funciones.6
1.3.4 Programas de computación.6
1.3.5 Consola.7
1.3.6 Entrada y salida de datos.7
1.3.7 Lenguajes algorítmicos.7
1.3.8 Pseudocódigo.7
1.4 Representación gráfica de algoritmos.7
1.4.1 Representación gráfica de la estructura secuencial o acción simple.8
1.4.2 Representación gráfica de la estructura de decisión.8
1.4.3 Representación gráfica de la estructura de repetición.. 8
1.4.4 Representación gráfica de módulos o funciones.9
1.5 Nuestro primer programa.11
1.5.1 Codificación del algoritmo utilizando el lenguaje C.11
1.5.2 El archivo de código fuente.12
1.5.3 Comentarios en el código fuente.12
1.5.4 La compilación y el programa ejecutable.13
1.5.5 El entorno integrado de desarrollo (IDE) .13
1.6 La memoria de la computadora.14
1.6.1 El byte.15
1.6.2 Conversión numérica: de base 2 a base 10.15
1.6.3 Dimensionamiento de los datos.15
1.6.4 Los números negativos.16
1.6.5 Los caracteres.16
1.7 Las variables.17
1.7.1 Convención de nomenclatura para variables.17
1.7.2 Los tipos de datos.18
1.7.3 Los tipos de datos provistos por el lenguaje C.18
1.7.3.1 Notación húngara.19
1.7.4 La función de biblioteca printf.19
1.7.5 La función de biblioteca scanf.20
1.7.6 El operador de dirección &.21
1.7.7 Las constantes.21
1.7.7.1 La directiva de preprocesador #define.21
1.7.7.2 El modificador const.22
1.7.8 Nomenclatura para las constantes.22
1.8 Operadores aritméticos.22
1.8.1 Conversión de tipos de datos (type casting).25
1.8.2 El operador % (módulo o resto).25
1.8.3 Operadores relaciónales.28
1.9 Expresiones lógicas.29
1.9.1 Operadores lógicos.29
1.10 Operadores de bits.30
1.10.1 Representación binaria de los tipos enteros.30
1.10.2 Operadores de desplazamiento de bits (» y «).31
1.10.3 Representación hexadecimal.31 Representación hexadecimal de números enteros negativos.32
1.10.4 Representación octal.32
1.10.5 Operadores lógicos de bits.32
1.11 Resumen.33
1.12 Contenido de la página Web de apoyo.33
1.12.1 Mapa conceptual.33
1.12.2 Autoevaluaciones.33
1.12.3 Videotutorial.33
1.12.3.1 Instalación y uso de Eclipse para C.33
1.12.4 Presentaciones*.33
2. Estructuras básicas de control y lógica algorítmica.35
2.1 Introducción.36
2.2 Estructura secuencial.36
2.3 Estructura de decisión.36
2.3.1 Estructuras de decisión anidadas.38
2.3.2 Selección en línea o if-inline.41
2.3.3 Macros.42
2.3.4 Selección múltiple (switch).43
2.3.5 Asignación de valores alfanuméricos (función strcpy).45
2.4 Estructura de repetición.47
2.4.1 Estructuras de repetición inexactas.47
2.4.2 Estructuras de repetición exactas.49
2.4.3 Contadores.51
2.4.4 Acumuladores.52
2.4.5 Seguimiento del algoritmo y prueba de escritorio.... 53
2.4.6 El debugger, la herramienta de depuración.54
2.4.7 Estructuras de repetición anidadas.57
2.4.8 Manejo de valores booleanos.59
2.4.9 Máximos y mínimos.60
2.5 Contextualización del problema.63
2.6 Resumen.69 Algoritmos a fondo - Ing. Pablo A. Sznajdleder
2.7 Contenido de la página Web de apoyo.69
2.7.1 Mapa conceptual.69
2.7.2 Autoevaluaciones.69
2.7.3 Videotutorial.69
2.7.3.1 Uso del debugger para depurar programa.... 69
2.7.4 Presentaciones*.69
3. Funciones, modularización y metodología top-down... 71
3.1 Introducción.72
3.2 Conceptos iniciales.72
3.2.1 Metodología top-down.72
3.2.2 Módulos o subprogramas.72
3.2.3 Funciones.72
3.2.4 Funciones de biblioteca.73
3.2.5 Invocación a funciones de biblioteca.73
3.3 Funciones definidas por el programador.73
3.3.1 Prototipo de una función.74
3.3.2 Invocar a una función.74
3.3.3 Desarrollo de una función.75
3.3.4 Convención de nomenclatura para funciones.76
3.3.5 Funciones que no retornan ningún valor (tipo de datos void).76
3.3.6 Archivos de cabecera (.h).76
3.3.7 Archivos de funciones (.c).76
3.4 Legibilidad y reusabllidad del código.77
3.4.1 Abstracción.78
3.4.2 Argumentos y parámetros.80
3.5 Alcance de las variables (scope).82
3.5.1 Variables locales.82
3.5.2 Variables globales.83
3.6 Argumentos por valor y referencia.84
3.6.1 Punteros y direcciones de memoria.85
3.6.2 El operador de ¡ndirección * (asterisco).85
3.6.3 Argumentos por referencia.86
3.6.4 Funciones que mantienen su estado.91
3.6.5 Variables estáticas (modificador static).94
3.7 Resumen.96
3.8 Contenido de la página Web de apoyo.97
3.8.1 Mapa conceptual.97
3.8.2 Autoevaluaciones.97
3.8.3 Videotutorial.97
3.8.3.1 Mantener archivos de funciones separados del programa principal.97
3.8.4 Presentaciones*.97
4. Tipos de datos alfanuméricos.99
4.1 Introducción.100
4.2 Carácter.100
4.2.1 El tipo de datos char.100
4.2.2 Funciones para tratamiento de caracteres.101
4.2.2.1 Determinar si un carácter es un dígito numérico (función esDigito).101
4.2.2.2 Determinar si un carácter es una letra (función esLetra).101
4.2.2.3 Determinar si un carácter es una letra mayúscula o minúscula (funciones esMayuscula y esMinuscula).102
4.2.2.4 Convertir un carácter a minúscula (función aMinuscula).102
4.2.2.5 Convertir un carácter a mayúscula (función aMayuscula).102
4.3 Cadenas de caracteres.103
4.3.1 El carácter '' (barra cero).104
4.3.2 Longitud de una cadena.105
4.3.2.1 La cadena vacía.105
4.4 Tratamiento de cadenas de caracteres.106
4.4.1 Inicialización de una cadena de caracteres.106
4.4.2 Funciones para el tratamiento de cadenas de caracteres.107
4.4.2.1 Asignar o copiar una cadena a un char[] (función copiarCadena).107
4.4.2.2 Determinar la longitud de una cadena (función longitud).108
4.4.2.3 Determinar si una cadena es vacía (función esVacia).109
4.4.2.4 Concatenar cadenas (función concatenarCadena).110
4.4.2.5 Comparar cadenas (función compararCadenas).111
4.4.2.6 Convertir cadenas a números enteros (función cadenaAEntero).113
4.5 Funciones de biblioteca para manejo de cadenas.115
4.5.1 Otras funciones de biblioteca.116
4.5.1.1 Dar formato a una cadena (función sprintf).116
4.5.1.2 Interpretar (parsear) el formato de una cadena (función sscanf).116
4.6 Resumen.117
4.7 Contenido de la página Web de apoyo.117
4.7.1 Mapa conceptual.117
4.7.2 Autoevaluaciones.117
4.7.3 Presentaciones*.117
5. Punteros a carácter.119
5.1 Introducción.120
5.2 Conceptos iniciales.120
5.2.1 Aritmética de direcciones.121
5.2.2 Prefijos y sufijos.122
5.2.2.1 Determinar si una cadena es prefijo de (función esPrefijo).122
5.2.2.2 Determinar si una cadena es sufijo de otra (función esSufijo).123
5.3 Funciones que retornan cadenas.124
5.3.1 La función malloc.125
5.3.2 Subcadenas (función substring).126
5.3.2.1 Eliminar los espacios ubicados a la izquierda (función Itrim).129
5.3.2.2 Eliminar los espacios ubicados a la derecha (función rtrim).130
5 3.2.3 Eliminar los espacios en ambos extremos de la cadena (función trim).131
5.3.3 Función de biblioteca strtok.132
5.4 Resumen.134
5.5 Contenido de la página Web de apoyo.134
5.5.1 Mapa conceptual.134
5.5.2 Autoevaluaciones.134
5.5.3 Presentaciones*.134
6. Punteros, arrays y aritmética de direcciones.135
6.1 Introducción.136
6.2 Punteros y direcciones de memoria.136
6.2.1 El operador de dirección &.136
6.2.2 Los punteros.137
6.2.3 El operador de indirección *.137
6.2.4 Funciones que reciben punteros.137
6.3 Arrays.139
6.3.1 La capacidad del array.139
6.3.2 Acceso a los elementos de un array.139
6.3.3 Dimensionamiento e inicialización de arrays.141
6.3.4 Crear arrays dinámicamente (funciones malloc y sizeof).142
6.3.5 Punteros genéricos void*.142
6.4 Relación entre arrays y punteros.143
6.4.1 Aritmética de direcciones.143
6.5 Código compacto y eficiente.144
6.5.1 Operadores de incremento y decremento (operadores unarios).144
6.5.2 Pre y post incremento y decremento.144
6.5.3 Operadores de asignación.145
6.5.4 Incremento de punteros.146
6.5.4.1 Implementación compacta de la función copiarCadena.146
6.5.4.2 Implementación compacta de la función longitud.147
6.6 Arrays de cadenas.148
6.6.1 Argumentos en línea de comandos (int argc, char* argvO).151
6.7 Resumen.153
6.8 Contenido de la página Web de apoyo.153
6.8.1 Mapa conceptual.153
6.8.2 Autoevaluaciones.153
6.8.3 Videotutorial.153
6.8.3.1 Pasar argumentos en línea de comandos con Eclipse.153
6.8.4 Presentaciones*.153
7. Tipos de datos estructurados.155
7.1 Introducción.156
7.2 Acceso directo sobre arrays.156
7.3 Acceso indirecto sobre arrays.163
7.4 Operaciones sobre arrays.164
7.4.1 Capacidad vs. longitud de un array.164
7.4.2 Agregar un elemento al array.165
7.4.3 Búsqueda secuencial.166
7.4.4 Buscar y agregar.168
7.4.5 Insertar un elemento.172
7.4.6 Eliminar un elemento.174
7.4.7 Insertar en orden.176
7.4.8 Buscar en orden.178
7.4.9 Buscar e insertar en orden.179
7.4.10 Ordenar arrays (algoritmo de la burbuja).180
7.4.11 Búsqueda binaria o dicotómica.183
7.4.11.1 Implementación.183
7.5 Arrays multidimensionales.188
7.5.1 Arrays bidimensionales (matrices).189
7.5.1.1 Recorrer una matriz por fila/columna.190
7.5.1.2 Recorrer una matriz por columna/fila.190
7.5.2 Arrays tridimensionales (cubos).192
7.6 Tipos de datos definidos por el programador.192
7.6.1 Introducción al encapsulamiento a través de TADs... 193
7.6.2 Estructuras o registros.195
7.6.3 Representación gráfica de una estructura.196
7.6.4 Estructuras anidadas.196
7.6.5 Estructuras con campos de tipo array.197
7.6.6 Punteros a estructuras.197
7.6.6.1 El operador "flecha" ->.198
7.6.7 Arrays de estructuras.198
7.6.8 Estructuras con campos de tipo array de estructuras.199
7.7 Resumen.199
7.8 Contenido de la página Web de apoyo.200
7.8.1 Mapa conceptual.200
7.8.2 Autoevaluaciones.200
7.8.3 Videotutoriales.200
7.8.3.1 Algoritmo de la burbuja.200
7.8.3.2 Algoritmo de la búsqueda binaria.200
7.8.4 Presentaciones*.200
8. Operaciones sobre archivos.201
8.1 Introducción.202
8.1.1 Memoria principal o memoria RAM de la computadora.202
8.1.2 Medios de almacenamiento (memoria secundaria)... 202
8.2 Archivos.202
8.2.1 Abrir un archivo.203
8.2.2 Escribir datos en un archivo.203
8.2.3 Leer datos desde un archivo.204
8.2.4 El identificador de posición (puntero).205
8.2.5 Representación gráfica.206
8.2.6 Valor actual del identificador de posición ( función ftell).206
8.2.7 Manipular el valor del identificador de posición (función fseek).207
8.2.8 Calcular el tamaño de un archivo.208
8.2.9 Archivos de texto vs. archivos binarios.209
8.3 Archivos de registros.209
8.3.1 Archivos de estructuras.210
8.3.1.1 Grabar estructuras (registros) en un archivo. 210
8.3.1.2 Leer estructuras (registros) desde un archivo. 211
8.3.1.3 Legibilidad del código fuente.212
8.3.2 Acceso directo a registros.213
8.3.2.1 Acceso directo para lectura.214
8.3.2.2 Acceso directo para escritura.215
8.3.2.3 Agregar un registro al final del archivo.216
8.3.3 Calcular la cantidad de registros que tiene un archivo.217
8.4 Lectura y escritura en bloques (buffers).217
8.5 Archivos de texto.219
8.5.1 Apertura de un archivo de texto.220
8.5.2 Leer y escribir caracteres (funciones getc y putc) ....220
8.5.3 Escribir líneas (función fprintf) .221
8.5.4 Leer líneas (función fgets).221
8.5.5 Leer datos formateados (función fscanf).222
8.6 Operaciones lógicas sobre archivos.223
8.6.1 Limitaciones de los archivos secuenciales.223
8.6.2 Ordenamiento de archivos en memoria.224
8.6.3 Relación entre el número de byte y el número de registro.227
8.6.4 Búsqueda binaria sobre archivos.227
8.6.5 Indexación.228
8 .6.6 Indexación de archivos.229
8.6.7 Eliminar registros en un archivo (bajas lógicas) .233
8.6.8 Bajas lógicas con soporte en un archivo auxiliar.235
8.7 Resumen.236
8.8 Contenido de la página Web de apoyo.236
8.8.1 Mapa conceptual.236
8.8.2 Autoevaluaciones.236
8.8.3 Videotutoriales.236
8.8.3.1 Leer y escribir un archivo.236
8.8.3.2 Leer y escribir un archivo de registros.236
8.8.4 Presentaciones*.236
9.1 Introducción
9.2 Capas de abstracción
9.3 Tipos de datos
9.4 Resumen
9.5 Contenido de la página Web de apoyo
10. Análisis de ejercicios integradores 239
10.3 Matriz de pilas 307
10.1 Introducción 240
11.11 Resumen 311
10.2 Problemas con corte de control.240
10.2.1 Archivos de novedades vs. maestros.246
10.2.2 Uso de arrays auxiliares.249
10.2.3 Mantener archivos (pequeños) memoria.250
10.3 Apareo de archivos.256
10.3.1 Apareo de archivos con corte de control .261
10.4 Resumen.266
10.5 Contenido de la página Web de apoyo.266
10.5.1 Mapa conceptual.266
10.5.2 Autoevaluaciones.266
10.5.3 Presentaciones*.266
11. Estructuras de datos dinámicas lineales.267
11.1 Introducción.268
11.2 Estructuras estáticas.269
11.3 Estructuras dinámicas .269
11.3.1 El nodo.269
11.4 Listas enlazadas.269
11.4.1 Estructuras de datos dinámicas lineales.270
11.4.2 Estructuras de datos dinámicas no lineales.270
11.4.3 Punteros por referencia.270
11.5 Operaciones sobre listas enlazadas.271
11.5.1 Agregar un elemento nuevo al final de una lista.272
11.5.2 Recorrer una lista para mostrar su contenido.276
11.5.3 Liberar la memoria que utilizan los nodos de una lista enlazada.276
11.5.4 Determinar si la lista contiene un valor determinado.278
11.5.5 Eliminar un elemento de la lista.280
11.5.6 Insertar un valor respetando el ordenamiento de la lista.283
11.5.7 Insertar un valor solo si la lista aún no contiene .... 285
11.6 Estructura Pila (LIFO).286
11.6.1 Implementación de la estructura pila.286
11.6.2 Operaciones poner (push) y sacar (pop).286
11.6.3 Determinar si la pila tiene elementos o no.289
11.7 Estructura Cola (FIFO).289
11.7.1 Lista enlazada circular.290
11.7.2 Implementar una cola sobre una lista circular.290
11.7.3 Operaciones encolar y desencolar.292
11.8 Lista doblemente enlazada.294
11.9 Nodos que contienen múltiples datos.295
11.9.1 Nodo con múltiples campos.295
11.9.2 Nodo con un único valor de tipo struct.296
11.10 Estructuras de datos combinadas.297
11.10.1 Lista y sublista.298
11.10.2 Arrays de colas.300
11.12 Contenido de la página Web de apoyo.311
11.12.1 Mapa conceptual.311
11.12.2 Autoevaluaciones.311
11.12.3 Presentaciones*.311
Modulo 2 Programación orientada a objetos
12. Encapsulamiento a través de clases y objetos.313
12.1 Introducción.314
12.2 Clases y objetos.314
12.2.1 Las clases.314
12.2.2 Miembros de la clase.315
12.2.3 Interfaz y encapsulamiento.316
12.2.4 Estructura de una clase.317
12.2.5 El constructor y el destructor.318
12.2.6 Los métodos.319
12.2.7 Los objetos.319
12.2.8 Instanclar objetos.320
12.2.9 Operadores new, delete y punteros a objetos.320
12.2.10 Sobrecarga de métodos.320
12.3 Encapsulamiento de estructuras lineales .321
12.3.1 Análisis de la clase Pila.321
12.3.2 Templates y generalizaciones.323
12.4 El lenguaje de programación Java.326
12.4.1 El programa principal en Java.328
12.4.2 Templates en C++, generics en Java.328
12.4.3 Los wrappers (envoltorios) de los tipos de datos primitivos.330
12.4.4 Autoboxing.330
12.5 Resumen.331
12.6 Contenido de la página Web de apoyo.331
12.6.1 Mapa conceptual.331
12.6.2 Autoevaluaciones.331
12.6.3 Presentaciones*.331
13. Introducción al lenguaje de programación Java.333
13.1 Introducción.334
13.2 Comencemos a programar.334
13.2.1 El Entorno Integrado de Desarrollo (IDE) .335
13.2.2 Entrada y salida estándar.335
13.2.3 Comentarios en el código fuente.336
13.3 Tipos de datos, operadores y estructuras de control.337
13.3.1 El bit de signo para los tipos de datos enteros.337
13.3.2 El compilador y la máquina virtual (JVM o JRE).337
13.3.3 Estructuras de decisión.337
13.3.4 Estructuras Iterativas.340
13.3.5 El tipo de datos boolean y las expresiones lógicas... 342
13.3.6 Las constantes.343
13.3.7 Arrays.344
13.3.8 Matrices.346
13.3.9 Literales de cadenas de caracteres.348
13.3.10 Caracteres especiales.350
13.3.11 Argumentos en línea de comandos.351
13.4 Tratamiento de cadenas de caracteres.351
13.4.1 Acceso a los caracteres de un string.351
13.4.2 Mayúsculas y minúsculas.352
13.4.3 Ocurrencias de caracteres.353
13.4.4 Subcadenas.353
13.4.5 Prefijos y sufijos.354
13.4.6 Posición de un substring dentro de la cadena.354
13.4.7 Conversión entre números y cadenas.355
13.4.8 Representación en diferentes bases numéricas.355
13.4.9 La clase StrlngTokenizer.356
13.4.10 Comparación de cadenas.357
13.5 Resumen.359
13.6 Contenido de la página Web de apoyo.359
13.6.1 Mapa conceptual.359
13.6.2 Autoevaluaciones.359
13.6.3 Vldeotutorial.359
13.6.3.1 Instalar y utilizar Eclipse para Java.359
13.6.4 Presentaciones*.359
14. Programación orientada a objetos.361
14.1 Introducción.362
14.2 Clases y objetos.362
14.2.1 Los métodos.363
14.2.2 Herencia y sobrescrltura de métodos.365
14.2.3 El método toStrlng.365
14.2.4 El método equals.366
14.2.5 Declarar y "crear objetos.367
14.2.6 El constructor.368
14.2.7 Repaso de lo visto hasta aquí.369
14.2.8 Convenciones de nomenclatura.370
14.2.8.1 Los nombres de las clases.370
14.2.8.2 Los nombres de los métodos.370
14.2.8.3 Los nombres de los atribuiros.371
14.2.8.4 Los nombres de las variables de instancia.371
14.2.8.5 Los nombres de las constantes.371
14.2.9 Sobrecarga de métodos.371
14.2.10 Encapsulamiento.374
14.2.11 Visibilidad de los métodos y los atributos.376
14.2.12 Packages (paquetes).377
14.2.13 Estructura de paquetes y la variable CLASSPATH.... 377
14.2.14 LasAPIs (Application Programmlng Interface).378
14.2.15 Representación gráfica UML.379
14.2.16 Importar clases de otros paquetes.380
14.3 Herencia y polimorfismo.380
14.3.1 Polimorfismo.383
14.3.2 Constructores de subclases.385
14.3.3 La referencia super.385
14.3.4 La referencia this.388
14.3.5 Clases abstractas.389
14.3.6 Constructores de clases abstractas.392
14.3.7 Instancias.395
14.3.8 Variables de instancia.396
14.3.9 Variables de la clase.399
14.3.10 El garbage collector (recolector de residuos).399
14.3.11 El método finalize.399
14.3.12 Constantes.400
14.3.13 Métodos de la clase.400
14.3.14 Clases utilitarias.403
14.3.15 Referencias estáticas.403
14.3.16 Colecciones (primera parte).404
14.3.17 Clases genéricas.409
14.4 Interfaces.412
14.4.1 Desacoplamiento de clases.413
14.4.2 El patrón de diseño de la factoría de objetos.415
14.4.3 Abstracción a través de interfaces.416
14.4.4 La interface Comparable.416
14.4.5 Desacoplar aún más.420
14.4.6 La ¡nterface Comparator.423
14.5 Colecciones de objetos.424
14.5.1 Cambio de ¡mplementación.426
14.5.2 El método Collectlons.sort.427
14.6 Excepciones.430
14.6.1 Errores lógicos vs. errores físicos.433
14.6.2 Excepciones declarativas y no declarativas.433
14.6.3 El bloque trycatch-finally.435
14.6.4 El método printStackTrace.438
14.7 Resumen.438
14.8 Contenido de la página Web de apoyo.438
14.8.1 Mapa conceptual.438
14.8.2 Autoevaluaciones.438
14.8.3 Videotutorial.438
14.8.3.1 Uso del javadoc.438
14.8.4 Presentaciones*.438
15. Estructuras de datos dinámicas lineales en Java.439
15.1 Introducción.440
15.2 Listas (implementaciones de List).440
15.2.1 La clase ArrayList.440
15.2.2 La clase LinkedList.442
15.2.3 Comparación entre ArrayList y LinkedList.443
15.2.4 Desarrollo de la clase Performance.443
15.2.5 Introducción al análisis de complejidad algorítmica... 444
15.2.5.1 Acceso aleatorio a los elementos de la colección.445
15.2.5.2 Eliminar un elemento de la colección.446
15.2.5.3 Insertar un elemento en la colección.448
15.2.6 Pilas y colas.448
15.3 Mapas (implementaciones de Map).449
15.3.1 Tablas de dispersión (Hashtable).449
15.3.2 Iterar una hashtable.451
15.3.3 Iterar una hashtable respetando el orden en que se agregaron los datos.452
15.4 Estructuras de datos combinadas.454
15.4.1 Ejemplo de una situación real.455
15.5 Resumen.459
15.6 Contenido de la página Web de apoyo.459
15.6.1 Mapa conceptual.459
15.6.2 Autoevaluaciones.459
15.6.3 Presentaciones*.459
Modulo 3 Aplicación práctica
16. Compresión de archivos mediante el algoritmo de Huffman .461
16.1 Introducción
16.2 El algoritmo de Huffman
16.3 Aplicación práctica
16.4 Análisis de clases y objetos
16.5 Interfaces e implementaciones
16.6 Manejo de archivos en Java
16.7 Clases utilitarias
16.8 Resumen
16.9 Contenido de la página Web de apoyo
Modulo 4 Conceptos avanzados
17. Recursividad.463
17.1 Introducción.464
17.2 Conceptos iniciales.464
17.2.1 Funciones recursivas.464
17.2.2 Finalización de la recurslón.465
17.2.3 Invocación a funciones recursivas.465
17.2.4 Funcionamiento de la pila de llamadas (stack).467
17.2.5 Funciones recursivas vs. funciones Iterativas.470
17.3 Otros ejemplos de recursividad .471
17.4 Permutar los caracteres de una cadena.472
17.5 Búsqueda binaria.476
17.6 Ordenamiento por selección.478
17.7 La función de Fibonacci.480
17.7.1 Optimización del algoritmo recursivo de Fibonacci... 485
17.8 Resumen.486
17.9 Contenido de la página Web de apoyo.486
17.9.1 Mapa conceptual.486
17.9.2 Autoevaluaciones.486
17.9.3 Presentaciones*.486
18. Árboles.487
18.1 Introducción.488
18.1.1 Tipos de árbol.488
18.1.2 Implementación de la estructura de datos.488
18.2 Árbol binario.489
18.2.1 Niveles de un árbol binario.490
18.2.2 Recorrer los nodos de un árbol binario.490
18.2.3 Recorrido en amplitud o por niveles.490
18.2.4 Recorridos en profundidad (preorden, postorden e inorden).490
18.2.5 Implementación Iterativa del recorrido en preorden .. 492
18.2.6 Implementación Iterativa del recorrido en postorden 493
18.3 Árbol binario en Java, objetos.495
18.3.1 Enfoque basado en una clase utilitaria.496
18.3.2 Recorrido por niveles o en amplitud.497
18.3.3 Recorridos preorden, postorden e inorden.500
18.3.4 Recorrido iterativo.500
18.3.5 Iteradores.501
18.3.6 Iteradores vs. callback methods.503
18.3.7 Enfoque basado en objetos.504
18.4 Árbol Binario de Búsqueda.504
18.4.1 Crear un Árbol Binario de Búsqueda (ABB).504
18.4.2 Encapsulamiento de la lógica y la estructura de datos (clase Abb).507
18.4.3 Agregar un elemento al ABB (método agregar).508
18.4.4 Ordenar valores mediante un ABB (recorrido inOrden).509
18.4.5 Búsqueda de un elemento sobre un ABB (método buscar).510
18.4.6 Eliminar un elemento del ABB (método eliminar).512
18.5 Árbol n-ario.513
18.5.1 Nodo del árbol n-ario.514
18.5.2 Recorridos sobre un árbol n-ario.514
18.5.3 Permutar los caracteres de una cadena.515
18.5.4 Implementación de un AutoSuggest.516
18.6 Resumen.518
18.7 Contenido de la página Web de apoyo.519
18.7.1 Mapa conceptual.519
18.7.2 Autoevaluaciones.519
18.7.3 Presentaciones*.519
19. Complejidad algorítmica.521
19.1 Introducción.522
19.2 Conceptos iniciales.522
19.2.1 Análisis del algoritmo de la búsqueda secuencial.522
19.3 Notación O grande (cota superior asintótica).523
19.3.1 Análisis del algoritmo de la búsqueda binaria.524
19.3.2 Análisis del algoritmo de ordenamiento por burbujeo.526
19.4 Cota inferior (O) y cota ajustada asintótica (©).527
19.5 Resumen.527
19.6 Contenido de la página Web de apoyo.528
19.6.1 Mapa conceptual.528
19.6.2 Autoevaluaciones.528
19.6.3 Presentaciones*.528
20. Algoritmos de ordenamiento.529
20.1 Introducción.530
20.2 Bubble sort (ordenamiento por burbujeo).531
20.2.1 Bubble sort optimizado.534
20.3 Selection sort (ordenamiento por selección).534
20.4 Insertion sort (ordenamiento por inserción).535
20.5 Quicksort (ordenamiento rápido).536
20.5.1 Implementación utilizando arrays auxiliares.536
20.5.2 Implementación sin arrays auxiliares.537
20.6 Heapsort (ordenamiento por montículos).538
20.6.1 Árbol binario semicompleto.538
20.6.2 Representar un árbol binario semicompleto en un array. 538
20.6.3 Montículo (heap).539
20.6.4 Transformar un árbol binario semicompleto en un montículo.539
20.6.5 El algoritmo de ordenamiento por montículos.541
20.7 Shellsort (ordenamiento Shell).544
20.8 Binsort (ordenamiento por cajas).545
20.9 Radix sort (ordenamiento de raíz).546
20.9.1 Ordenar cadenas de caracteres con radix sort.547
20.10 Resumen.548
20.11 Contenido de la página Web de apoyo.548
20.11.1 Mapa conceptual.548
20.11.2 Autoevaluaciones.548
20.11.3 Videotutorial.548
20.11.3.1 Algoritmo heapsort, ordenamiento por montículos.548
20.11.4 Presentaciones*.548
21. Estrategia algorítmica.
21.1 Introducción
21.2 Divide y conquista
21.3 Greddy, algoritmos voraces
21.4 Programación dinámica
21.5 Resumen
21.6 Contenido de la página Web de apoyo
22. Algoritmos sobre gratos.
22.1 Introducción
22.2 Definición de grato
22.3 El problema de los caminos mínimos
22.4 Árbol de cubrimiento mínimo (MST)
22.5 Resumen
22.6 Contenido de la página Web de apoyo
Consulta los datos bibliográficos principales de esta edición para identificar correctamente el recurso, revisar su autoría y verificar detalles como ISBN, tema, subtema, archivo e idioma.
- Título: Algoritmos a Fondo con Implementaciones en C y Java
- Autor/es: Pablo Augusto
- Edición: 1ra Edición
- Año de edición: 2012
- Tipo de archivo: eBook
- Idioma: eBook en Español
- ISBN-13: 9789871609376
- ISBN-10: 987160937
- Subtema: Algoritmos y Estructuras de Datos | Programación en C | Programación en Java
Citar este libro
Preparando citaciones...
Aún no hay comentarios
Sé el primero en compartir tu opinión sobre este contenido.
Escribir un comentario