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.