Laboratório de Algoritmia II | Informações
Informação geral
Código: 9696
Área científica predominante: Tecnologias da Computação
Regime: Semestral
ECTS: 5
Tipo de ensino: Presencial
Língua de instrução: Portuguesa
Carga Horária
Trabalho autónomo: 110 Horas
Aulas: 30 horas - Práticas Laboratoriais
Objetivos de ensino
Esta unidade curricular ocorre no 2º semestre do 2º ano, tendo os alunos já aprendido diferentes linguagens de programação e obtido conhecimentos gerais de algoritmos e complexidade.
Esta UC pretende complementar e solidificar estes conhecimentos, introduzindo diferentes estratégias genéricas de resolução algorítmica de problemas, ilustradas por uma série de problemas / puzzles clássicos que capturam a essência universal de cada estratégia.
Pretende-se que após esta UC os alunos sejam capazes de rapidamente identificar e implementar a estratégia algorítmica mais adequada à resolução de um dado problema.
Resultados de aprendizagem
- Reconhecer qual a estratégia algorítmica mais adequada à resolução de um determinado problema;
- Implementar essa estratégia de forma eficiente numa linguagem de programação de alto nível;
- Organizar o trabalho em grupo por forma a resolver um determinado problema num tempo limitado.
Pré-requisitos recomendados
- Programação Imperativa.
- Algoritmos e Complexidade.
Programa sucinto
- Estratégias algorítmicas genéricas para resolução de problemas: pesquisa exaustiva, programação dinâmica, algoritmos de grafos, etc.
- Problemas / puzzles clássicos que podem ser resolvidos por cada uma dessas estratégias.
- Implementação eficiente dessas estratégias em linguagens de programação de alto nível (Python, C++, Haskell).
Bibliografia essencial
- Backhouse, R. (2011). Algorithmic Problem Solving. John Wiley and Sons.
- Levitin, A., Levitin, M. (2012). Algorithmic Puzzles. Oxford University Press.
- Arefin, A. S. (2006). Art of Programming Contest. Gyankosh Prokashoni.
Métodos de ensino
O semestre é organizado em blocos de 3 aulas P cada, cada bloco dedicado a uma estratégia genérica de resolução algorítmica diferente.
Cada bloco inicia-se com uma aula mais expositiva onde é introduzida uma estratégia genérica de resolução de problemas (aula de matéria).
Depois são apresentados uma série de problemas clássicos cuja resolução requer essa estratégia e discutida a sua implementação eficiente em diferentes linguagens de programação.
Na segunda aula do bloco são propostos vários problemas semelhantes para os alunos resolverem e implementarem in loco (aula de treino).
Na terceira aula de cada bloco é avaliada a capacidade de os alunos resolverem novos problemas com essa estratégia (aula de torneio).
Métodos de avaliação
A avaliação é feita em 5 torneios de programação ao longo do semestre, onde os alunos se organizam em grupos de 2 alunos para tentar resolver 2 problemas sobre uma determinada estratégia de resolução algorítmica, num período de tempo limitado.
A nota final da UC é proporcional ao número de problemas resolvidos ao longo do semestre.