Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Crescimento de Funções
PPGI/2009 Prof. Lucídio Cabral - Estrutura de Dados e Complexidade de Algoritmos
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
Analise de Algoritmos 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
6
Complexidade Exemplo Sejam 5 algoritmos A1 a A5 para resolver um mesmo problema, de complexidades diferentes. (Supomos que uma operação leva 1 ms para ser efetuada.) Tk(n) é a complexidade ou seja o número de operações que o algoritmo efetua para n entradas n A1 T1(n)= n A2 T2(n)=nlog n A3 T3(n)=n2 A4 T4(n)=n3 A5 T5(n)=2n 16 0.016s 0.064s 0.256s 4s 1m4s 32 0.032s 0.16s 1s 33s 46 Dias 512 0.512s 9s 4m22s 1 Dia 13h 10137 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 O(g(n)) Complexidade de melhor caso – big-Omega W(g(n)) de uso bem menos freqüente em algumas situações específicas Complexidade de caso médio – big-Theta Q(g(n).) menos utilizada apesar de importante difícil conhecer a distribuição de probabilidades das diferentes entradas 265
9
Notações assintóticas
Q - Limite assintótico apertado ou exato O - Limite assintótico superior W - Limite assintótico inferior o - Limite superior que não é assintoticamente apertado w - Limite inferior que não é
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
Q - Limite assintótico apertado ou exato
OBS:
13
Q - Limite assintótico apertado ou exato
Eg.
14
Q - Limite assintótico apertado ou exato
Eg.
15
O - Limite assintótico superior
16
O - Limite assintótico superior
17
Qual melhor algoritmo? Sejam A e B dois algoritmos que o resolvem o problema P, cujos tempos de execução são TA(n) e TB(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 2n (exponencial) n2 (quadrática) n log n f n
(linear) log n (logarítmica) 1 (constante) n Fonte: Sahni, "Data Structures, Algorithms and Applications in C++"
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 (n2) : quadrático T (n) = O (nk) : polinomial no tamanho da entrada T (n) = O (kn), O (n!), O (nn) : exponencial – ruim!
21
Teoremas Comportamento assintótico da soma de duas funções cujos comportamentos assintóticos particulares são conhecidos: Se f1(n) = O(g1(n)) e f2(n) = O(g2(n)), então: f1(n) + f2(n) = O(max(g1(n)) , g2(n))) O(k f(n)) = O(f(n)) 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
O(n) O(n2) O(1) Número de operações necessárias
24
A notação O f(n) = 8n + 128 é O (n2)? f(n) c.n2 ? Seja c =1
8n n2, então 0 n2 – 8n – 128 0 (n – 16)(n+8) n0 = 16 c =1, no = 16, f (n) c.n2 para todo n n0
25
A notação O A função atua como um limite superior assintótico da função f f = n Þ f = O(n2) f = n Þ f = O(n3) f = Þ f = O(1) f = 5+2logn +3log2n Þ f = O(log2n) f = 5+2 log n +3log2n Þ f = O(n) f = 5.2n +5n Þ f = O(2n) 269
26
W - Limite assintótico inferior
27
o - Limite superior que não é assintoticamente apertado
28
w - 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) = Q ( g (n)) se c > 0 se lim f (n) / g (n) = 0 or c > 0 então f (n) = o ( g(n)) ¥ or c > 0 então f (n) = W ( g (n)) n®¥
32
Exemplo usando limites
33
Regra de L’Hopital 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 )' lim (lg ' n O Î = æ è ç ö ø ÷ 2 1 nln2
36
Exemplo usando limites
k Î O n ( ) 2 onde k é uma constante inteira positiva 2 n = e n ln 2 ( 2 n )' = ( e n ln 2 )' = ln2 e n ln 2 = 2 n ln 2 n k kn k - 1 lim = lim = n n n 2 2 ln 2 n k ( k - 1 ) n k - 2 k ! = lim = . . . = lim = n 2 n k n 2 ln 2 2 ln 2 n
Apresentações semelhantes
© 2025 SlidePlayer.com.br Inc.
All rights reserved.