Professional Documents
Culture Documents
MOTIVAO
MOTIVAO
Um exemplo bem simples o caso de dois programas que precisam fazer a ordenao de um grande conjunto de dados:
Cada qual deles pode usar uma abordagem bem diferente do outro; Desta forma, cada qual pode resolver o problema com mais ou menos tempo, ocupando mais ou menos memria; Busca-se sempre compreender e trabalhar com a melhor soluo possvel!
3
MOTIVAO
Importncia: Um algoritmo no existe, ou seja, no possvel escrev-lo, se antes no for definido o modelo computacional associado (como ser executado).
Conceito bsico no projeto de qualquer algoritmo.
MOTIVAO
Que modelos existem? Literalmente dezenas deles. Se no estiver satisfeito, invente o seu! O mais popular (usado) de todos:
RAM Random Access Machine. Modela o computador tradicional e outros elementos computacionais.
Questo decorrente: Dado um problema qualquer, existe sempre um algoritmo que pode ser projetado para um dado modelo computacional?
No! Em vrios casos possvel mostrar que no existe um algoritmo para resolver um determinado problema considerando um modelo computacional.
5
MOTIVAO
MODELO COMPUTACIONAL RAM Elementos do modelo:
um nico processador; Memria infinita.
MOTIVAO
COMPUTAO NO MODELO RAM Processador busca instruo/dado da memria. Uma nica instruo executada de cada vez. Cada instruo executada seqencialmente.
Cada operao executada pelo processador, incluindo clculos aritmticos, lgicos e acesso a memria, implica num custo de tempo:
Funo de complexidade de tempo.
Observaes: Podemos ignorar os dispositivos de entrada e sada (teclado, monitor, etc) assumindo que a codificao do algoritmo e os dados j esto armazenados na memria. Em geral, no relevante para a modelagem do problema saber como o algoritmo e os dados foram 7 armazenados na memria.
MOTIVAO
A complexidade de tempo no representa tempo diretamente, mas o nmero de vezes que determinada operao considerada relevante executada. A complexidade de espao representa a quantidade de memria (numa unidade qualquer) que necessrio para armazenar as estruturas de dados associadas ao algoritmo. Usa-se a notao assinttica para representar essas complexidades:
O (O grande); (mega grande); (Theta); o (o pequeno); (mega pequeno).
9
MOTIVAO
Impacto de algoritmos eficientes A diferena entre algoritmos pode ser muito mais dramtica do que a diferena entre computadores:
Algoritmo A: TA(n) = 2n2 Algoritmo B: TB(n) = 50nlgn Supercomputador: 108 instrues/s Computador pessoal: 106 instrues/s
10
MOTIVAO
Impacto de algoritmos eficientes
11
12
AVALIAO EMPRICA
Experimento 1: Verificar o tempo que dois programas levam para efetuar uma busca em um array e recuperar um dado;
Primeiro programa: 750 ns; Segundo programa: 600 ns;
Em uma dada linguagem, um programa pode ser mais eficiente do que quando implementado em outra linguagem;
No estamos analisando o algoritmo em si, mas somente o programa!
14
No algoritmo anterior:
fatorial(1) 5 operaes; fatorial(5) 13 operaes; fatorial(10) 23 operaes; fatorial(n) 2*n + 3;
Perceba que para calcular o fatorial de um nmero N qualquer, vamos executar 2*N operaes, ou seja, um nmero de operaes diretamente proporcional;
16
CUSTO DE UM ALGORITMO
Determinando o menor custo possvel para resolver problemas de uma dada classe, temos a medida da dificuldade inerente para resolver o problema. Quando o custo de um algoritmo igual ao menor custo possvel, o algoritmo timo para a medida de custo considerada. Podem existir vrios algoritmos para resolver o mesmo problema. Se a mesma medida de custo aplicada a diferentes algoritmos, ento possvel compar-los e escolher o mais adequado.
Quando observamos tamanhos de entradas grandes o suficiente, de forma que apenas a ordem de crescimento do tempo de execuo seja relevante, estamos estudando a eficincia assinttica
19 20
FUNO DE COMPLEXIDADE
Para medir o custo de execuo de um algoritmo comum definir uma funo de custo ou funo de complexidade f. f(n) a medida do tempo necessrio para executar um algoritmo para um problema de tamanho n. Funo de complexidade de tempo: f(n) mede o tempo necessrio para executar um algoritmo para um problema de tamanho n. Funo de complexidade de espao: f(n) mede a memria necessria para executar um algoritmo para um problema de tamanho n. Utilizaremos f para denotar uma funo de complexidade de tempo daqui para a frente. Na realidade, a complexidade de tempo no representa tempo diretamente, mas o nmero de vezes que determinada operao considerada relevante executada. 22
Complexidade Assinttica
Trata-se de uma funo que expressa a relao entre o volume de dados ( n ) e o tempo ( t ) necessrio para o processamento dos mesmos; No algoritmo do experimento 2, poderamos dizer que:
f(n) = 2*n + 3
21
NOTAO
Para uma dada funo g(n), denotamos por (g(n)) o conjunto de funes f(n) = (g(n)), se existem constantes positivas c1, c2 e n0 tais que 0 c1g(n) f(n) c2g(n), para todo n n0. A notao descreve um limite assinttico restrito (firme) para f(n). Exemplo: 3x3+ 5 = ( x3 )
Notaes: O ( Grande),
A ltima notao leia tta;
(Omega) e (Theta);
24
NOTAO O
Para uma dada funo g(n), denotamos por O(g(n)) o conjunto de funes f(n)=O(g(n)), existem constantes positivas c e n0 tais que 0 f(n) cg(n), para todo n >= n0 A notao O descreve um limite assinttico superior. Expressa que g(n) domina assintoticamente f(n). Exemplos: 3x2 + 5 = O(x2) x3/2 = O(x3) 720 = O(1)
NOTAO O
Quando afirmamos que o tempo de execuo de um algoritmo O(g(n)), queremos dizer que, independente da entrada especfica de tamanho n escolhida para cada valor de n, o tempo de execuo no mximo uma constante vezes g(n), para um valor de n suficientemente grande.
25
26
NOTAO
Para uma dada funo g(n), denotamos por (g(n)) o conjunto de funes f (n) = (g(n)), se existem constantes positivas c e n0 tais que 0 cg(n) f(n) para todo n >= n0 A notao descreve um limite assinttico inferior. Exemplos: 3x3 + 5 = ( x2 ) x3/2 = ( x3/3)
NOTAO
Quando afirmamos que o tempo de execuo de um algoritmo (g(n)), queremos dizer que, independente da entrada especfica de tamanho n escolhida para cada valor de n, o tempo de execuo pelo menos uma constante vezes g(n), para um valor de n suficientemente grande.
27
28
GRAFICAMENTE
29
30
CLASSE NOTAO O constante O(1) logaritmico O(lg n) linear O(n) O(n lg n) O(n lg n) quadrtico O(n) cbico O(n) exponencial O(2^n)
32
33
34
OS TRS CASOS
Para qualquer algoritmo, sempre h situaes em que ele resolver de forma muito rpida e outras em que nem tanto;
Exemplo: ordenao dos dados de um vetor
Se ele j estiver ordenado? timo! E se os dados estiverem em ordem inversa? Dependendo do algoritmo, pode ser muito ruim;
MELHOR CASO
Caso para o qual o algoritmo executa da melhor forma possvel:
Menor nmero de instrues; Menor tempo de processamento necessrio; Menor consumo de memria.
Desta forma, para determinar a eficincia de um algoritmo, precisamos conhecer a sua complexidade para o melhor caso, o pior caso e o caso mdio.
35 36
PIOR CASO
Ao contrrio do melhor caso, este o caso para o qual o algoritmo executa da pior forma possvel;
CASO MDIO
A complexidade para o caso mdio dada por meio de clculo tempo mdio esperado para a resoluo de um problema qualquer, independente de como os dados esto (se ordenados ou no, etc);
37
38
REFERNCIAS BIBLIOGRFICAS
MADEIRA, Gonalo, Complexidade Computacional, disponvel em http://w3.ualg.pt/~hshah/algoritmos/aula8/Aula8.ht m SILVA, Elton, Anlise Assinttica da Complexidade de Algoritmos, disponvel em http://www.decom.ufop.br/prof/elton/cic210/cap2.pd f
39