Você está na página 1de 12

UFPA UNIVERSIDADE FEDERAL DO PAR

INSTITUTO DE TECNOLOGIA
FACULDADE DE ENGENHARIA DA COMPUTAO
Anlise de Algoritmos
Prof. Jamir Fernandes

ANLISE DE ALGORITMOS
Analisar um algoritmo prever o que o algoritmo ir precisar, o
quanto ele eficiente na resoluo de um determinado problema,
quanto tempo ele demora para fazer isso e qual o grau de
complexidade para construir e entender o mesmo. s vezes o
hardware importante, mas o que acontece com mais
frequncia, ao menos em olimpadas, maratonas e problemas em
casa, precisarmos medir o tempo que ele ir demorar.
Pode-se entender que o tempo de um algoritmo depende
geralmente do tamanho de sua entrada. Deve-se analisar um
algoritmo baseado nesse tamanho de sua entrada para comparlo com outros algoritmos e ter uma noo de quanto tempo ele
vai demorar.

ANLISE DE ALGORITMOS
Anlise de algoritmo mede a eficincia de um algoritmo, ou sua
implementao em linguagem de programao, medida em que
o tamanho da entrada torna-se maior.
A anlise de algoritmos importante, j que podem ser
abstrados aspectos como tipo de mquina e linguagem de
programao utilizada.
Pode existir mais de uma soluo para o mesmo problema.
importante definir qual a melhor soluo.
Dois aspectos importantes na anlise de um algoritmo: corretude
e eficincia.

ANLISE DE ALGORITMOS
Corretude
O algoritmo deve fornecer uma resposta correta para qualquer
entrada.
Corretude de algoritmos no-recursivos:
Analisar um lao por vez, comeando pelo lao mais interno (se
houver aninhamento).
Para cada lao, determinar seu invariante, que verdadeiro para
qualquer iterao do lao.
Usar o invariante para provar que o algoritmo termina e que produz o
resultado correto.

Corretude de algoritmos recursivos:


Provar que as chamadas recursivas so etapas do problema sem
recurso infinita.
Provar que a chamada recursiva executam corretamente.

ANLISE DE ALGORITMOS
Eficincia
Mede o desempenho de um algoritmo de acordo com
determinado critrio.
A eficincia de um algoritmo influenciada pelo tamanho e
configurao da entrada.
As anlises, portanto, so realizadas levando-se em
considerao o pior caso, o caso mdio e o melhor caso
(raramente acontece).

ANLISE DE ALGORITMOS
Complexidade de Tempo
Podemos definir qual algoritmo prefervel para resolver
determinado problema de duas formas: emprica (implementar o
algoritmo e test-lo para diferentes instncias) e terica
(determinar matematicamente a quantidade de operaes
realizadas pelos algoritmos como funo do tamanho da instncia
considerada).
O tamanho de uma instncia n corresponde formalmente ao
nmero de bits para representar a instncia. Contudo, para tornar
as anlises mais claras (e simples de serem efetuadas) a palavra
tamanho pode indicar o nmero de componentes de uma instncia
ou o seu valor numrico.
Consideraremos, portanto, que as instrues so executadas
sequencialmente e que o conjunto de instrues simples (adio,
comparao, etc.) so executadas em uma unidade de tempo.

ANLISE DE ALGORITMOS
So definidas algumas regrinhas bsicas:
Laos: o tempo de execuo de um lao no mximo o tempo de execuo
das instrues dentro do lao (incluindo os testes) vezes o nmero de
iteraes.
Aninhamento de laos: Analisar primeiro os mais internos. O tempo total
de execuo de uma instruo dentro de um grupo de laos aninhados
igual ao tempo de execuo da instruo multiplicado pelo produto dos
tamanhos de todos os laos.
Instrues consecutivas: Apenas efetuar a soma.
if/else: o tempo de execuo de uma instruo if/else nunca maior do que
o tempo de execuo do teste mais o maior dos tempos de execuo de S1
e S2, onde S1 e S2 representam as instrues do then e else,
respectivamente.
Chamada de funes: A anlise feita como no caso dos laos aninhados.

ANLISE DE ALGORITMOS
Complexidade de Tempo
A complexidade de tempo o nmero de unidades de tempo
(UT) necessrias para processar uma entrada de tamanho n.
A unidade de tempo medida em um milisegundo, portanto:
1UT = 1ms = 10-3 segundos

ANLISE DE ALGORITMOS
Analisando o algoritmo abaixo (mais simples)
1. para i 1 at n, faa
2. para j 1 at i, faa
3. imprima i x j x n
4. fim-para
5. fim-para
O que este algoritmo faz , depois de receber a entrada n do
usurio, imprimir o produto de n com todos dois
nmeros i e j, tal que j i n.

ANLISE DE ALGORITMOS

Para

medir o custo do algoritmo, a anlise consistir em ver


quantas vezes cada passo executado. Mede-se o custo de cada
linha (cada passo a ser executado), sempre em funo de n, que
para este algoritmo a varivel mais importante. Por isso o
pseudocdigo do Algoritmo est com suas linhas numeradas.
Analisando:
Linha 1: Ser executada n + 1 vezes.
Linha 2: Ser executada n x vezes.
Linha 3: Ser executada n x vezes.
Linhas 4 e 5: No tem custo.

ANLISE DE ALGORITMOS

O que se deseja na verdade uma avaliao do desempenho do


algoritmo independentemente da sua implementao, em funo
somente do nmero de instrues executadas para entradas
determinadas.
So
consideradas
somente
a
instrues
preponderantes, isto , as operaes bsicas para a execuo do
algoritmo. O nmero de vezes que essas operaes so executadas
denominado Complexidade do Algoritmo.

Em geral, a complexidade de um algoritmo depende da entrada e esta


caracterizada pelo seu tamanho, por seus valores e tambm pela
configurao dos dados.

De forma intuitiva, sabemos que a complexidade depende da


quantidade de dados que so processados e isso se traduz pelo
tamanho da entrada: o nmero de operaes executadas para localizar
o ltimo registro de uma lista com 1000 registros deve ser maior que o
de uma lista com apenas 10 registros.

ANLISE DE ALGORITMOS
Melhor Caso
Caso Mdio
Pior Caso