Você está na página 1de 17

Monitoria de Algoritmos

Algoritmos e complexidade

Roteiro
Anlise de Algoritmos
Abstraes simplificadoras
Notao assinttica
Notao
Notao
Notao
Comparao de funes
Transitividade
Reflexividade
Simetria e Simetria de transposio

Anlise de Algoritmos

A anlise de algoritmos de fundamental importncia para a determinao dos


recursos necessrios para a execuo de um determinado algoritmo e para a escolha
da melhor estrutura a ser usada na sua implementao,sempre visando eficincia na
soluo dos problemas.

Recursos como memria (complexidade espacial) e tempo de execuo


(complexidade temporal) so o principal objeto de anlise,porm o tempo de
computao com maior frequncia a prioridade no estudo da complexidade de
algoritmos.

Anlise de Algoritmos

De modo geral,o tempo gasto por um algoritmo uma funo do tamanho da


entrada,e pode ser definido como a soma do tempo gasto para a execuo dos
passos que o compem. Cada linha do cdigo demanda um tempo constante e
partir da anlise dessas constantes(C1,C2...Cn) e das estruturas de repetio do
pseudo cdigo,podemos estabelecer uma frmula T(n) para o tempo de execuo.
No pseudo cdigo:
a=0
Para i= 0 at Tamanho_n
Se a < A[i]
a = A[i]
print a o maior elemento
Temos que T(n) = C1 + n*(C2 + C3) + C4

C1
Trecho repetido n vezes
C2
C3
C4

Anlise de Algoritmos

Podemos analisar algoritmos pelo pior,pelo mdio e pelo melhor caso,entretanto


no estudo da complexidade frequentemente optamos pela anlise do pior caso pois
ela estabelece um limite superior para o tempo de execuo para qualquer entrada,
o que nos d a segurana de que a execuo do algoritmo nunca ultrapassar mais
do que esse tempo.Isso explica o porque de termos considerado n*(C2 + C3)
mesmo sem sabermos quantas vezes o programa vai entrar na condio,pois no pior
dos casos a condio a < A[i] sempre ser obedecida .

Abstraes simplificadoras

Visando uma anlise mais fcil da complexidade temporal,so feitas algumas


abstraes simplificadoras.Uma delas j foi tomada no exemplo anterior : Ignorar o
custo real de cada instruo ao usar constantes para representar esses custos.
Entretanto essas constantes pouco interferem no tempo de execuo total do
algoritmo quando o tamanho da entrada tente ao infinito,podemos ento
considerar apenas o termo de ordem mais alta da funo e ignorar seu termo
constante,logo,no exemplo anterior consideraramos apenas T(n) = n.
Na comparao de algoritmos,em geral,quanto menor for a ordem de
crescimento,mais eficiente ele .Devido aos termos de ordem inferior,um algoritmo
de ordem mais baixa pode demorar mais que um de ordem mais alta,entretanto
esse comportamento no se mantm para entradas suficientemente grandes e o
comportamento de acordo com o que enunciamos anteriormente.

Notao Assinttica

Em anlise matemtica a anlise assinttica um mtodo no qual observamos


como se comportam os objetos de estudo quando os dados analisados crescem
ilimitadamente.Essa metodologia alm de ser usada em diversas aplicaes
cientficas tambm usada para estudar a complexidade computacional de
algoritmos.Nela so usadas diversas notaes,como: Notao ,Notao
Notao ,etc.

Notao Assinttica
Notao
A Notao (L -se Big O) usada quando temos um limite assinttico
superior(Pior caso).Pela definio formal temos que: f(n) O(g(n)) se existirem
constantes positivas c e n0 tais que 0 f(n) (c )*(g(n)) para todo n n0.
Queremos dizer com isso que sempre que usarmos a notao Big O estamos
pegando o termo de ordem mais alta da funo e afirmando que a funo completa
no poder crescer mais que seu termo de mais alta ordem se ele estiver
multiplicado por uma constante positiva.Alguns exemplos:

n^2 + 19n = O(n^5)


2n^2 = O(n^2)
4n^3 O(n^2)

Notao Assinttica
Notao

Analisando o segundo e o terceiro exemplos passo a passo.


Segundo exemplo: Pegando a funo f(n) = 2n^2 e aplicando as abstraes
simplificadoras ficamos com n^2.A princpio 2n^2 cresce mais que n^2 mas
podemos afirmar que existe uma constante c que multiplicada por n^2 limita
assintoticamente 2n^2 e obedece a regra 0 2n^2 c *(n^2).De fato essa constante
existe e pode ser qualquer valor maior que 2.

Terceiro exemplo:Se pegarmos a funo f(n) = 4n^3 e aplicarmos as


abstraes simplificadoras ficaremos com n^3 e no n^2.De fato no
conseguimos encontrar uma constante que seja capaz de,para qualquer
valor suficientemente grande, obedecer a regra 0 4n^3 c *(n^2).

Notao Assinttica
Notao
Quando queremos definir um limite assinttico inferior,ou seja,estamos tratando
o melhor caso de um algoritmo,utilizamos a Notao (l-se Big mega).Se existirem
constantes posivitas c e n que respeitem a regra 0 (c )*(g(n)) f(n) para um n
suficientemente grande,ento podemos afirmar que f(n) (g(n)).Com essa notao
queremos estabelecer que uma funo f(n) demandar no mnimo um tempo (g(n))
para ser executada.Alguns exemplos:

2n^2 = (n)
n^2 + 19n = (n^2)
5n^3 + n^2 = (1) (tempo cte)
4n^2 (n^3)

Notao Assinttica
Notao

Analisando o segundo e o quarto exemplos passo a passo.


Segundo exemplo: Pegando a funo f(n) = n^2 + 19n e aplicando as abstraes
simplificadoras ficamos com n^2.Como a ideia por trs da notao definir um
limite inferior,basta apenas verificarmos se a relao 0 c *(n^2) n^2 + 19n pode
ser satisfeita.Essa realmente simples,podemos satisfazer a relao considerando a
constante multiplicativa igual a 1.
Quarto exemplo:Se pegarmos a funo f(n) = 4n^2 e aplicarmos as
abstraes simplificadoras ficaremos com n^2 e no n^3.Tentando
encontrar uma possibilidade de satisfazer a regra percebemos que no
existe uma constante que,para qualquer valor suficientemente grande,
consiga fazer n^3 ser um limite assinttico inferior para n^2. n^3 pode ser
um limite assinttico superior para n^2,mas nunca um inferior.

Notao Assinttica
Notao
A Notao (L -se Big ) denota um limite assintoticamente justo.Seguindo
novamente a definio formal temos que f(n) (g(n) se existirem constates
positivas c1,c2, e n tais que 0 (c 1)*(g(n)) f(n) (c 2)*(g(n)) para qualquer
valor de n que cresa ilimitadamente.Quando falamos de limite assintoticamente
justo queremos dizer que f(n) igual a g(n) dentro de um fator constante,ou seja,a
funo f(n) est imprensada entre (c 1)*(g(n)) e (c 2)*(g(n)).Dizemos que f(n)
(g(n) se e somente se f(n) O(g(n)) e f(n) (g(n)).Alguns exemplos:

n^2 = (n^2)
2n^3 = (n^3)
4n^3 + 3n^2 (n^2)

Notao Assinttica
Notao

A anlise da notao a mais simples pois uma vez que se compreende a


notao O e a notao s necessrio verificar a propriedade onde se f(n) (g(n)
se e somente se f(n) O(g(n)) e f(n) (g(n)).Sendo assim a notao seria um
subconjunto das outras notaes.

Notao Assinttica
Comportamento

Comparao de funes

Grande parte das propriedades relacionais vlidas para nmeros reais tambm
so aplicveis s funes assintticas,seguem abaixo as mais importantes:

Transitividade
f(n) (g(n)) e g(n) (h(n)) implicam em f(n) (g(n))

f(n) O(g(n)) e g(n) O(h(n)) implicam em f(n) O(g(n))


f(n) (g(n)) e g(n) (h(n)) implicam em f(n) (g(n))

Comparao de funes
Reflexividade
f(n) (f(n))

f(n) O(f(n))
f(n) (f(n))

Simetria
f(n) (g(n)) se e somente se

g(n) (f(n))

Comparao de funes
Simetria de transposio
f(n) O(g(n))

se e somente se

g(n) (f(n))

Observao
* Sabendo que qualquer constante um polinmio de grau 0,as
funes constantes so expressas como n^0,que o mesmo que 1.

Você também pode gostar