Capítulo 12 - Análise da eficiência de algoritmos

Tamanho: px
Começar a partir da página:

Download "Capítulo 12 - Análise da eficiência de algoritmos"

Transcrição

1 Capítulo 1 - Aálise da eficiêcia de algoritmos Neste capítulo efectuaremos uma itrodução à aálise de eficiêcia de algoritmos, tópico importate da ciêcia da computação, ilustrado-a através de algus exemplos. Iremos cosiderar que os algoritmos a aalisar se ecotram implemetados a liguagem de programação Mathematica. Como veremos, a aálise do custo de algoritmos recursivos coduz-os em geral a relações de recorrêcia, ao passo que somatórios aparecem muitas vezes ligados à caracterização do custo de ciclos. Algoritmos recursivos, que se baseiam em dividir um problema um certo úmero (fixo) de subproblemas, coduzem-os ormalmete a certo tipo relações de recorrêcia ão lieares, ão aalisadas explicitamete o capítulo 9, pelo que também aproveitaremos este capítulo para itroduzir um método que em geral permite determiar a ordem de gradeza da solução de tais relações de recorrêcia. Por outro lado, embora algoritmos recursivos sejam ormalmete a solução computacioal mais simples e elegate para certo tipo de problemas, eles são em regra um pouco meos eficietes que os correspodetes algoritmos de caráter iterativo, e em certos casos (que caracterizaremos iformalmete) ão têm mesmo qualquer iteresse prático, devido à sua ieficiêcia. Fialmete, como já referimos, embora o tempo de execução ão seja o úico aspecto relevate a aálise de um algoritmo, uma vez que este cosome outros recursos computacioais (como memória) que também têm de estar dispoíveis, iremos cocetrar a ossa aálise apeas o tempo de execução (ou, mais precisamete, uma medida que traduza de algum modo tal tempo de execução dos algoritmos). Secção 1: Aálise empírica. Cosidere-se que temos um certo problema que queremos resolver computacioalmete, e que dispomos de dois (ou mais) programas que resolvem o problema em causa e queremos escolher o melhor (o setido de o mais eficiete com meor tempo/custo de execução) de etre eles. Uma primeira coisa que podemos fazer é proceder a uma (chamada) aálise empírica: pôr os dois programas a correr e ver qual demora meos tempo. Se um demorar 1 segudo e o outro 10 segudos, tudo idica que o primeiro é melhor. E, a prática, muitas vezes limitamo-os a uma aálise empírica, deste tipo. No etato, se em casos como o aterior, esta aálise empírica é um idicador que o programa que demora meos tempo é capaz de ser o melhor, ela pode ser egaadora, e tem de ser feita com cuidado: Se um demorar 1h e o outro 1h15m, será que aida poderemos estar tão certos de que um é melhor que o outro 1? 1 Para além dos aspectos a seguir mecioados, refira-se aida que poderá acotecer que a ideia que está por detrás de um programa seja até melhor do que a que está por detrás do outro, mas que essa ideia teha sido um caso implemetada de forma optimizada para um certo sistema computacioal, ao passo que o outro caso pode estar mal implemetada (ão o setido de ão estar correcta i.e. de ão resolver o problema, mas sim o setido de estar implemetada de forma claramete pouco eficiete). Por exemplo, as fuções predefiidas do sistema Mathematica foram costruídas de forma totalmete optimizada, de modo a tirar o máximo partido das características desse sistema. 419

2 Se os programas em causa, em vez de demorarem segudos, demorarem horas ou dias a correr, será que esta aálise aida é uma boa solução? Pelo meos do poto de vista teórico, um programa pode demorar, para uma istâcia de dimesão (mesmo para um valor de razoável) 10 vezes meos tempo do que outro, mas para istâcias maiores (ou muito maiores) pode ser muito, muito pior. Como se ilustrou o capítulo aterior, se um programa executar p.ex operações e outro executar 3 operações, e se cada operação demorar (em média) um ao-segudo a ser executada, etão para =100 o primeiro demora 10 vezes mais tempo que o segudo (0,01 segudos vs 0,001 segudos), para =1000 demoram o mesmo tempo (1 segudo), mas para = , o primeiro demora 77,8 horas ao passo que o segudo demorará 31,71 aos! Até que poto ão poderemos estar a executar os programas para uma istâcia do problema que correspoda ao caso mais favorável para um dos programas e ao mais desfavorável para o outro? Pode ser que um dos programas se comporte melhor para iput s de pequea dimesão e o outro para iput s de maior dimesão (e podemos querer apllicar o programa a um cojuto de casos de pequea ou de grade dimesão, devedo etão a escolha ser feita em fução disso). Devemos portato, em geral, mesmo quado fazemos uma aálise empírica, proceder ão a um teste, mas sim a uma bateria de testes que permita testar os programas para diversos tipos de iput s pequeos e/ou grades (em fução do caso em questão) e que cubram as diversas situações possíveis (melhor situação para um e para outro programa, pior situação, situação típica ). Mas isso obriga a que se aalise os algoritmos em causa, estudado como o comportameto dos programas é afectado por certas características dos iput s relevates. Assim, embora tal aálise empírica seja relevate, e ão deva ser desprezada, o que em geral se procura fazer é dispor de maeiras de medir matematicamete, de alguma forma, o tempo/custo de execução do programa, e compará-lo com o de outros programas que resolvam o mesmo problema. Isto é, como referimos o capítulo aterior, o que procuramos é traduzir tal tempo de execução como uma fução matemática do seu parâmetro e estudar como ela se comporta. Como calcular esse tempo de execução? Como observámos o capítulo aterior, uma primeira hipótese cosiste em associar a cada tipo de operação executada pelo programa um certo parâmetro que deota o tempo de execução dessa operação, cotar o úmero de vezes que são efectuadas cada uma dessas operações, e a partir daí calcular o tempo total de execução do programa como uma fução do iput, parametrizada a esses tempos (tempos que depois podemos, aturalmete, istaciar). Na próxima secção ilustraremos este tipo de aálise do tempo de execução de um programa, para um programa imperativo e um programa recursivo que resolvem o mesmo problema. Tempo esse cujo valor cocreto depede do sistema computacioal em que tal programa é implemetado. 40

3 Secção : Cálculo do tempo total de execução de um programa: um exemplo 3. Comecemos por cosiderar, como primeiro exemplo, o caso de um algoritmo muito simples para o cálculo do factorial de um atural. Este exemplo servirá para ilustrar todos os detalhes que podem ser cosiderados a cálculo do tempo total de execução de programas imperativos e recursivos. Supoha-se que se pretede calcular computacioalmete 4 o factorial de um úmero atural. Um algoritmo para o cálculo imperativo do factorial : É fácil costruir um algoritmo para o cálculo, imperativo, do factorial. Por exemplo, usado um, para guardar o úm ero cujo factorial se pretede calcular, e cujo valor será passado ao algoritmo (i.e. esse úmero será o valor iput do algoritmo e um será o úico parâmetro do algoritmo); res, para desigar a variável que vai guardado o res ultado calculado até ao mometo; e prox, para desigar a variável que vai cotrolado o pro g esso o cálculo; facilmete se verifica que o algoritmo a seguir (ode a variável do progresso prox idica o próx imo 5 valor a multiplicar), codificado a liguagem Mathematica, permite calcular, de forma imperativa, tal factorial (assumido, sem testar, que o iput é um atural): res = 1 ; (* cometário: res guarda o iício o valor de 0! *) prox = 1 ; While[ prox <= um, res = res * prox ; prox = prox + 1 ] Aálise do tempo de execução do algoritmo : Supoha-se, etão, que se pretede calcular o tempo de execução deste algoritmo. Uma execução deste algoritmo, evolve a execução de 5 comados/acções atómicas (atribuições ou testes). As atribuições res=1 e prox=1 são executadas uma só vez. Desigado por o valor do iput do algoritmo, que é guardado o iício em um (o v alor i icial de um, que deotaremos por 6 vi(um)), facilmete se verifica que o teste prox<=um (a chamada guarda do ciclo While) é executado/avaliado 3 Nesta secção segue-se, com ligeiras modificações (omeadamete otacioais), o texto [13]. (De facto, o exemplo aqui escolhido é diferete do exemplo itrodutório cosiderado em [13], mas o tipo de aálise é aáloga.) 4 Várias liguages de programação, como p.ex. o Mathematica, já dispoibilizam fuções predefiidas que permitem efectuar directamete o cálculo do factorial, aturalmete mais eficietes do que aquelas que iremos referir em seguida. Mas o objectivo aqui é apeas o usarmos este exemplo para ilustrar como se calcula os tempos associados a programas imperativos e recursivos. 5 Pelo que por vezes se diz que a variável do progresso está adiatada. Refira-se aida que o ome prox, usado este exemplo para a variável do progresso, foi escolhido de forma a ser memóico de próximo (salietado assim que o progresso estava adiatado ). Aalogamete, o ome res foi escolhido para sugerir (variável do) resultado. No etato, em sempre temos estas preocupações metodológicas, escolhedo ormalmete omes mais curtos para as variáveis do programa (p.ex. i e j são omes usualmete escolhidos para a variável do progresso). 6 No caso do algoritmo em questão o valor guardado em um ão é alterado durate a execução do algoritmo (um ão é alvo de qualquer atribuição). No etato, à partida, ada impede que um programa se altere uma variável, que guarda o iício o iput do programa, pelo que covém dispomos de otações que os permitam falar desse valor. 41

4 +1 vezes (uma vez que o teste prox<=um é avaliado com prox=1,...,um+1, e o valor guardado em um ão é alterado). Fialmete, cada uma das atribuições res=res*prox e prox=prox+1 é executada uma vez por cada execução do passo do ciclo While; como este é executado com prog=1,...,um (e o valor guardado em um ão é alterado), temos que cada uma dessas atribuições é executada vezes. Se assumirmos que o tempo de execução de uma atribuição ou teste ão depede dos valores guardados as variáveis evolvidas (pelo que cada execução dessa atribuição ou teste demorará o mesmo tempo), etão é fácil de calcular o tempo total de execução do algoritmo sabedo o úmero de vezes que é executada cada atribuição e teste. O quadro seguite resume essa iformação, desigado por t 1,..., t 5 os tempos de execução das 5 operações em causa e cosiderado = vi(um): operação tempo de execução º de vezes res=1 t 1 1 prox=1 t 1 prox<=um t 3 +1 res=res*prox t 4 prox=prox+1 t 5 Desigado por T algoritmo () o tempo de execução do algoritmo (com iput ), tem-se etão que T algoritmo () = t 1 + t + (+1) t 3 + t t 5 = (t 3 +t 4 +t 5 ) + t 1 + t + t 3 isto é, T algoritmo () é da forma T algoritmo () = k 1 + k com k 1 e k costates, e k 1 0, pelo que T algoritmo () = Θ(). Em vez de T algoritmo (), podemos também usar T algoritmo (um ) como forma de salietar que estamos a descrever o tempo que demora a executar o algoritmo quado o seu (úico) parâmetro um assume o iício o valor. A expressão T algoritmo (um ) = k 1 + k salieta que o tempo do algoritmo só depede do valor iicialmete atribuído ao parâmetro um, sedo uma fução liear desse valor. É possível proceder a uma aálise mais fia dos tempos acima, em que se detalha os tempos evolvidos o cálculo das diferetes operações 7. Tal é feito a seguir. Observação 1 (cálculo dos tempos evolvidos a avaliação de expressões e atribuições) : Seguem-se algumas observações sobre os tempos evolvidos a avaliação de expressões e atribuições, que são relevates quado se pretede fazer uma aálise mais detalhada desses tempos. 7 Este tipo de aálise mais detalhada ão se justificaria o âmbito deste exemplo, tão simples, sedo aqui efectuada essecialmete apeas para ilustrar como é que ela pode feita. 4

5 Começado pela avaliação de expressões, cosidere-se, por exemplo, a expressão res*prog. A sua avaliação exige o acesso a duas variáveis e à multiplicação dos seus valores. Se assumirmos que o tempo associado à localização de uma v ariável ão depede de qual é essa variável (sedo, portato, uma costate que desigaremos a seguir de t v ) e se assumirmos (para simplificar) que o tempo que demora a multiplicar dois valores ão depede da ordem de gradeza dessas valores, etão podemos dizer que o tempo que demora a avaliar res*prog é dado por t v +t * +t v (com t * o tempo da multiplicação). Mais geralmete, podemos dizer que o tempo de avaliação de uma expressão ão atómica o(exp1,...,exp) é igual à soma dos tempos ecessários à determiação dos valores e1,...,e das expressões argumeto exp1,.., exp, mais o tempo ecessário ao cálculo do valor o(e1,...,e), assumido-se em geral (para as expressões aritméticas e booleaas) que o tempo associado ao cálculo do valor o(e1,...,e) é idepedete dos valores e1,...,e em causa, pelo que o podemos desigar por uma costate (depedete apeas da operação em causa) t o. No que respeita às atribuições, o tempo associado à execução de uma atribuição var=exp é igual ao tempo T(exp) de determiação do resultado da expressão exp mais o tempo correspodete à associação desse valor à variável var. Se assumirmos que o tempo correspodete à associação do valor da expressão exp à variável var, em questão, ão depede em de qual é essa variável, em de qual é o valor da expressão exp, podemos desigar esse tempo por uma costate t =, tedo-se T(var=exp) = t = + T(exp). À luz das cosiderações ateriores, é fácil verificar que, o caso em questão, se tem 8 : t 1 = T(res=1) = t = t = T(prox=1) = t = (= t 1 ) t 3 = T(prox<=um) = 9 t v + t <= + t v t 4 = T(res=res*prox) = t = + t v + t * + t v t 5 = T(prox=prox+1) = t = + t v + t + e T algoritmo () = T algoritmo (um ) = (t 3 +t 4 +t 5 ) + t 1 + t + t 3 = (5t v + t = + t * + t <= ) + t v + t = + t <= Fuções/programas Mathematica e sua ivocação: Se quisermos codificar o algoritmo atrás como um programa/fução da liguagem Mathematica, que recebe o iput através do parâmetro um, e retora o resultado calculado 10, somos coduzidos ao seguite programa 11, a que chamaremos de factimp (abreviatura de fac torial imp erativo ): 8 Assume-se a seguir que, durate a execução do programa, a avaliação das expressões, a idetificação das costates que elas ocorrem ão evolve qualquer tempo. Mesmo que isso possa ão ser completamete verdade, tal tempo será certamete a prática desprezável. Mais aida, como se pode assumir que ele é idepedete do valor da costate em causa (sedo portato um tempo costate que poderíamos deotar por t c ), a sua evetual cosideração ão afectaria o essecial do que se segue (acrescetado apeas mais umas costates às expressões a que chegaremos). 9 Está-se aqui a cosiderar que um é uma variável. Embora essa seja a situação usual as liguages de programação, o caso da liguagem Mathematica, um fucioará como um parâmetro da fução (ver a seguir), que é substituído pelo valor do argumeto, aquado de uma ivocação, e ão como uma varável (local) o qual é guardada o valor do argumeto. 10 No Mathematica é retorado o valor da última expressão avaliada, pelo que uma forma de retorar o resultado pretedido cosiste em o fial (como última istrução) madar avaliar a variável res que guarda esse resultado. 11 Ode as variáveis prox e res são declaradas como variáveis locais ao corpo da fução, através da costrução Module. 43

6 factimp = Fuctio[um, Module[{res,prox}, (* cometário: segue-se o corpo da fução *) res = 1 ; prox = 1 ; While[ prox <= um, res = res * prox ; prox = prox + 1 ] ; res ]]; Podemos agora ser mais precisos e calcular mesmo o tempo evolvido a obteção do valor do factorial em causa, através da ivocação desta fução/programa 1 Mathematica. Sedo 13 f = Fuctio[{par 1,...,par k }, corpo] uma fução Mathematica de k parâmetros 14, o tempo T(f[exp 1,...,exp k ]), associado a uma ivocação f[exp 1,...,exp k ] de f (ode exp 1,...,exp k desigam as k expressões argumeto dessa ivocação), pode ser obtido como se segue: T(f[exp 1,...,exp k ]) = T(exp 1 ) T(exp k ) + c iv + T corpo(f) (par 1 vi(exp 1 ),...,par k vi(exp k )) ode: T(exp j ) desiga o tempo associado à determiação do valor da expressão exp j (para j=1,...,k); vi(exp j ) desiga esse valor, isto é, mais precisamete, o valor que a expressão exp j deota aquado (o iício) da ivocação (podemos ler vi(exp j ) como o v alor i icial, ou o v alor aquado da i vocação, da expressão exp j ) 15 ; c iv (memóico de c usto da iv ocação) é uma costate 16 que deota a soma dos seguites tempos: localização da fução f, atribuição aos parâmetros dos valores das correspodetes expressões 1 O que se segue será particularmete relevate para a aálise do tempo do cáculo recursivo do factorial, a discutir a seguir. 13 As chavetas em toro da sequêcia de parâmetros ão são ecessárias se só existir um parâmetro (ver apêdice ). 14 Ou, caso existam variáveis locais: f = Fuctio[{par 1,...,par k },Module[{sequêcia das variáveis locais}, corpo]]. 15 Como um programa pode recorrer e alterar variáveis globais (herdadas), se alguma das evetuais variáveis ocorredo a expressão argumeto exp j for alterada durate a execução do corpo da fução, etão o valor deotado pela expressão exp j também irá variar ao logo de tal execução, pelo que é importate especificar que vi(exp j ) deota o valor da expressão exp j aquado da ivocação. 16 Costate o setido de que ão depede das expressões argumeto, em da ordem de gradeza do seu valor. Naturalmete o tempo em causa depede de alguma forma da fução f em questão, o setido de que depede do úmero de argumetos e do corpo da fução (uma vez que há que substituir este os parâmetros pelos valores dos correspodetes argumetos), bem como depede do úmero de variáveis locais que há que criar. De qualquer forma trata-se de um tempo desprezável (quado efectuado apeas uma vez), que assumiremos costate e desigaremos por c iv, como se ele fosse idepedete da própria fução f em questão. 44

7 argumeto 17 (cujo tempo se assume que ão depede da ordem de gradeza desses valores), e criação das evetuais variáveis locais; e T corpo(f) (par 1 vi(exp 1 ),...,par k vi(exp k )) deota o tempo de execução do corpo da fução f quado o parâmetro par j (com j=1,...,k) assume o valor vi(exp j ) idicado (isto é, o valor que a correspodete expressão argumeto exp j deota aquado da ivocação) 18. Assim (de acordo com o que acabámos de ver para o caso geral), o caso em questão o tempo evolvido uma ivocação factimp[exp] é calculado como se segue: Em primeiro lugar há que determiar o valor da expressão argumeto exp, o que demora um tempo que desigámos de T(exp) (de modo a salietar que ele pode ão ser costate, depededo da expressão argumeto exp). Depois há que localizar a fução factimp, atribuir o valor da expressão argumeto (desigado de vi(exp)) ao parâmetro um, e criar as variáveis locais res e prox. Desigámos por c iv a costate correspodete à soma dos tempos associados a estas actividades (e que se assume idepedete do valor da expressão argumeto). Fialmete há que executar o corpo da fução factimp (quado o parâmetro um assume o valor vi(exp)): o caso em questão o corpo da fução é costituído pelo algoritmo aterior (cuja execução demora o tempo T algoritmo (um vi(exp)), seguido da avaliação da variável do resultado res (o que demora um tempo costate, que, seguido as otações atrás, desigaremos de t v ). Deste modo, o tempo T(factImp[exp]) de uma ivocação factimp[exp] é dado por T(factImp[exp]) = T(exp) + c iv + T corpo(factimp) (um vi(exp)) = T(exp) + c iv + T algoritmo (um vi(exp)) + t v = T(exp) + c iv + (5t v + t = + t * + t <= ) vi(exp) + (t v + t = + t <= ) + t v = k 1 vi(exp) + T(exp) + k com k 1 = 5t v + t = + t * + t <= 0 e k = c iv + 3t v + t = + t <= No caso da expressão argumeto exp ser uma variável, etão T(exp) é o tempo associado à localização do valor de, dado por t v (tempo costate que assumimos que ão depede de qual é essa variável, em de qual é o seu valor). Assim, cotiuado a desigar por o valor vi(), tem-se: T(factImp[]) = k 1 vi() + T() + k = k 1 + k + t v 17 Em vez de atribuição aos parâmetros dos valores das correspodetes expressões argumeto deveríamos dizer substituição o (em todo o) corpo da fução de cada parâmetro pelo valor da correspodete expressão argumeto, pois é isso o que é feito o Mathematica, ode os parâmetros ão fucioam como variáveis locais (ão podedo ser alvo de atribuições). No etato, como a maioria das liguages de programação (imperativas) os parâmetros são variáveis locais às quais são atribuídos os valores dos argumetos o iício da ivocação, iremos aqui, a este respeito, proceder como se o Mathematica fucioasse como as liguages de programação mais usuais (dado assim maior geeralidade ao modo como são efectuadas a seguir as cotas). 18 Poder-se-ia aida cosiderar o tempo associado ao retoro do resultado da fução (i.e., o caso do sistema Mathematica, o tempo do retoro do valor da última expressão avaliada). Iremos assumir, para simplificar, que esse tempo está icluído o que chamámos de custo da ivocação (e desigámos por c iv ). 45

8 isto é, existem costates k 1 e k 3, com k 1 0 e k 3 = k + t v, tais que T(factImp[]) = k 1 + k 3 Ou seja, T(factImp[]) cresce liearmete com (= vi()). No caso da expressão argumeto exp ser por exemplo ^ (com = vi()) etão T(factImp[^]) = k 1 vi(^) + T(^) + k com T(^) o tempo associado à localização do valor de e ao cálculo do seu quadrado, tempo costate dado por t v +t^. Assim, tem-se: T(factImp[^]) = k 1 + t v + t^ + k tempo que (aturalmete) cresce quadraticamete com (= vi()). E o tempo de uma ivocação factimp[factimp[]] será dado por T(factImp[factImp[]]) = k 1 vi(factimp[]) + T(factImp[]) + k = k 1! + k 1 + k 3 + k Cálculo recursivo do factorial : Cosidere-se agora o seguite programa recursivo para o cálculo do factorial de um iteiro positivo: factrec = Fuctio[um, If[ um == 0, (* etão o resultado é: *) 1, (* seão o resultado é: *) um * factrec[um-1] ] ]; Aálise do tempo de execução do cálculo recursivo : À luz do que observámos ateriormete, é agora fácil de calcular o tempo T(factRec[exp]) de execução de uma ivocação factrec[exp]: T(factRec[exp]) = T(exp) + c iv + T(corpo factrec (um vi(exp))) Por sua vez, o T(corpo factrec (um vi(exp))) pode ser obtido como se segue: Se vi(exp)=0, etão a execução de corpo factrec (um vi(exp)) correspode 19 a avaliar o teste um==0, que demora um tempo (costate) t v + t ==. 19 No caso da liguagem Mathematica o que devia estar aqui era correspode a avaliar o teste vi(exp)==0, que demora um tempo (costate) t == (ver ota de rodapé 17). 46

9 Se vi(exp)>0, etão a execução de corpo factrec (um vi(exp)) correspode 0 a avaliar o teste um==0 (tempo t v + t == ) e a avaliar a expressão um * factrec[um-1] o que demora o tempo t v + t * + T(factRec[um-1]) isto é t v + t * + T(um-1) + c iv + T(corpo factrec (um vi(exp)-1)) ou seja t v + t * + t v + t_ + c iv + T(corpo factrec (um vi(exp)-1)) Em resumo, desigado por o valor vi(exp) e desigado T(corpo factrec (um )) simplesmete por TC(), etão T(factRec[exp]) = T(exp) + c iv + TC() com TC() dado por uma relação de recorrêcia (como é típico o caso de programas recursivos), mais cocretamete pela relação de recorrêcia TC() = t v + t ==, se =0 TC() = t v + t * + t_ + c iv + TC(-1), se >0 Usado p.ex. o método iterativo, facilmete se chega a: TC() = t v + t == + (t v + t * + t_ + c iv ) pelo que T(factRec[exp]) = T(exp) + c iv + t v + t == + (t v + t * + t_ + c iv ) com = vi(exp). No caso da expressão argumeto exp ser uma variável, etão T(exp) é dado por t v, e portato T(factRec[]) = t v + c iv + t v + t == + (t v + t * + t_ + c iv ) isto é, existem costates d 1 e d, com d 1 0, tais que T(factRec[]) = d 1 + d pelo que também T(factRec[]) cresce liearmete com (= vi()). Observação (profudidade de recursão) : A profudidade de recursão correspode ao úmero de ivocações de uma fução recursiva que estão pedetes. Por exemplo, a ivocação de factrec[] ecessita de factrec[1] que, por sua vez, ecessita de factrec[0] (que já ão evolve qualquer ivocação recursiva). Assim, quado o cálculo de factrec[] se chega à ivocação factrec[0] estão pedetes 3 ivocações (icluido 0 No caso da liguagem Mathematica o que devia estar aqui era correspode a avaliar o teste valor(exp)==0 (tempo t == ) e a avaliar a expressão vi(exp)*factrec[vi(exp)-1] (ver ota de rodapé 17). E outras alterações, do mesmo tipo, teriam de ser feitas o que se segue, se quiséssemos fazer as cotas exactamete como as coisas se passam o Mathematica. 47

10 factrec[0]), o que sigifica uma profudidade de recursão de 3. A ivocação factrec[] implica uma profudidade de recursão de Por omissão, o sistema Mathematica defie 56 como a profudidade máxima de recursão aceite (parado o cálculo quado se chega a essa profudidade máxima, e imprimido uma mesagem apropriada, jutamete com a expressão esse mometo em avaliação). É possível, o etato, alterar este valor, modificado o valor de $RecursioLimit (por exemplo, podo-o a ifiito). Sugere-se que tal alteração da variável $RecursioLimit seja ecapsulada o âmbito de um comado Block, de modo a que ela só surta efeito durate a execução do corpo do Block (as variáveis a que são atribuídos ovos valores o Block, o fial da execução deste voltam a ter os valores que lhes estavam atribuídos ates dessa execução). Assim, avaliado, por exemplo, Block[{$RecursioLimit= }, factrec[3]] já coseguimos calcular factrec[3], apesar da profudidade de recursão requerida ser superior a 56. Coclusão comparação das versões imperativa e recursiva : No exemplo cosiderado, o comportameto assimptótico das versões imperativa e recursiva é aálogo. Tal ão sigifica, cotudo, que uma das versões ão seja mais rápida que a outra. No etato, uma comparação etre os tempos exactos de execução das duas versões, do cálculo do factorial, exigiria o cohecimeto dos valores das várias costates evolvidas as expressões matemáticas (atrás referidas) que descrevem esses tempos, e ão será objecto de aálise aqui. De qualquer forma, uma experimetação, calculado o valor do tempo de execução de factimp[] e de factrec[] para vários valores de, revela (ou, pelo meos, sugere) claramete que a versão recursiva é um pouco mais leta que a versão imperativa. Por exemplo, um computador pessoal, que hoje já estaria completamete obsoleto, obteve-se o Mathematica os seguites tempos Timig[factRec[50];] { Secod, Null} Timig[factImp[50];] { Secod, Null} e um computador pessoal muito recete obteve-se Timig[factRec[50];] { Secod, Null} Timig[factImp[50];] { Secod, Null} 1 De acordo com o texto [13], que temos seguido esta secção, a profudidade cosiderada o Mathematica é mesmo +, por razões que são aí referidas, e que ão abordaremos aqui. Compare-se a evolução o tempo de cálculo! 48

11 Qual a razão desta maior letidão da versão recursiva? Essecialmete tem a ver com o custo evolvido uma ivocação, face ao custo das operações que são executadas em cada passo do ciclo do versão imperativa, uma vez que é fácil de ver que o exemplo em causa, grosso modo, cada passo do ciclo da versão imperativa é substituído por uma ivocação da própria fução, a versão recursiva. Secção 3: Cálculo (cotagem) apeas das pricipais operações realizadas. Como se referiu o último capítulo, uma aálise da eficiêcia do tipo da aterior, em que se procura obter o tempo total de execução de uma ivocação de um programa, etrado em liha de cota com todos os tempos evolvidos essa ivocação (cotado omeadamete todas as operações executadas por um programa, e procurado associar um tempo a cada uma dessas operações), pode mostrar-se às vezes bastate complexa (embora ão se possa dizer que tal seja o caso o exemplo, muito simples, aterior). E muitas vezes ão ecessitamos de ter uma ideia tão exacta do tempo de execução do programa. O que é essecial é obter um valor que traduza de algum modo o custo da execução do programa, para cada iput. E, para esse efeito, muitas vezes basta-os cotar o úmero de vezes que são efectuadas as pricipais operações 3 que são realizadas pelo programa em causa 4, omeadamete se só quisermos ter uma ideia da ordem de gradeza do custo/tempo de execução do programa. Comecemos por ilustrar este tipo de abordagem à aálise de eficiêcia, a propósito do exemplo muito simples, do cálculo do factorial, que abordámos a secção aterior. Ates porém, efectuaremos algumas observações e estabeleceremos certas coveções otacioais a utilizar este tipo de aálise de eficiêcia, o resto deste capítulo. Observação 1 (variáveis da liguagem de programação e seu valor, e coveções otacioais) : Iformalmete, podemos dizer que uma variável de uma liguagem de programação é um ome 5 que deota um valor. De facto, uma variável de uma liguagem de programação deota uma célula de memória ode está guardada um valor (o valor que a variável idirectamete deota), valor esse que pode ser alterado durate a execução de um programa (através de comados de atribuição a essa variável). Por essa razão, em particular, tora-se por vezes coveiete distiguir estas duas perspectivas (sitáctica e semâtica), distiguido a variável (o ome), bem como as expressões costruídas à custa de variáveis, do valor que deotam. Supoha-se por exemplo que tíhamos codificado o programa factimp como se segue (de uma forma que este caso ão se acoselha, ode ele altera variáveis ão locais): 3 As operações que, em pricípio, desempeham um papel mais importate o tempo que o programa demora a ser executado. 4 E depois, se tal for desejado, podemos associar um tempo a cada uma dessas operações, obtedo uma ideia aproximada do tempo de execução do programa. 5 Mais precisamete, as liguages de programação cosidera-se em geral que uma variável é uma sequêcia (ão vazia) de letras e úmeros, começado por uma letra. No caso das liguages de programação tipadas (o que ão é o caso da liguagem Mathematica), tal sequêcia de letras e úmeros deverá aida ser declarada como sedo uma variável, ode essa declaração se idica também qual o tipo dessa variável, especificado-se assim qual o géero de valores que poderão estar guardados a(s) célula(s) de memória a associar à variável em questão. 49

12 factimp = Fuctio[um, =1; prox=1; While[prox<=um, =*prox; prox=prox+1]; ]; e que escrevíamos (iformalmete) T(factImp[]) = (5t v + t = + t * + t <= ) + (c iv + 4t v + t = + t <= ) Imediatamete poderia surgir a dúvida se o valor de o lado direito represetava o valor que tiha aquado (o iício) da ivocação factimp[] ou o valor que tiha o fim dessa ivocação factimp[] (e que é igual ao factorial do valor iicial de ) 6. Por essa razão (para evitar dúvidas como a aterior), itroduzimos a otação vi(exp) para deotar o valor que uma expressão argumeto exp deotava aquado (o iício) da ivocação de um programa 7 (cujo tempo pretedíamos calcular), e escrevemos p.ex. T(factImp[]) = (5t v + t = + t * + t <= ) vi() + (c iv + 4t v + t = + t <= ) bem como T(factImp[^]) = (5t v + t = + t * + t <= ) vi(^) + (c iv + 4t v + t = + t <= + t^ ) = (5t v + t = + t * + t <= ) + (c iv + 4t v + t = + t <= + t^ ), com = vi() e, mais geralmete, T(factImp[exp]) = T(exp) + c iv + T corpo(factimp) (um vi(exp)) Cosidere-se agora que ão pretedemos obter o tempo total de execução de uma ivocação de um programa (a seguir desigado geericamete de) prog, etrado em liha de cota com todos os tempos evolvidos essa ivocação, mas pretedemos apeas obter um valor que traduza de algum modo o custo da execução do programa, para cada iput do programa, cotado p.ex. o úmero de vezes que são efectuadas certo tipo de operações que são realizadas pelo programa em causa. Mais cocretamete, desigado por C tal fução de custo, pretede-se calcular o úmero dessas operações que são realizadas uma ivocação prog[exp], úmero que podemos desigar de C(prog[exp]). Nesse caso, ão os iteressa o custo da ivocação (que desigámos de c iv ) e podemos escrever geericamete (ode C(exp) e C corpo(prog) (um vi(exp)) têm o sigificado ituitivo esperado: p.ex. C(exp) desiga o úmero de operações desse tipo que são realizadas a avaliação da expressão exp, o que ormalmete só é relevate se exp evolver uma outra ivocação do programa em causa): C(prog[exp]) = C(exp) + C corpo(prog) (parâmetro vi(exp)) Mais aida, para este efeito ão é relevate se as expressões atómicas que compõem exp são costates ou variáveis: o que os iteressa é o seu valor. (O mesmo ão é verdade, se quisermos ser 6 Associado à execução de um programa imperativo temos uma oção de estado (da computação), caracterizado pelos valores guardados as variáveis do programa (em cada mometo dessa execução), e uma ivocação de um programa imperativo pode ser vista como uma trasição de um estado iicial para um estado fial, obtida através de sucessivas alterações do estado da computação proveietes da execução do programa ivocado. 7 Como só ecessitámos de os referir ao valor das expressões argumeto aquado (o iício) da ivocação de um programa (o estado iicial dessa ivocação), ão procurámos itroduzir otações (mais complexas) para poder deotar os valores que as variáveis (e as expressões costruídas à custa delas) podem assumir durate a (em cada mometo da) execução do programa. 430

13 muito precisos, quado se calcula T(prog[exp]): supodo p.ex. que prog recebe iteiros, etão os tempos T(prog[3]) e T(prog[]), com vi()=3, são diferetes, pois o último caso, para o cálculo de T(), há que cotar com o tempo do acesso à célula de memória associada à variável para se obter o valor 3 lá guardado). Assim, e para simplificar as otações usadas 8, iremos utilizar letras (escritas em times e itálico) para desigar valores (que à partida podem ser quaisquer), subetededo-se que quado tais letras ocorrem a expressão argumeto de uma ivocação prog[exp], tal sigifica que tais valores podem estar 9 aí a ser expressos através de uma costate, ou através de uma variável da liguagem de programação, assumidose etão, este último caso, que essa variável ão ocorre o programa prog. Esta coveção justifica-se para evitar ter de estar a cosiderar a otação vi(exp) 30, e tem em cota que esta aálise da eficiêcia estamos geericamete iteressados em caracterizar apeas (o valor do custo da execução do programa para um certo iput, idepedetemete de como este iput é expresso uma ivocação do programa, i.e. estamos iteressados em caracterizar apeas) o valor de C(prog[]) (muitas vezes abreviado por C(), deixado prog implícito) Naturalmete, se prog for um programa recursivo, para o cálculo de C(prog[]) podemos ter de calcular o valor do custo de outras ivocações de prog, com outros argumetos (como C(prog[-1])), mas esse cálculo cotiua a ser verdade que o que os iteressa é o valor do argumeto dessa ivocação, e ão ode tal valor se ecotra guardado (pois os abstraímos do tempo ecessário para o obter). Exemplo 1: cálculo do factorial (de um atural). No caso do factorial podemos supor que o custo do cálculo do factorial é essecialmete determiado pelo úmero de multiplicações realizadas. Vejamos, etão, como se obteria tal medida de custo para os dois programas idicados para o cálculo do factorial. Desige-se por NM vi () o úmero de m últiplicações realizadas pela v ersão i mperativa, tedo como iput o valor, isto é, NM vi () desiga o úmero de múltiplicações que ocorrem uma ivocação factimp[] (i.e. NM vi () pode ser visto como uma abreviatura de NM(factImp[])), ode recorde-se factimp = Fuctio[um, Module[{res,prox}, res = 1 ; prox = 1 ; While[prox<=um, res = res*prox ; prox = prox+1] ; res ]]; 8 E torar mais leves as expressões matemáticas a costruir este tipo de aálise da eficiêcia (simplificado a sua leitura). 9 Isto é, é irrelevate, para efeitos da aálise em causa, se tais valores são expressos em exp, através de uma costate, ou através de uma variável da liguagem de programação. De outra forma, supodo p.ex. que prog tem iteiros como iput, quado escrevemos prog[] tato podemos ecarar como estado a desigar uma particular costate iteira (qualquer), como podemos ecarar como uma variável da liguagem de programação (guardado iteiros) que ão ocorra em prog. 30 Pois é imediato que, debaixo da assumpção mecioada, p.ex. vi()=, vi(+)=+ e vi(+k)=+k, e, mais geralmete, o valor da expressão exp, argumeto da ivocação, ão varia com a execução do programa prog. 431

14 Ora, ocorre uma multiplicação (apeas) em cada execução do passo do ciclo While e, uma ivocação factimp[], este é executado com prog=1,...,. Assim, é imediato que 31 NM vi() = Desige-se, agora, por NM vr () o úmero de m últiplicações realizadas pela v ersão r ecursiva, tedo como iput o valor, isto é, NM vr () = NM(factRec[]), ode (recorde-se) factrec = Fuctio[um, If[um==0, 1, um * factrec[um-1]] ]; É imediato que NM vr () é dado pela relação de recorrêcia NM vr () = 0, se =0 NM vr () = 1 + NM vr (-1), se >0 e, usado p.ex. o método iterativo, facilmete se chega a NM vr () = Como era imediato, olhado para os dois programas, ambos realizam multiplicações para calcular o factorial de. Assim, equato que a aálise do tempo total (exacto) de execução, obtihamos expressões distitas para os tempos dos dois programas, esta aálise mais simples ão os coseguimos difereciar. Mas, em termos da ordem de gradeza do seu crescimeto, ambas as aálises os dizem que os dois programas são da mesma ordem de gradeza (liear em ). Aida que uma aálise iformal, se observarmos os dois programas costatamos que eles de facto têm essecialmete os mesmos custos: como o programa imperativo a iicialização das variáveis res e prox só é efectuada uma vez, para além das multiplicações, o custo do programa imperativo evolve a avaliação da guarda do ciclo (prox<=um) e o progresso o cálculo (prox=prox+1) efectuado em cada passo do ciclo; grosso modo, a isto correspode, a versão recursiva, a avaliação, em cada ivocação, do teste um==0 e do argumeto um-1 da ivocação seguite. O que tora a versão recursiva um pouco mais leta que a imperativa, são fudametalmete os outros custos associados a cada ivocação (e equato ocorre uma só ivocação a versão imperativa, a versão recursiva ocorrem +1 ivocações). Exemplo : Supremo de uma lista (de iteiros). Supoha-se agora que se pretede calcular o supremo de uma lista de iteiros distitos Para mostrar como esse úmero de comparações é obtido (em que é realizada uma multiplicação por cada execução do passo do ciclo) podemos recorrer aos somatórios e escrever NM vi () = 1 =. Tal aida ficará mais sugestivo, se utilizarmos i=1 a variável prox como variável do somatório, e escrevermos NM vi () = 1 =. prox=1 3 Os algoritmos a seguir fucioam mesmo que se permita que haja repetições a lista, mas o impor-se que ão haja repetições facilita a aálise em média da (primeira) versão recursiva que apresetaremos para o cálculo do supremo (para a aálise dos outros algoritmos tal é irrelevate). 43

15 Comecemos por uma versão imperativa. Cosiderado que o supremo de uma lista vazia de iteiros é -, facilmete se verifica que a fução Mathematica a seguir permite calcular o supremo, assumido sem o testar que o argumeto é uma lista de iteiros (para o caso poderiam ser reais). Uma versão imperativa para o cálculo do supremo: supimp = Fuctio[lista,Module[{res,prox,comp}, comp = Legth[lista]; res = -Ifiity; prox = 1; While[ prox <= comp, If[res < lista[[prox]], res = lista[[prox]]]; prox = prox + 1 ] ; res ]]; Tal como o caso aterior, vamos supor que ão pretedemos calcular o tempo exacto de execução, através da cotagem de todas as operações executadas por uma ivocação do programa e da associação a cada operação de um parâmetro deotado o tempo de execução dessa operação, mas apeas pretedemos ter uma ideia do custo de execução do programa, através da cotagem das pricipais operações realizadas. Ora, podemos cosiderar que o cálculo do supremo se baseia em comparações com os elemetos da lista argumeto, pelo que uma medida do custo da sua execução é dada pelo úmero dessas comparações que foi ecessário efectuar. Desigemos por NC vi ( úmero de c omparações da v ersão i mperativa) tal fução de custo. No etato, ao cotrário do que se passava o cálculo do factorial, em que o parâmetro da fução de custo NM vi era o valor do argumeto (da ivocação) do programa, agora o parâmetro da fução de custo NC vi ão é a lista argumeto do programa, mas sim uma medida da dimesão (complexidade) dessa lista, mais cocretamete, o seu comprimeto. Observação (fuções de custo de programas que operam sobre listas) : O procedimeto aterior ão é específico deste exemplo. Quado se aaliza a eficiêcia de um programa que opera sobre listas o seu custo/tempo ão é medido para cada lista argumeto específica, mas sim como uma fução do comprimeto da lista argumeto. (As razões deste procedimeto são simples de eteder, e já foram explicitadas a secção 1 do capítulo aterior, a propósito da ordeação de listas.) Naturalmete, só sabedo a dimesão da lista argumeto, podemos ão coseguir determiar o custo/tempo exacto da execução desse programa (pois tal poderá depeder da composição dessa lista). Quado tal acotece, o que fazemos em geral é (como se referiu a secção 1 do capítulo aterior) efectuar o cálculo do custo da execução, cosiderado: a pior situação (i.e. a situação em que a lista iput, de dimesão, tem as piores caraterísticas para o programa em causa), a melhor situação e em média (ão 433

16 assumido ada sobre o iput em causa, i.e. cosiderado que ele pode ser uma qualquer lista de dimesão, e supodo que todas as listas de dimesão são igualmete prováveis). Embora, como se acabou de referir, possa acotecer que, só sabedo a a dimesão da lista argumeto, ão seja possível determiar o valor exacto da fução de custo do programa (obrigado a uma evetual aálise a pior situação, em média e a melhor situação), ão é isso o que se verifica o caso vertete, em que se pretede que o custo da execução do programa seja traduzido simplesmete pelo úmero de comparações com elemetos da lista realizadas, uma vez que é imediato verificar que este úmero ão depede da composição da lista argumeto, mas apeas da sua dimesão. Comece-se, etão, por precisar o que se pretede: dado um qualquer atural, NC vi () é o úmero de comparação com elemetos da lista w que ocorre uma ivocação supimp[w] (úmero que podemos desigar por NC(supImp[w])), quado se assume que a lista argumeto w é uma qualquer lista de iteiros distitos. Ora, o cálculo NC vi () é muito simples, sedo perfeitamete aálogo ao cálculo de NM vi () efectuado o exemplo aterior, uma vez que é realizada uma comparação com um elemeto da lista argumeto da ivocação, por cada execução do passo do ciclo: Legth[w] NC vi () = 1 = 1 = prox=1 prox=1 Observação 3 : Supoha-se, agora, que em vez de se querer cotar apeas o úmero de comparações com elemetos da lista argumeto, se pretedia cotar o úmero total de operações realizadas (mais precisamete, apeas o úmero total de atribuições e testes realizados) durate uma ivocação supimp[w], com a lista argumeto w uma qualquer lista de iteiros distitos. Desige-se tal úmero por NAT vi (). Só sabedo a dimesão da lista argumeto w, ão coseguimos determiar o valor exacto de NAT vi (), pois tal úmero depede da composição dessa lista: p.ex., se a lista for ão vazia (i.e. se >0) e estiver ordeada de forma decrescete, apeas uma atribuição a res é efectuada durate a execução do ciclo While (a melhor situação para o programa), ao passo que se a lista estiver ordeada de forma crescete, em cada execução do passo do ciclo é efectuada uma atribuição a res (a pior situação para o programa), e se a lista ão estiver ordeada, o úmero exacto de atribuições a res só pode ser determiado ispeccioado a lista argumeto cocreta w. Assim, uma hipótese seria (ver observação 1 aterior) efectuar tal cotagem (do úmero total de atribuições e testes realizados), cosiderado a pior situação, a melhor situação e em média. No etato, se quisermos apeas saber a ordem de gradeza do crescimeto de tal fução NAT vi (), etão, este caso, coseguimos obter tal ordem de gradeza procededo a miorações e majorações adequadas de tal úmero, o que é mais simples do que calcular o valor médio desse úmero. Notado que uma ivocação supimp[w], para além da iicialização (3 atribuições), é executada, para prox assumido os valores de 1 até, uma avaliação da guarda do ciclo e o míimo um teste (do If) e uma atribuição (prox=prox+1), e o máximo um teste (do If) e duas atribuições 434

17 (res=lista[[prox]]] e prox=prox+1), seguido-se uma avaliação fial da guarda do ciclo (com prox assumido o valor +1), é imediato que (para >0): 4 + NAT vi () prox=1 prox=1 4 + NAT vi () NAT vi () 4, para 4 Isto é, c1,c R + 0 N 0 0 c 1 NAT vi () c }, pelo que NAT vi () = Θ() ou seja, NAT vi () tem uma ordem gradeza de crescimeto liear. Passemos agora ao cálculo recursivo do supremo. Cotiuado a cosiderar que o supremo de uma lista vazia de iteiros é -, é fácil verificar que a fução Mathematica a seguir permite calcular o supremo de uma lista de iteiros (ou reais). Uma (primeira) versão recursiva para o cálculo do supremo: suprec = Fuctio[lista, If[ lista=={} (* ou Legth[lista]==0 *), -Ifiity, If[First[lista]>=supRec[Rest[lista]], First[lista], suprec[rest[lista]] ] ] ]; Seja (para atural) NC vr () o úmero de comparação com elemetos de w que ocorre uma ivocação suprec[w] (que podemos desigar por NC(supRec[w])), quado se assume que a lista argumeto w é uma qualquer lista de iteiros distitos. Ora, ao cotrário do que se passava a versão imperativa, aqui o úmero de comparações que ocorre uma ivocação suprec[w] ão depede apeas do úmero de elemetos da lista w, mas depede da própria composição dessa lista. Assim, como já referimos, o que se faz etão, em geral, estes casos é aalisar três possíveis situações: aquela em que a lista argumeto w (tem elemetos distitos e) tem um tipo de composição que é a melhor possível para o algoritmo em questão, o que os dá o úmero de comparações míimo do algoritmo - NC mi vr(); aquela em que a composição da lista argumeto é a pior possível, o que os dá o úmero de comparações máximo do algoritmo NC max vr(); e aquela em que se assume que a lista argumeto pode ser, com igual probabilidade, uma qualquer lista de iteiros distitos, e se procura determiar o úmero de comparações esperado, ou médio, do algoritmo NC med vr(). 435

18 Os valores mais importates são os valores máximo e médio. Mas comecemos por calcular primeiro os valores míimo e máximo, pois se eles forem da mesma ordem de gradeza, etão o úmero de comparações médio também será dessa ordem de gradeza, ão se torado essecial o seu cálculo exacto (ormalmete mais complicado). Caso o valor míimo e o valor máximo teham ordes de gradeza distitas, já será ecessário calcular o valor médio. Melhor caso O valor NC mi vr() desiga, etão, o úmero de comparações dado por NC(supRec[w]) quado se assume que a lista argumeto w é uma qualquer lista de iteiros distitos, ordeada de forma decrescete (a melhor situação para o algoritmo apresetado). Ora, este caso a execução de suprec[w] (mais precisamete, a ivocação de suprec[w] correspode a executar o corpo de suprec, quado o parâmetro lista assume/guarda a lista w, e tal execução) comporta-se como se segue: É avaliado o teste w=={} e se este for positivo (i.e. se =0), ão é feita qualquer comparação, sedo retorado -Ifiity e parado a execução; caso cotrário, é avaliada a guarda do If (que o caso em questão se traduz pela comparação First[w]>supRec[Rest[w]]) obtedo-se True, sedo retorado o valor de First[w], e parado a execução. É importate otar que a avaliação suprec[rest[w]], se tem que Rest[w] tem -1 iteiros distitos e cotiua a estar a melhor situação possível para o algoritmo (pois está ordeada de forma decrescete). Assim, é imediato que NC mi vr() é dado pela relação de recorrêcia: Se =0, etão NC mi vr() = 0. Se >0, etão NC mi vr() = 1 + NC mi vr(-1) e, resolvedo a rrelação de recorrêcia, obtém-se: NC mi vr() = (tal como para a versão imperativa). Pior caso O valor NC max vr() desiga, etão, o úmero de comparações dado por NC(supRec[w]) quado se assume que a lista argumeto w é uma qualquer lista de iteiros distitos, ordeada de forma crescete (a pior situação para o algoritmo apresetado). Ora, essa situação, a execução de suprec[w] comporta-se como se segue: Se w=={} (i.e. se =0), ão é feita qualquer comparação e acaba a execução. Se w!={} é avaliada a guarda do If (First[w]>supRec[Rest[w]]) que retora False, e é (de ovo) avaliado suprec[rest[w]]. Notado que a avaliação suprec[rest[w]], se tem que Rest[w] tem -1 elemetos distitos e cotiua a estar a pior situação possível para o algoritmo (pois está ordeada de forma decrescete), é imediato que NC max vr() é dado pela relação de recorrêcia: 436

19 Se =0, etão NC max vr() = 0. Se >0, etão NC max vr() = 1 + NC max vr(-1) e, resolvedo a relação de recorrêcia (idêtica à do problema das Torres de Haoi), obtém-se: NC max vr() = - 1 Agora, o úmero de comparações realizado já ão cresce liearmete, com o úmero de elemetos da lista, mas sim expoecialmete!!!! Trata-se de um resultado péssimo, em termos de eficiêcia 33, que tora este programa sem qualquer iteresse prático (salvo evetualmete para pequeos valores de ). Dada a eorme difereça etre o comportameto do pior e do melhor caso, tora-se importate vermos qual o valor esperado (médio) do úmero de comparações. De facto, dado o mau comportameto o pior caso, dificilmete este algoritmo recursivo teria algum iteresse prático. De qualquer forma, vejamos como calcular o úmero médio de comparações, o que servirá para ilustrar como se processa esta aálise. Aálise em média O valor NC med vr() desiga, etão, o úmero de comparações médio, ou esperado, de uma ivocação suprec[w] (a seguir desigado de NC(supRec[w])), quado se assume que a lista w pode ser, com igual probabilidade, uma qualquer lista de iteiros distitos. Ora, tem-se: Se w=={} (i.e. se =0), etão NC(supRec[w]) = 0. Caso cotrário, é avaliada a guarda do If (First[w]>supRec[Rest[w]]), com 1+NC(supRec[w]) comparações, e ou essa avaliação retora True, e ão é realizada mais ehuma comparação ou essa avaliação retora False, e é avaliado (outra vez) suprec[rest[w]] (NC(supRec[Rest[w]]) comparações). Assim, se >0, o úmero esperado de comparações é dado por: (1+NC(supRec[Rest[w]])) * Prob (First[w] suprec[rest[w]] retorar True) + (1+NC(supRec[Rest[w]])) * Prob (First[w]<supRec[Rest[w]] retorar False) Resta determiar qual a probabilidade de First[w] suprec[rest[w]] retorar True. Ora, como estamos a supor que que a lista w é uma qualquer lista (tirada ao acaso) de iteiros distitos, podemos assumir que qualquer elemeto dessa lista tem igual probabilidade de ser o maior deles todos (isto é, probabilidade 1/). E, o mesmo raciocíio se aplica o cálculo de NC(supRec[Rest[w]]). Somos assim coduzidos à seguite relação de recorrêcia: Se =0, etão NC med vr() = 0. Se >0, etão NC med vr() = (1 + NC med vr(-1)) * 1/ +(1 + NC med vr(-1)) * (-1)/ 33 O cálculo do tempo total de execução do algoritmo é um pouco maic complexo do que o simples úmero de comparações (omeadamete porque se tem de etrar com o tempo de avaliação de Rest[w] e do teste w!={}) e pode ser visto em [13]. De qualquer modo, a ordem de gradeza do tempo total de execução é também do mesmo tipo que a do úmero de comparações. 437

ANÁLISE DE COMPLEXIDADE DE ALGORITMOS

ANÁLISE DE COMPLEXIDADE DE ALGORITMOS 1 FEUP/LEEC Algoritmos e Estruturas de Dados 2001/2002 ANÁLISE DE COMPLEXIDADE DE ALGORITMOS João Pascoal Faria http://www.fe.up.pt/~jpf 2 Itrodução Algoritmo: cojuto claramete especificado de istruções

Leia mais

Análise de Algoritmos. Análise de Algoritmos. Análise de Algoritmos. Análise de Algoritmos. Análise de Algoritmos. Análise de Algoritmos

Análise de Algoritmos. Análise de Algoritmos. Análise de Algoritmos. Análise de Algoritmos. Análise de Algoritmos. Análise de Algoritmos Aálise de Algoritmos Aálise de Algoritmos Prof Dr José Augusto Baraauskas DFM-FFCLRP-USP A Aálise de Algoritmos é um campo da Ciêcia da Computação que tem como objetivo o etedimeto da complexidade dos

Leia mais

DESIGUALDADES, LEIS LIMITE E TEOREMA DO LIMITE CENTRAL. todas as repetições). Então, para todo o número positivo ξ, teremos:

DESIGUALDADES, LEIS LIMITE E TEOREMA DO LIMITE CENTRAL. todas as repetições). Então, para todo o número positivo ξ, teremos: 48 DESIGUALDADES, LEIS LIMITE E TEOREMA DO LIMITE CENTRAL LEI DOS GRANDES NÚMEROS Pretede-se estudar o seguite problema: À medida que o úmero de repetições de uma experiêcia cresce, a frequêcia relativa

Leia mais

Mas o que deixou de ser abordado na grande generalidade desses cursos foi o estudo dos produtos infinitos, mesmo que só no caso numérico real.

Mas o que deixou de ser abordado na grande generalidade desses cursos foi o estudo dos produtos infinitos, mesmo que só no caso numérico real. Resumo. O estudo das séries de termos reais, estudado as disciplias de Aálise Matemática da grade geeralidade dos cursos técicos de liceciatura, é aqui estedido ao corpo complexo, bem como ao caso em que

Leia mais

Cap. VI Histogramas e Curvas de Distribuição

Cap. VI Histogramas e Curvas de Distribuição TLF /11 Capítulo VI Histogramas e curvas de distribuição 6.1. Distribuições e histogramas. 6 6.. Distribuição limite 63 6.3. Sigificado da distribuição limite: frequêcia esperada e probabilidade de um

Leia mais

Capítulo 11 - Ordem de grandeza do crescimento assimptótico: principais notações

Capítulo 11 - Ordem de grandeza do crescimento assimptótico: principais notações Capítulo - Ordem de gradeza do crescimeto assimptótico: pricipais otações Neste capítulo abordaremos, muito sucitamete, o crescimeto assimptótico de fuções, motivado o iteresse em estudar a ordem de gradeza

Leia mais

DERIVADAS DE FUNÇÕES11

DERIVADAS DE FUNÇÕES11 DERIVADAS DE FUNÇÕES11 Gil da Costa Marques Fudametos de Matemática I 11.1 O cálculo diferecial 11. Difereças 11.3 Taxa de variação média 11.4 Taxa de variação istatâea e potual 11.5 Primeiros exemplos

Leia mais

Séquências e Séries Infinitas de Termos Constantes

Séquências e Séries Infinitas de Termos Constantes Capítulo Séquêcias e Séries Ifiitas de Termos Costates.. Itrodução Neste capítulo estamos iteressados em aalisar as séries ifiitas de termos costates. Etretato, para eteder as séries ifiitas devemos ates

Leia mais

Estudando complexidade de algoritmos

Estudando complexidade de algoritmos Estudado complexidade de algoritmos Dailo de Oliveira Domigos wwwdadomicombr Notas de aula de Estrutura de Dados e Aálise de Algoritmos (Professor Adré Bala, mestrado UFABC) Durate os estudos de complexidade

Leia mais

Secção 1. Introdução às equações diferenciais

Secção 1. Introdução às equações diferenciais Secção. Itrodução às equações difereciais (Farlow: Sec..,.) Cosideremos um exemplo simples de um feómeo que pode ser descrito por uma equação diferecial. A velocidade de um corpo é defiida como o espaço

Leia mais

MATEMÁTICA II. Profa. Dra. Amanda Liz Pacífico Manfrim Perticarrari

MATEMÁTICA II. Profa. Dra. Amanda Liz Pacífico Manfrim Perticarrari MATEMÁTICA II Profa. Dra. Amada Liz Pacífico Mafrim Perticarrari amada@fcav.uesp.br O PROBLEMA DA ÁREA O PROBLEMA DA ÁREA Ecotre a área da região que está sob a curva y = f x de a até b. S = x, y a x b,

Leia mais

n ) uma amostra aleatória da variável aleatória X.

n ) uma amostra aleatória da variável aleatória X. - Distribuições amostrais Cosidere uma população de objetos dos quais estamos iteressados em estudar uma determiada característica. Quado dizemos que a população tem distribuição FX ( x ), queremos dizer

Leia mais

Material Teórico - Módulo Binômio de Newton e Triangulo de Pascal. Soma de Elementos em Linhas, Colunas e Diagonais. Segundo Ano do Ensino Médio

Material Teórico - Módulo Binômio de Newton e Triangulo de Pascal. Soma de Elementos em Linhas, Colunas e Diagonais. Segundo Ano do Ensino Médio Material Teórico - Módulo Biômio de Newto e Triagulo de Pascal Soma de Elemetos em Lihas, Coluas e Diagoais Segudo Ao do Esio Médio Autor: Prof Fabrício Siqueira Beevides Revisor: Prof Atoio Camiha M Neto

Leia mais

Material Teórico - Módulo Binômio de Newton e Triangulo de Pascal. Soma de Elementos em Linhas, Colunas e Diagonais. Segundo Ano do Ensino Médio

Material Teórico - Módulo Binômio de Newton e Triangulo de Pascal. Soma de Elementos em Linhas, Colunas e Diagonais. Segundo Ano do Ensino Médio Material Teórico - Módulo Biômio de Newto e Triagulo de Pascal Soma de Elemetos em Lihas, Coluas e Diagoais Segudo Ao do Esio Médio Autor: Prof Fabrício Siqueira Beevides Revisor: Prof Atoio Camiha M Neto

Leia mais

AMOSTRAGEM ALEATÓRIA DISTRIBUIÇÕES POR AMOSTRAGEM

AMOSTRAGEM ALEATÓRIA DISTRIBUIÇÕES POR AMOSTRAGEM 6 AMOSTRAGEM ALEATÓRIA DISTRIBUIÇÕES POR AMOSTRAGEM Quado se pretede estudar uma determiada população, aalisam-se certas características ou variáveis dessa população. Essas variáveis poderão ser discretas

Leia mais

S E Q U Ê N C I A S E L I M I T E S. Prof. Benito Frazão Pires. Uma sequência é uma lista ordenada de números

S E Q U Ê N C I A S E L I M I T E S. Prof. Benito Frazão Pires. Uma sequência é uma lista ordenada de números S E Q U Ê N C I A S E L I M I T E S Prof. Beito Frazão Pires Uma sequêcia é uma lista ordeada de úmeros a, a 2,..., a,... ) deomiados termos da sequêcia: a é o primeiro termo, a 2 é o segudo termo e assim

Leia mais

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 1-3

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 1-3 Aálise e Sítese de Algoritmos Revisão CLRS, Cap. 1-3 Resumo Algoritmos Aálise de algoritmos Sítese de algoritmos Notação assimptótica Outra otação utilizada Somatórios 2007/2008 Aálise e Sítese de Algoritmos

Leia mais

Cálculo II Sucessões de números reais revisões

Cálculo II Sucessões de números reais revisões Ídice 1 Defiição e exemplos Cálculo II Sucessões de úmeros reais revisões Mestrado Itegrado em Egeharia Aeroáutica Mestrado Itegrado em Egeharia Civil Atóio Beto beto@ubi.pt Departameto de Matemática Uiversidade

Leia mais

A DESIGUALDADE DE CHEBYCHEV

A DESIGUALDADE DE CHEBYCHEV A DESIGUALDADE DE CHEBYCHEV Quado se pretede calcular a probabilidade de poder ocorrer determiado acotecimeto e se cohece a distribuição probabilística que está em causa o problema, ão se colocam dificuldades

Leia mais

Introdução a Complexidade de Algoritmos

Introdução a Complexidade de Algoritmos Itrodução a Complexidade de Algoritmos Estruturas de Dados Prof. Vilso Heck Juior Apresetação Revisão - O Algoritmo; A Complexidade; Exercício. Complexidade de Algoritmos REVISÃO - O ALGORITMO O Algoritmo

Leia mais

Capítulo I Séries Numéricas

Capítulo I Séries Numéricas Capítulo I Séries Numéricas Capitulo I Séries. SÉRIES NÚMERICAS DEFINIÇÃO Sedo u, u,..., u,... uma sucessão umérica, chama-se série umérica de termo geral u à epressão que habitualmete se escreve u u...

Leia mais

Capítulo II - Sucessões e Séries de Números Reais

Capítulo II - Sucessões e Séries de Números Reais Capítulo II - Sucessões e Séries de Números Reais 2 Séries de úmeros reais Sabemos bem o que sigifica u 1 + u 2 + + u p = p =1 e cohecemos as propriedades desta operação - comutatividade, associatividade,

Leia mais

Exercício: Mediu-se os ângulos internos de um quadrilátero e obteve-se 361,4. Qual é o erro de que está afetada esta medida?

Exercício: Mediu-se os ângulos internos de um quadrilátero e obteve-se 361,4. Qual é o erro de que está afetada esta medida? 1. Tratameto estatísticos dos dados 1.1. TEORIA DE ERROS O ato de medir é, em essêcia, um ato de comparar, e essa comparação evolve erros de diversas origes (dos istrumetos, do operador, do processo de

Leia mais

FACULDADE DE ECONOMIA DO PORTO. Licenciatura em Economia E C O N O M E T R I A I I PARTE

FACULDADE DE ECONOMIA DO PORTO. Licenciatura em Economia E C O N O M E T R I A I I PARTE FACULDADE DE ECONOMIA DO PORTO Liceciatura em Ecoomia E C O N O M E T R I A I (LEC0) Exame Fial 0 de Jaeiro de 00 RESOLUÇÃO: I PARTE I GRUPO a) Dispoível uma amostra de observações de Y para períodos cosecutivos,

Leia mais

MATEMÁTICA II. Profa. Dra. Amanda Liz Pacífico Manfrim Perticarrari

MATEMÁTICA II. Profa. Dra. Amanda Liz Pacífico Manfrim Perticarrari MATEMÁTICA II Profa. Dra. Amada Liz Pacífico Mafrim Perticarrari amada@fcav.uesp.br Ecotre a área da região que está sob a curva y = f x de a até b. S = x, y a x b, 0 y f x Isso sigifica que S, ilustrada

Leia mais

Análise Matemática I 2 o Exame

Análise Matemática I 2 o Exame Aálise Matemática I 2 o Exame Campus da Alameda LEC, LET, LEN, LEM, LEMat, LEGM 29 de Jaeiro de 2003, 3 horas Apresete todos os cálculos e justificações relevates I. Cosidere dois subcojutos de R, A e

Leia mais

CAPÍTULO IV DESENVOLVIMENTOS EM SÉRIE

CAPÍTULO IV DESENVOLVIMENTOS EM SÉRIE CAPÍTUO IV DESENVOVIMENTOS EM SÉRIE Série de Taylor e de Mac-auri Seja f ) uma fução real de variável real com domíio A e seja a um poto iterior desse domíio Supoha-se que a fução admite derivadas fiitas

Leia mais

DETERMINANDO A SIGNIFICÂNCIA ESTATÍSTICA PARA AS DIFERENÇAS ENTRE MÉDIAS

DETERMINANDO A SIGNIFICÂNCIA ESTATÍSTICA PARA AS DIFERENÇAS ENTRE MÉDIAS DTRMINANDO A SIGNIFIÂNIA STATÍSTIA PARA AS DIFRNÇAS NTR MÉDIAS Ferado Lag da Silveira Istituto de Física - UFRGS lag@if.ufrgs.br O objetivo desse texto é apresetar através de exemplos uméricos como se

Leia mais

binomial seria quase simétrica. Nestas condições será também melhor a aproximação pela distribuição normal.

binomial seria quase simétrica. Nestas condições será também melhor a aproximação pela distribuição normal. biomial seria quase simétrica. Nestas codições será também melhor a aproximação pela distribuição ormal. Na prática, quado e p > 7, a distribuição ormal com parâmetros: µ p 99 σ p ( p) costitui uma boa

Leia mais

ESTIMAÇÃO POR INTERVALO (INTERVALOS DE CONFIANÇA)

ESTIMAÇÃO POR INTERVALO (INTERVALOS DE CONFIANÇA) 06 ETIMÇÃO OR INTERVLO (INTERVLO DE CONINÇ) Cada um dos métodos de estimação potual permite associar a cada parâmetro populacioal um estimador. Ora a cada estimador estão associadas tatas estimativas diferetes

Leia mais

3ª Lista de Exercícios de Programação I

3ª Lista de Exercícios de Programação I 3ª Lista de Exercícios de Programação I Istrução As questões devem ser implemetadas em C. 1. Desevolva um programa que leia dois valores a e b ( a b ) e mostre os seguites resultados: (1) a. Todos os úmeros

Leia mais

lim Px ( ) 35 x 5 ), teremos Px ( ) cada vez mais próximo de 35 (denotaremos isso da forma Px ( ) 35 ). UNIVERSIDADE FEDERAL DA PARAÍBA CAMPUS IV-CCAE

lim Px ( ) 35 x 5 ), teremos Px ( ) cada vez mais próximo de 35 (denotaremos isso da forma Px ( ) 35 ). UNIVERSIDADE FEDERAL DA PARAÍBA CAMPUS IV-CCAE CURSO DISCIPLINA PROFESSOR I) Itrodução ao Limite de uma Fução UNIVERSIDADE FEDERAL DA PARAÍBA CAMPUS IV-CCAE LICENCIATURA EM MATEMÁTICA CÁLCULO DIFERENCIAL E INTEGRAL I Limite de uma Fução José Elias

Leia mais

Sequências, PA e PG material teórico

Sequências, PA e PG material teórico Sequêcias, PA e PG material teórico 1 SEQUÊNCIA ou SUCESSÃO: é todo cojuto ode cosideramos os seus elemetos colocados, ou dispostos, uma certa ordem. Cosiderado a sequêcia (; 3; 5; 7;...), dizemos que:

Leia mais

A B C A e B A e C B e C A, B e C

A B C A e B A e C B e C A, B e C 2 O ANO EM Matemática I RAPHAEL LIMA Lista 6. Durate o desfile de Caraval das escolas de samba do Rio de Jaeiro em 207, uma empresa especializada em pesquisa de opiião etrevistou 40 foliões sobre qual

Leia mais

Implementação de Planilha de Cálculos Simplificada

Implementação de Planilha de Cálculos Simplificada INF 1620 Estruturas de Dados Semestre 08.2 Primeiro Trabalho Implemetação de Plailha de Cálculos Simplificada Uma plailha de cálculos é um programa muito utilizado em aplicações fiaceiras e aquelas que,

Leia mais

Critérios de correção e orientações de resposta p-fólio

Critérios de correção e orientações de resposta p-fólio Miistério da Ciêcia, Tecologia e Esio Superior U.C. 037 Elemetos de Probabilidade e Estatística de Juho de 0 Critérios de correção e orietações de resposta p-fólio Neste relatório apresetam-se os critérios

Leia mais

Experimento 1 Estudo da Lei de Hooke

Experimento 1 Estudo da Lei de Hooke Experimeto 1 Estudo da Lei de Hooke 1.1 Objetivos Físicos Verificação experimetal da lei de Hooke para uma mola helicoidal: Medida experimetal do módulo de rigidez do material μ. 1. Objetivos Didáticos

Leia mais

Introdução à Computação

Introdução à Computação Itrodução à Computação Recursividade Aula de hoje Recursividade Fução orial Voto de cofiaça recursivo Fução de Fiboacci Desvatages Professor: Adré de Carvalho Recursão Muitas estratégias de programação

Leia mais

FILAS PARALELAS COM SERVIDORES HETEROGÊNEOS E JOCKEYING PROBABILÍSTICO

FILAS PARALELAS COM SERVIDORES HETEROGÊNEOS E JOCKEYING PROBABILÍSTICO CAÍTULO FILAS ARALELAS COM SERVIDORES HETEROGÊNEOS E JOCKEYING ROBABILÍSTICO Nesse capítulo mostraremos a ovidade desse trabalho que é a obteção das equações de balaço de um sistema de filas paralelas

Leia mais

ESCOLA BÁSICA DE ALFORNELOS

ESCOLA BÁSICA DE ALFORNELOS ESCOLA BÁSICA DE ALFORNELOS FICHA DE TRABALHO DE MATEMÁTICA 9.º ANO VALORES APROXIMADOS DE NÚMEROS REAIS Dado um úmero xe um úmero positivo r, um úmero x como uma aproximação de x com erro iferior a r

Leia mais

3.4.2 Cálculo da moda para dados tabulados. 3.4 Moda Cálculo da moda para uma lista Cálculo da moda para distribuição de freqüências

3.4.2 Cálculo da moda para dados tabulados. 3.4 Moda Cálculo da moda para uma lista Cálculo da moda para distribuição de freqüências 14 Calcular a mediaa do cojuto descrito pela distribuição de freqüêcias a seguir. 8,0 10,0 10 Sabedo-se que é a somatória das, e, portato, = 15+25+16+34+10 = 100, pode-se determiar a posição cetral /2

Leia mais

Capítulo 3. Sucessões e Séries Geométricas

Capítulo 3. Sucessões e Séries Geométricas Capítulo 3 Sucessões e Séries Geométricas SUMÁRIO Defiição de sucessão Mootoia de sucessões Sucessões itadas (majoradas e mioradas) Limites de sucessões Sucessões covergetes e divergetes Resultados sobre

Leia mais

4.2 Numeração de funções computáveis

4.2 Numeração de funções computáveis 4. Numeração de fuções computáveis 4.1 Numeração de programas 4.2 Numeração de fuções computáveis 4.3 O método da diagoal 4.4 O Teorema s-m- Teresa Galvão LEIC - Teoria da Computação I 4.1 4.1 Numeração

Leia mais

5 Teoria dos Valores Extremos

5 Teoria dos Valores Extremos Teoria dos Valores Extremos 57 5 Teoria dos Valores Extremos A Teoria dos Valores Extremos vem sedo bastate utilizada em campos ligados a evetos raros. Sua estatística é aplicada a estimação de evetos

Leia mais

TRABALHO1 MEDIÇÕES, ALGARISMOS SIGNIFICATIVOS E ERROS.

TRABALHO1 MEDIÇÕES, ALGARISMOS SIGNIFICATIVOS E ERROS. TRABALHO1 MEDIÇÕES, ALGARISMOS SIGNIFICATIVOS E ERROS. 1.1 Objectivos Medir gradezas físicas, utilizado os istrumetos adequados. Apresetar correctamete os resultados das medições, ao ível da utilização

Leia mais

Amostras Aleatórias e Distribuições Amostrais. Probabilidade e Estatística: afinal, qual é a diferença?

Amostras Aleatórias e Distribuições Amostrais. Probabilidade e Estatística: afinal, qual é a diferença? Amostras Aleatórias e Distribuições Amostrais Probabilidade e Estatística: afial, qual é a difereça? Até agora o que fizemos foi desevolver modelos probabilísticos que se adequavam a situações reais. Por

Leia mais

Aula 5 de Bases Matemáticas

Aula 5 de Bases Matemáticas Aula 5 de Bases Matemáticas Rodrigo Hause de julho de 04 Pricípio da Idução Fiita. Versão Fraca Deição (P.I.F., versão fraca) Seja p() uma proposição aberta o uiverso dos úmeros aturais. SE valem ambas

Leia mais

Sequências Reais e Seus Limites

Sequências Reais e Seus Limites Sequêcias Reais e Seus Limites Sumário. Itrodução....................... 2.2 Sequêcias de Números Reais............ 3.3 Exercícios........................ 8.4 Limites de Sequêcias de Números Reais......

Leia mais

1 Amintas engenharia

1 Amintas engenharia 1 Amitas egeharia 2 Cálculo Numérico 1. Itrodução Amitas Paiva Afoso 3 1. Itrodução O que é o Cálculo Numérico? 4 1. Itrodução O Cálculo Numérico correspode a um cojuto de ferrametas ou métodos usados

Leia mais

O jogo MAX_MIN - Estatístico

O jogo MAX_MIN - Estatístico O jogo MAX_MIN - Estatístico José Marcos Lopes Resumo Apresetamos este trabalho um jogo (origial) de treiameto para fortalecer os coceitos de Média, Mediaa, Moda, Desvio Padrão e Desvio Médio da Estatística

Leia mais

Introdução ao Qui-Quadrado

Introdução ao Qui-Quadrado Técicas Laboratoriais de Física Lic. Física e g. Biomédica 007/08 Capítulo X Teste do Qui-quadrado, Itrodução ao qui-quadrado Defiição geral do qui-quadrado Graus de liberdade e reduzido abilidade do 66

Leia mais

Sucessões. , ou, apenas, u n. ,u n n. Casos Particulares: 1. Progressão aritmética de razão r e primeiro termo a: o seu termo geral é u n a n1r.

Sucessões. , ou, apenas, u n. ,u n n. Casos Particulares: 1. Progressão aritmética de razão r e primeiro termo a: o seu termo geral é u n a n1r. Sucessões Defiição: Uma sucessão de úmeros reais é uma aplicação u do cojuto dos úmeros iteiros positivos,, o cojuto dos úmeros reais,. A expressão u que associa a cada a sua imagem desiga-se por termo

Leia mais

Introdução. Objetivo da Ciência da Computação. Regra Geral. Nenhuma implementação excelente salva um Algoritmo inadequado.

Introdução. Objetivo da Ciência da Computação. Regra Geral. Nenhuma implementação excelente salva um Algoritmo inadequado. Itrodução Problema Algoritmo Implemetação Problema Uiversidade Federal de Ouro Preto Departameto de Computação Algoritmo 1 Algoritmo Algoritmo Projeto e Aálise de Algoritmos - I Implemetação C Implemetação

Leia mais

AULA Subespaço, Base e Dimensão Subespaço.

AULA Subespaço, Base e Dimensão Subespaço. Note bem: a leitura destes apotametos ão dispesa de modo algum a leitura ateta da bibliografia pricipal da cadeira TÓPICOS Subespaço. ALA Chama-se a ateção para a importâcia do trabalho pessoal a realizar

Leia mais

Linguagem Computacional. Estruturas de Controle: Estruturas de Decisão ou de Seleção. Prof. Dr. Adriano Cansian Prof. Dr. Leandro Alves Neves

Linguagem Computacional. Estruturas de Controle: Estruturas de Decisão ou de Seleção. Prof. Dr. Adriano Cansian Prof. Dr. Leandro Alves Neves 1 Algoritmos e Programação Liguagem Computacioal Estruturas de Cotrole: Estruturas de Decisão ou de Seleção Prof. Dr. Adriao Casia Prof. Dr. Leadro Alves Neves O que veremos: Estruturas de Cotrole de Fluxo

Leia mais

BINÔMIO DE NEWTON. O desenvolvimento da expressão 2. a b é simples, pois exige somente quatro multiplicações e uma soma:

BINÔMIO DE NEWTON. O desenvolvimento da expressão 2. a b é simples, pois exige somente quatro multiplicações e uma soma: 07 BINÔMIO DE NEWTON O desevolvimeto da epressão a b é simples, pois eige somete quatro multiplicações e uma soma: a b a b a b a ab ba b a ab b O desevolvimeto de a b é uma tarefa um pouco mais trabalhosa,

Leia mais

ESCOLA SECUNDÁRIA COM 3º CICLO D. DINIS 11º ANO DE ESCOLARIDADE DE MATEMÁTICA A Tema III Sucessões Reais

ESCOLA SECUNDÁRIA COM 3º CICLO D. DINIS 11º ANO DE ESCOLARIDADE DE MATEMÁTICA A Tema III Sucessões Reais ESCOLA SECUNDÁRIA COM 3º CICLO D. DINIS º ANO DE ESCOLARIDADE DE MATEMÁTICA A Tema III Sucessões Reais Tarefa º. Desta figura, do trabalho da Olívia e da Susaa, retire duas sequêcias e imagie o processo

Leia mais

SEQUÊNCIAS IMPORTANTES PARA O LIMITE

SEQUÊNCIAS IMPORTANTES PARA O LIMITE começado a eteder CÁLCULO Volume Um - SEQUÊNCIAS IMPORTANTES PARA O LIMITE Uma sequêcia ifiita de úmeros () é covergete a um úmero o quado () se tora (ou é sempre) igual a o, ou se tora cada vez mais próima

Leia mais

Apresentação do Cálculo. Apresentação do Cálculo

Apresentação do Cálculo. Apresentação do Cálculo UNIVERSIDADE DO ESTADO DE MATO GROSSO CAMPUS UNIVERSITÁRIO DE SINOP FACULDADE DE CIÊNCIAS EXATAS E TECNOLÓGICAS CURSO DE ENGENHARIA CIVIL DISCIPLINA: CÁLCULO DIFERENCIAL E INTEGRAL I Apresetação do Cálculo

Leia mais

Séries e aplicações15

Séries e aplicações15 Séries e aplicações5 Gil da Costa Marques Fudametos de Matemática I 5. Sequêcias 5. Séries 5. Séries especiais 5.4 Arquimedes e a quadratura da parábola 5.5 Sobre a Covergêcia de séries 5.6 Séries de Taylor

Leia mais

CT-234. Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

CT-234. Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches CT-234 Estruturas de Dados, Aálise de Algoritmos e Complexidade Estrutural Carlos Alberto Aloso Saches CT-234 5) Ordeação Resoluções simples, Lower boud, MergeSort, RadixSort Algus algoritmos de ordeação

Leia mais

Prova Escrita de MATEMÁTICA A - 12o Ano a Fase

Prova Escrita de MATEMÁTICA A - 12o Ano a Fase Prova Escrita de MATEMÁTICA A - 1o Ao 00 - a Fase Proposta de resolução GRUPO I 1. Como a probabilidade do João acertar em cada tetativa é 0,, a probabilidade do João acertar as tetativas é 0, 0, 0, 0,

Leia mais

3. Seja C o conjunto dos números complexos. Defina a soma em C por

3. Seja C o conjunto dos números complexos. Defina a soma em C por Eercícios Espaços vetoriais. Cosidere os vetores = (8 ) e = ( -) em. (a) Ecotre o comprimeto de cada vetor. (b) Seja = +. Determie o comprimeto de. Qual a relação etre seu comprimeto e a soma dos comprimetos

Leia mais

Numeração de funções computáveis. Nota

Numeração de funções computáveis. Nota Numeração de fuções computáveis 4.1 Nota Os presetes acetatos foram baseados quase a sua totalidade os acetatos realizados pela Professora Teresa Galvão da Uiversidade de Porto para a cadeira Teoria da

Leia mais

5. O algoritmo dos mínimos quadrados

5. O algoritmo dos mínimos quadrados Apotametos de Processameto Adaptativo de Siais 5. O algoritmo dos míimos quadrados Método dos míimos quadrados Os algoritmos de míimos quadrados são uma alterativa aos algoritmos de gradiete. Estrutura

Leia mais

Cálculo Numérico Lista 02

Cálculo Numérico Lista 02 Cálculo Numérico Lista 02 Professor: Daiel Herique Silva Essa lista abrage iterpolação poliomial e método dos míimos quadrados, e cobre a matéria da seguda prova. Istruções gerais para etrega Nem todos

Leia mais

5. ANÁLISE DE SISTEMAS DA CONFIABILIADE DE SISTEMAS SÉRIE-PARALELO

5. ANÁLISE DE SISTEMAS DA CONFIABILIADE DE SISTEMAS SÉRIE-PARALELO 5. ANÁLISE DE SISTEMAS DA CONFIABILIADE DE SISTEMAS SÉRIE-PARALELO 5.1 INTRODUÇÃO Um sistema é defiido como todo o cojuto de compoetes itercoectados, previamete determiados, de forma a realizar um cojuto

Leia mais

arxiv: v1 [math.ho] 3 Sep 2014

arxiv: v1 [math.ho] 3 Sep 2014 Álbum de figurihas da Copa do Mudo: uma abordagem via Cadeias de Markov Leadro Morgado IMECC, Uiversidade Estadual de Campias arxiv:409.260v [math.ho] 3 Sep 204 Cosiderações iiciais 6 de maio de 204 Com

Leia mais

1. ORDENAÇÃO POR TROCA ORDENAÇÃO. 1.1 Ordenação por Bolha. Exemplo, 25, 57, 48, 37, 12, 92, 86, 33. Algoritmo. Complexidade de Tempo

1. ORDENAÇÃO POR TROCA ORDENAÇÃO. 1.1 Ordenação por Bolha. Exemplo, 25, 57, 48, 37, 12, 92, 86, 33. Algoritmo. Complexidade de Tempo ORDENAÇÃO Ordear é o processo de orgaizar uma lista de iformações similares em ordem crescete ou decrescete. Especificamete, dada uma lista de ites r[], r[], r[],, r[-], cada item a lista é chamado registro.

Leia mais

6.1 Estimativa de uma média populacional: grandes amostras. Definição: Um estimador é uma característica amostral (como a média amostral

6.1 Estimativa de uma média populacional: grandes amostras. Definição: Um estimador é uma característica amostral (como a média amostral 6 ESTIMAÇÃO 6.1 Estimativa de uma média populacioal: grades amostras Defiição: Um estimador é uma característica amostral (como a média amostral x ) utilizada para obter uma aproximação de um parâmetro

Leia mais

( 1,2,4,8,16,32,... ) PG de razão 2 ( 5,5,5,5,5,5,5,... ) PG de razão 1 ( 100,50,25,... ) PG de razão ½ ( 2, 6,18, 54,162,...

( 1,2,4,8,16,32,... ) PG de razão 2 ( 5,5,5,5,5,5,5,... ) PG de razão 1 ( 100,50,25,... ) PG de razão ½ ( 2, 6,18, 54,162,... Progressões Geométricas Defiição Chama se progressão geométrica PG qualquer seqüêcia de úmeros reais ou complexos, ode cada termo a partir do segudo, é igual ao aterior, multiplicado por uma costate deomiada

Leia mais

CÁLCULO I. Exibir o cálculo de algumas integrais utilizando a denição;

CÁLCULO I. Exibir o cálculo de algumas integrais utilizando a denição; CÁLCULO I Prof Edilso Neri Júior Prof Adré Almeida Aula o 9: A Itegral de Riema Objetivos da Aula Deir a itegral de Riema; Exibir o cálculo de algumas itegrais utilizado a deição; Apresetar fuções que

Leia mais

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2007.

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2007. Ageda Aálise e Técicas de Algoritmos Motivação para aálise de de algoritmos Aálise assitótica Algus exemplos simples Jorge Figueiredo Aálise de de Algoritmos Dois aspectos importates: Um problema pode,

Leia mais

ESTIMAÇÃO DA PROPORÇÃO POPULACIONAL p

ESTIMAÇÃO DA PROPORÇÃO POPULACIONAL p ESTIMAÇÃO DA PROPORÇÃO POPULACIONAL p Objetivo Estimar uma proporção p (descohecida) de elemetos em uma população, apresetado certa característica de iteresse, a partir da iformação forecida por uma amostra.

Leia mais

Estimar uma proporção p (desconhecida) de elementos em uma população, apresentando certa característica de interesse, a partir da informação

Estimar uma proporção p (desconhecida) de elementos em uma população, apresentando certa característica de interesse, a partir da informação ESTIMAÇÃO DA PROPORÇÃO POPULACIONAL p 1 Objetivo Estimar uma proporção p (descohecida) de elemetos em uma população, apresetado certa característica de iteresse, a partir da iformação forecida por uma

Leia mais

Sucessões Reais. Ana Isabel Matos DMAT

Sucessões Reais. Ana Isabel Matos DMAT Sucessões Reais Aa Isabel Matos DMAT 8 de Outubro de 000 Coteúdo Noção de Sucessão Limite de uma Sucessão 3 Sucessões Limitadas 3 4 Propriedades dos Limites 4 5 Limites I itos 8 5. Propriedades dos Limites

Leia mais

DFS Série Discreta de Fourier DFT Transformada Discreta de Fourier Convolução Circular

DFS Série Discreta de Fourier DFT Transformada Discreta de Fourier Convolução Circular Sistemas de Processameto Digital Egeharia de Sistemas e Iformática Ficha 4 5/6 4º Ao/ º Semestre DFS Série Discreta de Fourier DFT Trasformada Discreta de Fourier Covolução Circular Para calcular a DFT,

Leia mais

Cálculo Diferencial e Integral I Resolução do 2 ō Teste - LEIC

Cálculo Diferencial e Integral I Resolução do 2 ō Teste - LEIC Cálculo Diferecial e Itegral I Resolução do ō Teste - LEIC Departameto de Matemática Secção de Àlgebra e Aálise I.. Determie o valor dos seguites itegrais (i) e x se x dx x + (ii) x (x + ) dx (i) Visto

Leia mais

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005.

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005. Ageda Aálise e Técicas de Algoritmos Jorge Figueiredo Relação de de Recorrêcia Derivado recorrêcia Resolvedo recorrêcia Aálise de de algoritmos recursivos Aálise de de Algoritmos Recursivos Itrodução A

Leia mais

Fundamentos de Análise Matemática Profª Ana Paula. Números reais

Fundamentos de Análise Matemática Profª Ana Paula. Números reais Fudametos de Aálise Matemática Profª Aa Paula Números reais 1,, 3, cojuto dos úmeros aturais 0,1,,3, cojuto dos úmeros iteiros p q /p e q cojuto dos úmeros racioais a, a 0 a 1 a a, a e a i 0, 1,, 3, 4,

Leia mais

Análise de Regressão Linear Múltipla I

Análise de Regressão Linear Múltipla I Aálise de Regressão Liear Múltipla I Aula 04 Gujarati e Porter, 0 Capítulos 7 e 0 tradução da 5ª ed. Heij et al., 004 Capítulo 3 Wooldridge, 0 Capítulo 3 tradução da 4ª ed. Itrodução Como pode ser visto

Leia mais

Alguns autores também denotam uma sequência usando parêntesis:

Alguns autores também denotam uma sequência usando parêntesis: Capítulo 3 Sequêcias e Séries Numéricas 3. Sequêcias Numéricas Uma sequêcia umérica é uma fução real com domíio N que, a cada associa um úmero real a. Os úmeros a são chamados termos da sequêcia. É comum

Leia mais

FICHA de AVALIAÇÃO de MATEMÁTICA A 11.º Ano Versão 2

FICHA de AVALIAÇÃO de MATEMÁTICA A 11.º Ano Versão 2 FICHA de AVALIAÇÃO de MATEMÁTICA A.º Ao Versão Aluo: N.º Turma: Professor: Classificação: Apresete o seu raciocíio de forma clara, idicado todos os cálculos que tiver de efetuar e todas as justificações

Leia mais

O termo "linear" significa que todas as funções definidas no modelo matemático que descreve o problema devem ser lineares, isto é, se f( x1,x2

O termo linear significa que todas as funções definidas no modelo matemático que descreve o problema devem ser lineares, isto é, se f( x1,x2 MÓDULO 4 - PROBLEMAS DE TRANSPORTE Baseado em Novaes, Atôio Galvão, Métodos de Otimização: aplicações aos trasportes. Edgar Blücher, São Paulo, 978..CONCEITOS BÁSICOS DE PROGRAMAÇÃO LINEAR É uma técica

Leia mais

Stela Adami Vayego DEST/UFPR

Stela Adami Vayego DEST/UFPR Resumo 0 Estimação de parâmetros populacioais 9.. Itrodução Aqui estudaremos o problema de avaliar certas características dos elemetos da população (parâmetros), com base em operações com os dados de uma

Leia mais

Exame Final Nacional de Matemática Aplicada às Ciências Sociais Época especial

Exame Final Nacional de Matemática Aplicada às Ciências Sociais Época especial Exame Fial Nacioal de Matemática Aplicada às Ciêcias Sociais 016 - Época especial Proposta de resolução 1. Aplicado o primeiro método para o apurameto do vecedor, temos: N o. de votos 615 300 435 150 Total

Leia mais

Preliminares 1. 1 lim sup, lim inf. Medida e Integração. Departamento de Física e Matemática. USP-RP. Prof. Rafael A. Rosales. 8 de março de 2009.

Preliminares 1. 1 lim sup, lim inf. Medida e Integração. Departamento de Física e Matemática. USP-RP. Prof. Rafael A. Rosales. 8 de março de 2009. Medida e Itegração. Departameto de Física e Matemática. USP-RP. Prof. Rafael A. Rosales 8 de março de 2009. 1 lim sup, lim if Prelimiares 1 Seja (x ), N, uma seqüêcia de úmeros reais, e l o limite desta

Leia mais

10 - Medidas de Variabilidade ou de Dispersão

10 - Medidas de Variabilidade ou de Dispersão 10 - Medidas de Variabilidade ou de Dispersão 10.1 Itrodução Localizado o cetro de uma distribuição de dados, o próximo passo será verificar a dispersão desses dados, buscado uma medida para essa dispersão.

Leia mais

(i) (1,5 val.) Represente na forma de um intervalo ou de uma união disjunta de intervalos cada um dos conjuntos seguintes:

(i) (1,5 val.) Represente na forma de um intervalo ou de uma união disjunta de intervalos cada um dos conjuntos seguintes: Istituto Superior Técico Departameto de Matemática o TESTE DE CÁLCULO DIFERENCIAL E INTEGRAL I - Versão A MEAero o Sem. 0/3 0//0 Duração: h30m RESOLUÇÃO. 3,0 val. i,5 val. Represete a forma de um itervalo

Leia mais

Aula 3 : Somatórios & PIF

Aula 3 : Somatórios & PIF Aula 3 : Somatórios & PIF Somatório: Somatório é um operador matemático que os permite represetar facilmete somas de um grade úmero de parcelas É represetado pela letra maiúscula do alfabeto grego sigma

Leia mais

Fundamentos de Análise Matemática Profª Ana Paula. Sequência Infinitas

Fundamentos de Análise Matemática Profª Ana Paula. Sequência Infinitas Fudametos de Aálise Matemática Profª Aa Paula Sequêcia Ifiitas Defiição 1: Uma sequêcia umérica a 1, a 2, a 3,,a,é uma fução, defiida o cojuto dos úmeros aturais : f : f a Notação: O úmero é chamado de

Leia mais

1. Definição e conceitos básicos de equações diferenciais

1. Definição e conceitos básicos de equações diferenciais Capítulo 7: Soluções Numéricas de Equações Difereciais Ordiárias. Itrodução Muitos feómeos as áreas das ciêcias, egearias, ecoomia, etc., são modelados por equações difereciais. Supoa-se que se quer determiar

Leia mais

1 a Lista de PE Solução

1 a Lista de PE Solução Uiversidade de Brasília Departameto de Estatística 1 a Lista de PE Solução 1. a) Qualitativa omial. b) Quatitativa discreta. c) Quatitativa discreta. d) Quatitativa cotíua. e) Quatitativa cotíua. f) Qualitativa

Leia mais

(x a) f (n) (a) (x t) n dt. (x t) f (n) (t)

(x a) f (n) (a) (x t) n dt. (x t) f (n) (t) . Aula Resto e Teorema de Taylor revisitado. Seja f : D R uma fução e p,a (x) o seu poliómio de Taylor de grau. O resto de ordem foi defiido ateriormete como sedo a fução: R,a (x) := f(x) p,a (x). O resultado

Leia mais

Alguns autores também denotam uma sequência usando parêntesis:

Alguns autores também denotam uma sequência usando parêntesis: Capítulo 3 Sequêcias e Séries Numéricas 3. Sequêcias Numéricas Uma sequêcia umérica é uma fução real com domíio N que, a cada associa um úmero real a. Os úmeros a são chamados termos da sequêcia. É comum

Leia mais

CORRELAÇÃO Aqui me tens de regresso

CORRELAÇÃO Aqui me tens de regresso CORRELAÇÃO Aqui me tes de regresso O assuto Correlação fez parte, acompahado de Regressão, do programa de Auditor Fiscal, até 998, desaparecedo a partir do cocurso do ao 000 para agora retorar soziho.

Leia mais

Estatística: Aplicação ao Sensoriamento Remoto SER ANO Teoria da amostragem

Estatística: Aplicação ao Sensoriamento Remoto SER ANO Teoria da amostragem Estatística: Aplicação ao Sesoriameto Remoto SER 04 - ANO 017 Teoria da amostragem Camilo Daleles Reó camilo@dpi.ipe.br http://www.dpi.ipe.br/~camilo/estatistica/ Algumas Cosiderações... É importate ter

Leia mais

ESTATÍSTICA. PROF. RANILDO LOPES U.E PROF EDGAR TITO

ESTATÍSTICA. PROF. RANILDO LOPES  U.E PROF EDGAR TITO ESTATÍSTICA PROF. RANILDO LOPES http://ueedgartito.wordpress.com U.E PROF EDGAR TITO Medidas de tedêcia cetral Medidas cetrais são valores que resumem um cojuto de dados a um úico valor que, de alguma

Leia mais

ORDENAÇÃO 1. ORDENAÇÃO POR TROCA

ORDENAÇÃO 1. ORDENAÇÃO POR TROCA ORDENAÇÃO Ordear é o processo de orgaizar uma lista de iformações similares em ordem crescete ou decrescete. Especificamete, dada uma lista de ites r[0], r[], r[],..., r[-], cada item a lista é chamado

Leia mais

FUNÇÕES CONTÍNUAS Onofre Campos

FUNÇÕES CONTÍNUAS Onofre Campos OLIMPÍADA BRASILEIRA DE MATEMÁTICA NÍVEL III SEMANA OLÍMPICA Salvador, 19 a 26 de jaeiro de 2001 1. INTRODUÇÃO FUNÇÕES CONTÍNUAS Oofre Campos oofrecampos@bol.com.br Vamos estudar aqui uma ova classe de

Leia mais