Você está na página 1de 36

Anlise de algoritmos

Parte II

Anlise de algoritmos

Existem basicamente 2 formas de estimar o tempo de execuo de programas e decidir quais so os melhores

Emprica ou teoricamente

desejvel e possvel estimar qual o melhor algoritmo sem ter que execut-los

Funo da anlise de algoritmos


2

Calculando o tempo de execuo


Supondo que as operaes simples demoram uma unidade de tempo para executar, considere o n programa abaixo para calcular o resultado de i 3
i =1

Incio declare soma_parcial numrico; soma_parcial 0; para i1 at n faa soma_parcialsoma_parcial+i*i*i; escreva(soma_parcial); Fim
3

Calculando o tempo de execuo


Supondo que as operaes simples demoram uma unidade de tempo para executar, considere o n programa abaixo para calcular o resultado de i 3
i =1

1 unidade de tempo Incio declare soma_parcial numrico; 1 unidade para inicializao de i, n+1 unidades para testar se in e n soma_parcial 0; unidades para incrementar i = 2n+2 para i1 at n faa soma_parcialsoma_parcial+i*i*i; 4 unidades (1 da soma, 2 das multiplicaes e 1 da escreva(soma_parcial); atribuio) executada n Fim vezes (pelo comando para) = 4n unidades
4

Calculando o tempo de execuo


Supondo que as operaes simples demoram uma unidade de tempo para executar, considere o n programa abaixo para calcular o resultado de i 3
i =1

1 unidade de tempo Incio declare soma_parcial numrico; 1 unidade para inicializao de i, n+1 unidades para testar se in e n soma_parcial 0; unidades para incrementar i = 2n+2 para i1 at n faa soma_parcialsoma_parcial+i*i*i; 4 unidades (1 da soma, 2 Custo total: somando Custo total: somando das multiplicaes e 1 da escreva(soma_parcial); tudo, atribuio) executada n tudo,tem-se tem-se6n+4 6n+4 Fim unidades vezes (pelo comando unidadesde detempo, tempo,ou ou

seja, seja,a afuno funo O(n) O(n)

para) = 4n unidades

Calculando o tempo de execuo


Ter que realizar todos esses passos para cada algoritmo (principalmente algoritmos grandes) pode se tornar uma tarefa cansativa Em geral, como se d a resposta em termos do bigoh, costuma-se desconsiderar as constantes e elementos menores dos clculos

No exemplo anterior A linha soma_parcial0 insignificante em termos de tempo desnecessrio ficar contando 2, 3 ou 4 unidades de tempo na linha soma_parcialsoma_parcial+i*i*i O que realmente d a grandeza de tempo desejada a repetio na linha para i1 at n faa
6

Regras para o clculo


Repeties

O tempo de execuo de uma repetio pelo menos o tempo dos comandos dentro da repetio (incluindo testes) vezes o nmero de vezes que executada

Regras para o clculo


Repeties aninhadas

A anlise feita de dentro para fora O tempo total de comandos dentro de um grupo de repeties aninhadas o tempo de execuo dos comandos multiplicado pelo produto do tamanho de todas as repeties O exemplo abaixo O(n2)
para i0 at n faa para j0 at n faa faa kk+1;
8

Regras para o clculo


Comandos consecutivos

a soma dos tempos de cada um, o que pode significar o mximo entre eles O exemplo abaixo O(n2), apesar da primeira repetio ser O(n)
para i0 at n faa k0; para i0 at n faa para j0 at n faa faa kk+1;

Regras para o clculo


Se... ento... seno


Para uma clusula condicional, o tempo de execuo nunca maior do que o tempo do teste mais o tempo do maior entre os comandos relativos ao ento e os comandos relativos ao seno O exemplo abaixo O(n)
se i<j ento ii+1 seno para k1 at n faa ii*k;
10

Regras para o clculo


Chamadas a sub-rotinas

Uma sub-rotina deve ser analisada primeiro e depois ter suas unidades de tempo incorporadas ao programa/sub-rotina que a chamou

11

Exerccio

Estime quantas unidades de tempo so necessrias para rodar o algoritmo abaixo


Incio declare i e j numricos; declare A vetor numrico de n posies; i1; enquanto in faa A[i]0; ii+1; para i1 at n faa para j1 at n faa A[i]A[i]+i+j; Fim
12

Exerccio em duplas

Analise a sub-rotina recursiva abaixo


sub-rotina fatorial(n: numrico) incio declare aux numrico; se n1 ento aux1 seno auxn*fatorial(n-1); fatorialaux; fim
13

Regras para o clculo


Sub-rotinas recursivas

Se a recurso um disfarce da repetio (e, portanto, a recurso est mal empregada, em geral), basta analis-la como tal O exemplo anterior obviamente O(n)

sub-rotina fatorial(n: numrico) Eliminando incio a recurso declare aux numrico; se n1 ento aux1 seno auxn*fatorial(n-1); fatorialaux; fim

sub-rotina fatorial(n: numrico) incio declare aux numrico; aux1; enquanto n>1 faa auxaux*n; nn-1; fatorialaux; fim
14

Regras para o clculo


Sub-rotinas recursivas

Em muitos casos (incluindo casos em que a recursividade bem empregada), difcil transform-la em repetio Nesses casos, para fazer a anlise do algoritmo, pode ser necessrio fazer uma anlise de recorrncia

Recorrncia: equao ou desigualdade que descreve uma funo em termos de seu valor em entradas menores

Caso tpico: algoritmos de dividir-e-conquistar, ou seja, algoritmos que desmembram o problema em vrios subproblemas que so semelhantes ao problema original, mas menores em tamanho, resolvem os subproblemas recursivamente e depois combinam essas solues com o objetivo de criar uma soluo para o problema original Exemplos? 15

Regras para o clculo


Exemplo de uso de recorrncia Nmeros de Fibonacci


0,1,1,2,3,5,8,13... f(0)=0, f(1)=1, f(i)=f(i-1)+f(i-2)

sub-rotina fib(n: numrico) incio declare aux numrico; se n1 ento aux1 seno auxfib(n-1)+fib(n-2); fibaux; fim
16

Regras para o clculo


Exemplo de uso de recorrncia Nmeros de Fibonacci


0,1,1,2,3,5,8,13... f(0)=0, f(1)=1, f(i)=f(i-1)+f(i-2)

sub-rotina fib(n: numrico) incio declare aux numrico; se n1 ento aux1 seno auxfib(n-1)+fib(n-2); fibaux; fim

Seja T(n) o tempo de execuo da funo. Caso 1: Se n=0 ou 1, o tempo de execuo constante, que o tempo de testar o valor de n no comando se, mais atribuir o valor 1 varivel aux, mais atribuir o valor de aux ao nome da funo; 17 ou seja, T(0)=T(1)=3.

Regras para o clculo


Exemplo de uso de recorrncia Nmeros de Fibonacci


0,1,1,2,3,5,8,13... f(0)=0, f(1)=1, f(i)=f(i-1)+f(i-2)

sub-rotina fib(n: numrico) incio declare aux numrico; se n1 ento aux1 seno auxfib(n-1)+fib(n-2); fibaux; fim

Caso 2: Se n>2, o tempo consiste em testar o valor de n no comando se, mais o trabalho a ser executado no seno (que uma soma, uma atribuio e 2 chamadas recursivas), mais a atribuio de aux ao nome da funo; ou seja, a recorrncia 18 T(n)=T(n-1)+T(n-2)+4, para n>2.

Regras para o clculo


Muitas vezes, a recorrncia pode ser resolvida com base na prtica e experincia do analista Alguns mtodos para resolver recorrncias

Mtodo da substituio Mtodo mestre Mtodo da rvore de recurso


19

Resoluo de recorrncias

Mtodo da substituio

Supe-se (aleatoriamente ou com base na experincia) um limite superior para a funo e verifica-se se ela no extrapola este limite Uso de induo matemtica O nome do mtodo vem da substituio da resposta adequada pelo palpite Pode-se apertar o palpite para achar funes mais exatas
20

Resoluo de recorrncias

Mtodo mestre

Fornece limites para recorrncias da forma T(n)=aT(n/b)+f(n), em que a1, b>1 e f(n) uma funo dada Envolve a memorizao de alguns casos bsicos que podem ser aplicados para muitas recorrncias simples
21

Resoluo de recorrncias

Mtodo da rvore de recurso


Traa-se uma rvore que, nvel a nvel, representa as recurses sendo chamadas Em seguida, em cada nvel/n da rvore, so acumulados os tempos necessrios para o processamento No final, tem-se a estimativa de tempo do problema Este mtodo pode ser utilizado para se fazer uma suposio mais informada no mtodo da substituio
22

Resoluo de recorrncias

Mtodo da rvore de recurso


Exemplo: algoritmo de ordenao de arranjos por intercalao


Passo 1: divide-se um arranjo no ordenado em dois subarranjos Passo 2: se os subarranjos no so unitrios, cada subarranjo submetido ao passo 1 anterior; caso contrrio, eles so ordenados por intercalao dos elementos e isso propagado para os subarranjos anteriores

23

Ordenao por intercalao


Exemplo com arranjo de 4 elementos


Arranjo inicial

3 1 4 2 3 1 3 1 1 3 4 2 4 2 4 2 Intercalao em ordem Diviso em arranjos menores

1 2 3 4
Arranjo final ordenado
24

Resoluo de recorrncias

Mtodo da rvore de recurso


Considere o tempo do algoritmo (que envolve recorrncia)


n operaes para a intercalao do T(n)=c, se n=1 passo final T(n)=2T(n/2)+cn, se n>1 T(n)=2(2T(n/4)+cn/2)+cn =4T(n/4)+2(cn/2)+cn = 4(2T(n/8)+4(cn/4))+2(cn/2) + cn = 8T(n/8)+ 3cn ... = 2iT(n/2i) + i(cn) Considerando o limite n/2i = 1, logo i = log2n, e T(n) = 2 log2nT(1) + log2n(cn) = cn + cn log2n = cn log2n + cn
25

Resoluo de recorrncias

26

Resoluo de recorrncias

27

Resoluo de recorrncias

Tem-se que:

Na parte (a), h T(n) ainda no expandido Na parte (b), T(n) foi dividido em rvores equivalentes representando a recorrncia com custos divididos (T(n/2) cada uma), sendo cn o custo no nvel superior da recurso (fora da recurso e, portanto, associado ao n raiz) ... No fim, nota-se que o tamanho da rvore corresponde a (log n)+1, que o nmero de vezes do custo dos nveis (iguais a n) Como resultado, tem-se cn logn + cn, ou seja, O(n log n)
28

Precaues

A anlise assinttica uma ferramenta fundamental ao projeto, anlise ou escolha de um algoritmo especfico para uma dada aplicao No entanto, deve-se ter sempre em mente que essa anlise esconde fatores assintoticamente irrelevantes, mas que em alguns casos podem ser relevantes na prtica, particularmente se o problema de interesse se limitar a entradas (relativamente) pequenas

Por exemplo, um algoritmo com tempo de execuo da ordem de 10100n O(n), assintoticamente melhor do que outro com tempo 10 n log n, o que nos faria, em princpio, preferir o primeiro No entanto, 10100 o nmero estimado por alguns astrnomos como um limite superior para a quantidade de tomos existente no universo observvel!

29

Anlise de algoritmos recursivos


Exemplo: pesquisa binria pelo nmero 3

Arranjo ordenado

1 3 5 6 8 11 15 16 17
o elemento procurado?

1 3 5 6 8 11 15 16 17
o elemento procurado?

1 3 5 6 8 11 15 16 17
o elemento procurado?
30

Anlise de algoritmos recursivos


Implemente o algoritmo da busca binria em um arranjo ordenado

31

Anlise de algoritmos recursivos


Teste e analise o algoritmo

32

Anlise de algoritmos recursivos


Problema da maior soma de subseqncia em um arranjo


-2 11 -4 13 -5 -2 20

33

Anlise de algoritmos recursivos


Faa um algoritmo para resolver o problema e analise-o

34

Anlise de algoritmos recursivos


Idem para o Algoritmo de Euclides para calcular o mximo divisor comum para 2 nmeros

35

Anlise de algoritmos recursivos


Idem para o Algoritmo para calcular xn

36

Você também pode gostar