Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Complexidade de Algoritmos
EDA 0001 Professor: Kariston Pereira Joás Garcia Michel Pabst Ricardo Sohn
2
Tempo de Execução (Michel)
- Posteriori - Priori - Visão geral, tempo mínimos e médios.
3
Exemplo Um programa pode ter tempo de execução T(n) = n2+ n + 1. A unidade de T(n) é em principio instrução executada. Uma instrução é uma sequência de operações na qual o tempo de execução pode ser considerado constante. void somavet (int v[n], int *k){ int i; *k=0; for (i=0; i<n; i++) *k= (*k)+ v[i]; }
4
Exemplo - Tempo variável
int localiza (int v[n], int x) { int i; for (i=0; i<n; i++) if (x==v[i]) return i; return -1; }
5
Complexidade - Esforço da máquina para execução do Algoritmo.
- Ex: Pode se considerar o comportamento de dois algoritmos, A1 e A2, que realizam a mesma tarefa em tempos TA1 e TA2, para uma entrada de tamanho n. observemos os tempos de execução para diferentes tamanhos da entrada
6
Representação Complexidade
Tamanho da Entrada Tempo Algoritmo A1 Tempo Algoritmo A2 n TA1 TA2 2n 2TA1 4TA2 3n 3TA1 9TA2 4n 4TA1 16TA2
7
Importante É de grande valia essa analise, devido a forma que a tecnologia tem expandido, computadores com grande poder de processamento tem surgido. Mas com eles piores problemas tem aparecido. Não adianta ter uma máquina forte e um algoritmo mal escrito.
8
Notação O 0 ≤ T(n) ≤ c · f(n)
- Usada para análise do pior caso dos algoritmos. Também chamada de limite superior Diz-se que T(n) é O(f(n)) quando 0 ≤ T(n) ≤ c · f(n) sendo n > n0 T(n) não cresce mais rápido que f(n)
9
Notação O - A função f(x) = 10x + 11 é O(x). Como exemplo, basta utilizar c = 12 e n0 = 10. 10x + 11 ≤ c . O(x) ≤ 12.10 111 ≤ 120
10
Notação O Velocidade de Crescimento Velocidade de Crescimento Notação
Nome O(1) ordem constante O(log n) ordem logarítmica O([log n]c) ordem poli-logarítmica O(n) ordem linear O(n · log n) ordem linear-logarítmica Notação Nome O(n²) ordem quadrática O(n³) ordem cúbica O(nc) ordem polinomial O(cn) ordem exponencial O(n!) ordem fatorial O(nn) Velocidade de Crescimento Velocidade de Crescimento
11
Notação O Ordem Exponencial Ordem quadrática Ordem linear-logarítmica
12
Comparação Quantitativa
- Taxa de crescimento dos algoritmos de ordem exponencial.
13
Comparação Quantitativa
- Efeito do aumento da capacidade de processamento sobre o tamanho do maior problema solucionável em um certo tempo.
14
Comparação Quantitativa
- Algoritmos de alta complexidade têm um ganho pouco significativo em função da capacidade da máquina. -Como exemplo, usaremos o algoritmo que calcula a sequência de Fibonacci.
15
Sequência de Fibonacci
Function fibo1(n) if n = 0 then return 0 else if n = 1 then return 1 return fibo1(n - 1) + fibo1(n - 2) end
16
Sequência de Fibonacci
- Experimente rodar este algoritmo para n = 100. - A complexidade é O(2^n). - Se uma operação levasse um picosegundo, 2100 operações levariam x10 ^13 anos = anos. - Agora vejamos um outro algoritmo, de complexidade O(n), que faz a mesma coisa.
17
Sequência de Fibonacci
Function fibo2(n) if n = 0 then return 0 else if n = 1 then return 1 penultimo <- 0 ultimo <- 1 for i <- 2 until n do atual <- penultimo + ultimo penultimo <- ultimo ultimo <- atual end for return atual end if
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.