1. Introdução à correcção de Algoritmos
1.1. Noção de Especificação como contracto
1.2. Triplos de Hoare
1.3. Lógica de Hoare
1.4. Anotação de Programas e geração de obrigações de prova

2. Análise de Complexidade de Algoritmos
2.1. Análise do comportamento de algoritmos iterativos simples
2.2. Uso de relações de recorrência para analisar a complexidade algorítmica de definições recursivas
2.3. Análise assimptótica (notações O, Teta e Omega)

3. Estratégicas algorítmicas
3.1 Algoritmos Incrementais, divisão e conquista, programação dinâmica
3.2. Análise de correcção e complexidade associadas a estratégias algorítmicas
3.3. Apresentação de algoritmos clássicos para como exemplos destas estratégias (procuras, ordenações e travessias)

4. Estruturas de Dados clássicas e algoritmos associados
4.1. Estruturas Lineares (Stacks, queues, tabelas de hash): inserção e consulta
4.2. Estruturas hierárquicas (heaps, árvores binárias balanceadas, árvores B): inserção, consulta e travessia
4.3. Grafos: travessias, árvores geradoras, caminhos mais curto, fecho transitivo

5. Classes de Complexidade
5.1 Classe P: definições e reduções polinomiais
5.2 Classe NP: Não determinismo e reduções de SAT