Análise de Estruturas de Dados e Algoritmos em Python (2ª Edição)
Este livro é um clássico sobre estruturas de dados e algoritmos utilizando Python. Aborda revisão dos fundamentos do Python, análise de algoritmos (notação O grande), estruturas de dados básicas (pilha, fila, lista), recursão, busca e ordenação, algoritmos de árvores e grafos. Com listas práticas de código, ajuda os leitores a entender como implementar eficientemente diversos tipos abstratos de dados em Python.
Visão Geral do Curso
📚 Resumo do Conteúdo
Este livro é um clássico texto sobre estruturas de dados e algoritmos usando Python. Cobertura inclui revisão básica de Python, análise de algoritmos (notação O grande), estruturas de dados básicas (pilha, fila, lista), recursão, busca e ordenação, algoritmos de árvores e grafos. Através de listas práticas de código, ajuda os leitores a compreender como implementar eficientemente diversos tipos abstratos de dados em Python.
Apenas ao dominar estruturas de dados e algoritmos é possível realmente dominar o Python.
Autor: Bradley Miller (Professor Emérito de Ciência da Computação na Luther College, EUA) e David Ranum (Engenheiro de Software Cognitivo IBM Watson)
Agradecimentos: Agradeço aos colegas Steve Hubbard por fornecer feedback extenso para a 1ª edição e novos materiais para a nova versão, bem como a colegas de todo o mundo que enviaram correções e sugestões por e-mail. Agradeço também aos funcionários Mary, Bob e outros da cafeteria Java John's em Decora, por permitir que nos tornássemos "escritores residentes" durante nossas férias. Além disso, agradeço à equipe da Franklin, Beedle & Associates (especialmente Jim Leisy e Tom Sumner) pela agradável colaboração. Por fim, agradeço especialmente às nossas esposas, Jane Miller e Brenda Ranum, cujo amor e apoio tornaram este livro uma realidade.
🎯 Objetivos de Aprendizagem
- Compreender a relação entre ciência da computação, algoritmos e programação, além de dominar os conceitos de tipos abstratos de dados (ADT) e ocultação de informações.
- Dominar o uso dos tipos de dados embutidos em Python (listas, tuplas, conjuntos, dicionários) e estruturas de controle (laços, ramificações, tratamento de exceções).
- Compreender os pilares da programação orientada a objetos em Python: definição de classes, métodos construtores, sobrecarga de operadores (como adição de frações), aplicação do algoritmo de Euclides e diferença entre igualdade profunda e superficial.
- Comparação de múltiplas soluções de algoritmos: explicar as quatro abordagens para detecção de anagramas (contagem, ordenação, força bruta, contagem de frequência) e seus respectivos tempos de complexidade.
- Análise quantitativa de desempenho em containers Python: dominar a eficiência Big O das operações principais em listas (List) e dicionários (Dict), diferenciando o desempenho de
pop()epop(i). - Capacidade de validação de desempenho: utilizar o módulo
timeitpara projetar experimentos e validar a consistência entre complexidade teórica e tempo real de execução. - Compreender e distinguir as características lógicas das estruturas lineares (pilha, fila, deque, lista).
- Implementar pilhas, filas e deques personalizados usando coleções básicas do Python (como listas).
- Aplicar pilhas no processamento de expressões (conversão de notação infixada para pós-fixa e avaliação pós-fixa) e filas na simulação de sistemas (simulação de impressora).
- Dominar os três princípios centrais da recursão: identificar e escrever funções recursivas com caso base, evolução de estado e chamada recursiva.
Aulas 共 8 课时 · 预计 24.0h
Aulas
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.