Sie sind auf Seite 1von 40

Notao assinttica

Suponha que estamos considerando dois algoritmos, A e B, para resolver um determinado problema.Alm disso, vamos dizer que fizemos uma anlise cuidadosa dos tempos de execuo de cada um dos algoritmos e determinou que eles sejam e , Respectivamente, onde n uma medida do tamanho do problema. Em seguida, ele deve ser uma questo bastante simples para comparar as duas funes o melhor! e algoritmo para determinar qual

Mas realmente assim to simples? O que exatamente significa isso para uma funo, digamos , Para ser melhor do que uma outra funo, ? Uma possibilidade surge quando sabemos que o tamanho do problema a priori. Por exemplo, suponhamos que o tamanho do problema e . Ento, claramente um algoritmo melhor que B algoritmo para o tamanho do problema . No caso geral, no temos conhecimento a priori do tamanho do problema. No entanto, se se puder ser demonstrado, por exemplo, que para todos , Algoritmo A melhor do que Balgoritmo independentemente do tamanho do problema. Infelizmente, geralmente no conhece o tamanho do problema de antemo, nem verdade que uma das funes inferior ou igual a outra ao longo de toda a gama de tamanhos de problemas. Neste caso, considera-se o comportamento assinttica das duas funes para os tamanhos problema muito grandes.

Um assinttica limite superior Big-Oh Um Assinttica Limite Inferior-Omega Mais Notation-Theta e Little Oh Anlise Assinttica dos Algoritmos Exerccios Projetos

Um assinttica limite superior Big-Oh


Em 1892, P. Bachmann inventou uma notao para caracterizar o comportamento assinttico de funes. Sua inveno veio a ser conhecido como grande notao oh: Definio (Big Oh) Considere-se uma funo f (n) que no-negativa para

todos os inteiros . Dizemos que `` f (n) grande oh g (n),'' que escrever f (n) = O (g (n)), se existe um nmero inteiro e uma constante c> 0 tal que para todos os inteiros , .

Um exemplo simples Falcias grande Oh e Armadilhas Propriedades de Big Oh Sobre Polinmios Sobre Logaritmos Apertados Big Bounds Oh Mais Big Falcias Oh e Armadilhas Convenes para Escrevendo expresses grande Oh

Um exemplo simples

Considere a funo f (n) = 8 n 128 mostrado na Figura no-negativa para todos os inteiros

. Claramente, f (n)

. Queremos mostrar

que . De acordo com a definio , A fim de mostrar isso, precisamos encontrar um inteiro e uma constante c> 0 tal que para todos os inteiros , .

No importa o que as constantes so particulares - desde que eles existem! Por exemplo, suponha que ns escolhemos c = 1. Ento

Uma vez que (n +8)> 0 para todos os valores de que . Isto , . , . Figura

, Conclumos

Ento, temos que para c = 1 e inteiros funo do de n = 16. . Assim,

para todos os mostra claramente que a

maior do que a funo f (n)= 8 n 128 para a direita que vai fazer. Por exemplo, c = 2

Claro, h muitos outros valores de c e e e

vai fazer, como a vontade de c = 4 . (Ver Figura ).

Figura: Mostrando que

Falcias grande Oh e Armadilhas

Infelizmente, a nossa forma de escrever notao oh grande pode ser enganosa para o leitor ingnuo. Esta seo apresenta duas falcias que surgem por causa de uma m interpretao da notao.

Falcia Dado que seguida .

, Em

Considere as equaes:

Claramente, razovel concluir que No entanto, considere essas equaes:

No se segue que ambos

. Por exemplo,

so

, Mas eles no so iguais. .

Falcia Se f (n) = O (g (n)), ento

Considere funes f, g, eh, de tal modo que f (n) = h (g (n)). razovel concluir que desde que uma funo invertvel. No entanto, enquanto que podem escrever f (n) = O (h (n)), a equao absurdo e sem sentido. Big oh no uma funo matemtica, por isso no tem inverso! A razo para essas dificuldades que devemos ler a notao como `` f (n) grande oh nao quadrado'' no `` f (n) igual a grande oh do n ao quadrado.'' O sinal de igual na expresso realmente no denotar a igualdade matemtica! E o uso da forma funcional, realmente que S uma funo matemtica! , No significa

Propriedades de Big Oh

Nesta seo, vamos examinar algumas das propriedades matemticas de grande oh. Em particular, suponha que ns sabemos que e .

O que podemos dizer sobre o comportamento assinttico da soma dos e ?(Teoremas e ). O que podemos dizer sobre o comportamento assinttico do produto da e e ). ?(Teoremas e ). Como so ? (Teorema relacionada quando

O primeiro teorema aborda o comportamento assinttico da soma de duas funes cujos comportamentos assinttico so conhecidos: Teorema Se e , Em seguida

extbfProof Por definio constantes e Deixar para e para e :

, Existem dois inteiros, .

e duas

de tal modo que

para

. Considere a soma

Assim, De acordo com Teorema so a funo h (n) onde Por exemplo, considere as funes e

. , Se sabemos que as funes e neste contexto para inteiros todos e . . Ento

, Respectivamente, a soma . O significado do

Teorema nos ajuda a simplificar a anlise assinttica da soma de funes, permitindo-nos deixar cair a exigido pelo Teorema em certas circunstncias: Teorema Se negativa para todos os inteiros que seguida . em que para alguns limite e so ambos no, Em

de tal modo

extbfProof De acordo com a definio dos limites , A notao

significa que, dado qualquer valor positivo arbitrrio , possvel encontrar um valor de tal modo que para todos

Assim, se optamos por um determinado valor, digamos correspondente de tal modo que

, Ento existe uma

Considere a soma

onde

. Assim, e

. , Que so conhecidas por ,A diz . No entanto Teorema,

Considere um par de funes serem soma e

, Respectivamente. De acordo com Teorema

que, se

existe, ento o Fsoma (n) simplesmente abaixo), .

que, pela propriedade transitiva (ver Teorema Em outras palavras, se o rcio

assintoticamente aproxima uma .

constante como n se torna grande, podemos dizer que , Que frequentemente muito mais simples do Teorema e resultado particularmente til. Considerar .

Daqui podemos concluir que

. Assim,

Teorema, sugere que a soma de uma srie de potncias de n , Onde m a maior potncia de n no somatrio. Vamos confirmar este resultado na Seo abaixo. O prximo teorema aborda o comportamento assinttico do produto de duas funes cujos comportamentos assinttico so conhecidos: Teorema Se e , Em seguida

extbfProof Por definio constantes e e para

, Existem dois inteiros,

e duas , e so

de tal modo que .

para

. Alm disso, por definio

ambos no-negativa para todos os inteiros Deixar para e :

. Considere o produto

Assim,

Teorema

descreve uma propriedade simples, mas extremamente til de

grande oh. Considere as funes e . Pelo Teorema , O comportamento do

produto assinttica . Ou seja, somos capazes de determinar o comportamento assinttico do produto sem ter que passar os detalhes de clculo que .

O prximo teorema est intimamente relacionado com a anterior na medida em que tambm mostra como grande oh se comporta com respeito multiplicao. Teorema Se negativo para inteiros e uma funo cujo valor no-

, Em seguida

extbfProof Por definio que para

, Existem inteiros . Desde

e constante

de tal modo

nunca negativa,

Assim, Teorema funo

. aplica-se quando multiplicamos uma funo, . O comportamento assinttico do resultado . que nos permite fazer a manipulao , Cujo

comportamento assinttica conhecido por ser simplesmente

, Por outra

Uma forma de interpretar Teorema matemtica seguinte:

Isso falcia, ``'' por multiplicam

no obstante, pode-se multiplicar ambos os lados da equao por , Basta trazer o no interior do .

ea igualdade ``'' ainda se mantm. Alm disso, quando se

O ltimo teorema nesta seo introduz a propriedade transitiva de oh grande:

Teorema (Propriedade transitiva) Se f (n) = O (g (n)) e g (n) = O (h (n)), em seguida,f (n) = O (h (n)). extbfProof Por definio constantes e para . Deixar , Existem dois inteiros, para e e duas e

de tal modo que

. Ento

Assim, f (n) = O (h (n)). A propriedade transitiva da grande oh til em conjunto com o Teorema . Considerar funo porque o que claramente , Em seguida, por Teorema . Isto , ea propriedade transitiva da . . Se somarmos a , A soma a

. A combinao do facto de que grande oh, permite-nos concluir que a soma

Sobre Polinmios

Nesta seo, vamos examinar o comportamento assinttico de polinmios em n. Em particular, veremos que, como n se torna grande, o termo envolvendo o maior poder de n vai dominar todos os outros. Portanto, o comportamento assinttica determinada por esse termo. Teorema Considere um polinmio em N da forma

onde

. Ento

. . Como n no . Assim,

extbfProof Cada um dos termos do somatrio da forma negativo, um determinado termo ser negativo somente se

para cada termo da adio, . Lembre-se tambm que temos estipulado que o coeficiente da maior potncia de n ou seja, positivo, .

Note que para inteiros

para

. Assim

A partir da Equao e ,

vemos que temos encontrado as constantes . Assim, .

, De tal modo que para todos

Esta propriedade do comportamento assinttico de polinmios usada extensivamente. Na verdade, sempre que tm uma funo, que um polinmio em n, Iremos imediatamente `` gota'' os termos menos significativo (isto , os termos que envolvem potncias de n, que so menos do que m), bem como o coeficiente principal, , Para escrever .

Sobre Logaritmos

Nesta seo, determinar o comportamento assinttico dos logaritmos. Curiosamente, apesar do facto de que torna grande, para todos os inteiros diverge como n se . Assim,

. Alm disso, como o seguinte teorema ir mostrar, potncia inteira ainda S (n). , .

elevado a qualquer

Teorema Para cada inteiro

Esse resultado extbfProof segue imediatamente do Teorema de que para todos os inteiros ,

ea observao

Esta observao pode ser provada por induo da seguinte forma: Caso Base Considere o limite

para o caso k = 1. Usando L'Hpital regra

vemos que

Hiptese indutiva Suponha que a Equao vale para . Considere o caso k = m +1.Usando L'Hpital regra vemos que

Por conseguinte, a induo por sobre m, Equao inteiros .

vale para todos os

Por exemplo, utilizando esta propriedade dos logaritmos em conjunto com a regra para a determinao do comportamento assinttica do produto de duas funes (Teorema seguida ), Podemos determinar que, desde . , Em

Apertados Big Bounds Oh

Big oh notao caracteriza o comportamento assinttica de uma funo, fornecendo um limite superior para a velocidade a que a funo cresce como n fica grande. Infelizmente, a notao no nos diz o quo perto o comportamento real da funo o limite. Ou seja, o limite pode ser muito estreita (apertada) ou pode ser excessivamente conservadora (frouxo). A seguinte definio nos diz o que faz um apertado limite, e como podemos testar para ver se um determinado limite assinttico o melhor disponvel. Definio (aperto) Considere-se uma funo f (n) = O (g (n)). Se para cada funo h (n) de tal modo que f (n) = O (h (n)), tambm verdade que g (n) = O (h (n)), ento podemos dizer que g (n) uma apertado assinttico em f (n). Por exemplo, considere a funo f (n) = 8 n 128. Na Seo que em N, Teorema , Foi mostrado

. No entanto, uma vez que f (n) um polinmio diz-nos que f (n) = S (n). Claramente S (n) uma mais .

apertado ligado no comportamento assimpttico de f (n) que

Por definio , A fim de mostrar que g (n) = n um apertado ligado na f (n), necessrio para mostrar que, para cada funo h (n) de tal modo que f (n) = O (h (n)), ele tambm verdade que g (n)= O (h (n)). Vamos mostrar este resultado usando prova por contradio: Suponha que g (n) no um apertado limite de f (n) = 8 n 128. Ento, existe uma funo h (n) de tal modo que f (n) = 8 n = 128 O (h (n)),mas para os quais . Uma vez que 8 128 n = O (h (n)), atravs da definio de grande oh existem constantes positivas C e de tal modo que para todos . . Mas,

Claramente, para todos , . Portanto, ento, pela definio de grande oh, temos a g (n) = O (h (n)) - uma contradio! Portanto, o limite f (n) = S (n) um apertado limite.

Mais Big Falcias Oh e Armadilhas

O objetivo desta seo para dissipar alguns equvocos comuns sobre o grande oh. A falcia prxima est relacionado com a seleco do c constantes e usado para mostrar uma relao oh grande.

Falcia Considere no-negativos funes f (n), que se . Desde , Ento, por definio

,E .

, De tal modo

para todos os inteiros

Essa falcia, muitas vezes resulta da seguinte linha de raciocnio: Considere a funo .Deixar e . Em seguida, f (n) deve ser O (n), desde para todos falso porque, segundo a definio uma funo de n. .No entanto, esta linha de raciocnio , C deve ser uma constante positiva, no

A falcia seguinte envolve um mal-entendido da noo de limite assinttico superior. Falcia Dado no-negativos funes modo que , , Em seguida , . , , ,E , De tal

, E para todos os inteiros

Essa falcia surge a partir da seguinte linha de raciocnio. Considere a funo de e . Desde para todos os valores . Na verdade, e . Claramente ! , Poderamos ser tentados a concluir que

tal concluso errnea. Por exemplo, considere . Claramente, a primeira tambm, e este ltimo para todos os valores de

A falcia anterior, essencialmente, demonstra que, embora saibamos os limites assintticos superiores em duas funes esto relacionadas, no necessariamente sabe, em geral, o comportamento relativo das duas funes limitadas. Esta falcia frequentemente surge na comparao do desempenho de algoritmos. Suponhamos que estamos a comparar dois algoritmos, A e B, para resolver um determinado problema e ns determinamos que os tempos de execuo destes algoritmos so e , Respectivamente. Falcia demonstra que um erro para concluir a partir do facto de que para todos Um algoritmo que vai resolver o problema mais rpido do que o algoritmo B para todos os tamanhos de problema.

Mas o que acontece com qualquer tamanho um problema especfico? Podemos concluir que para um tamanho determinado problema, digamos , Que o algoritmo A mais rpido do que B algoritmo? A falcia seguinte aborda esta questo. Falcia Dado no-negativos funes modo que , ento . , , Existe um nmero inteiro , , ,E , De tal

, E para todos os inteiros para as quais

Esta falcia surge a partir de um raciocnio semelhante como o anterior. Considere a funo para todos os valores de um valor para a qual e exemplo, considere qual e este ltimo . para todos os valores de e . Desde , Poderamos ser tentados a concluir que existe . Tal concluso errnea. Por . Claramente, a primeira para a

. Claramente tambm, desde que , No existe qualquer valor

A falcia final mostra que nem todas as funes so compatveis : Falcia Dado dois no-negativos funes f (n) e g (n), em seguida, quer f (n) = O (g (n))ou g (n) = O (f (n)). Essa falcia surge de pensar que a relao como e pode ser usado para comparar as duas funes. No entanto, nem todas as funes so proporcionais. Considere as seguintes funes:

Claramente, no existe uma constante c para os quais para qualquer n mesmo nmero inteiro, uma vez que o g (n) igual a zero e f (n) no . Inversamente, no existe uma constante c para os quais para qualquer nmero inteiro mpar n, uma vez que a f (n) igual a zero e g (n) no . Assim, nem f (n) = O (g (n)) nem g (n) = O (f (n)) verdadeira.

Convenes para Escrevendo expresses grande Oh

Certas convenes que evoluram como grande preocupao expresses oh so normalmente escritos:

Em primeiro lugar, prtica comum ao escrever expresses grandes oh a cair tudo, mas os termos mais significativos. Assim, em vez de ns simplesmente escrever . Em segundo lugar, prtica comum a cair coeficientes constantes. Assim, em vez de , Basta escrever . Como um caso especial desta regra, se a funo uma constante, em vez de, digamos, O (1024), ns simplesmente escrever O (1).

Claro que, a fim de que uma expresso oh especial grande para ser o mais til, ns preferimos encontrar um limite apertado assinttica (ver definio ). Por exemplo, enquanto no errado escrever preferimos escrever f (n) = O (n), que um apertado limite. , Ns

Certas expresses grandes oh ocorrer to freqentemente que eles so dados nomes. Tabela lista alguns dos vulgarmente ocorrem grandes expresses OH eo nome usual dado a cada um deles.

expresso O (1)

nome constante logartmica registrar quadrado

O (n)

linear n log n quadrtico cbico exponencial

Tabela: Os nomes de expresses comuns grandes oh.

Um Assinttica Limite Inferior-Omega


A notao oh grande apresentada na seo anterior um limite assinttico superior. Nesta seco, apresentamos uma notao semelhante para caracterizar o comportamento assinttica de uma funo, mas neste caso um limite inferior. Definio (Omega) todos os inteiros escrevemos Considere-se uma funo f (n) que no-negativa para . Dizemos que `` f (n) omega g (n),'' o que ns , Se existe um nmero inteiro , e uma .

constante c> 0 tal que para todos os inteiros

A definio de omega quase idntica da grande OH. A nica diferena na comparao - para grande oh ; Para omega, . Todas as mesmas convenes e ressalvas se aplicam ao omega como eles fazem para oh grande.

Um exemplo simples Sobre Polinmios Novamente

Um exemplo simples

Considere a funo

o qual mostrado na Figura . Queremos

. Claramente, f (n) no-negativa para todos os inteiros

mostrar que . De acordo com a definio , A fim de mostrar isso, precisamos encontrar um inteiro e uma constante c> 0 tal que para todos os inteiros , .

Tal como acontece com grande oh, no importa o que as constantes so particulares - desde que eles existem! Por exemplo, suponha que ns escolhemos c = 1. Ento

Desde

para todos os valores de

, Conclumos que

Ento, temos que para c = 1 e inteiros funo do . Assim,

, . Figura

para todos os mostra claramente que a que vai

menor do que a funo f (n)= 5 n -64 n 256 para todos

os valores de . Claro, h muitos outros valores de c e fazer. Por exemplo, c = 2 e .

Figura: Mostrando que

Sobre Polinmios Novamente

Nesta seo, vamos reexaminar o comportamento assinttico de polinmios em n. Na Seo mostrmos que . Isto , f (n) cresce assintoticamente no mais rapidamente do que .Desta vez, estamos interessados na parte inferior assinttico ao invs do limite assinttico superior.Veremos que quando n se torna grande, o termo envolvendo tambm domina o limite inferior no sentido em que f (n) cresce assintoticamente to rapidamente quanto . Isto , que .

Teorema Considere um polinmio em N da forma

onde

. Ento

. fora do somatrio:

extbfProof Comeamos tomando o termo

Uma vez que, n um inteiro no-negativo e

, O termo

. Por

positivo. Para cada um dos termos restantes no somatrio, isso

Note que para inteiros

para

. Assim

Considere o termo em parnteses direita. O que precisamos fazer encontrar uma constante positiva ce um inteiro de modo que para todos os inteiros este termo maior do que ou igual a C:

Ns escolhemos o valor

para a qual o termo maior do que zero:

O valor

ser suficiente! Assim

A partir da Equao . Assim,

vemos que temos encontrado as constantes , .

e c, de

tal modo que para todos

Esta propriedade do comportamento assinttico de polinmios usado extensivamente. Na verdade, sempre que tm uma funo, que um polinmio em n, Iremos imediatamente `` gota'' os termos menos significativo (isto , os termos que envolvem potncias de n, que so menos do que m), bem como o coeficiente principal, , Para escrever .

Mais Notation-Theta e Little Oh


Esta seo apresenta duas formas menos utilizadas de notao assinttica. Eles so:

Uma notao, tempo O (g (n)) e Uma notao, no

, Para descrever uma funo que ao mesmo , Para o mesmo g (n). (Definio ). ). , Para descrever uma funo que O (g (n)), mas

, Para o mesmo g (n). (Definio

Definio (Theta) todos os inteiros escrevemos

Considere-se uma funo f (n) que no-negativa para . Dizemos que `` f (n) teta g (n),'' o que ns , Se e apenas se f (n) O (g (n)) e F (n) que um polinmio , que um polinmio um tal , Vamos escrever . .

Lembre-se que ns mostramos na Seo em n, digamos . Ns tambm mostramos na Seo . Portanto, de acordo com a definio Definio (Little Oh)

Considere-se uma funo f (n) que no-negativa

para todos os inteiros . Dizemos que `` f (n) pouco oh g (n),'' que escrever f (n) = o (g (n)), se e apenas se f (n) O (g (n) ), mas f (n) no .

Notao oh pouco representa uma espcie de frouxo ligada assinttica no sentido de que, se dado que f (n) = o (g (n)), ento sabemos que g (n) um limite assinttico superior desde f (n) = O (g (n)),mas g (n) no uma menor assinttica ligado desde f (n) = O (g (n)) e que . implica

Por exemplo, considere a funo f (n) = n +1. Claramente, . Claramente tambm, , No importa o que c desde que ns . Assim, podemos

escolhemos, para grandes n suficientes, escrever .

Anlise Assinttica dos Algoritmos


O captulo anterior apresenta um modelo detalhado do computador, que envolve um certo nmero de parmetros de temporizao diferentes , , , , , , , , , ,E . Mostramos que se manter a par dos detalhes confuso e cansativo. Por isso, simplificar o modelo atravs da medio do tempo em ciclos de relgio, e assumindo que cada um dos parmetros igual a um ciclo. No entanto, manter o controle de contagem e cuidadosamente todos os ciclos ainda uma tarefa tediosa. Neste captulo, introduzir a noo de limites assintticos, oh principalmente grande, e examinar as propriedades de tais limites. Como se v, as regras para calcular e manipular grandes expresses oh simplificar a anlise do tempo de execuo de um programa quando tudo o que nos interessa o seu comportamento assinttico. Por exemplo, considere a anlise do tempo de execuo de Programa , Que apenas um programa novamente, um algoritmo para avaliar um polinmio usando a regra de Horner.

Programa:

novamente.

afirmao 5 6a 6b 6c

modelo detalhado

simples oh grande modelo 5 O (1) 4 3n3 4n O (1) O (n) O (n)

7 8 TOTAL

9n 2 16 n 14

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

Tabela: Calculando o tempo de execuo do Programa

Tabela mostra a anlise de tempo de execuo do Programa feito de trs maneiras - uma anlise detalhada, uma anlise simplificada, e uma anlise assinttica. Em nota especial, que todos os trs mtodos de anlise esto de acordo: Linhas 5, 6A, e 8 executar em uma quantidade constante de tempo; 6b, 6c, e 7 executar em uma quantidade de tempo que proporcional n, mais uma constante . A observao mais importante a fazer que, independentemente do que as constantes reais so, a anlise assinttica sempre produz a mesma resposta! Como o resultado no depende dos valores das constantes, o limite assinttico nos diz algo fundamental sobre o tempo de execuo do algoritmo. E este resultado fundamental no depende das caractersticas do computador e compilador efectivamente utilizados para executar o programa! Claro, voc no consegue algo por nada. Embora a anlise assinttica pode ser significativamente mais fcil de fazer, tudo o que temos um limite superior no tempo de execuo do algoritmo. Em particular, no sabemos nada sobre o tempo real de execuo de um programa em particular. (Recall Falcias e ).

Regras para Anlise de Oh Grande do Tempo corrente Exemplo Prefixo-Somas Exemplo de Fibonacci Nmeros Exemplo Bucket-Sort Reality Check Verificao da Anlise

Regras para Anlise de Oh Grande do Tempo corrente

Nesta seo apresentamos algumas regras simples para determinar um superior big-oh ligados no tempo de execuo das instrues compostas bsicas em um programa Java.

Regra segue diretamente do Teorema . O tempo total de execuo de uma seqncia de comandos igual soma dos tempos de execuo das declaraes individuais. Pelo Teorema , Ao calcular a soma de uma srie de funes o maior (o ) Que determina o limite.

Regra parece um pouco complicado, devido semntica do Java para a declarao.No entanto, ele segue diretamente do Teorema . Considere o seguinte simplescontado fazer lao .
for (int i = 0; i <n; + + i) ;

Aqui );

int se i
< n

i = 0

, ento seu tempo de execuo constante ( ); E ). Alm disso, o , O tempo de , O que simplifica . Alm disso, se o corpo do loop faz nada, seu . Assim, o corpo do lao ir

, ento seu tempo de execuo constante (

++i , ento seu tempo de execuo constante ( nmero de iteraes I (n)= n. De acordo com o artigo execuo deste para tempo de execuo deve ser

dominar o clculo do mximo, e do tempo de execuo do ciclo simplesmente .

Se no sabemos o nmero exato de iteraes executadas, I (n), ainda podemos usar a Regra desde que tm um limite superior, I (n) = O (f (n)), sobre o nmero de iteraes executadas. Neste caso, o tempo de execuo .

Regra decorre diretamente da observao de que o tempo total de execuo para uma instruo if-then-else nunca exceder a soma do tempo de execuo do teste condicional, , Mais a maior parte das vezes de funcionamento da pea em seguida, , Ea parte mais, .

Exemplo Prefixo-Somas

Nesta seo, vamos determinar um apertado big-oh ligado no tempo de execuo de um programa para calcular a srie de somas , , ..., Onde

Um algoritmo para calcular esta srie de somatrios dada em Programa . Tabela resume o clculo do tempo de execuo.

Programa: para calcular

para

afirmao 5a 5b 5c 7 8 8b 8c 9 10 TOTAL

tempo O (1)

Tabela: Calculando o tempo de execuo do Programa

Normalmente, a maneira mais fcil de analisar programa que contm laos aninhados comear com o corpo do loop interno-maioria. No Programa , O loop interno, mais compreende as linhas 8 e 9. Ao todo, uma quantidade constante de trabalho feito - o que inclui o corpo do lao (linha 9), o teste condicional (8b linha) eo incremento do ndice de loop (8c linha).

Para um dado valor de j, o lao interno feito-mais um total de j +1 vezes. E uma vez que o loop externo feito por , No pior caso, o anel interior feito mais-n vezes. Por conseguinte, a contribuio do lao interior para o tempo de execuo de uma iterao do lao exterior O (n). O resto do lao exterior (linhas 5, 7 e 10) faz uma quantidade constante de trabalho em cada iterao. Este trabalho constante dominada pela S (n) do circuito interno. O loop externo no exatamente n iteraes. Portanto, o tempo total de execuo do programa .

Mas esta uma grande apertado oh obrigado? Podemos suspeitar que no , por causa da suposio do pior caso que fizemos na anlise relativa ao nmero de vezes que o lao interno executado. O loop interno, mais feito exatamente j +1 vezes para . No entanto, fizemos o clculo supondo que o loop interno feito O (n) vezes, em cada iterao do loop. Infelizmente, a fim de determinar se a resposta um apertado limite, preciso determinar mais precisamente o tempo de execuo efectivo do programa. No entanto, existe um clculo aproximado de que podemos facilmente fazer. Se observarmos que o tempo de execuo ser dominada pelo trabalho realizado no circuito interior-mais, e que o trabalho feito em uma iterao do loop interno mais constante, ento tudo o que precisamos fazer determinar exatamente o nmero de vezes que o loop interno realmente executada. Este dada por:

Portanto, o resultado execuo do Programa

um apertado, big-oh ligado no tempo de .

Exemplo de Fibonacci Nmeros

Nesta seo iremos comparar os tempos assintticos execuo de dois programas diferentes que ambos os nmeros de Fibonacci de computao. Os nmeros de Fibonacci so a srie de nmeros , , ..., Dada pela

Nmeros de Fibonacci so interessantes porque parecem surgir nas situaes mais inesperadas. No entanto, nesta seo, estamos apenas preocupados com a escrita de um algoritmo para calcular dado n. Nmeros de Fibonacci so bastante fceis de calcular. Considere a seqncia de nmeros de Fibonacci

O prximo nmero na sequncia calculado simplesmente somando os dois ltimos nmeros - neste caso, de 55 = 21 34. Programa uma implementao direta desta idia. O tempo de execuo deste algoritmo claramente O (n) como mostrado pela anlise na Tabela .

Programa: no-recursiva programa para calcular nmeros de Fibonacci.

afirmao 5 6 7 7b 7c 9 10 11

tempo O (1) O (1) O (1)

13 O (1) TOTAL O (n) Tabela: Calculando o tempo de execuo do Programa

Lembre-se que os nmeros de Fibonacci so definidos recursivamente: . No entanto, o algoritmo utilizado no programa no-recursivo - iterativo . O que acontece se em vez de usar o algoritmo iterativo, ns usamos a definio de nmeros de Fibonacci para implementar diretamente um algoritmo recursivo ? Tal algoritmo dada em Programa e seu tempo de execuo est resumida na Tabela .

Programa: recursiva para calcular nmeros de Fibonacci.

tempo

afirmao

n <2

5 O (1) O (1) 6 O (1) 8 T (n -1) + T (n -2) + O (1) TOTAL O (1) T (n -1) + T (n -2) + O (1) Tabela: Calculando o tempo de execuo do Programa

A partir da Tabela descobrimos que o tempo de execuo do algoritmo de Fibonacci recursiva dada pela recorrncia

Mas como voc resolver uma recorrncia contendo expresses grandes oh? Acontece que h um truque simples que podemos usar para resolver uma recorrncia contendo expresses grande Oh enquanto s estamos interessados em um assinttico no resultado. Basta soltar o recorrncia, e colocar o recorrncia s da recorrncia, resolver a de volta! Neste caso, precisamos resolver a

No captulo anterior, usamos a substituio repetida com sucesso para resolver recorrncias. No entanto, no captulo anterior, todas as recidivas s tinha uma instncia do no lado direito - neste caso h dois. Como resultado, a substituio repetida no funcionar. H algo interessante sobre essa recorrncia: Ela se parece muito com a definio dos nmeros de Fibonacci. Na verdade, podemos mostrar por induo em n que extbfProof (por induo). Caso Base H dois casos bsicos: para todos .

Hiptese indutiva Suponha que alguns . Ento

para

para

Assim, por induo em k,

para todos

Ento, agora podemos dizer com certeza que o tempo de execuo do algoritmo recursivo de Fibonacci Programa, , . Mas isso bom ou ruim? O teorema a seguir nos mostra o quo ruim isso realmente ! Teorema (nmeros de Fibonacci) expresso de forma fechada Os nmeros de Fibonacci so dadas pela

onde

extbfProof (por induo). Caso Base H dois casos bsicos:

Hiptese indutiva Suponha que a Equao alguns

vale para

para

. Primeiro, fazemos a seguinte observao:

Do mesmo modo,

Agora, podemos mostrar o resultado principal:

Assim, por induo de equao, Teorema e nos d essa .Considerar

corretamente d onde

para todos

. Um par de segundos com uma calculadora . Por conseguinte, . Em ,

deve ser suficiente para convenc-lo que como n fica grande, Podemos escrever que Retornando ao Programa execuo

extremamente pequena. Portanto, .Agora, desde . , Lembre que j mostraram que seu tempo de . E desde que

termos assintticos, escrevemos

, Podemos escrever

que . Isto , o tempo de execuo do programa de Fibonacci recursiva cresce exponencialmente com n crescentes. E isso muito ruim em comparao com o tempo linear em execuo do Programa ! Figura mostra os tempos reais de funcionamento de ambos os algoritmos no-recursivos e recursivo para os nmeros de Fibonacci de computao. Porque a maiorint Java 2147483647, apenas possvel calcular os nmeros de Fibonacci at antes de transbordar. O grfico mostra que at cerca de n = 35, os tempos de execuo dos dois algoritmos so comparveis. No entanto, como n aumenta passado 40, a taxa de crescimento exponencial do Programa claramente evidente. De facto, o

tempo real tomada por Programa horas!

para calcular

era superior a quatro

Figura: reais tempos de execuo de programas

Exemplo Bucket-Sort

At agora todas as anlises assintticas tempo de funcionamento apresentadas neste captulo resultaram em apertados limites grandes oh. Nesta seo, vamos considerar um exemplo que ilustra que uma rpida anlise oh grande nem sempre resulta em um apertado limite no tempo de execuo do algoritmo. Nesta seo consideramos um algoritmo para resolver o seguinte problema: Ordenar um array de inteiros n , , ..., , Cada um dos quais conhecido por estar entre 0 e -1 m para algum m fixo. Um algoritmo para resolver este problema, chamado de tipo balde , dada em Programa .

Programa: tipo caamba. Uma espcie balde funciona da seguinte forma: uma matriz de contadores m, ou baldes , usado. Cada um dos contadores definido inicialmente a zero. Em seguida, uma passagem feita atravs da matriz de entrada, durante o qual os baldes so utilizados para manter uma contagem do nmero de ocorrncias de cada valor entre 0 e -1 m.Finalmente, o resultado ordenadas produzido colocando primeiro o nmero necessrio de zeros na matriz, ento o nmero necessrio de entes, seguido pelos dois, e assim por diante, at m -1. A anlise do tempo de execuo de Programa est resumida na Tabela .Claramente, o pior caso de funcionamento em tempo do primeiro lao (linhas 7-8) O (m) e que a do segundo lao (linhas 9-10) O (n).

afirmao

tempo anlise superficial anlise cuidadosa

7-8 O (m) O (m) 9-10 O (n) O (n) 11-13 O (mn) O (m + n) TOTAL O (mn) O (m + n) Tabela: Calculando o tempo de execuo do Programa

Considere loops aninhados nas linhas 11-13. Iteraes exatamente m do loop externo so feitas - o nmero de iteraes do loop externo fixo. Mas o nmero de iteraes do loop interno depende de bucket [j] - o valor do contador. Uma vez que existem nnmeros na matriz de entrada, no pior dos casos um contador pode ter o valor n.Portanto, o tempo de execuo de linhas 11-13 O (Mn) e este tempo de funcionamento domina todos os outros, de modo que o tempo de execuo de Programa O (mn). (Esta a coluna de anlise rpida da tabela ). Infelizmente, a anlise superficial no produziu um apertado limite. Para ver porque este o caso, devemos considerar a operao do Programa com mais cuidado. Em particular, uma vez que estamos classificando n itens, a resposta final s ir conter itensn. Portanto, a linha 13 ser executada exatamente n vezes - vezes no mn como o resultado superficial sugere. Considere o loop interno na linha 12. Durante o interno faz iterao do loop, o loop

iteraes. Portanto, o teste condicional na linha 12b

feito vezes. Portanto, o nmero total de vezes que o teste condicional feito

Assim, o tempo de execuo de linhas 11-13 O (m + n) e, portanto, tempo de corrida de Programa O (m + n). (Esta a coluna anlise cuidadosa da Tabela ).

Reality Check

`` Anlise assinttica bom na teoria,'' voc diz, `` mas que valor prtico quando eu no sei o que c e so? Falcias cm e mostrou-nos que se tivermos dois programas, A e B, que resolver um determinado problema, cuja execuo os tempos so e dizer, no podemos concluir, em geral, que devemos usar o algoritmo A ao invs de B algoritmo para resolver uma instncia especfica do problema. Mesmo se os limites so conhecidos para ser apertado, ns ainda no temos informaes suficientes. O que sabemos com certeza que, eventualmente, para grandes n suficientes, o programa A a melhor escolha.

Na prtica, no precisa ser to conservador. quase sempre a escolha certa para selecionar um programa. Para ver porque este o caso, considere os tempos apresentados na Tabela . Esta tabela mostra os tempos de execuo calculado para um cenrio muito conservador. Assumimos que a constante de proporcionalidade, c, um ciclo de um relgio 100 MHz. Esta tabela mostra os tempos de execuo que podemos esperar, mesmo que apenas uma instruo feito para cada elemento da entrada.

n=1

n=8

Tabela: reais limites inferiores assumindo um clock de 100 MHz,

Verificao da Anlise

Tendo feito uma anlise assinttica do tempo de execuo de um algoritmo, como voc pode verificar que a implementao do algoritmo funciona como o previsto pela anlise?A nica maneira prtica de fazer isso a realizao de um experimento - escrever o algoritmo na forma de um programa de computador, compilar e executar o programa, e medir o seu tempo de funcionamento real para vrios valores do parmetro, n dizer, usado para caracterizar o tamanho do problema. No entanto, vrias dificuldades surgem imediatamente:

Como comparar os resultados da anlise que, por definio, aplica-se apenas assintoticamente, isto , como n obtm arbitrariamente grande, com o tempo de execuo efectivo de um programa que, por necessidade, devem ser medidos para valores fixos e finito de n?

Como voc explica que quando os resultados de sua anlise no concordar com o comportamento do programa?

Suponhamos que tenha conduzido um experimento em que mediu o tempo de execuo efectivo de um programa, T (n), para um nmero de diferentes valores de n. Alm disso, suponha que, com base numa anlise do algoritmo que concluram que o pior caso de funcionamento em tempo do programa O (f (n)). Como voc dizer a partir das medies feitas que o programa se comporta como previsto? Uma maneira de fazer isso decorre diretamente da definio de oh grande: existe c> 0 tal que para todos . Isso sugere que devemos calcular a relao T (n) / f (n) para cada valor de n no experimento e observar como se comporta a relao com o aumento do n. Se este diverge rcio, em seguida, f (n) provavelmente muito pequena, se esta relao converge para zero, ento f (n) provavelmente demasiado grande e, se o rcio converge para uma constante, ento a anlise provavelmente correcta. O que se f (n) acaba de grande porte? Existem vrias possibilidades:

A funo f (n) no um apertado acoplado. Isto , a anlise ainda correcta, mas o limite no o mais apertado acoplado possvel. A anlise foi para o caso pior, mas o pior caso no surgiu no conjunto de experincias efectuadas. Um erro foi cometido e da anlise est errada.

Exerccios
1. Considere a funo que . . Usando Definio mostram . Usando Definio mostram

2. Considere a funo que .

3. Considere as funes Teorema mostram que e

e .

. Usando o

4. Considere as funes

. Usando o Teorema

mostram que . 5. Para cada par de funes, f (n) e g (n), na tabela a seguir, indicam se f (n) = O (g (n)) e se g (n) = O (f (n)).

f (n) 10 n

g (n)

6.

Mostre que os nmeros de Fibonacci (ver equao identidades

) Satisfazer as

para

7. Provar cada uma das seguintes frmulas: 1. 2. 3. 8. Mostre que

, Onde

9. Mostre que . 10. Resolva cada uma das recorrncias seguintes: 1. 2.

3. 4. 11. Derivar apertados, as expresses grande Oh para os tempos de execuo do Exemplo-um, Exemplo b-, Exemplo-c, Exemplo-d, Exemplo f-, Exemplo-g, Exemplo h, Exemplo-i. 12. Considere os fragmentos de programa Java dadas abaixo. Assuma que n, m, e Kso no-negativo s int e que o e mtodos, f, g, eh ter as seguintes caractersticas: o O pior caso tempo de corrida para e (n, m, k) O (1) e retorna um valor entre 1 e (n + m + k). o O pior caso tempo de corrida para f (n, m, k) O (n + m). o O pior caso tempo de corrida para g (n, m, k) O (m + k). o O pior caso tempo de corrida para h (n, m, k) O (n + k). Determinar um apertado, a expresso oh grande para o pior caso de tempo de execuo de cada um dos fragmentos de programa a seguir:
5. f (n, 10, 0); 6. g (n, m, k); 7. h (n, m, 1000000); 8. for (int i = 0; i <n; + + i) 9. f (n, m, k); 10. for (int i = 0; i <e (n, 10, 100); + + i) 11. f (n, 10, 0); 12. for (int i = 0; i <e (n, m, k); + + i) 13. f (n, 10, 0); 14. for (int i = 0; i <n; + + i) 15. for (int j = i, j <n; + + j) 16. f (n, m, k);

13. Considere o fragmento seguinte programa Java. Qual o valor que f calcular?(Expresse sua resposta em funo de n). D um apertado, oh grande expresso para o tempo de pior caso de execuo do mtodo f.
14. 15. 16. 17. 18. 19. 20. 21. 22. 23. } Exemplo de classe { f static int (int n) { int soma = 0; for (int i = 1; i <= n; + + i) soma = soma + i; voltar soma; } / / ...

24. Considere o fragmento seguinte programa Java. (O mtodo f dada em exerccio ). Qual o valor que g calcular? (Expresse sua resposta

em funo den). D um apertado, oh grande expresso para o tempo de pior caso de execuo do mtodo g.
25. 26. 27. 28. 29. 30. 31. 32. 33. 34. } Exemplo de classe { / / ... static int g (int n) { int soma = 0; for (int i = 1; i <= n; + + i) soma = soma + i + f (i); voltar soma; }

35. Considere o fragmento seguinte programa Java. (O mtodo f dada em exerccio ea g mtodo dada no Exerccio ). Qual o valor que h calcular? (Expresse sua resposta em funo de n). D um apertado, oh grande expresso para o pior caso de tempo de funcionamento do mtodo h.
36. 37. 38. 39. 40. } Exemplo de classe { / / ... int h (int n) {Return f (n) + g (n);}

Projetos
1. Escreva um mtodo Java que recebe um nico argumento n inteiro e tem um tempo de pior caso de execuo de O (n). 2. Escreva um mtodo Java que recebe um nico argumento n inteiro e tem um tempo de pior caso de execuo de . 3. Escreva um mtodo Java que leva dois argumentos inteiro n e k e tem um tempo de pior caso de execuo de . 4. Escreva um mtodo Java que recebe um nico argumento n inteiro e tem um tempo de pior caso de execuo de . 5. Escreva um mtodo Java que recebe um nico argumento n inteiro e tem um tempo de pior caso de execuo de . 6. Escreva um mtodo Java que recebe um nico argumento n inteiro e tem um tempo de pior caso de execuo de 7. As generalizadas nmeros de Fibonacci de ordem . so dadas por

Escreva dois mtodos recursivos e no-recursivo que computam . Mea os tempos de execuo de seus algoritmos para vrios valores de k e n.

Das könnte Ihnen auch gefallen