Algoritmos a Fondo con Implementaciones en C y Java – Pablo Augusto – 1ra Edición

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

Ver más
  • 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 try—catch-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
  • Citar Libro

Descargar Algoritmos a Fondo con Implementaciones en C y Java

Tipo de Archivo
Idioma
Descargar RAR
Descargar PDF
Páginas
Tamaño
Libro
Español
577 pag.
3 mb

Déjanos un comentario

No hay comentarios

guest
0 Comentarios
Comentarios en línea
Ver todos los comentarios
0
Nos encantaría conocer tu opinión, comenta.x