Sumários das Aulas Teóricas

Aula T.13.2

Notas finais sobre o funcionamento da disciplina.

Aula T.13.1

Inclusão da classe P em NP.
Alguns exemplos de problemas NP-completos.
Alguns exemplos de problemas não-computáveis: Halting e Correspondência de Post.

Avaliação do ensino ministrado.

Aula T.12.2

Classes de problemas: a classe P.

Algoritmos não-determinísticos e a classe NP.

Noção de redução e a classe NP-completo.

Aula T.12.1

Propriedade de sub-problema óptimo como garantia de correcção de algoritmos greedy.
Contra-exemplo: pesos negativos nos algoritmos de Dijkstra e Prim.

Motivação da classificação de problemas. Definições informais das classes P e NP.

Aula T.11.2

Algoritmo de Kurskall para calcular a árvore geradora de custo mínimo.
Pormenores de implementação: uso de heaps para armazenamento das arestas e estruturas de find&union para detecção de ciclos.

Aula T.11.1

Árvore geradora de custo mínimo: algoritmo de Prim como exemplo de algoritmo greedy.

Representação de uma árvore geradora através do vector de ascendentes.

Aula T.10.2

Join 2007.

Aula T.10.1

Algoritmos de procura em grafos: estratégia global de procura.
Análise de alguns exemplos.
Travessias de um grafo a partir de um vértice: Breadth-first e Depth-first.

Aula T.9.2

Outras implementações de grafos: listas duplamente ligadas e vector de adjacências.

Aula T.8.2

Grafos: motivação e definições.
Implementações das arestas de um grafo como matrizes ou listas de adjacência.
Análise informal da complexidade de algumas operações básicas sobre grafos nestas duas implementações (existência de uma aresta, cálculo dos sucessores e cálculo dos sucessores).

Aula T.8.1

Análise das recorrências dos algoritmos merge-sort e quick-sort.
Identificação do melhor e pior casos para o algoritmo de quick-sort.

Determinação do limite inferior para o pior caso dos algoritmos de ordenação baseados em comparação de elementos.

Algoritmo de counting-sort como alternativa (linear) aos algoritmos baseados em comparações.

Aula T.7.2

Estratégia divide-and-conquer e recorrências associadas.
Aplicação aos algoritmos de ordenação de vectores (merge-sort e quick-sort)

Aula T.7.1

Propriedades das notações O, Ω e Θ.
Classificação de funções polinomiais.

Aula T.6.2

Definição do tempo de execução de um dado algoritmo usando relações de recorrência (exemplo: pior caso da procura binária).
Análise assimptótica: notações O, Ω, Θ.

Aula T.5.2

Cálculo do número de operações do algoritmo de merge usado na ordenação merge-sort.

Aula T.5.1

Cálculo do número de operações atómicas de um algoritmo de ordenação.

Aula T.4.2

Introdução à análise da complexidade de algoritmos.
Máquina abstracta, tamanho do input, estado do input como parâmetros da simplificação da análise.

Exemplificação destes conceitos para o algoritmo de ordenação de um vector de inteiros por troca directa.

Aula T.4.1

Aula de demonstração do uso de ferramentas aplicadas à verificação de programas.

Aula T.3.2

Uso de invariantes como forma de descrever algoritmos cíclicos. Exemplos: procura num vector ordenado, algoritmo de Euclides, partição de um vector.

Aula T.3.1

Outros exemplos de correcção de programas com ciclos: divisão inteira.

Aula T.2.2

Derivação da multiplicação de inteiros à custa da multiplicação e divisão por 2.

Aula T.2.1

Fortalecimento de especificações (fortalecimento da pré-condição e enfraquecimento da pós-condição).
Exemplo de prova de um programa com ciclos (multiplicação por somas sucessivas).

Aula T.1.2

Correcção das condicionais e da atribuição.
Correcção da sequenciação.
Exemplo de prova de correcção: swap.
Correcção parcial de ciclos: noção de invariante.
Prova da terminação de um ciclo: noção de variante.

Aula T.0.2

Apresentação da disciplina: objectivos, programa, equipa docente e métodos de avaliação.
Introdução à análise da correcção de algoritmos. Noções de pré e pós-condições. Exemplos.