Análisis de Estructuras de Datos y Algoritmos con Python (2ª edición)
Este libro es un clásico texto que explica estructuras de datos y algoritmos utilizando Python. Cubre repaso de los fundamentos de Python, análisis de algoritmos (notación O grande), estructuras de datos básicas (pilas, colas, listas), recursividad, búsqueda y ordenamiento, algoritmos de árboles y grafos. A través de listas prácticas de código, ayuda a los lectores a comprender cómo implementar eficientemente diversos tipos de datos abstractos en Python.
Descripción del curso
Resumen del contenido
Este libro es un clásico texto de enseñanza sobre estructuras de datos y algoritmos utilizando Python. Cubre repaso de los fundamentos de Python, análisis de algoritmos (notación O grande), estructuras de datos básicas (pila, cola, lista), recursividad, búsqueda y ordenamiento, algoritmos de árboles y grafos. A través de listas de código práctico, ayuda a los lectores a comprender cómo implementar eficientemente diversos tipos abstractos de datos mediante Python.
Solo comprendiendo profundamente las estructuras de datos y los algoritmos se puede dominar realmente Python.
Autor: Bradley Miller (profesor emérito de ciencias de la computación en el Ludus College, Estados Unidos), David Ranum (ingeniero de software cognitivo en IBM Watson)
Agradecimientos: Gracias a nuestros colegas Steve Hubbard por sus valiosos comentarios sobre la primera edición y nuevos materiales para esta nueva versión; también gracias a colegas de todo el mundo que nos han enviado correcciones y sugerencias por correo electrónico. Agradecemos especialmente a Mary, Bob y otros empleados del café Java John's en Decora, por permitirnos convertirnos en "autores residentes" durante nuestras vacaciones. Asimismo, agradecemos la agradable colaboración con los empleados de Franklin, Beedle & Associates (especialmente Jim Leisy y Tom Sumner). Finalmente, agradecemos especialmente a nuestras esposas, Jane Miller y Brenda Ranum, cuyo amor y apoyo hicieron posible la realización de este libro.
Objetivos de aprendizaje
- Comprender la relación entre ciencia de la computación, algoritmos y programación, y dominar los conceptos de tipos abstractos de datos (ADT) y ocultación de información.
- Dominar el uso de los tipos de datos integrados de Python (listas, tuplas, conjuntos, diccionarios) y estructuras de control (bucles, ramificaciones, manejo de excepciones).
- Entender los fundamentos de la programación orientada a objetos en Python: definición de clases, métodos constructor, sobrecarga de operadores (como la suma de fracciones), aplicación del algoritmo de Euclides, y diferencias entre igualdad profunda y superficial.
- Comparación de múltiples soluciones algorítmicas: ser capaz de explicar cuatro enfoques para detectar anagramas (conteo, ordenación, fuerza bruta, conteo) junto con sus respectivas complejidades temporales.
- Cuantificación del rendimiento de contenedores en Python: conocer la eficiencia en notación O grande de operaciones principales en listas (List) y diccionarios (Dict) de Python, y distinguir la diferencia de rendimiento entre
pop()ypop(i). - Capacidad de validación de rendimiento: poder diseñar experimentos usando el módulo
timeitpara verificar la coherencia entre la complejidad teórica y el tiempo real de ejecución. - Comprender y distinguir las características lógicas de estructuras lineales de datos (pila, cola, cola doble, lista).
- Ser capaz de implementar pilas, colas y colas dobles personalizadas usando colecciones básicas de Python (como listas).
- Dominar aplicaciones de pilas en procesamiento de expresiones (conversión de notación infija a postfija, evaluación postfija) y colas en simulaciones de sistemas (simulación de impresora).
- Dominar los tres principios clave de la recursividad: ser capaz de identificar y escribir funciones recursivas que incluyan caso base, evolución de estado y llamada recursiva.