You are on page 1of 16

Estruturas de Informao ------- Anlise de Algoritmos _____________________________________________________________________________________ ____

ESTRUTURAS DE INFORMAO E ANLISE DE ALGORITMOS

Estrutura de informao uma maneira sistemtica de organizar e aceder a dados e algoritmo um procedimento passo a passo para realizar uma tarefa num intervalo de tempo finito. Estes conceitos so fundamentais em computao e dedicaremos a nossa ateno discusso de princpios e paradigmas para que o projecto e a implementao de boas estruturas e algoritmos formem uma ferramenta para o desenvolvimento de solues de importantes problemas atravs do computador. Um algoritmo deve apresentar as seguintes caractersticas: Ter entrada e sada ?? Ser finito ?? Ser definido
??

Alm disso, ao projectarmos estruturas e algoritmos teremos que ter sempre presente dois objectivos principais: Correco ?? Eficincia
??

Correco significa trabalhar correctamente quaisquer que sejam os dados de entrada dentro de um certo domnio. Assim, uma estrutura que deve guardar uma coleco de nmeros ordenadamente , nunca deve permitir que sejam guardados nmeros fora de ordem. De igual modo um algoritmo para listar valores por ordem nunca deve fazer a sada de valores fora dessa ordem. Quanto eficincia significa que quer estruturas quer algoritmos devem ser rpidos e nunca usar recursos do computador superiores ao necessrio. Estes objectivos acarretam a produo de software de qualidade e por isso podemos acrescentar que haver tambm objectivos a cumprir nas implementaes de estruturas e de algoritmos, tais como: Robustez ?? Adaptabilidade ?? Reutilizao
??

Por robustez entende-se a possibilidade de dar resposta manipulao de entradas no esperadas. Claro que a robustez no surge automaticamente, tem que ser projectada desde o incio.

_____________________________________________________________________________________ ____ Departamento de Eng Informtica do ISEP 1

Estruturas de Informao ------- Anlise de Algoritmos _____________________________________________________________________________________ ____

Adaptabilidade significa permanecer embora se alterem as condies do seu ambiente, por exemplo no deveria ser problema a chegada do novo milnio e os efeitos nos clculos de datas se o software fosse adaptvel Reutilizao significa que o mesmo cdigo seja um componente de diferentes sistemas em vrios domnios de aplicao. No entanto esta reutilizao deve ser usada com cuidado pois uma das fontes de erros. A reutilizao traduz-se numa importante poupana de tempo e consequentemente de dinheiro. Tem havido muita investigao no campo da engenharia de software e de linguagens de programao para o desenvolvimento de metodologias para o projecto de software que sejam simples e poderosas . Actualmente uma que se mostra bastante promissora baseada na orientao para objectos. Os princpios orientadores desta aproximao so: Abstraco Encapsulamento ?? Modularidade
?? ??

O conceito de abstraco existe quando somos capazes de destacar num sistema as suas partes fundamentais e descrev-las numa linguagem simples e precisa. Por exemplo, no caso de um editor de texto, no "editar" da barra de menu, t emos geralmente as operaes de "cortar" e "colar". Podemos dizer que "cortar" retira o texto seleccionado e coloca-o num buffer externo e que o "colar" insere o contedo desse buffer numa posio especfica do texto. A definio destas operaes foi feita de uma maneira clara e simples, sem necessidade de entrar em pormenores, isto , introduzindo abstraco. Usando este paradigma para projectarmos estruturas de informao atingimos o que chamamos Tipos Abstractos de Dados (ADT). Um Tipo Abstracto de Dados um modelo matemtico duma estrutura de dados que especifica o tipo de dados guardados e as operaes que se podem realizar sobre eles. Um Tipo Abstracto de Dados ser modelado por uma linguagem orientada por objectos atravs de uma classe. O conceito de encapsulamento define que os diferentes componentes de um sistema de software devem implementar uma abstraco como descrito acima sem revelarem pormenores internos da sua implementao. Ns percebemos como usar as operaes de "cortar" e "colar" sem precisarmos de saber exactamente como est implementado. Uma das vantagens do encapsulamento que d ao programador toda a liberdade na implementao de pormenores do sistema. A modularidade refere-se a uma organizao estrutural em que os diferentes componentes dum sistema de software esto divididos em unidades funcionais que podem interactuar de forma bem definida. Alm disso esta forma organizacional est estritamente ligada noo de hierarquia,
_____________________________________________________________________________________ ____ Departamento de Eng Informtica do ISEP 2

Estruturas de Informao ------- Anlise de Algoritmos _____________________________________________________________________________________ ____

devem-se estruturar os diferentes mdulos de uma forma hierrquica, agrupando funcionalidades comuns ao mais alto nvel e comportamentos especficos sero extenses dos mais gerais. Esta forma de estruturar o projecto de software ,recorrendo modularidade e hierarquia vai facilitar a reutilizao. Estes princpios agora descritos (abstraco, encapsulamento e modularidade) para projectarmos o software numa aproximao orientada para objecto, exigem tcnicas especficas que se traduzem em : Classes e objectos ?? Interfaces e tipificao ?? Herana e Polimorfismo.
??

Estes conceitos j foram estudados em disciplinas anteriores e portanto podem ser consultados por exemplo nos apontamentos de LPII.

Enumeramos um conjunto de caractersticas a que deve obedecer o projecto de sofware, nomeadamente de estruturas de informao e algoritmos no paradigma de orientao para objectos. Para que o entendimento seja mais completo e consigamos saber porqu usar uma determinada estrutura ou um determinado algoritmo precisamos de ver como que podemos analisar algoritmos. A Anlise de algoritmos pode ser feita atendendo a diferentes aspectos. Assim temos anlise envolvendo : Funcionalidade (tracing / teste ) ?? Correco ( tcnicas matemticas ) ?? Complexidade (espacial e temporal )
??

sobre a anlise de complexidade de algoritmos que nos vamos debruar. ANLISE de COMPLEXIDADE um dos critrios para avaliar algoritmos segundo o qual avaliado o ndice de crescimento do tempo (temporal) ou do espao (espacial) exigido para resolver instncias do problema cada vez maiores.

TEMPO de COMPLEXIDADE de um ALGORITMO o tempo exigido para a execuo de um algoritmo, expresso como uma funo do tamanho do problema . TAMANHO do PROBLEMA o inteiro associado a um problema que a medida da quantidade dos dados de entrada.

_____________________________________________________________________________________ ____ Departamento de Eng Informtica do ISEP 3

Estruturas de Informao ------- Anlise de Algoritmos _____________________________________________________________________________________ ____

ESPAO de COMPLEXIDADE de um ALGORITMO o espao exigido para a execuo de um algoritmo, expresso como uma funo do tamanho do problema.

COMPLEXIDADE TEMPORAL O tempo para correr completamente um programa, a soma do tempo de compilao e do tempo de execuo. O tempo de compilao depende das mquinas, compiladores e no prpriamente das caractersticas do algoritmo. Analisaremos ento o tempo de execuo. Sabemos que o valor exacto do tempo de execuo de um algoritmo tambm depende da linguagem e da mquina utilizada, logo no isto que nos interessa, mas uma ordem de grandeza desse tempo em funo da quantidade dos dados de entrada. Pretendemos saber como se comporta um algoritmo quanto ao tempo de execuo, isto como varia o tempo de execuo do algoritmo atendendo s variao da quantidade de dados a processar. Por exemplo, ordenar um vector com 10 elementos no leva o mesmo tempo que ordenar um vector com 1000 elementos. O que nos interessa relacionar a variao que existe no tempo de ordenao com a variao do nmero de elementos. Interessa-nos portanto prever o crescimento do tempo de execuo conforme mudam as caractersticas da instncia do problema, para podermos comparar dois programas que realizam a mesma funo ou para ajuizarmos se um determinado programa pode ser usado para fornecer respostas em tempo real. So vrias as razes que levam necessidade deste tipo de estudo. O grfico abaixo mostra algumas das funes caractersticas associadas complexidade temporal de algoritmos

_____________________________________________________________________________________ ____ Departamento de Eng Informtica do ISEP 4

Estruturas de Informao ------- Anlise de Algoritmos _____________________________________________________________________________________ ____

140 120 Funo Complexidade 100 80 60 40 20 n 0 1 2 3 4 5 6 7 8 Dados log n 9 10 n! 2n n2

n*log n

Nomeadamente: nn n! 2n, so exemplos de funes exponenciais e h ainda funes do tipo polinomial como por exemplo : n2 n3 n n log n log n Conforme se pode verificar no grfico anterior os algoritmos com complexidade do tipo exponencial so muito lentos, uma vez que a um aumento pequeno na dimenso implica um enorme aumento no tempo de execuo, s sero aplicveis quando existem poucos dados de entrada. No caso de problemas de grandes dimenses dever sempre que possvel fazer-se a substituio de algoritmos exponenciais por algoritmos polinomiais. evidente que quando a dimenso dos dados de entrada aumenta qualquer algoritmo polinomial mais eficiente que um algoritmo exponencial

FUNO VALORES APROXIMADOS n 10 100 1000 n log n 33 664 9966 3 n 1000 1000000 109 2n 1024 1.27 * 1030 1.05 * 10301 n! 3628800 10158 4 * 102567
_____________________________________________________________________________________ ____ Departamento de Eng Informtica do ISEP 5

Estruturas de Informao ------- Anlise de Algoritmos _____________________________________________________________________________________ ____

INTRODUO NOTAO O( ) (big Oh) Este tipo de notao assimpttica porque vai ser definida para um comportamento limite, quando aumenta o tamanho do problema . Para introduzirmos esta questo comearemos por exemplificar como fazer a anlise da complexidade temporal de um algoritmo Consideremos um algoritmo que determina a quantidade de 1s existentes na representao binria de um nmero n.

algoritmo: 1. ler(n) 2. conta? 0 3. Enquanto n > 0 fazer 4. conta? conta + resto de n por 2 5. n? n/2 Fim enquanto

Seja t1 o tempo necessrio para a execuo dos passos 1. e 2. t2 do passo 3. t3 dos passos 4. e 5. O tempo total para execuo do algoritmo, atendendo a estes tempos e ao nmero de vezes que os diferentes passos se repetem ser: T(n) = t1 * 1 + t2 * (K+1) + t3 * K , em que K ser o nmero de iteraes do ciclo. O valor de K ir depender do valor de n, quanto maior for o nmero n , mais iteraes tero que ser feitas, isto mais divises por 2 sero efectuadas at o valor de n ser nulo. Temos agora que relacionar este K com n. Se atendermos construo da representao binria de nmeros verificamos que o nmero de divises por 2 se relaciona com o log 2 n,isto , a funo inversa da potncia de base 2 que se aplica para o clculo do valor decimal de um nmero na sua representao binria. Com efeito verifica-se: n K funo

_____________________________________________________________________________________ ____ Departamento de Eng Informtica do ISEP 6

Estruturas de Informao ------- Anlise de Algoritmos _____________________________________________________________________________________ ____

5 7 8 18

3 3 4 5

1+ 1+ 1+ 1+

log 2 5 log 2 7 log 2 8 log 2 18

NOTA 1: log 2 n design-se por cho do log 2 n e significa o maior valor inteiro contido em log 2 n. Ex: 3.1 = 3 -2.2 = -3 NOTA 2 : X representa-se o tecto de X, isto , o menor inteiro no inferior a X Ex: 3.1 = 4 -2.2 = -2

Retomando a expresso que nos determina o tempo total de execuo do algoritmo temos: T(n) = t1 * 1 + t2 * (K+1) + t3 * K T(n) = t1 + t2 + k * (t2 + t3) , substituindo K por (1 + log 2 n ) vem, T(n) = t1 + t2 + (1 + log 2 n )*(t2 + t3) como t1 e t2 e t3 so constantes para um dado computador, possvel encontrar uma constante C tal que se verifique, T(n) < C * (1 + log 2 n ) representando (1 + log 2 n ) por g (n) teremos:

T(n) < C * g(n) , para n > 1. Assim dizemos que o tempo de execuo de ordem g(n) = 1 + log 2 n e representamos por t(n) = O (g(n)) D-nos ideia de como o crescimento do tempo de execuo com a variao de n. Para diferentes computadores os tempos t1, t2, t3 so diferentes mas g(n) constante. A notao das ordens de grandeza permite representar algo independente do computador. Em geral dizemos que f(n) da ordem de g(n) quando existe um K tal que : n >= n0 ? f(n) < =K * g(n) ou seja, g(n) multiplicado por uma constante apropriada majora f(n) para todos os n > n0.
_____________________________________________________________________________________ ____ Departamento de Eng Informtica do ISEP 7

Estruturas de Informao ------- Anlise de Algoritmos _____________________________________________________________________________________ ____

No exemplo, g(n) = 1 + log 2 n < 2 * log 2 n < 2 * log 2 n , n > 2. Podemos ento dizer que o algoritmo estudado da ordem ( ou complexidade temporal ) de log 2 n porque, t(n) < C * g(n) < 2C * log 2 n

Se tivssemos : g(n) < 1000 n3 diramos que era de ordem n3 ? O (n3) g(n) < 5n2 + 3n + 7 ordem n2 ? g(n) < 1032 ordem 1 ? g(n) < n + log n ordem n ? g(n) < 1 + 2 + 3 +4 + ... + n ordem n2 ?

O (n2) O (1 ) O (n ) O (n2)

NOTA :

1 + 2 + 3 +4 + ... + n = n ( n +1 )/2 20 + 21 + 22 + 23 + ... + 2n = 2n+1 1

Interessa tambm referir o seguinte: Se T1(n)=O(f(n)) e T2(n)=O(g(n)) ento a) T1(n) + T2(n) = max(O(f(n), O(g(n)) b) T1(n) * T2(n)= O(f(n) * g(n)). Podemos analisar o algoritmo seguindo outras ordens, nomeadamente a ordem omega e a ordem teta. Assim, diz-se que o algoritmo A de ordem ? (g(n)) se existe uma constante C, para valores de n>=n0 tal que se verifica a relao T(n)> C* g(n). Diz-se que o algoritmo A de ordem ? (g(n)) se de O(g(n)) e de ordem ? (g(n)). Faremos nesta introduo s a anlise big oh.

O exemplo apresentado anteriormente, era determinstico, isto , no foi preciso atender forma de distribuio dos dados para obter o tempo de execuo. Geralmente tal no se passa assim, para ser possvel fazer a anlise de complexidade necessrio supor determinada distribuio dos dados. E nesse caso h a considerar :
_____________________________________________________________________________________ ____ Departamento de Eng Informtica do ISEP 8

Estruturas de Informao ------- Anlise de Algoritmos _____________________________________________________________________________________ ____

Caso mais desfavorvel ?? Caso mais favorvel ?? Caso mdio


??

Vamos ento analisar um caso no determinstico, seja por exemplo a pesquisa sequencial de um valor X num vector com n elementos. Algoritmo: Inicio enc ? 0 i? 1 Enquanto i <= n e no enc se v( i) = X ento enc ? 1 seno i ? i+1 Fim enquanto ... .... ....

.....

Para fazermos a anlise de complexidade devemos primeiro identificar qual(ais ) a operao activa(s), aquela que vai ser preponderante na execuo do algoritmo, como estamos a fazer a anlise big oh, podemos desprezar os termos de ordem baixa, uma vez que big oh um limite superior. Neste caso, a operao activa ser: se v( I) = X e vamos analisar o nmero de vezes que esta operao ser executada em funo do nmero de elementos do vector, tamanho do problema. Como fcilmente se conclui, agora no s o tamanho do problema que vai influenciar o tempo de execuo, mas tambm fundamental, a posio do elemento a pesquisar no vector. Assim se o valor X se encontrar no incio do vector , o tempo de execuo no o mesmo que no caso de ele se encontrar no final. Teremos ento de considerar os 3 casos anteriormente enunciados.

Caso mais favorvel:

X encontra-se no incio do vector, s feita uma comparao. Complexidade O ( 1 ).

_____________________________________________________________________________________ ____ Departamento de Eng Informtica do ISEP 9

Estruturas de Informao ------- Anlise de Algoritmos _____________________________________________________________________________________ ____

Caso menos favorvel

X encontra-se no fim do vector, so feitas n comparaes. Complexidade O ( n ).

Caso mdio : Para analisarmos esta situao, uma vez que no sabemos em que posio se vai encontrar X, teremos que calcular o tempo mdio supondo que se verificam ni ocorrncias em cada uma das posies e depois fazer uma mdia pesada. Assim, ocorreu: n1 vezes na posio 1 e levou o tempo t1 n2 vezes na posio 2 e levou o tempo t2 n3 vezes na posio 3 e levou o tempo t3 . . . nn vezes na posio n e levou o tempo tn nk vezes no ocorreu e levou o tempo tk Sendo N = n1 + n2 + n3 + ... + nn + nk O tempo mdio ser: Tm = (n1* t1 + n2 * t2 + n3 * t3 +... +nn * tn + nk * tk ) /N Tm = n1/N* t1 + n2/N * t2 + n3/N * t3 +... +nn/N * tn + nk/N * tk Quando o nmero de ocorrncias for infinito ni /N tender a ser a probabilidade de ocorrer a situao i. Assim, Tm =? (probabilidade de ocorrer a situao i) * (o tempo da ocorrncia i) Sendo, p a probabilidade de X existir no vector, ser: Probabilidade de X no existir no vector Probabilidade de X estar na posio i 1-p p/n

Aplicando a frmula deduzida para Tm, teremos:

_____________________________________________________________________________________ ____ Departamento de Eng Informtica do ISEP 10

Estruturas de Informao ------- Anlise de Algoritmos _____________________________________________________________________________________ ____

Tm = prob. de X estar em 1 * 1 + prob. de X estar em 2 * 2 + ... ... + prob.de X estar em n * n + prob. de X no estar no vector * n Tm = p /n* 1 + p/n *2 + p/n * 3 + ... +p/n * n + (1-p) * n

Tm = p /n * (1 + 2 + 3 +.... + n) + (1- p) * n Tm = p * (1 /n + 2/n + 3/n +.... + n/n) + (1- p) * n Tm = p * (n + 1) /2 + (1- p) * n Se p = 1 ? Tm = ( n + 1)/2 ? Se p = 1/2 ? Tm = 3 /4 n ? O (n) O (n)

Assim, qualquer que seja o valor de p (entre 0 e 1, uma vez que uma probabilidade) podemos considerar que Tm de ordem n. vulgar acontecer como neste exemplo, o caso mdio coincidir com o caso mais desfavorvel.

Se os computadores so mais rpidos podemos no mesmo tempo tratar problemas maiores, mas a complexidade do algoritmo que determina o aumento do tamanho do problema que pode conseguir-se com esse aumento de velocidade, como j foi referido. Descrevemos abaixo uma tabela que evidencia a variao do tamanho do problema a tratar para o mesmo tempo de processamento de acordo com a complexidade temporal do algoritmo.

ALGORITMO A1 A2 A3 A4 A5

COMPLEXIDADE n n log n n2 n3 2n

1 segundo 1000 140 31 10 9

1 minuto 6*104 4893 244 39 15

1 hora 3.6*106 2*105 1897 153 21

Supondo que a velocidade da mquina aumentava 10 vezes, vejamos o que se passaria no aumento do tamanho do problema para algumas complexidades temporais mais vulgares :
_____________________________________________________________________________________ ____ Departamento de Eng Informtica do ISEP 11

Estruturas de Informao ------- Anlise de Algoritmos _____________________________________________________________________________________ ____

ALGORITMO A1 A2 A3 A4 A5

COMPLEXIDADE TEMPORAL n n log n n2 n3 2n

TAMANHO MAX na mquina inicial s1 s2 s3 s4 s5

TAMANHO MAX na mq. 10 x + rpida 10 * s1 10* s2 aprox. s2 grd 3.16 * s3 2.15 * s4 3.3 + s5

Faamos mais outro exemplo, consideremos agora o algoritmo de multiplicao de 2 matrizes, seja C(m, p) = A(m, n) x B(n, p) Algoritmo Inicio Para i =1 at m Para j = 1 at p 1. s ? 0 Para k = 1 at n 2. s ? s + A(i, k) * B(k, j) Fim para (k) 3. C(i, j) ? s Fim para (j) Fim para (i) ... ..... ......

Supondo as matrizes quadradas com m = p = n teremos: A linha 1. tem como tempo de execuo t1 e executada n2 vezes

_____________________________________________________________________________________ ____ Departamento de Eng Informtica do ISEP 12

Estruturas de Informao ------- Anlise de Algoritmos _____________________________________________________________________________________ ____

A linha 2. tem como tempo de execuo t2 e executada n3 vezes A linha 3. tem como tempo de execuo t3 e executada n2 vezes Logo o tempo de execuo ser: T(n) = (t1+t3) * n2 + t2 * n3 ou seja T(n) = K * n2 + K * n3 ? O (n3) Nesta anlise podemos atender s seguintes regras: . O tempo de execuo de um ciclo no mximo o tempo das instrues dentro do ciclo, vezes o nmero de iteraes. . No caso de ciclos encaixados, o tempo de execuo total de uma instruo dentro de um grupo de ciclos encaixados o tempo de execuo da instruo multiplicada pelo produto do tamanho de todos os ciclos. . Instrues consecutivas adicionam-se. . No caso de uma instruo se o tempo de execuo nunca maior do que o tempo de execuo SE (cond) Ento C1 Seno C2 do teste mais o maior dos tempos de execuo de C1 e de C2. . Se houver chamadas a funes, obviamente que estas tero que ser analisadas primeiro. . No caso de recursividade, se for simples e for possvel transformar num ciclo ser uma anlise trivial. No caso em que a recursividade difcil de converter em ciclo, h que resolver a relao de recorrncia com ateno( exemplo nas aulas prticas).

LIMITAES DA ANLISE DA COMPLEXIDADE TEMPORAL No podemos esquecer que esta anlise da complexidade de algoritmos sofre de limitaes, nomeadamente quando se determina a complexidade ignorando-se as constantes. Assim, um algoritmo cujo ndice de crescimento seja 75000 g(n) ainda considerado de complexidade g(n). Atendamos tambm ao seguinte que na anlise temporal s se mede o tempo, podendo haver eventualmente outras propriedades mais importantes, por exemplo, se a compreenso do algoritmo for mais importante ento o tempo de complexidade dever ficar para trs. De modo idntico, em algoritmos numricos a preciso muitas vezes mais importante do que a complexidade temporal e podemos dar preferncia a um algoritmo mais lento, mas mais preciso em vez de um mais rpido mas menos preciso. Por vezes h que tambm balancear entre o tempo de execuo de um algoritmo e o espao por ele ocupado. Assim, algoritmos que precisem de correr em processadores embebidos, tais como pequenos computadores que controlam automveis ou telemveis, o espao mais precioso do
_____________________________________________________________________________________ ____ Departamento de Eng Informtica do ISEP 13

Estruturas de Informao ------- Anlise de Algoritmos _____________________________________________________________________________________ ____

que o tempo e preferem-se algoritmos mais lentos que ocupem menos espao do que mais rpidos mas que exijam mais espao. Do mesmo modo, podemos preferir entre dois algoritmos que apresentem em caso mdio uma complexidade temporal diferente, aquele que possui a mais desfavorvel desde que , por exemplo, as aplicaes visem preponderncia para execuo do algoritmo nas condies do caso mais favorvel e nesse caso a complexidade deste seja melhor , embora o no seja no caso mdio. Em concluso, temos que ser cuidadosos quando escolhemos um algoritmo em detrimento de outro. Como vimos a anlise de algoritmos tem limitaes, contudo, um analista prevenido quanto a estas limitaes, tem na anlise da complexidade uma ferramenta importante e extremamente til sempre que precise de comparar algoritmos e recomendar um em vez de outro. COMPLEXIDADE ESPACIAL Aquilo que dissemos anteriormente para o tempo de execuo de um algoritmo repetimo-lo mas agora considerando o espao ocupado pelo algoritmo durante a respectiva execuo. O espao de complexidade de um programa o total de memria que necessrio para correr completamente. Interessa conhecer a funo que define o comportamento do algoritmo relacionando o espao de memria ocupado com o nmero de dados que tm que ser manipulados.

Intervm neste espao os seguintes componentes: Espao de Instrues: espao necessrio para guardar a verso compilada das instrues do programa. Este espao constante para um dado programa referente a um dado compilador, com determinadas opes de compilao. Cada compilador para a construo de cdigo mquina da mesma instruo, precisa de diferente espao, cada um gera o seu cdigo. Ainda o mesmo compilador pode gerar diferente cdigo de acordo com o uso ou no de opes de compilao. O prprio computador tambm pode afectar o espao de cdigo, por exemplo se possui hardware com vrgula flutuante ou no. No primeiro caso as instrues com vrgula flutuante so traduzidas numa instruo mquina por operao. Caso contrrio, ter-se- que gerar cdigo que simule a operao em vrgula flutuante. No este espao que nos interessa analisar. Espao de Dados: espao onde esto definidas as variveis globais e que varia de acordo com os dados que tem o nosso problema. Espao de Stack: usado para guardar a informao necessria para resumir a execuo de funes. A, de uma forma genrica podemos dizer que so guardados os endereos de retorno das funes, variveis locais e parmetros formais. Este espao tal como o anterior varia com o tipo de algoritmo usado e portanto ser tambm analisado para avaliao da complexidade espacial.
_____________________________________________________________________________________ ____ Departamento de Eng Informtica do ISEP 14

Estruturas de Informao ------- Anlise de Algoritmos _____________________________________________________________________________________ ____

Estes dois espaos sero aqueles que nos debruaremos para analisar o espao de complexidade. Exemplo1: analisar quanto complexidade espacial, o algoritmo da funo que faz a pesquisa sequencial de um valor x, num vector a, com n elementos. int pesquisa_sequencial( a[], &x, n) Inicio //devolve a posio do array onde se encontra x, devolver -1 se no existir Para(i=0; i<n && a[i]!=x;i++); Se(i==n) Ento devolve -1; Seno devolve i; Fim Espao total : endereo de retorno apontador a apontador para parmetro actual de x valor do parmetro formal n varivel local i 2 bytes+ 2 + 2 + 2 + 2
__________________

10bytes Nota: o espao para o array no foi alocado nesta funo , logo no foi contabilizado. Assim esta funo tem um espao de complexidade constante, de O (1). Exemplo2:Deduzir a ordem da complexidade temporal dos algoritmos que determinam o factorial de um valor n, algoritmo recursivo e iterativo. int factorialRecursivo( n) Inicio se(n<=1) ento devolve 1; seno devolve n * factorialRecursivo( n-1); Fim A profundidade da recursividade n e de cada vez que a funa invocada, o espao de stack ocupado dado por: endereo de retorno 2 bytes+ valor do parmetro formal n 2
__________________

4bytes isto isto , o espao total ser n*4, ou seja O(n). No caso de funo iterativa para o clculo de factorial teremos:
_____________________________________________________________________________________ ____ Departamento de Eng Informtica do ISEP 15

Estruturas de Informao ------- Anlise de Algoritmos _____________________________________________________________________________________ ____

int factorialIterativo ( int n) Inicio fact=1; enquanto(n>1) fact=n*fact; n--; Fenquanto devolve fact; Fim Assim, o espao de stack ser dado por: Espao total : endereo de retorno valor do parmetro formal n varivel local fact 2 bytes+ 2 + 2
__________________

6 bytes, neste caso o espao constante, no depende do valor de n, logo a complexidade espacial de O(1); Atendendo complexidade espacial o algoritmo iterativo para clculo de factoriais mais favorvel do que o recursivo.

_____________________________________________________________________________________ ____ Departamento de Eng Informtica do ISEP 16

You might also like