Guia de Cursos

Queres conhecer a oferta de cursos da NOVA, nas áreas das licenciaturas, mestrados e doutoramentos?
No nosso Guia de Cursos encontras informação útil sobre Faculdades, Institutos e Escolas.
Podes ainda aceder a informações complementares necessárias a uma completa integração.

saber mais Guia de Cursos

Faculdade de Ciências e Tecnologia

Análise e Desenho de Algoritmos

Código

8154

Unidade Orgânica

Faculdade de Ciências e Tecnologia

Departamento

Departamento de Informática

Créditos

6.0

Professor responsável

Luís Manuel Marques da Costa Caires, Margarida Paula Neves Mamede

Horas semanais

5

Total de horas

73

Língua de ensino

Português

Objectivos

Saber
  • Conhecer os algoritmos fundamentais de grafos, os tipos abstractos de dados envolvidos e as estruturas de dados usadas para os implementar com eficiência.
  • Conhecer três técnicas de desenho de algoritmos: programação dinâmica, estratégias greedy e transformação e conquista.
  • Compreender complexidade amortizada.
  • Definir algumas classes de complexidade e compreender alguns problemas em aberto. Reconhecer os problemas da classe NP.
Saber Fazer
  • Formalizar um problema concreto em termos de grafos e adaptar um algoritmo clássico para o resolver.
  • Escolher, comparar, adaptar e utilizar estruturas de dados adequadas ao problema a resolver.
  • Conceber e analisar um algoritmo aplicando programação dinâmica.
  • Calcular a complexidade de algoritmos com base na complexidade amortizada das funções auxiliares e calcular a complexidade amortizada dessas funções.
  • Provar que um problema é NP-completo.
Competências Complementares
  • Aptidão para avaliar soluções e efectuar escolhas fundamentadas.
  • Capacidade de gestão do tempo e cumprimento dos prazos.
  • Capacidade de comunicação escrita: relatório sobre o desenho, a análise e a implementação de um algoritmo.

Pré-requisitos

Os alunos deverão ter realizado as seguintes unidades curriculares:

  • Introdução à Programação;
  • Programação Orientada pelos Objectos;
  • Matemática Discreta;
  • Algoritmos e Estruturas de Dados;
  • Teoria da Computação.

Conteúdo

Programação dinâmica.

Introdução ao estudo de grafos. Definições fundamentais. Tipos abstractos de dados grafo não orientado e grafo orientado. Implementações de grafos.

Algoritmos elementares de grafos. Percursos em profundidade e em largura. Ordenação topológica. Teste à aciclicidade.

Árvores mínimas de cobertura. Algoritmo de Kruskal. Tipo abstracto de dados partição.

Complexidade amortizada. Métodos da contabilidade e do potencial.

Algoritmo de Prim. Tipo abstracto de dados fila com prioridade adaptável. Filas binomiais e de Fibonacci.

Caminhos mais curtos. Algoritmos de Dijkstra, Bellman-Ford e Floyd-Warshall.

Fluxos máximos. Método de Ford-Fulkerson. Algoritmo de Edmonds-Karp. Emparelhamentos máximos em grafos bipartidos. Cortes mínimos.

Introdução à Teoria da Complexidade. As classes P, FP, NP, PSPACE e EXPTIME. Os afixos co, difícil e completo. Redução de problemas. Alguns problemas em aberto.

Bibliografia

Referências Principais

  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction to Algorithms (3rd edition). The MIT Press, 2009.
  • Jon Kleinberg and Éva Tardos. Algorithm Design. Addison-Wesley, 2006.

Referências Complementares

  • Anany Levitin. Introduction to The Design and Analysis of Algorithms (3rd edition). Addison-Wesley, 2011
  • Michael R. Garey and David S. Johnson. Computers and Intractability: A Guide to the Theory of NP-Completeness. W. H. Freeman and Company, 1990.
  • Steven S. Skiena. The Algorithm Design Manual (2nd edition). Springer, 2008.
  • Steven S. Skiena and Miguel A. Revilla. Programming Challenges: The Programming Contest Training Manual. Springer, 2003.

Método de ensino

O ensino consiste na exposição da matéria em aulas teóricas e na resolução de problemas em aulas práticas de laboratório. No laboratório, os alunos desenham, analisam e implementam algoritmos. Algumas aulas práticas são dedicadas à realização dos trabalhos de avaliação.

Método de avaliação

Componentes da Avaliação

A avaliação é constituída por duas componentes: a componente laboratorial e a componente teórico-prática.

Componente Laboratorial e Frequência

A componente laboratorial é composta por três trabalhos. Cada trabalho é realizado em grupo (de dois alunos) ou individualmente. Cada trabalho consiste no desenho, na análise e na implementação de um algoritmo para resolver um problema de um concurso de programação, na elaboração de um relatório e na realização de uma discussão.

A nota da componente laboratorial (CompL) é a média simples das notas dos três trabalhos (TP1, TP2 e TP3):

CompL = (TP1 + TP2 + TP3) / 3.

Para obter frequência, é necessário que CompL >= 7.0 .

As discussões dos trabalhos serão efectuadas no fim do semestre, apenas com os alunos que podem ter frequência.

Componente Teórico-Prática

A componente teórico-prática é composta por dois testes (no período de aulas) ou por um exame (na Época de Recurso). As três provas são individuais, escritas e com consulta.

A nota da componente teórico-prática (CompTP) é a média pesada das notas dos testes (T1 e T2) ou a nota do exame (Ex):

CompTP = 0.4 T1 + 0.6 T2   ou   CompTP = Ex.

Para obter aprovação, é necessário que CompTP >= 9.5 .

Nota Final

A nota final (NF) dos alunos com frequência é:

  • NF = CompTP,   se CompTP < 9.5;
  • NF = 0.4 CompL + 0.6 CompTP,   se CompTP >= 9.5 .

Todas as notas (TP1, TP2, TP3, T1, T2, Ex, CompL e CompTP) são arredondadas às décimas, excepto a nota final (NF) que é arredondada às unidades.

Frequência Obtida em Anos Anteriores

Os alunos que já obtiveram frequência alguma vez têm automaticamente frequência. Sejam:

  • CompL-Anterior a média das notas dos trabalhos realizados anteriormente e
  • CompL-2012/13 a média das notas dos trabalhos realizados este ano lectivo (que é zero, se nenhum trabalho for entregue).

No cálculo da nota final, a nota da componente laboratorial é o máximo entre CompL-Anterior e CompL-2012/13.

Cursos