Vous êtes sur la page 1sur 31

Profa.

Carla Osthoff
Sala 2C-11 ramal: 6108
osthoff@lncc.br

EMENTA

Complexidade computacional

Algoritmos de Busca:

-sequencial, binria, hashing, arvores


busca, arvores balanceadas

Grafos:
-Caminhos mnimos,

binrias de

Ementa

Ordenao:

insero, seleo, quicksort, mergesort, heapsort,


radix sort;
Algoritmo de Djkstra,
Algoritmo Guloso

Ementa

Programao dinmica
Sistemas de Equaes Algbricas Lineares
Nmeros aleatrios
Fundamentos matemtico:
induo e recurso.
Anlise assinttica

Bibliografia
1 ) Estruturas de dados e algoritmos.
Bruno R. Preiss. Elsevier.
2) Estrutura de dados e seus Algoritmos,
Jayme Luiz Szwarcfiter
3) Algoritmos. Sanjoy Dasgupta, Christos
Papadimitriu, Umesh Vazirani. MacGraw
Hill
5

Bibliografia
4) Foundations of Computer Science- Aho, A.V

5) Algoritmos Numricos.
Frederico Ferreira Campos
6)Algoritmos. Thomas Cormen, Charles
Leiserson, Ronald Rivest, Clinford Stein,
Editora Campus

Algoritmo
um processo sistemtico para a resoluo de um

problema.
Aspectos bsicos no estudo de algoritmos
Correo: verificar a exatido do mtodo

Anlise: avaliar a eficincia (memria e tempo de execuo)

Algoritmo
Computa uma sada a partir de uma entrada (dados)
A escolha correta da estrutura de dados para cada caso

depende do conhecimento de algoritmos para manipular


os dados de forma eficiente.
A complexidade computacional permite avaliar a
adequao de uma estrutura de dados a um algoritmo.

Quando temos um algoritmo,


existem 3 perguntas que
sempre fazemos sobre ele:
Ele correto?
Quanto tempo ele toma, em funo de N?
E, ser que podemos fazer melhor?

Nmeros de Fibonacci

0,1,1,2,3,5,8,13,21,34

Gerados pela regra:


Fn =
Fn-1 + Fn-2
1
0

se n> 1
se n=1
se n=0

Crescem quase to
rapidamente quanto a potncia
de 2
F30 mais que um milho
F100 tem 21 dgitos
0,694n

Fn ~ 2

Crescem quase to
rapidamente quanto a potncia
de 2
F30 mais que um milho
F100 tem 21 dgitos
0,694n

Fn ~ 2

Um algoritmo fib1
Funo fib1 (n)
se n=0 : retorna 0
se n=1 : retorna 1
Retorna fib1(n-1) + fib (n-2)

Quanto tempo fib1(n) toma?


Seja T(n) o nmero de passos de computao

necessrios para computar fib1(n).

Seja T(n) o nmero de passos


de computao para fib1(n)
T(n) <= 2 para n<= 1
T(n) = T(n-1) + T(n-2) + 3 para n>1
(2 chamadas recursivas mais checagem do
valor de n na adio final)

T(n) >= Fn
O tempo de execuo do algoritmo cresce
to rapidamente quanto os prprios nmeros
de Fibonacci.
138

F(200) => T(200) >= F200 >= 2


92

NEC = 40 trilhes flops => 2 seg. !


Tianhe-2 = 48 petaflops
Maior que o tempo que o Sol se tornar uma
estrela gigante!

Desempenho computacional
ordem de gradeza |
flops/s
Megaflops/s
Gigaflops/s
Teraflops/s
Petaflops/s
Exaflops/s

10 ** 6
10** 9
10** 12
10** 15
10** 18

Tanhe-2
48 petaflops/s

Algoritmo correto

Ineficiente !

Algoritmo Polinomial
Funo fib2 (n)
Se n=0 : retorna 0
crie um vetor f [0....n]
F[0] = 0, F[1] = 1
para i= 2,....,n:
F[i] = F[i-1] + F [i 2]
retorna F[n]

Quanto tempo ele toma?


O loop interno consiste em um nico passo
de computao executado n-1 vezes.
O nmero de passos linear com n.

De exponencial baixamos para polinomial!

Podemos fazer melhor que


fib2?

Exerccio 04 pg. 9
Livro Algoritmos do Sanjoy

A notao O

Por simplificao expressamos o tempo de


execuo contando o nmero de passos
bsicos de computao como funo do
tamanho da entrada.

A notao O
Por simplificao, em vez de reportar que
um algoritmo toma 5n**3 + 4n+3 passos
mais fcil deixar de fora termos de menor
ordem e as constantes para dizer que o
algoritmo toma o tempo O(n**3).

Sejam f(n) e g(n) funes de


inteiros positivos em reais
positivos
Dizemos que f=O(g)
f no cresce mais rpido que g
Se existe uma constante c tal que
f(n) <= c. g(n)

Qual funo melhor?

F2 = O(f1)

F3 (n)= n + 1
A discrepncia entre 2n+20 e n+1 mnima
comparada ao enorme vo entre n**2 e
2n+20.
Tratamos funes como equivalentes se
elas diferem apenas por constantes
multiplicativas

A notao O nos permite ter


uma ideia do todo.
1) Constantes multiplicativas podem ser omitidas:
14n**2 se torna n**2.

2) n**a domina n**b se a>b


3)Qualquer expo. domina qualquer polinomial
3**n domina n**5

4) Qualquer polinomial domina qualquer logaritmo:


n domina (logn)**3, n**2 domina n log n

Vous aimerez peut-être aussi