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

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

Complexidade de Algoritmos

Apresentações semelhantes


Apresentação em tema: "Complexidade de Algoritmos"— Transcrição da apresentação:

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


Carregar ppt "Complexidade de Algoritmos"

Apresentações semelhantes


Anúncios Google