Volver a los cursos
AI028 Universitario

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.

4.7
24.0h
1028 estudiantes
8 lessons
0 me gusta
Inteligencia Artificial
Comenzar a aprender

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

  1. 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.
  2. Dominar el uso de los tipos de datos integrados de Python (listas, tuplas, conjuntos, diccionarios) y estructuras de control (bucles, ramificaciones, manejo de excepciones).
  3. 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.
  4. 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.
  5. 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() y pop(i).
  6. Capacidad de validación de rendimiento: poder diseñar experimentos usando el módulo timeit para verificar la coherencia entre la complejidad teórica y el tiempo real de ejecución.
  7. Comprender y distinguir las características lógicas de estructuras lineales de datos (pila, cola, cola doble, lista).
  8. Ser capaz de implementar pilas, colas y colas dobles personalizadas usando colecciones básicas de Python (como listas).
  9. 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).
  10. 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.

Lecciones

Lesson

This lesson introduces the core principles of computer science, focusing on problem-solving through algorithms, procedural abstraction, and Python’s object-oriented nature. Students will learn to manage complexity by leveraging Python’s dynamic variable references, efficient built-in data structures, and robust error-handling techniques to build reliable, scalable software.

本课程深入探讨了算法分析的核心工具——大O记法,通过异序词检测案例展示了从暴力法到计数法的性能优化过程。学习重点在于理解不同操作(如列表索引与pop操作)的复杂度差异,并掌握如何通过空间换时间及选择合适的数据结构来提升程序效率。

This lesson introduces linear data structures and the concept of Abstract Data Types (ADTs), focusing on the stack as a fundamental LIFO (Last-In, First-Out) structure. Students will learn to implement stacks in Python and apply them to complex tasks, including converting infix expressions to postfix notation and evaluating those expressions efficiently.

本课程深入探讨了递归算法的核心原理,重点讲解了递归三原则(基准情况、状态改变、自我调用)以及递归与系统调用栈之间的内在联系。通过进制转换、汉诺塔及动态规划等案例,学生将学习如何将复杂问题拆解为自相似的子问题,并掌握从递归思维向高效动态规划算法的进阶转换。

This lesson explores fundamental search and retrieval algorithms, progressing from $O(n)$ sequential search to the $O(\log n)$ efficiency of binary search and the $O(1)$ potential of hash tables. Students learn to optimize data access through divide-and-conquer strategies, sophisticated hash function design, and collision-handling techniques to build efficient, dictionary-like data structures.

This lesson explores the hierarchical and recursive nature of tree data structures, covering fundamental terminology, implementation methods like nested lists and object-oriented references, and the construction of expression trees. It also introduces essential tree traversal algorithms—preorder, inorder, and postorder—and explains how these recursive patterns are applied to tasks like file system analysis and AVL tree balancing.

This lesson introduces graph theory as a powerful tool for modeling real-world problems by abstracting entities as vertices and relationships as edges. Students will learn to implement graphs using adjacency lists, compare storage efficiency, and master the Breadth-First Search (BFS) algorithm to solve pathfinding and state-space challenges.

This lesson explores the memory efficiency of Python's ArrayList, explaining how amortized analysis ensures $O(1)$ performance for append operations through strategic over-allocation. It also covers the mathematical foundations of RSA encryption, demonstrating how modular exponentiation and divide-and-conquer algorithms optimize complex calculations for secure data processing.