A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

PPGI/2009 Prof. Lucídio Cabral - Estrutura de Dados e Complexidade de Algoritmos1 Crescimento de Funções.

Apresentações semelhantes


Apresentação em tema: "PPGI/2009 Prof. Lucídio Cabral - Estrutura de Dados e Complexidade de Algoritmos1 Crescimento de Funções."— Transcrição da apresentação:

1 PPGI/2009 Prof. Lucídio Cabral - Estrutura de Dados e Complexidade de Algoritmos1 Crescimento de Funções

2 Análise de Algoritmos –tempo de processamento em função dos dados de entrada; –espaço de memória total requerido para os dados; –comprimento total do código; –correcta obtenção do resultado pretendido; –robustez (como comporta-se com as entradas inválidas ou não previstas). –quantidade de "trabalho" necessária para a sua execução, expressa em função das operações fundamentais, as quais variam de acordo com o algoritmo, e em função do volume de dados.

3 Complexidade Porquê o estudo da Complexidade? –Performance Escolher entre vários algoritmos o mais eficiente para implementar; Desenvolver novos algoritmos para problemas que já têm solução; Desenvolver algoritmos mais eficientes (melhorar os algoritmos), devido ao aumento constante do "tamanho" dos problemas a serem resolvidos. –Complexidade Computacional - torna possível determinar se a implementação de determinado algoritmo é viável.

4 Complexidade Tipos de Complexidade –Espacial Este tipo de complexidade representa, por exemplo, o espaço de memória usado para executar o algoritmo. –Temporal Este tipo de complexidade é o mais usado podendo dividir-se em dois grupos: –Tempo (real) necessário à execução do algoritmo. (como podemos medir?) –Número de instruções necessárias à execução.

5 Medidas de Análise –Devem ser independentes da tecnologia (hardware/software) –Modelos Matemáticos simplificados baseados nos fatores relevantes: Tempo de Execução Uma função que relaciona o tempo de execução com o tamanho de entrada: t = F(n) –Conjunto de operações a serem executadas. –Custo associado à execução de cada operação. Ocupação de Espaço em Memória Analise de Algoritmos

6 Complexidade Exemplo –Sejam 5 algoritmos A 1 a A 5 para resolver um mesmo problema, de complexidades diferentes. (Supomos que uma operação leva 1 ms para ser efetuada.) –T k (n) é a complexidade ou seja o número de operações que o algoritmo efetua para n entradas n A 1 T 1 (n)= n A 2 T 2 (n)=nlog n A 3 T 3 (n)=n 2 A 4 T 4 (n)=n 3 A 5 T 5 (n)=2 n s0.064s0.256s4s1m4s s0.16s1s33s46 Dias s9s4m22s1 Dia 13h Séculos tempo necessário para o algoritmo em função de n entradas

7 Operações primitivas Atribuição de valores a variáveis Chamadas de métodos Operações aritméticas Comparação de dois números Acesso a elemento de um array Seguir uma referência de objeto (acesso a objeto) Retorno de um método

8 Complexidade de Algoritmos Complexidade de pior caso – big-Oh g(n) Complexidade de melhor caso – big-Omega g(n) –de uso bem menos freqüente –em algumas situações específicas Complexidade de caso médio – big-Theta g(n) –menos utilizada apesar de importante –difícil conhecer a distribuição de probabilidades das diferentes entradas

9 Nota ç ões assint ó ticas Limite assint ó tico apertado ou exato Limite assint ó tico superior Limite assint ó tico inferior Limite superior que não é assintoticamente apertado Limite inferior que não é assintoticamente apertado

10 Por que as nota ç ões assint ó ticas são importantes? Elas fornecem uma caracteriza ç ão simples da eficiência de um algoritmo. Elas permitem a compara ç ãode desempenho entre v á rios algoritmos. Para valores elevados de componentes/entradas, as constantes multiplicativas e termos de baixa ordem de um tempo de execu ç ão exato são dominados pelo efeito do tamanho de entrada (o n ú mero de componentes). –O tempo de execu ç ão de uma algoritmo sobre uma entrada particular, é o n ú mero de opera ç ões primitivas ou passos executados. –O tamanho da entrada depende problema sendo estudado. Mas na maioria dos casos este é o n ú mero de itens na entrada, por exemplo: o n ú mero total de bits.

11 Resumindo, em geral, quando observamos tamanhos de entrada suficientemente grandes para tornar a ordem de crescimento do tempo de execu ç ão relevante para um algoritmo, n ó s estamos estudando a eficiência assint ó tica de um algoritmo. E um algoritmo que é assintoticamente mais eficiente ser á efetivamente a melhor escolha. Isto pode não ser verdade para todas as entradas consideradas pequenas!

12 Limite assint ó tico apertado ou exato OBS:

13 Limite assint ó tico apertado ou exato Eg.

14 Limite assint ó tico apertado ou exato Eg.

15 Limite assint ó tico superior

16

17 Qual melhor algoritmo? Sejam A e B dois algoritmos que o resolvem o problema P, cujos tempos de execução são T A (n) e T B (n) comportamento assintótico – tamanho da entrada arbitrariamente grande –caracterizado pela notação O (big O)

18 Diagrama Definição do Big-Oh

19 Ordens mais comuns Fonte: Sahni, "Data Structures, Algorithms and Applications in C++" log n n n2n2 2n2n n f n log n 1 (linear) (quadrática) (exponencial) (logarítmica) (constante)

20 Alguns conceitos T (n) = O (1) : constante T (n) = O (log log n) : super-rápido T (n) = O (log n) : logarítmico – muito bom T (n) = O (n) : linear – toda a entrada é visitada T (n) = O (n log n) : limite de muitos problemas T (n) = O (n 2 ) : quadrático T (n) = O (n k ) : polinomial no tamanho da entrada T (n) = O (k n ), O (n!), O (n n ) : exponencial – ruim!

21 Teoremas 1.Comportamento assintótico da soma de duas funções cujos comportamentos assintóticos particulares são conhecidos: Se f 1 (n) = O(g 1 (n)) e f 2 (n) = O(g 2 (n)), então: f 1 (n) + f 2 (n) = O(max(g 1 (n)), g 2 (n))) 2.O(k f(n)) = O(f(n)) 3.O(f(n)) O(g(n)) = O(f(n) g(n))

22 Eficiência de um Algoritmo, mais um exemplo Três algoritmo para calcular … n para um n > 0

23 Eficiência de um Algoritmo Número de operações necessárias O(n) O(n 2 ) O(1)

24 A notação f(n) = 8n é O (n 2 )? f(n) c.n 2 ? Seja c =1 8n n 2, então 0 n 2 – 8n – (n – 16)(n+8) n 0 = 16 c =1, n o = 16, f (n) c.n 2 para todo n n 0

25 A notação A função atua como um limite superior assintótico da função f –f = n 2 -1 f = (n 2 ) –f = n 2 -1 f = (n 3 ) –f = 403 f = (1) –f = 5+2logn +3log 2 n f = (log 2 n) –f = 5+2 log n +3log 2 n f = (n) –f = 5.2 n +5n 10 f = (2 n )

26 Limite assint ó tico inferior

27 Limite superior que não é assintoticamente apertado

28 Limite inferior que não é assintoticamente apertado

29 Nota ç ões assint ó ticas em equa ç ões

30 Rela ç ões de Fun ç ões Assint ó ticas

31 Limites podem ser usados para determinar a ordem de complexidade c então f (n) = ( g (n)) se c > 0 se lim f (n) / g (n) = 0 or c > 0 então f (n) = ( g(n)) or c > 0 então f (n) = ( g (n)) n

32 Exemplo usando limites

33 Regra de LHopital Se f(x) e g(x) são ambas funções diferenciáveis com derivadas f(x) e g(x), respectivamente, e se

34 Exemplos usando limites

35 Exemplo usando limites lg () ln lg)' ln lim lg lim (lg)' ' lim ln n On n n n n n n n nn nnn ('= 1 nln2

36 Exemplo usando limites nO e ee nkn kknk k nn nnnn n k n n k n n k n n nk )'(ln lim ln lim () ln...lim ! ln n () onde k é uma constante inteira positiva ()'=ln2


Carregar ppt "PPGI/2009 Prof. Lucídio Cabral - Estrutura de Dados e Complexidade de Algoritmos1 Crescimento de Funções."

Apresentações semelhantes


Anúncios Google