-
Apresentação
Apresentação
Esta UC surge no 2º semestre do 1º ano, na continuação do trabalho iniciado em Fundamentos de Programação (FP). Em FP, os alunos deram os primeiros passos na programação e preocuparam-se principalmente em produzir programas correctos. Agora, em Algoritmia e Estruturas de Dados, irão continuar a produzir programas correctos mas com preocupações de desempenho, a nível de tempo de execução e consumo de memória.
Esta é uma UC fundamental no currículo de um Engenheiro Informático, que na sua vida profissional encontrará inúmeras situações em que terá que resolver problemas causados por fraco desempenho das aplicações e que exigem um conhecimento sólido dos princípios subjacentes aos principais algoritmos e estruturas de dados.
Não obstante a aprendizagem de conceitos e técnicas de algoritmia e estruturas de dados, os alunos trabalham outras competências fundamentais. Nomeadamente, o espírito crítico e a capacidade de avaliar várias alternativas para resolver os problemas.
-
Disciplina do curso
Disciplina do curso
-
Grau | Semestres | ECTS
Grau | Semestres | ECTS
Licenciado | Semestral | 6
-
Ano | Natureza | Lingua
Ano | Natureza | Lingua
1 | Obrigatório | Português
-
Código
Código
ULHT2531-13397
-
Pré-requisitos e co-requisitos
Pré-requisitos e co-requisitos
Não aplicável
-
Estágio Profissional
Estágio Profissional
Não
-
Conteúdos Programáticos
Conteúdos Programáticos
- funções recursivas, algoritmos recursivos
- tipos de dados complexos
- eficiência e optimização (algorítmica e não-algorítmica)
- complexidade de algoritmos
- algoritmos de pesquisa
- algoritmos de ordenação - bubble sort, selection sort, merge sort, quick sort
- tipos de dados abstractos - pilhas e filas
- listas ligadas
- árvores binárias, árvores ordenadas, árvores AVL
- hashtables
-
Objetivos
Objetivos
O objectivo desta unidade curricular é introduzir os conceitos fundamentais de algoritmos e das estruturas de dados básicas, numa perspetiva de resolver problemas complexos de uma forma eficiente. O aluno deverá ser capaz de analisar e avaliar a eficiência de um algoritmo sem necessidade de o implementar ou testar. Deverá ser igualmente capaz de aplicar a estrutura de dados mais eficaz e eficiente para resolver um determinado problema.
Concretamente, o aluno deverá conseguir criar programas em Java cuja eficiência seja um critério significativo de sucesso (ex: pesquisa, ordenação).
-
Metodologias de ensino e avaliação
Metodologias de ensino e avaliação
Na componente teórica, algumas aulas utilizam o modelo "flipped learning": os alunos visualizam vídeos que explicam certos conteúdos antes da aula teórica, e a aula teórica acaba por ser teórico-prática, com os alunos a resolverem exercícios relacionados com os vídeos. São também feitas sessões de live coding, em que o professor projeta o seu computador e desenvolve programas à frente dos alunos.
Na componente prática, é utilizada uma ferramenta de validação automática de código (Drop Project), que permite que os alunos avancem nos exercícios de forma relativamente autónoma. O projeto também é realizado nesse modelo, sem limite de tentativas: o aluno pode submeter quantas vezes quiser até passar os testes automáticos.
O uso de LLMs é autorizado e até incentivado, no sentido de complementar e não substituir - no entanto, para evitar comportamentos de "copy&prompting" pouco didáticos, os exercícios são apresentados de forma visual (seja com diagramas seja com vídeos).
-
Bibliografia principal
Bibliografia principal
Lafore, R. (2003) Data Structures and Algortihms in Java. 2nd edition.
-
Horário de Atendimento
Horário de Atendimento
-
Mobilidade
Mobilidade
Não