Algoritmos e Estruturas de Dados
Código
01063008Créditos ECTS
6Objetivos
- A. Analisar problemas computacionais e selecionar as estruturas de dados, as estratégias de conceção e os algoritmos mais adequados à sua resolução, fundamentando as opções tomadas.
- B. Implementar tipos de dados abstratos e algoritmos utilizando representações e técnicas de conceção adequadas.
- C. Analisar, testar e comparar algoritmos quanto à sua correção, complexidade temporal e espacial e adequação aos requisitos do problema.
- D. Conceber, implementar, testar e documentar soluções computacionais que integrem estruturas de dados e algoritmos, adotando boas práticas de desenvolvimento de software.
Programa
- Análise de algoritmos
1.1. Correção, medidas de desempenho e casos de análise
1.2 Complexidade temporal e espacial
1.3 Notação assintótica
1.4 Recorrências simples e introdução ao Teorema Mestre - Estratégias de conceção de algoritmos
2.1 Divisão e conquista
2.2 Algoritmos gulosos
2.3 Backtracking
2.4 Introdução à programação dinâmica - Tipos de Dados Abstratos
3.1 Conceito, especificação, interfaces (API) e implementações estáticas e dinâmicas
3.2 Estruturas lineares: listas, pilhas e filas
3.3 Conjuntos, multiconjuntos, dicionários e tabelas de dispersão
3.4 Árvores binárias de pesquisa, amontados e grafos - Algoritmos de pesquisa e ordenação
4.1 Pesquisa sequencial, binária, em árvores de pesquisa e em tabelas de dispersão
4.2 Algoritmos elementares e eficientes de ordenação - Algoritmos em grafos
5.1 Representações de grafos
5.2 Travessias em profundidade e em largura
5.3 Caminhos mínimos
5.4 Árvores geradoras mínimas
Métodos de Ensino
Ao longo da unidade curricular são utilizadas metodologias de ensino-aprendizagem diversificadas, articulando a apresentação dos fundamentos com a resolução de problemas e a experimentação prática.
Nas aulas teórico-práticas são apresentados e discutidos os conceitos fundamentais de algoritmos e estruturas de dados, recorrendo à análise comparativa de soluções, à resolução orientada de problemas e à demonstração de algoritmos com complexidade crescente. Estas atividades promovem a participação ativa, o raciocínio crítico e o feedback formativo.
Nas aulas práticas laboratoriais, os estudantes implementam, testam e avaliam algoritmos e estruturas de dados, seguindo uma abordagem de aprendizagem baseada em problemas (Problem-Based Learning). As atividades evoluem de exercícios de aplicação imediata para problemas de maior complexidade, promovendo o pensamento computacional, a abstração, a experimentação e a análise da eficiência das soluções.
No último terço do semestre é desenvolvido um projeto de aplicação, em pequenos grupos, que permite mobilizar de forma articulada os conhecimentos adquiridos na resolução de um problema computacional de pequena ou média dimensão. O projeto é acompanhado através de entregas faseadas, momentos de discussão e feedback, promovendo a melhoria progressiva da solução.
As horas de contacto assíncronas decorrem através do Moodle e incluem atividades orientadas de preparação e consolidação das aulas presenciais, designadamente leitura e exploração de recursos multimédia, quizzes com feedback automático, resolução de problemas, desafios de programação e atividades de apoio ao projeto. Estas atividades promovem a prática continuada, a autorregulação e a consolidação progressiva das aprendizagens.
São ainda promovidos momentos de trabalho colaborativo e discussão em grande grupo, incentivando a comunicação, a cooperação, a argumentação técnica e a reflexão crítica. O Moodle suporta a disponibilização de recursos, fóruns, submissões, acompanhamento do progresso e feedback formativo.
Bibliografia
Essencial:
- Lambert, K. A. (2019). Fundamentals of Python: Data structures (2nd ed.). Cengage. ISBN: 978-0-357-12275-4.
- Canning, J., Broder, A., & Lafore, R. (2023). Data structures & algorithms in Python. Pearson. ISBN: 978-0-13-485589-9.
Complementar:
- Goodrich, M. T., Tamassia, R., & Goldwasser, M. H. (2013). Data structures and algorithms in Python. Wiley. ISBN: 978-1-118-29027-9.
- Costa, E. (2024). Programação em Python: Fundamentos e resolução de problemas (2.ª ed. atualizada). FCA. ISBN: 978-972-722-940-6.
- Miller, B. N., Ranum, D. L., & Yasinovskyy, R. (2014). Problem solving with algorithms and data structures using Python: The interactive edition. Runestone Academy.
