Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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
ANLISE DE ALGORITMOS
ANLISE DE ALGORITMOS
Melhor Caso
Caso Mdio
Pior Caso