Sunteți pe pagina 1din 8

A Notao Big-Oh

Introduo:
O objetivo principal de uma anlise algortmica consiste em termos indicadores capazes de nos fornecer informaes pertinentes ao tempo de execuo de um determinado algoritmo sem precisarmos implement-lo e test-lo toda vez que quisermos medir o seu tempo de execuo. Um fator de medida de dimenso de um algoritmo torna o trabalho de anlise algortmica muito mais prtico pois programas mais elaborados e complicados geralmente so constitudos por outros algoritmos menores e seria muito trabalhoso testar as diversas alternativas para cada trecho do programa. Tendo essa medida de dimenso do algoritmo podemos ter rapidamente uma viso geral de comparao do comportamento de diversos algoritmos na resoluo de determinado problema. O comportamento de um algoritmo influenciado por diversos fatores o que torna impossvel termos uma previso exata de como o algoritmo vai reagir de acordo com as diferentes ocasies de entrada. Para contornar esse problema , procuramos obter as principais caractersticas do algoritmo, ou seja, os fatores predominantes que mais influenciam na perfomance do algoritmo em questo. Desta forma, definiremos determinados parmetros e medidas que sero a base de nossa anlise algortmica. Atravs desses parmetros, com a nossa anlise poderemos comparar diferentes algoritmos e determinar o melhor e mais adequado para os nossos propsitos.

Anlise do Comportamento Assinttico de Funes:


Nossa anlise tem como objetivo aplicar uma determinada metodologia a fim de prever o tempo de execuo aproximado de algoritmos e nos permitir comparaes entre os diferentes algoritmos em questo. O ponto chave da nossa anlise consiste em ignorar os fatores constantes e nos direcionarmos para o comportamento do algoritmo de acordo com o tamanho da entrada, especificamente quando o tamanho dessa entrada vai para o infinito. O tempo de execuo de um algoritmo pode ser representado em funo desse tamanho da entrada, o qual ser denotado pela letra "n". Desta forma, se a entrada for um registro ou um array de tamanho "n", e se tivermos um algoritmo cuja funo representativa do nmero de passos realizados por ele em funo de "n" for f(n)=150n, ento essa constante 150 ser ignorada e diremos que o tempo de execuo ser aproximadamente "n". O fato de ignorarmos os fatores constantes ocorre por conseqncia de

estarmos interessados nos casos em que o tamanho da entrada suficientemente grande, ou melhor ainda, quando "n" tende ao infinito. Nesses casos o crescimento de qualquer constante desprezvel em relao ao crescimento de "n". Para a nossa anlise, relevantemente considervel que raciocinemos sempre levando em conta valores grandes para n o que vai nos fornecer uma viso mais real do comportamento do algoritmo. O que chamamos de tamanho da entrada pode ser entendido como a medida da quantidade de espao requerido para armazenar a entrada. Seria impossvel listarmos o tempo de execuo de um determinado algoritmo para todas as diferentes e possveis entradas. Por isso que definimos como n a medida de uma entrada e relativo essa medida que desenvolvemos nossa anlise. Sabemos que um algoritmo pode no se comportar exatamente da mesma maneira para todas as entradas de igual tamanho, porm esperamos que essa variao de comportamento seja pequena e no interfira em nossa abordagem. Alm disso no nos prenderemos em definir o tamanho da entrada para todos os algoritmos pois nosso propsito principal ser comparar diferentes algoritmos para o mesmo problema e estudarmos suas respectivas respostas. Dentre as entradas de igual tamanho, procuramos escolher a entrada que represente a pior situao para o algoritmo, a pior entrada, ou seja, o pior caso. Poderamos escolher a melhor entrada, mas uma abordagem em cima da melhor entrada no seria representativo devido ao fato de que esse caso minoria na prtica. Uma entrada intermediria seria de trabalhosa abordagem devido ao fato de que poderamos avali-la atravs de muitos parmetros diferentes, alm de no possuirmos ferramentas matemticas capazes de nos proporcionar uma anlise deste caso. O fato de escolhermos a pior entrada como indicador ser de grande utilidade pois o algoritmo que possuir a melhor performance para a pior entrada tambm ter uma boa performance para os outros casos. Como j estudamos anteriormente quando tratamos de complexidade, o custo para obter uma soluo para um determinado problema aumenta a medida que o tamanho n do problema aumenta. Desta forma, o parmetro n, nos fornece uma medida da dificuldade para se resolver o problema em questo, no sentido de que o tempo necessrio para solucionar o problema cresce quando n cresce. Podemos observar tambm que para valores suficientemente pequenos de n, qualquer algoritmo custa pouco para ser executado, mesmo quando se trata de algoritmos ineficientes. Conclumos ento que a escolha do algoritmo no um problema crtico quando se trata de problemas de pequenos tamanhos. Entretanto, a nossa anlise se direciona para valores grandes de n, estudando o comportamento assinttico das funes de custo dos algoritmos de acordo com esse grande crescimento de n. Sendo f(n) uma funo representativa do custo de um algoritmo que se relaciona com o seu tempo de execuo, temos que o comportamento assinttico de f(n) representa o limite do comportamento do custo quando n cresce. Em se tratando de algoritmos, existem partes do programa que so as que mais contribuem na determinao da funo de custo, ou seja, existem partes

predominantes que so as mais influentes no comportamento das funes de custo. Tendo, ento, as funes de custo de diferentes algoritmos, podemos comparar o comportamento assinttico dessas duas funes e definir o domnio assinttico de uma funo sobre a outra: uma funo g(n) domina assintoticamente outra funo f(n) se existem duas constantes positivas c e N tais que, para todo n N, temos | f(n) | c | g(n) |. Essa afirmao significa que a partir de um certo valor de n a funo g(n) multiplicada por uma constante permanece sempre maior que a funo f(n).

Podemos observar melhor o sentido desta afirmao observando o grfico abaixo:

cg(n)

f(n)

n N
grfico: g(n) domina assintoticamente f(n).

Podemos dar alguns exemplos. Seja g(n) = 4n e f(n) = 100n. Para qualquer valor de n 25 e para c = 1 temos que | 100n | | 4n |. Ou seja, com c =1 e N = 25 temos que a definio de domnio assinttico satisfeita, g(n) domina assintoticamente f(n). O inverso no verdadeiro pois a afirmao | 4n | c |

100n | no verdadeira, pois, a partir de um certo valor de n, 4n sempre maior que c 100n qualquer que seja o valor de c. Isso s vem a reforar a nossa afirmao anterior de apenas nos direcionarmos para valores grandes de n. Se testssemos para n = 10, com c = 1, teramos a iluso de que f(n) = 100n seria maior que g(n) = 4n para n maior que 10 o que seria falso. Dessa maneira devemos procurar ter uma noo de quo rpido a funo cresce quando n cresce, isto , qual funo vai mais rpido para infinito quando tomamos o limite de n tendendo para o infinito. No nosso exemplo temos que a funo quadrtica cresce muito mais rpido do que uma funo de crescimento linear. Temos diversos tipos de funes representativas: funes lineares, quadrticas, polinomiais em geral, logartmicas, exponenciais, que iremos abordar e comparar, comparando assim diversos algoritmos e seus comportamentos quando o tamanho da entrada n for suficientemente grande. Entretanto, para essa abordagem ser necessria uma notao especfica que nos permita a comparao entre as funes de custo dos diversos algoritmos e que simbolize o domnio assinttico de uma funo sobre a outra. Sobre esta notao que falaremos em seguida. Vale ressaltar ainda que apesar da anlise assinttica e da anlise do pior caso serem aproximaes do tempo de execuo de um particular algoritmo sobre uma entrada particular, elas so, entretanto muito bons indicadores na maioria dos casos.

A Notao :

Como j relatamos anteriormente, nossa anlise ignorar fatores constantes quando formos avaliar o tempo de execuo de um determinado algoritmo. Para realizarmos essa anlise de uma forma efetiva que nos permita comparar os algoritmos, introduziremos uma notao especial que nos informe a relao entre os tempos de execuo dos diferentes algoritmos. Definio: Dizemos que uma funo g(n) (f(n)) de uma outra funo f(n) ( l-se Oh, ou algumas vezes, Big Oh, de f(n)), se existem constantes c e N , tais que, para todo n N , temos g(n) c f(n). Significa que, para um valor suficientemente grande de n , a funo g(n) no maior do que uma constante multiplicada pela funo f(n). Desta maneira a notao limita apenas por cima, ou seja, ela informa que uma das funes limite superior para a outra. Assim, se tivermos f(n) = 3n + 9, teremos que f(n) = (n ), j que 3n + 5 4n para todo n 3. Analogamente, f(n) = (n), j que 3n + 9 n para todo n 4. Entretanto, a primeira observao mais significante do que a segunda para uma anlise mais prtica do tempo de execuo do algoritmo. A notao nos permite ignorar constantes convenientemente,

simplificando a funo em questo, direcionando-se para os fatores dominantes que determinam o comportamento da funo. Dessa forma se tivermos uma funo f(n) = 125n +300, essa funo ser (n), desprezando as constantes 125 e 300. Da mesma forma, quando nos depararmos com funes como f(n) = 4log(n) + 50 diremos que a funo (log(n)) sem nos importarmos com a base do logaritmo, pois logaritmos de diferentes bases diferem apenas por uma constante. Nesta notao, uma constante ser denotada como (1), e poder ser representada dessa maneira na forma das funes se assim desejarmos. Algumas regras podem nos ajudar a decidir se f(n) (g(n)) ou no . Uma regra muito til a seguinte: dizemos que uma funo f(n) uniformemente crescente se n1 n2 implica que f(n1) f(n2). Dessa maneira podemos definir o seguinte teorema: Teorema 1: Para todas as constantes c > 0 e a > 1, e para todas as funes f(n) monotonicamente crescentes temos que (f(n))c = (a f(n)). Significa que uma funo exponencial cresce mais rpido que qualquer funo polinomial. Essa regra muito til na comparao das funes dos algoritmos, alm de poder ser expandida para outros casos diferentes de funes. Podemos substituir f(n) por n no Teorema 1. Teremos ento que, para toda constante c > 0 e a > 1, nc = (an). Da mesma forma, podemos substituir f(n) por logan e teremos novamente que quaisquer que sejam c > 0 e a > 1, (logan)c = (alogan) = (n). Isso significa que qualquer funo logartmica com expoente constante diferente de zero limitada superiormente por uma constante elevada a um logaritmo e ambas so limitadas superiormente por uma funo linear. Algumas operaes podem ser realizadas com a Notao Big-Oh. O que sugere as seguintes propriedades: 1a propriedade: Se f(n) = (s(n)) e g(n) = (r(n)) ento f(n) + g(n) = (s(n)+r(n)). 2a propriedade: Se f(n) = (s(n)) e g(n) = (r(n)) ento f(n) g(n) = (s(n)g(n)). Essas propriedades podem ser demonstradas atravs da prpria definio da notao Big_Oh. Existem constantes c1, c2, N1 e N2 as quais f(n) c1 s(n) para n N1 , e g(n) c2 r(n) para n N2. O maior entre c1, c2, e o maior entre N1 e N2 podem ser usados para demonstrar as propriedades. Em geral, estas propriedades no servem para subtrao nem para diviso. A tabela que veremos a seguir nos fornece uma anlise comparativa entre tpicas funes representativas do tempo de execuo, mostrando o tempo que o correspondente algoritmo utiliza para um problema de tamanho n=1000 para diferentes velocidades de computador. Podemos ver claramente a melhoria que temos ao aumentarmos a velocidade do computador por um fator constante relativamente melhoria que obtemos mudando para um algoritmo assintoticamente mais rpido verticalmente na tabela. tempo de exec. log2n n n log2n 1000 passos/seg 2000 passos/seg 4000 passos/seg 8000 passos/seg 0.010 0.005 0.003 0.001 1 0.5 0.25 0.125 10 5 2.5 1.25

n1,5 n2 n3 1.1n

32 1000 1000000 1039

16 500 500000 1039

8 250 250000 1038

4 125 125000 1038

A notao utilizada para denotar limites superiores em relao ao tempo de execuo dos algoritmos, entretanto, utilizar apenas essa anlise do limite superior no suficiente. Isto se deve ao fato de que se f(n)= (n) ento conclumos que podemos afirmar, seguindo a definio da notao que f(n)= (n2). Da mesma forma podemos tambm dizer que f(n)= (an), porm consiste num limite superior longe da realidade da funo. Estamos interessados no apenas em limites superiores, mas tambm numa expresso que to junto ao real tempo de execuo quanto possvel. Nesses casos, onde difcil encontrar a exata expresso, ns gostaramos de achar o menor dos maiores e o limite menor possvel para isso. Obter limites inferiores mais difcil que obter limites superiores. Um limite superior para um tempo de execuo de um algoritmo implica apenas que l existe um algoritmo que no usa mais tempo do que o indicado. Um limite inferior deve implicar que nenhum algoritmo pode obter um melhor limite para o problema. claramente impossvel considerar todos os possveis algoritmos um por um. Necessitamos de mtodos para modelar problemas e algoritmos de forma que nos possibilite provar limites inferiores. Existe ento uma notao similar para tratar limites inferiores, seguindo o mesmo raciocnio de desprezar constantes.

A Notao :
Desta forma podemos dizer que se existem constantes c e N, tal que para todo n N o nmero de passos T(n) requeridos para solucionar o problema para uma entrada de tamanho n no mnimo cg(n), ento ns dizemos que T(n) = (g(n)). Assim, por exemplo, temos que n=(n0,5) e que n=(logn). Essa notao corresponde relao entre as funes.

A Notao :
Podemos ento concluir que se uma determinada funo f(n) satisfizer ambas as definies, isto , f(n)=(g(n)) e f(n)=(g(n)), ento diremos que f(n) = (g(n)), isto , as funes f(n) e g(n) possuem a mesma ordem. Por exemplo, temos que 9nlogn+300 = (nlogn), desprezando mais uma vez as constantes. Assim se provarmos os dois primeiros casos, automaticamente teremos o terceiro caso . Nessas provas, as constantes envolvidas no necessitam ser as mesmas. Assim, , e correspondem (imprecisamente) s relaes , e = . Algumas vezes precisamos de uma notao que represente < e > . Dizemos ento que f(n)=(g(n)) (l-se f(n) pequeno oh de g(n)) se limn f(n)/g(n) for igual a zero. Ou seja, g(n) cresce mais ( maior) que f(n). Analogamente, temos que f(n)=(g(n)) se g(n)=(f(n)).

UFPE - Universidade Federal de Pernambuco Disciplina : Algoritmos e Estrutura de Dados Prof.: Ktia Assunto: Seminrio sobre A Notao Big-Oh

NOTAO BIG-OH

Equipe: Raquel C. Monteiro. Waldemir G. da Silva Jnior

S-ar putea să vă placă și