Você está na página 1de 16

Apresentação

Introdução
Escopo da Disciplina

Disciplina de Projetos e Análise de Algoritmos

Prof. Tiago A. E. Ferreira

Aula 1 - Apresentação aos Algoritmos


Computacionais

Prof. Tiago A. E. Ferreira Disciplina de Projetos e Análise de Algoritmos


Apresentação
Introdução
Escopo da Disciplina

O que é a Disciplina?

Disciplina de Projeto e Análise de Algoritmos


Esta é uma disciplina de Algoritmos em nı́vel de
Pós-Graduação!
Temas a serem abordados:
Algoritmos e Complexidade, como: Problemas de decisão,
Alcançabilidade, Problemas de otimização, Fluxo máximo,
Caixeiro viajante, Complexidade computacional O(f).
Classes P e NP — Classes de complexidade, Hierarquia das
classes, Reduções e completude.
Problemas em grafos.
Problemas envolvendo conjuntos e números.
Heurı́sticas para solução de problemas.
Uso de Modelo de Computação Paralela para solução de
problemas.

Prof. Tiago A. E. Ferreira Disciplina de Projetos e Análise de Algoritmos


Apresentação
Introdução
Escopo da Disciplina

Avaliações

Serão realizadas duas avaliações teóricas com os assuntos e


tópicos abordados em sala de aula.
As datas das provas serão marcadas no decorrer do curso: a
primeira ocorrendo em torno da metade da carga horária e a
outra no final da carga horária.
Serão propostos exercı́cios (Listas de Exercı́cios) para serem
resolvidos tanto de forma individual como em equipe.
A nota (conceito) será calculada como,

80 · NAT + 20 · NE
Nota Final =
100
onde NAT é a média aritmética das Avaliações Teóricas e NE
é a média aritmética dos exercı́cios propostos.

Prof. Tiago A. E. Ferreira Disciplina de Projetos e Análise de Algoritmos


Apresentação
Introdução
Escopo da Disciplina

Livro Texto
Livro Texto utilizado:
Tı́tulo: Introduction to Algorithms.
Autores: Thomas H. Cormen; Charles E. Leiserson; Roanld L.
Rivest; Clifford Stein.
Editora: MIT Press
Edição: Third Edtion
Ano: 2009.

Figura: Livro Texto utilizado.


Prof. Tiago A. E. Ferreira Disciplina de Projetos e Análise de Algoritmos
Apresentação
Introdução
Escopo da Disciplina

Demais Referências...

Livros:
PAPADIMITRIOU, C.H. ”Computational Complexity”,
Addison-Wesley, 1994.
AHO, A V.; HOPCROFT, J.E.; ULLMAN, J.D. ”The Design
and Analysis of Computer Algorithms”, Addison-Wesley, 1974.
GAREY, M.S.; JOHNSON, D.S. ”Computers and
Intractability: A Guide to the Theory of NP-Completness”,
Freeman, 1979.
LEWIS, H.R.; PAPADIMITRIOU, C.H. ”Elements of the
Theory of Computation”, Prentice-Hall International Editions,
1981.
SEDGEWICK, R.; FLAJOLET, P. ”An Introduction to the
Analysis of Algorithms”, Addison Wesley, 1996.

Prof. Tiago A. E. Ferreira Disciplina de Projetos e Análise de Algoritmos


Apresentação
Introdução
Escopo da Disciplina

Demais Referências...

Periódicos:
ACM, ACM Transactions on Algorithms.
SCIENCE DIRECT, Journal of Algorithms.
MANEY PUBLISHING, Journal of Algorithms and
Computational Technology.
DOAJ Directory of Open Access Journals Free – Algorithms
(ISSN:1999-4893)
Dentre outros.... (verificar www.periodicos.capes.gov.br )

Prof. Tiago A. E. Ferreira Disciplina de Projetos e Análise de Algoritmos


Apresentação
Introdução
Escopo da Disciplina

O que é um Algoritmo?

Informalmente, um Algoritmo é qualquer procedimento


computacional bem definido que toma algum valor, ou um
conjunto de valores, como entrada e produz algum valor, ou
conjunto de valores, como saı́da.
Convencionalmente, um algoritmo é uma sequência de passos
computacionais que transforma uma entrada em um saı́da.
É uma ferramenta computacional que resolve um problema
computacional bem especificado.

Prof. Tiago A. E. Ferreira Disciplina de Projetos e Análise de Algoritmos


Apresentação
Introdução
Escopo da Disciplina

Exemplo: Ordenamento
Entrada: uma sequencia de números ha1 , a2 , . . . , an i.
Saı́da: uma permutação especı́fica ha10 , a20 , . . . , an0 i da entrada
tal que (ordenamento crescente),

a10 6 a20 6 · · · 6 an0

Por exemplo, da a sequência de entrada h31, 41, 59, 26, 41, 58i, o
algoritmo deve retornar a saı́da,

h26, 31, 41, 41, 58, 59i

A sequência de entrada é chamada de instância.


De forma geral, a instância de um problema consiste na
entrada necessária para computar uma possı́vel solução do
problema!
Prof. Tiago A. E. Ferreira Disciplina de Projetos e Análise de Algoritmos
Apresentação
Introdução
Escopo da Disciplina

Corretude

Um algoritmo é dito ser correto quando, para toda instância de


entrada possı́vel, este pára com a saı́da correta!
Assim, um algoritmo correto resolve um dado problema
computacional!
Um algoritmo incorreto pode não parar para alguns instâncias de
entrada, ou pode parar com a saı́da incorreta!
Um algoritmo incorreto ainda pode ser usável, se for
conhecida a sua taxa de erro!

Prof. Tiago A. E. Ferreira Disciplina de Projetos e Análise de Algoritmos


Apresentação
Introdução
Escopo da Disciplina

Outros Exemplos

É evidente que ordenamento não é o único tipo de algoritmos que


exite e tem importância computacional. Vários outros exemplos de
problemas computacionais podem ser enumerados onde é possı́vel
aplicar/definir um algoritmo, dentre os quais:
O Projeto Genoma Humano (e de vários outros seres vivos).
Em particular são 100.000 genes e mais de 3 bilhões de pares
de bases quı́micas para serem ordenadas e analisadas.
O acesso rápido à informações via internet.
Segurança e privacidade em transações econômicas através da
internet.
Distribuição, logı́stica e alocação de recursos.
etc.

Prof. Tiago A. E. Ferreira Disciplina de Projetos e Análise de Algoritmos


Apresentação
Introdução
Escopo da Disciplina

O Nosso Curso...

Como já afirmado, este é um curso de Pós-Graduação...


Logo, bem mais avançado do que um curso de algoritmos de
um bom curso de graduação em ciência da computação e/ou
áreas afins.
Assim, estaremos trabalhando com problemas com
basicamente duas caracterı́sticas comuns:
1 Os problemas têm muitas soluções candidatas, porém a
maioria esmagadora destas soluções candidatas não são viáveis
para a resolução do problema em questão. Encontrar uma
solução que consiga resolver o problema, ou encontrar a
melhor solução, pode ser um verdadeiro desafio.
2 Estaremos interessados em problemas aplicados, mundo real e
academia !

Prof. Tiago A. E. Ferreira Disciplina de Projetos e Análise de Algoritmos


Apresentação
Introdução
Escopo da Disciplina

Eficiência

Outro aspecto muito importante ao se estudar algoritmos é como


definir suas eficiências.
Diferentes algoritmos podem ser projetados para resolver o
mesmo problema! Frequentemente estes diferem
dramaticamente em relação a eficiência.
Exemplo: Dado o problema de ordenamento. E dado dois
algoritmos de ordenamento, o insertion sort e o merge sort.
O insertion sort demora um tempo c1 n2 , onde n é o número de
itens a serem ordenados e c1 é uma constante.
O merge sort demora um tempo c2 n log2 n, onde c2 é uma
constante.

Prof. Tiago A. E. Ferreira Disciplina de Projetos e Análise de Algoritmos


Apresentação
Introdução
Escopo da Disciplina

Eficiência - Exemplo

Vamos imaginar dois computadores:


Computador A — capaz de realizar 10 bilhões de instruções
por segundo.
Computador B — capaz de realizar 10 milhões de instruções
por segundo.
O computador A é 1.000 vezes mais rápido do que o
computador B
Como implementar o algoritmo também é importante!
Imagine que o melhor programador no mundo implemente o
insertion sort no computador A.
Suponha também que um programador mediano implemente o
merge sort no computador B.

Prof. Tiago A. E. Ferreira Disciplina de Projetos e Análise de Algoritmos


Apresentação
Introdução
Escopo da Disciplina

Eficiência - Exemplo
Devido as caracterı́sticas dos computadores e a qualidade dos
programadores, é razoável supor c1 = 2 e c2 = 50, ou seja, as
condições do conjunto computador e implementação para o
algoritmo insertion sort seja 25 vezes melhor do que para o
mergesort.
Assim, para ordenar 107 números,
Computador A:

2 · (107 )2 Inst.
= 20.000 segundos
1010 Inst. por seg.
Computador B:

50 · (107 ) log2 107 Inst.


≈ 1.163 segundos
107 Inst. por seg.

Prof. Tiago A. E. Ferreira Disciplina de Projetos e Análise de Algoritmos


Apresentação
Introdução
Escopo da Disciplina

Perfil Esperado da Turma

Qual formação básica dos alunos da nossa Turma?


Um aluno que passou por um curso de ciência da
computação, sistemas de informação, engenharia da
computação ou área afins de informática deve saber,
Abordagens de problemas (Técnicas de Programação;
Recursividade; Dividir para Conquistar; Análise Assı́ntótica de
Funções).
Algoritmos de ordenamento (Bubble Sort; Insertion Sort;
Merge Sort; Heap Sort; Quick Sort; Sorting in Linear Time).
Estrutura de Dados Básicas (Listas; Filas; Pilhas; Tabelas
Hash; Árvores Binárias; Ávores Vermelho-Preto)

Prof. Tiago A. E. Ferreira Disciplina de Projetos e Análise de Algoritmos


Apresentação
Introdução
Escopo da Disciplina

Alvo da Disciplina

Dados os pré-requisitos no slide anterior, desejamos estudar,


Minimamente
Técnicas de Análise e Projetos Avançados de Algoritmos
Programação Dinâmica
Estrutura de Dados Avançadas
Algoritmos em Grafos
Desejável
Algoritmos Paralelos
Algoritmos cientı́ficos (Operação em Matrizes, Programação
Linear, Polinônios e FFT, String Matching )
Classes P e NP — Classes de complexidade, Hierarquia das
classes, Reduções e completude.

Prof. Tiago A. E. Ferreira Disciplina de Projetos e Análise de Algoritmos

Você também pode gostar