Académique Documents
Professionnel 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!
MOTIVAO
Pena que at mesmo um grande cluster com dezenas de computadores no conseguem resolver eficientemente alguns problemas somente por fora bruta;
, se voc considerar somente os sistemas do tipo controle de locadora, pois sistemas de tempo real, simulaes fsicas, sistemas para clculos estatsticos e estimativas 4 razoavelmente pesadas e tantos outros precisam!
MOTIVAO
Importncia: Um algoritmo no existe, ou seja, no possvel escrev-lo, se antes no for definido o modelo computacional associado (como ser executado).
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.
MOTIVAO
Que modelos existem? Literalmente dezenas deles. Se no estiver satisfeito, invente o seu!
RAM Random Access Machine. Modela o computador tradicional e outros elementos computacionais.
MOTIVAO
MODELO COMPUTACIONAL RAM Elementos do modelo:
um nico processador; Memria infinita.
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
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:
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:
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
10
MOTIVAO
Impacto de algoritmos eficientes
11
Avaliao emprica (medir o tempo de execuo); Contagem do nmero de operaes efetuadas; Determinao da complexidade assinttica de um algoritmo;
12
AVALIAO EMPRICA
Experimento 1: Verificar o tempo que dois programas levam para efetuar uma busca em um array e recuperar um dado;
E se o primeiro foi executado em um core duo de 2,4 GHz cada, e o segundo em um 486 DX2? E se ambos foram executados na mesma mquina, mas o segundo executou em paralelo com algum outro programa? Somente por avaliao emprica, conseguimos ter certeza de qual o programa mais eficiente?
13
Deve-se ento aumentar o nmero de casos de testes tentando cobrir o maior nmero possvel de situaes;
Em uma dada linguagem, um programa pode ser mais eficiente do que quando implementado em outra linguagem;
14
Experimento 2: Dado o algoritmo abaixo, vamos contar quantas operaes so necessrias para calcular fatorial(5): function fatorial (n: integer): longint; var f, i: integer; begin if (n < 0) then f := -1 else begin f := 1; for i := 1 to n do f := f*i; end; fatorial := f; end;
15
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
Em Computao, geralmente no nos preocupamos com a eficincia do algoritmo quando tratando poucos elementos
Se so poucos, por pior que nosso algoritmo seja, provavelmente ele executar rpido e sem ocupar muito espao! 2*n + 3 operaes parecem piores que n2 operaes para n = 0, 1 ou 2;
17
18
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.
19
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
20
Definio de Complexidade
Quantidade de "trabalho" necessria para a execuo de um algoritmo, expressa em funo das operaes fundamentais, as quais variam de acordo com o algoritmo, e em funo do volume de dados;
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
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
A anlise de um algoritmo geralmente conta com apenas algumas operaes elementares. A medida de custo ou medida de complexidade relata o crescimento assinttico da operao considerada.
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 )
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).
25
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.
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)
27
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.
28
GRAFICAMENTE
29
O (1) : O uso do algoritmo independe do tamanho de n. Neste caso as instrues do algoritmo so executadas um nmero fixo de vezes; O (log n): ocorre tipicamente em algoritmos que resolvem um problema transformando-o em problemas menores; O (n): linear Um conjunto de operaes de tamanho constante aplicado a cada elemento da entrada; O (n log n): Ocorre em algoritmos que resolvem um problema quebrando-o em problemas menores, resolvendo cada um deles independentemente e depois juntando as solues;
30
O (n2): quadrtico. Algoritmos desta ordem de complexidade ocorrem quando os itens de dados so processados aos pares, muitas vezes em um loop dentro de outro. teis para resolver problemas de tamanhos relativamente pequenos; O (n3): cbica teis para resolver problemas de tamanhos relativamente pequenos; O (nk): polinomial OK para k pequeno; O (kn), O (n!), O (nn): exponencial Geralmente no so teis sob o ponto de vista prtico. Eles ocorrem na soluo de problemas quando se usa fora bruta para resolv-los. 31
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
Exemplo1: Determine para o seguinte fragmento de cdigo no caso mdio. Assumir que todas as variveis so do tipo inteiro.
(1) (n2) (1) (1)*+(n2)* (1) = (n2)
33
Transitividade f (n) = (g(n)) e g(n) = (h(n)) implicam f (n) = (h(n)) vale para as outras notaes Reflexividade f (n) = (f (n)) f (n) = O(f (n)) f (n) = (f (n)) Simetria f (n) = (g(n)) se e somente se g(n) = (f (n))
Analogia com comparao de nmeros reais f (n) = O(g(n)) semelhante a a <= b f (n) = (g(n)) semelhante a a >= b f (n) = (g(n)) semelhante a a = b
34
OS TRS CASOS
Para qualquer algoritmo, sempre h situaes em que ele resolver de forma muito rpida e outras em que nem tanto;
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
MELHOR CASO
36
PIOR CASO
Ao contrrio do melhor caso, este o caso para o qual o algoritmo executa da pior forma possvel;
37
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);
38
Geralmente, necessrio conhecer qual o volume de dados que atende a cada um dos casos e, ento, busca-se definir a funo matemtica que expressa o nmero de operaes necessrias para cada caso; No caso de algoritmos recursivos, deve-se determinar primeiro a frmula de recorrncia capaz de express-los e, ento, resolv-la.
39
REFERNCIAS BIBLIOGRFICAS