Você está na página 1de 23

Anlise de complexidade

Introduo
Algoritmo: sequncia de instrues necessrias para a resoluo de um problema bem formulado (passveis de implementao em computador) Estrat gia:
! especificar (definir propriedades) ! arquitectura (algoritmo e estruturas de dados) ! anlise de comple"idade (tempo de e"ecuo e mem#ria) ! implementar (numa linguagem de programao) ! testar (submeter entradas e verificar observ$ncia das propriedades especificadas)

Anlise de complexidade
Anlise de algoritmos
%rovar que um algoritmo est correcto &eterminar recursos e"igidos por um algoritmo (tempo' espao' etc()
) comparar os recursos e"igidos por diferentes algoritmos que resolvem o mesmo problema (um algoritmo mais eficiente e"ige menos recursos para resolver o mesmo problema) ) prever o crescimento dos recursos e"igidos por um algoritmo * medida que o taman+o dos dados de entrada cresce

Anlise de complexidade
Anlise de algoritmos
,ue dados usar ) dados reais: verdadeira medida do custo de e"ecuo ) dados aleat#rios: assegura.nos que as e"perincias testam o algoritmo e no apenas os dados especficos
/aso m dio

! dados perversos: mostram que o algoritmo funciona com qualquer tipo de dados
%ior caso0

) dados ben ficos:


1el+or caso

Anlise de complexidade
Complexidade espacial e temporal
/omple"idade espacial de um programa ou algoritmo: espao de mem#ria que necessita para e"ecutar at ao fim
S(n) : espao de mem#ria e"igido em funo do taman+o n da entrada

/omple"idade temporal de um programa ou algoritmo: tempo que demora a e"ecutar (tempo de e"ecuo)
T(n) : tempo de e"ecuo em funo do taman+o n da entrada

/omple"idade vs( Eficincia %or ve2es estima.se a comple"idade para o 3mel+or caso4 (pouco 5til)' o 3pior caso4 (mais 5til) e o 3caso m dio4 (igualmente 5til)

Anlise de complexidade
Complexidade temporal
Anlise precisa
) algoritmo computador ) difcil prever tempos de e"ecuo de cada instruo e antever optimi2aes ) muitos algoritmos so 3sensveis4 aos dados de entrada ) muitos algoritmos no so bem compreendidos ) a linguagem

uma tarefa complicada


implementado numa dada linguagem compilada e o programa e"ecutado num dado

%ara prever o tempo de e"ecuo de um programa


! apenas necessrio um pequeno con6unto de ferramentas matemticas

Anlise de complexidade
Crescimento de funes
7 tempo de e"ecuo geralmente dependente de um 5nico par$metro n
) ordem de um polin#mio ) taman+o de um fic+eiro a ser processado' ordenado' etc( ) ou medida abstracta do taman+o do problema a considerar (usualmente relacionado com o n5mero de dados a processar)

,uando + mais do que um par$metro


! procura.se e"primir todos os par$metros em funo de um s# ! fa2.se uma anlise em separado para cada par$metro

Anlise de complexidade
Ordens de complexidade mais comuns
7s Algoritmos tm tempo de e"ecuo proporcional a
! 1 : muitas instrues so e"ecutadas uma s# ve2 ou poucas ve2es (se isto acontecer para todo o programa di2.se que o seu tempo de e"ecuo constante) logartmico (cresce ligeiramente * ! log n : tempo de e"ecuo

medida que n cresce8 quando n duplica log n aumenta mas muito pouco8 apenas duplica quando n aumenta para n2) ! n : tempo de e"ecuo linear (tpico quando algum processamento necessrio feito para cada dado de entrada8 situao #ptima quando

processar n dados de entrada' ou produ2ir n dados na sada)

Anlise de complexidade
Ordens de complexidade mais comuns
! n log n : tpico quando se redu2 um problema em subproblemas' se resolve estes separadamente e se combinam as solues (se n a 9 mil+o' n log n perto de :; mil+es) necessrio ! n2 : tempo de e"ecuo quadrtico (tpico quando pequenos problemas' e": produto de vectores) ! n3 : tempo de e"ecuo c5bico (para n < 9;;' n3 < 9 mil+o' e": produto de matri2es) ! 2n : tempo de e"ecuo e"ponencial (provavelmente de pouca aplicao prtica8 tpico em solues de fora bruta8 para n < :;' 2n < 9 mil+o8 se n duplica' o tempo passa a ser o quadrado) igual

processar todos os pares de dados de entrada8 prtico apenas em

Anlise de complexidade
Ordens de complexidade mais comuns

Anlise de complexidade
Notao de O grande
=a prtica' difcil (seno impossvel) prever com rigor o tempo de

e"ecuo de um algoritmo ou programa


) %ara obter o tempo a menos de:
constantes multiplicativas (normalmente estas constantes so tempos de e"ecuo de operaes at#micas) parcelas menos significativas para valores grandes de n

! >dentificam.se as operaes dominantes (mais frequentes ou muito mais demoradas) e determina.se o n5mero de ve2es que so e"ecutadas (e no o tempo de cada e"ecuo' que seria uma constante multiplicativa) ! E"prime.se o resultado com a notao de 37 grande4

Anlise de complexidade
Notao de O grande
&efinio: ?(n) < 7(f(n)) (l.se: ?(n) de ordem f(n)) se e s# se

e"istem constantes positivas c e n; tal que ?(n) @ c(f(n) para todo o n A n; Esta notao usada com trs ob6ectivos:
feito ao ignorar os termos menores nas f#rmulas feito na anlise ao despre2ar parte do programa ) limitar o erro que matemticas ) limitar o erro que que contribui de forma mnima para o custoBcomple"idade total ) permitir.nos classificar algoritmos de acordo com limites superiores no seu tempo de e"ecuo

Anlise de complexidade
Notao de O grande
E"emplos:
! ck nk+ ck-1 nk-1 +...+ c0 = O(nk) (ci . constantes) ! log2 n = O(log n) (no se indica a base porque mudar de base constante) ! 4 = O(1) (usa.se 9 para ordem constante) multiplicar por uma

Anlise de complexidade
Metodologia para determinar a complexidade
/onsidere.se o seguinte c#digo: for (i < ;8 i C n8 iDD) E >nstrues8 F A contabili2ao do n5mero de instrues constante de instrues O(n) simples: n iteraes e' em cada uma' so e"ecutadas um n5mero

Anlise de complexidade
Metodologia para determinar a complexidade
/onsidere.se o seguinte c#digo: for (i < ;8 i C n8 iDD) for (6 < ;8 6 C n8 6DD) E >nstrues8 F A contabili2ao do n5mero de instrues o ciclo interno (for 6) O(n) e ainda simples: e"ecutado n ve2es O(n2)

Anlise de complexidade
Efici ncia da !es"uisa #e"uencial
int !es"uisa#e"uencial $int x% int &'(% int n) * int i < ;' G < .98 BB G < posio onde se encontra " em H I+ile ( (i C n) JJ (G << .9) ) if (" << HKiL) G < i8 else if (HKiL C ") i < i D 98 else G < .:8 return (G)8 +

Anlise de complexidade
Efici ncia da !es"uisa #e"uencial
Eficincia temporal:
! A operao reali2ada mais ve2es continuidade do ciclo ,-ile' que de no encontrar x M o pior caso) ! Ne x e"istir no arraO' o teste 1 ve2 (no mel+or caso) reali2ado apro"imadamente n/2 ve2es (no caso m dio) e' o teste da condio de no m"imo n+1 ve2es (no caso

! Pogo' .$n) / O$n) $linear) no pior caso e no caso m dio

Anlise de complexidade
Efici ncia da !es"uisa #e"uencial
Eficincia espacial:
! Qasta o espao das variveis locais (incluindo argumentos) ! /omo os arraOs so passados 3por referncia4 (na linguagem /' o que passado o endereo do primeiro elemento do arraO)' o constante e independente do espao ocupado pelas variveis locais taman+o do arraO ! Pogo' #$n) / O$0) $constante) em qualquer caso

Anlise de complexidade
Efici ncia da !es"uisa 1inria
int !es"uisa1inaria $int x% int &'(% int n) * int inicio < ;' fim < n ! 9' meio' G < .98 I+ile ( (inicio C< fim) JJ (G << .9) ) E meio < (inicio D fim) B :8 if (" << HKmeioL) G < meio8 else if (" C HKmeioL) fim < meio . 98 else inicio < meio D 98 F return (G)8 +

Anlise de complexidade
Efici ncia da !es"uisa 1inria
Eficincia temporal:
! Em cada iterao' o taman+o do sub.arraO a analisar um factor de apro"imadamente igual a 2 ! Ao fim de 3 iteraes' o taman+o do sub.arraO a analisar apro"imadamente igual a n423 ! Ne no e"istir no arraO o valor procurado' o ciclo s# termina quando n423 0 log2 n 5 3 6 3 log2 n ! =o pior caso' o n5mero de iteraes apro"imadamente igual a dividido por

log2 n( Pogo' .$n) / O$log n) (logartmico)

Anlise de complexidade
Efici ncia da Ordenao por 1or7ul-agem
8oid Ordenar91or7ulagem $int &'(% int n) E int G' =umRtrocas' au"8 doE =umRtrocas < ;8 for (G < ;8 G C n.98 GDD) if (HKGL A HKGD9L) E au" < HKGL8 HKGL < HKGD9L8 HKGD9L < au"8 =umRtrocasDD8 F FI+ile (=umRtrocas 0< ;)8 F

Anlise de complexidade
Efici ncia da Ordenao por 1or7ul-agem
=o mel+or caso:
! Apenas 9 e"ecuo do ciclo for : n50 comparaes e 6 trocas ! =o total : $n50) operaes O$n)

=o pior caso:
! 9S passagem pelo ciclo for : n:0 comparaes e n:0 trocas ! :S passagem pelo ciclo for : n:0 comparaes e n:2 trocas ! ((( ! (n.9). sima passagem pelo ciclo for: n50 comparaes e 0 troca ! ?otal de comparaes : (n.9)"(n.9) < n: ! :n D 9 ! ?otal de trocas : (n.9) D (n.:) D ((( D 9 < n(n.9)B: < (n : ! n)B: ! ?otal de operaes : (n: ! :n D 9) D ((n: ! n)B:) O$n2)

Anlise de complexidade
Efici ncia da Ordenao por 1or7ul-agem
8oid Ordenar91or7ulagem9Opt $int &'(% int n) E int G' GG' fim < n.9' au"8 doE GG < ;8 for (G < ;8 G C fim8 GDD) if (HKGL A HKGD9L) E au" < HKGL8 HKGL < HKGD9L8 HKGD9L < au"8 GG < G8 F fim < GG8 FI+ile (GG 0< ;)8

Anlise de complexidade
Efici ncia da Ordenao por 1or7ul-agem
=o mel+or caso:
! Apenas 9 e"ecuo do ciclo for : n50 comparaes e 6 trocas ! =o total : $n50) operaes O$n)

=o pior caso:
! 9S passagem pelo ciclo for : n:0 comparaes e n:0 trocas ! :S passagem pelo ciclo for : n:2 comparaes e n:2 trocas ! ((( ! (n.9). sima passagem pelo ciclo for: 0 comparao e 0 troca ! ?otal de comparaes : (n.9) D (n.:) D ((( D 9 < n(n.9)B: ! ?otal de trocas : (n.9) D (n.:) D ((( D 9 < n(n.9)B: ! ?otal de operaes : :"(n(n!9)B:) < n(n.9) < (n :!n) O$n2)

Você também pode gostar