Algoritmos e complexidade Notas de aula - Arquivo Escolar

Algoritmos e complexidade Notas de aula - Arquivo Escolar Algoritmos e complexidade Notas de aula - Arquivo Escolar

arquivoescolar.org
from arquivoescolar.org More from this publisher
13.04.2013 Views

1. Introdução e conceitos básicos Complexidade 1.2x10 9 1.0x10 9 8.0x10 8 6.0x10 8 4.0x10 8 2.0x10 8 0.0x10 0 0 100 200 300 400 500 Tamanho do problema x 3 10x 3 4x 3 -3x 2 +2x-1 Crescimento de funções n = 10 1 10 2 10 3 10 4 10 5 10 6 log2 n n 3 10 7 10 13 17 20 1 10 2 10 3 10 4 10 5 10 6 n log2 n 33 6.6 × 10 2 10 4 1.3 × 10 5 1.7 × 10 6 2 × 10 7 n 2 n 3 2 n 10 2 10 3 10 3 10 4 10 6 Comparar eficiências 16 1.3 × 10 30 10 6 10 9 1.1 × 10 301 10 8 10 12 2 × 10 3010 1 ano ≈ 365.2425d ≈ 3.2 × 10 7 s 1 século ≈ 3.2 × 10 9 s 1 milênio ≈ 3.2 × 10 10 s 10 10 10 15 10 30103 10 12 10 18 10 301030 • Como comparar eficiências? Uma medida concreta do tempo depende – do tipo da máquina usada (arquitetura, cache, memória, ...)

– da qualidade e das opções do compilador ou ambiente de execução – do tamanho do problema (da entrada) • Portanto, foram inventadas máquinas abstratas. • A análise da complexidade de um algoritmo consiste em determinar o número de operações básicas (atribuição, soma, comparação, ...) em relação ao tamanho da entrada. Observe que nessa medida o tempo é “discreto”. Análise assintótica • Em geral, o número de operações fornece um nível de detalhamento grande. • Portanto, analisamos somente a taxa ou ordem de crescimento, substituindo funções exatas com cotas mais simples. • Duas medidas são de interesse particular: A complexidade – pessimista e – média Também podemos pensar em considerar a complexidade otimista (no caso melhor): mas essa medida faz pouco sentido, porque sempre é possível enganar com um algoritmo que é rápido para alguma entrada. Exemplo • Imagine um algoritmo com número de operações an 2 + bn + c • Para análise assintótica não interessam – os termos de baixa ordem, e – os coeficientes constantes. • Logo o tempo da execução tem cota n 2 , denotado com O(n 2 ). Observe que essas simplificações não devem ser esquecidas na escolha de um algoritmo na prática. Existem vários exemplos de algoritmos com desempenho bom assintoticamente, mas não são viáveis na prática em comparação com algoritmos “menos eficientes”: A taxa de crescimento esconde fatores constantes e o tamanho mínimo de problema tal que um algoritmo é mais rápido que um outro. 17

– da qualida<strong>de</strong> e das opções do compilador ou ambiente <strong>de</strong> execução<br />

– do tamanho do problema (da entrada)<br />

• Portanto, foram inventadas máquinas abstratas.<br />

• A análise da <strong>complexida<strong>de</strong></strong> <strong>de</strong> um algoritmo consiste em <strong>de</strong>terminar o<br />

número <strong>de</strong> operações básicas (atribuição, soma, comparação, ...) em<br />

relação ao tamanho da entrada.<br />

Observe que nessa medida o tempo é “discreto”.<br />

Análise assintótica<br />

• Em geral, o número <strong>de</strong> operações fornece um nível <strong>de</strong> <strong>de</strong>talhamento<br />

gran<strong>de</strong>.<br />

• Portanto, analisamos somente a taxa ou or<strong>de</strong>m <strong>de</strong> crescimento, substituindo<br />

funções exatas com cotas mais simples.<br />

• Duas medidas são <strong>de</strong> interesse particular: A <strong>complexida<strong>de</strong></strong><br />

– pessimista e<br />

– média<br />

Também po<strong>de</strong>mos pensar em consi<strong>de</strong>rar a <strong>complexida<strong>de</strong></strong> otimista (no caso<br />

melhor): mas essa medida faz pouco sentido, porque sempre é possível enganar<br />

com um algoritmo que é rápido para alguma entrada.<br />

Exemplo<br />

• Imagine um algoritmo com número <strong>de</strong> operações<br />

an 2 + bn + c<br />

• Para análise assintótica não interessam<br />

– os termos <strong>de</strong> baixa or<strong>de</strong>m, e<br />

– os coeficientes constantes.<br />

• Logo o tempo da execução tem cota n 2 , <strong>de</strong>notado com O(n 2 ).<br />

Observe que essas simplificações não <strong>de</strong>vem ser esquecidas na escolha <strong>de</strong> um<br />

algoritmo na prática. Existem vários exemplos <strong>de</strong> algoritmos com <strong>de</strong>sempenho<br />

bom assintoticamente, mas não são viáveis na prática em comparação<br />

com algoritmos “menos eficientes”: A taxa <strong>de</strong> crescimento escon<strong>de</strong> fatores<br />

constantes e o tamanho mínimo <strong>de</strong> problema tal que um algoritmo é mais<br />

rápido que um outro.<br />

17

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!