Vous êtes sur la page 1sur 10

Elementos de anlise de programas a

David Dharbe e DIMAp/UFRN 18 de setembro de 2003

Sumrio a
1 Introduo ca 2 O que anlise de algoritmos ? e a 2.1 Dicas para avaliar a complexidade de 2.1.1 Algoritmos iterativos . . . . . 2.1.2 Algoritmos recursivos . . . . 2.1.3 Consideraes . . . . . . . . . co 2.2 Comparao de algoritmos . . . . . . ca 3 Denies formais co 3.1 Limite superior: a notao O . . . . ca 3.2 Limite inferior: a notao . . . . . ca 3.3 Complexidade exata: a notao . ca 3.4 Limite superior estrito: a notao o . ca 1 2 3 3 4 5 5 6 6 7 7 7 8 8 9 9

um algoritmo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

4 Exemplo: O problema da soma da maior subseqncia ue 4.1 Um algoritmo cbico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . u 4.2 Um algoritmo quadrtico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 4.3 Um algoritmo linear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Introduo ca
A interface do programa deve facilitar o quanto mais poss vel o seu uso por um usurio, levando em a conta que usurio com diferentes n a veis de experincia tem comportamentos e exigncias diferentes. Por e e exemplo, um novo usurio ir descobrir as vrias funcionalidades de um programa atravs de uma interface a a a e amigvel (como o mouse ou a voz), enquanto por razes de produtividade, um usurio experiente prefere a o a ter acesso aos comandos direitamente atravs do teclado. e A compatibilidade do programa com outros programas, ou outras verses do mesmo programa. o
Copyright

Um usurio mede a qualidade de um programa atravs de vrios critrios: a e a e

c 2001,2003 David Deharbe and Universidade Federal do Rio Grande do Norte. Todos os direitos reservados.

2 O que anlise de algoritmos ? e a

A velocidade de execuo do programa tambm um critrio extremamente importante, especialmente ca e e e em aplicaes cient co cas onde computaes pesadas occorrem. co A quantidade de memria utilizada pelo programa durante sua execuo. Essa quantidade de memria, o ca o assim tambm como a velocidade de execuo, so, em geral, diretamente ligados ` quantidade de dados e ca a a processados. Para a empresa que produz um programa, alm de satisfazer seus usurios, outros critrios so usados para e a e a medir a qualidade de um programa. Esses critrios tm principalmente a ver com a produtividade da empresa e e e so: a A portabilidade do cdigo entre vrias plataformas. o a A clareza, ou lisibilidade, do cdigo extremamente importante, pois quanto mais acess o e vel, mais fcil a fazer evoluir o cdigo. Para possibilitar a manuteno de cdigo, crucial prever uma documentao do o ca o e ca programa espec ca para programadores. A reutilisabilidade do cdigo permite que pores de um programa sejam reaproveitadas para desenvolver o co outros produtos e permitem ganhos bvios de produtividade. Existe programadores que se especializam o na produo de bibliotecas de cdigo que so sucientemente genricas para ser aproveitadas para vrias ca o a e a aplicaes. Linguagens modernas vm com bibliotecas de funes de uso geral (a biblioteca padro de co e co a stdlib para C, STL para C++, JavaBeans para Java). Neste cap tulo introduziremos uma ferramenta formal para medir a o tempo e a memria gastos por algorito mos. Apresentaremos um problema que pode ser resolvido com algoritmos de velocidade diferentes. A rea da a computao que estude esse problema chamada de Complexidade de algoritmos e o objeto de uma disciplina ca e e do seu curso.

O que anlise de algoritmos ? e a

O tempo de execuo de um algoritmo e a quantidade de memria que ele utiliza geralmente dependem do ca o tamanho da entrada que ele deve processar. Assim, esperamos que ordenar 10.000 nmeros leva mais tempo u que ordenar 10 elementos. Na prtica, estamos acostumados a observar que um editor de texto leva mais tempo a e consume mais memria quando aberto com um grande arquivo que com um pequeno, ou que um programa o e de edio grca utiliza mais memria e leva mais tempo para aplicar um ltro a uma imagem grande que a ca a o uma imagem pequena. Portanto, em geral, a memria alocada e o tempo de execuo de um algoritmo so o ca a funes do tamanho da entrada. co E importante enfatizar que sempre tentamos estabelecer uma aproximao da complexidade, pois ela depende ca de muitos fatores e uma tarefa quase imposs fazer uma predio totalmente exata de quanto tempo vai e vel ca durar a execuo, ou da quantidade exata de memria que ser utilizada. ca o a O tempo de execuo e o espao alocado so os dois fatores formando a complexidade computacional, ca c a ou simplesmente complexidade, de um algoritmo. Mais precisamente, um algoritmo tem duas medidas de complexidade: 1. a complexidade temporal, que aproximativamente o nmero de instrues que ele executa, e e u co 2. a complexidade espacial, que a quantidade de memria que ele utiliza durante sua execuo. e o ca Ambas complexidades so funes que tem como parmetro o tamanho da entrada tratada. a co a

2.1

Dicas para avaliar a complexidade de um algoritmo.

2.1

Dicas para avaliar a complexidade de um algoritmo.

A complexidade tanto espacial quanto temporal de um algoritmo estimada em funo do tamanho da entrada. e ca Logo importante estabelecer de que forma o tamanho da entrada inui no comportamento do algoritmo. e Assim, se o algoritmo no recursivo, no contm iteraes e tambm no utiliza algoritmos que tem essas a e a e co e a carater sticas, ento o nmero de passos independente do tamanho da entrada e digamos que a complexidade a u e (temporal) constante. e 2.1.1 Algoritmos iterativos

Se o algoritmo tem como parmetro um vetor, ento a complexidade do algoritmo ser em funo de n, a a a ca o tamanho do vetor. Por exemplo, suponha que o algoritmo consiste em uma iterao sobre os elementos do ca vetor, e que a cada passo da iterao seja executado um nmero xo k de instrues. Como exemplo analizamos ca u co o algoritmo 1 que, dado um vetor v e o tamanho n deste vetor retorna o maior elemento deste vetor. Algoritmo 1 (mximo) a
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

a funct mximo(v : array (t); n : N) : t var i : N max : t end begin if n = 0 then error(maximo chamada com vetor vazio) else max v[1] for i 2 to n step 1 do if v[i] > max then max v[i] od result max .

O caso do nmero de elementos n ser nulo caracteriza um erro de utilizao da funo mximo, que no u ca ca a a denida para vetores nulos. Nos casos normais de operao, a avaliao do tempo de execuo pode ser e ca ca ca realizada atravs de uma anlise do tempo de execuo, o que requer ter uma ideia do funcionamento interno e a ca dos computadores, e em particular dos microprocessadores: O teste da linha 6 que se executa em tempo constante k1 . A atribuio de inicializao da linha 9, tambm executado em tempo constante k2 . ca ca e O lao das linhas 10 at 14 executado n 1 vezes, e realiza os seguintes passos: c e e Atribui ` varivel de iterao i o valor 2, ou o valor i + 1. No pior caso, cada atribuio realizada a a ca ca e num tempo mximo constante k3 (independente de n). a Realiza o teste da linha 11, em tempo constante k4 . Se a condio do teste for verdadeiro, realizada na linha 12 uma atribuio, que realizada em ca e ca e tempo constante k5 .

2.1

Dicas para avaliar a complexidade de um algoritmo.

Consequentemente, o tempo total de execuo t satisfaz: ca t t t k1 + k2 + (n 1) (k3 + k4 + k5 ) n(k3 + k4 + k5 ) + (k1 + k2 k3 k4 k5 ) k n, onde k uma certa constante e

Neste caso a complexidade temporal k.n, uma constante multiplicada pelo tamanho do vetor, e digamos que e a complexidade temporal linear. e Em relao ao espao ocupado por esta funo, observamos que, alm dos parmetros, so usados apenas ca c ca e a a duas variveis. Logo, a complexidade espacial tambm linear. a e e Exerc cio 1 Denir uma funo que, dada uma matriz quadrada, e n o tamanho da matriz. Avaliar a comca plexidade temporal desta funo. ca 2.1.2 Algoritmos recursivos

Para avaliar a complexidade de uma funo escrita de forma recursiva, preciso analizar quantas vezes a funo ca e ca deve-ser chamada para chegar ao resultado esperado, e quantas operaes acarretam cada chamada. co Se um algoritmo tem como parmetro uma lista, ento a complexidade do algoritmo ser uma funo de n, a a a ca o comprimento da lista. Por exemplo, consideramos o algoritmo 2 que, dado uma lista de nmeros naturais, u retorna a soma dos elementos da lista. Algoritmo 2 (soma)
1 2 3 4 5 6

N funct soma(l : listN) : N begin if l = () then result 0 else result primeiro(l) + soma(resto(l)) .

Cada chamada recursiva de soma diminui de um comprimento da lista passada em parmetro, com a exceo a ca do caso do parmetro ser uma lista vazia, em qual caso o algoritmo termina. Se n o comprimento inicial, a e ento o nmero total de chamadas ser n + 1. A cada chamada sero realizadas as seguintes operaes: a u a a co O teste da linha 3 executado em tempo constante k1 . e Dependendo do resultado deste testo, so executados a ou a atribuio da linha 4, que realizada em tempo constante k2 , ca e ou a atribuio da linha 5, que, desconsiderando o tempo das chamadas recursivas, calculado em ca e tempo constante k3 . Logo, a complexidade temporal t deste algoritmo satisfaz: t t t (n + 1) k1 + k2 + n k3 n (k1 + k3 ) + k1 + k2 n k, , onde k uma constante. e

O algoritmo tem uma chamada recursiva que diminui de 1 o tamanho da lista, ento haver n chamadas, e o a a algoritmo tem complexidade temporal linear.

2.2

Comparao de algoritmos ca

Para avaliar a quantidade de memria necessria, preciso ter um entendimento ainda melhor de como o a e funcionam os micro-processadores. Cada chamada da funo realizada colocando em uma poro da memria, ca e ca o chamada a pilha de execuo, certas informaes, incluindo os parmetros da funo chamada. No caso da ca co a ca funo soma, vimos que podia haver n + 1 chamadas recursivas, cada uma dela tendo como parmetro uma ca a lista de tamanho decrescente. A somatria dos comprimentos das listas passadas em parmetro : o a e
n

n + (n 1) + (n 2) + . . . + 1 + 0

=
i=0

nn+1 2 k n2 = Neste caso, a complexidade espacial uma funo quadrtica do tamanho da entrada. Na prtica, compiladores e ca a a podem otimizar esse tipo de cdigo e gerar programas com complexidade espacial inferior ` calculada. o a Exerc cio 2 Seja um algoritmo recursivo com duas chamadas recursivas que diminuem em 1 o comprimento da lista. A cada chamada, executado um nmero xado de operaes constantes. Quais so as complexidades e u co a temporal e espacial deste algoritmo. 2.1.3 Consideraes co

Geralmente, quando se avalia a complexidade de um algoritmo, a anlise feita de forma menos precisa. a e As razes desta simplicao so que, primeiro muito trabalho trabalhar contabilizando cada instruo, e o ca a e ca segundo o custo de executar cada instruo varia grandemente entre diferentes verses do cdigo executvel ca o o a (fatores sendo as capacidades de otimizao do compilador, o tipo de micro-processador utilizado, a freqncia ca ue do relgio cadenceando o micro-processador, e uma variedade de outras caracter o sticas). Assim, considera-se que um bloco de execues que se executam uma unica vez considerado como um custo unitrio. O custo co e a de executar um lao considerado como sendo o custo de executar o bloco dentro do lao multiplicado pelo c e c nmero de vezes que o bloco executado. Assim, se temos c bloco de iteraes aninhadas, e que cada bloco u e co efetua um nmero de iteraes dependendo de n, a complexidade temporal aproximativamente nc . u co e Se temos c bloco de iteraes aninhadas, e que cada bloco efetua um nmero de iteraes dependendo de n, co u co a complexidade temporal aproximativamente nc . e

2.2

Comparao de algoritmos ca

O tempo de execuo de um programa depende de vrios fatores: a velocidade do computador no qual est ca a a rodando, a qualidade do compilador que foi usado e, em alguns casos, a qualidade do algoritmo. Se n o e tamanho da entrada, as funes comumente encontradas em anlise de programas so k n (linear), n log n, co a a k n2 (quadrtica), k n3 (cbica), k1 ek2 n (exponencial). Essa ordem a ordem de preferncia: um custo a u e e tempo e/ou espao de complexidade linear muito melhor que um custo cbico. Enquanto programadores, c e u nosso escopo de trabalho a qualidade dos algoritmos empregados no programa. Veremos que para um mesmo e problema, existe vrios algoritmos poss a veis, de complexidade diferentes. O bom programador deve saber projetar e/ou escolher o melhor algoritmo dispon vel. Para comparar dois algoritmos, deve se estudar a complexidade desses algoritmos. Supondo que j calcua lamos as funes dando o custo espao e tempo desse algoritmos. Para comparar essas funes, podemos por co c co exemplo desenhar o grco delas. No caso geral, vrias conguraes so poss a a co a veis. Seja F e G as duas funes co de custo que queremos comparar: Se F sempre inferior a G, ou seja, o grco de F ca sempre em baixo do grco de G, ento a escolha e a a a para o algoritmo correspondente a F bvia. eo

3 Denies formais co

Se F as vezes inferior a G, e vice-versa, e os grcos de F e G se intersetam em um nmero innito de e a u pontos. Neste caso, consideramo que h empate, e a funo custo no ajuda a escolher um algoritmo. a ca a Se F as vezes G inferior a G, e vice-versa, e os grcos de F e G se intersectam em um nmero nito de e a u pontos. Portanto, a partir de um certo valor de n, F sempre superior a G, ou sempre inferior. Neste e e caso, consideramos melhor aquele algoritmo que inferior ao outro para grandes valores de n. e Portanto, no caso geral, nem sempre podemos dizer que F (n) < G(n). A abordagem escolhida de comparar e as taxas de crescimentos destas funes e seu comportamento quando o tamanho da entrada muito grande. co e Quando estudamos o comportamento do grco das funes consideradas, observamos que a taxa de crescimento a co o fator mais importante para relacionar essas funes quando n grande. e co e Por exemplo, se temos um algoritmo A que tem uma complexidade de CA (n) = 1000 n2 e um algoritmo B com uma complexidade de CB (n) = 0, 1 n3 , consideraremos que B mais complexo que A. Uma primeira e observao que a anlise de algoritmos assim como a estudamos s util para comparar algoritmos que ca e a o e manipulam grandes quantidades de dados. Exerc cio 3 A partir de qual valor de n, CA torna se inferior a CB ? Em geral, quando temos um problema a resolver, queremos obter uma soluo de complexidade menor ca poss vel: melhor ter um algoritmo de complexidade polinomial, que exponencial. e Exerc cio 4 Para um determinado problema P , temos algoritmos a, b, c, e d com as seguintes complexidades Ca (n) = 100 n log n, Cb (n) = 1000 n, Cc (n) = 4 n2 e Cd (n) = 105 en . Classicar esses algoritmos do melhor at o pior, em termo de complexidade. e Um pouco de terminologia A tabela seguinte recapitula os termos utilizado para qualicar a complexidade de um algoritmo em funo de ca n, o tamanho de sua entrada. constante logar tmico linear quadrtico a cbico u polinomial exponencial um nmero constante de operaes u co log n n n2 n3 nk , onde k constante e en

Denies formais co

Quando estuda-se algoritmos, importante poder estimar a complexidade destes. Se o algoritmo complicado, e e deve se usar uma abordagem formal para provar qual sua complexidade computacional. e

3.1

Limite superior: a notao O ca

A notao mais comumente usadas para medir algoritmos O, que da um limite superior da complexidade: ca e Denio 1 (Grande O) A funo custo C(n) O(F (n)) se existe constantes positivas c e n0 tais que ca ca e C(n) c.F (n) quando n n0 .

3.2

Limite inferior: a notao ca

A notao O(F (n)) diz que existe um ponto n0 tal que para todos os tamanhos de entrada n superiores a n0 , ca o custo inferior a algum mltiplo de F (n), ou seja, F (n) cresce mais rapidamente que C(n). e u Por exemplo dizer que o espao alocado pela execuo de um algoritmo O(n2 ), signica dizer que a c ca e quantidade de memria usada no mximo uma funo quadrtica da entrada. E importante observar que, na o e a ca a notao O, os termos de menor peso e os fatores podem sempre ser eliminados; assim O(4 n3 + 10 n2 ) e ca O(n3 ) so sinnimos, mas o segundo termo mais simples e deve ser utilizado. a o e Quando a complexidade de um algoritmo A O(f (n)), comum dizer simplesmente que A O(f (n)), e e e e neste caso, entende-se que a complexidade temporal. e Observa que se uma funo O(n) ento ela tambm O(n2 ), mas a armao O(n) mais precisa. ca e a e e ca e Exerc cio 5 Responder as seguintes perguntas. Justicar. 1. n2 + n + 1 O(1) ? O(n) ? O(n2 ) ? O(n3 ) ? O(n log n) ? e 2. As complexidades temporal e spacial do algoritmo 2 so O(n) ? so O(n2 ) ? a a 3. Para o algoritmo 2, a complexidade temporal O(n) e a espacial O(n2 ) ? e e

3.2

Limite inferior: a notao ca

A notao usada para especicar o limite inferior da complexidade de um algoritmo: ca e Denio 2 (Grande Omega) C(n) = (F (n)) se existe constantes positivas c e n0 tais que C(n) c.F (n) ca quando n n0 . Essa denio diz que, a partir de um certo valor n0 , o custo C(n) maior que F (n), multiplicado por um certo ca e fator constante. Assim C(n) cresce mais rapidamente que F (n). Um teorema importante de algor tmica diz que, em um processador seqncial, o tempo de execuo de ue ca qualquer algoritmo de ordenao (n log n). Isso quer dizer que no existe algoritmos seqnciais de ordenao ca e a ue ca que tenham uma complexidade temporal inferior a n log n.

3.3

Complexidade exata: a notao ca

A notao usada para especicar exatamente a complexidade de um algoritmo: ca e Denio 3 (Grande Theta) C(n) = (F (n)) quando C(n) = O(F (n)) e C(n) = (F (n)). ca Se um algoritmo A (F (n)), ele ao mesmo tempo O(F (n)) e (F (n)). Portanto, sua complexidade cresce e e to rapidamente quanto a funo F (n). F uma medio exata da taxa de evoluo da complexidade do a ca e ca ca algoritmo A. Por exemplo, o algoritmo 1 (n). e Em muitas ocasies, a notao O empregada onde a notao seria adequada. Observa que isso no o ca e ca a caracteriza um erro, mais simplesmente uma impreciso. a

3.4

Limite superior estrito: a notao o ca

Enm a notao o usada para especicar que a complexidade de um algoritmo e inferior estritamente a uma ca e certa funo: ca Denio 4 (Pequeno O) C(n) = o(F (n)) quando C(n) = O(F (n)) e C(n) = (F (n)). ca Exerc cio 6 Mostrar que se um algoritmo o(F (n)), ento ele O(F (n)). e a e

Existe um algoritmo seqncial de ordenao que tenha uma complexidade o(n log n) ? ue ca

4 Exemplo: O problema da soma da maior subseqncia ue

Exemplo: O problema da soma da maior subseqncia ue

Problema 1 Seja uma seqncia nita de inteiros (possivelmente negativos) a1 , a2 , . . . an . Calcular o valor de ue j ai . Se todos os inteiros so negativos, a maior subseqncia a subseqncia vazia e a sua soma 0. a ue e ue e k=i Por exemplo, para a entrada 2, 11, -4, 13, 5, 2 a resposta 20, correspondendo a subseqncia do segundo e ue ao quarto elemento. Para a entrada 1, 3, 4, -2, -1, 6 a resposta 7, correspondendo a subseqncia os quatro e ue ultimos itens.

4.1

Um algoritmo c bico u

O algoritmo 3 o mais simples e direto que se pode imaginar. Consiste em fazer uma busca exaustiva de todas e as poss veis subseqncias. O tamanho da entrada deste algoritmo n, a quantidade de elementos no vetor ue e parmetro. a Dois laos iteram sobre os limites de todas as subseqncias poss c ue veis linhas(linhas 7 e 8), O valor de cada subseqncia computado (linhas 10 a 12. Se esse valor for superior a da soma mxima computado at agora, ue e a e armazenada na varivel SomaMxima, a soma mxima atualizada (linha 13) Enm, a funo retorna o valor a a a e ca computado (linha 16) Algoritmo 3 (subseqnciaSomaMxima) ue a
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

ue a funct subseqnciaSomaMxima(v : array Z, n : N) : Z var soma, somaMxima : Z a i, j, k : N end begin somaMxima v[1] a for i = 1 to n step 1 do for j = i to n step 1 do soma 0 for k = i to j step 1 do soma soma + v[k] od if soma > somaMxima then somaMxima soma a a od od result somaMxima a end .

O espao alocado pela execuo deste algoritmo o custo de representao dos parmetros mais as variveis c ca e ca a a locais. Logo, o custo espao ento O(1). Para avaliar a complexidade em termo de tempo deste algoritmo, c e a precisamos avaliar quantas vezes cada instruo executada. O algoritmo basicamente composto de 3 laos ca e e c aninhados. As instrues as mais frequentemente executadas e, portanto, o termo dominante no tempo de co execuo deste algoritmo, so as das linhas 10 a 12. O nmero de vezes que as expresses compondo este lao ca a u o c so executadas a e
n n j

1
i=1 j=i k=i

= n(n + 1)(n + 2)/6 = O(n3 ).

4.2

Um algoritmo quadrtico a

4.2

Um algoritmo quadrtico a

O algoritmo cbico muito simples porm muito ineciente. O algoritmo 4 mostra um algoritmo quadrtico u e e a resolvendo esse problema. Algoritmo 4 (subseqnciaSomaMxima) ue a
1 2 3 4 5 6 7 8 9 10 11 12 13 14

ue a funct subseqnciaSomaMxima(v : array Z, n : N) : Z var soma, somaMxima : Z; i, j : N a end begin somaMxima v[1] a for i = 1 to n step 1 do soma 0 for j = i to n step 1 do soma soma + v[k] if soma > somaMxima then somaMxima soma a a od od result somaMxima a end .

Esse algoritmo s contm dois laos aninhados, e O(n2 ) (quadrtico). o e c e a

4.3

Um algoritmo linear

O algoritmo 5 mais eciente ainda. A ideia deste algoritmo de realizar uma unica iterao. A cada e e ca passo da iterao, a varivel SomaMxima armazena a maior subseqncia do vetor entre os ca a a ue ndices 0 e i-1, e a varivel SomaSufixo mantm a maior soma de todos os suxo deste subvetor. Quando todos os suxos tem a e valor negativo, SomaSufixo nulo. e Este algoritmo s contm um bloco de iterao, que enumera todos os valores de 0 at N-1. Em cada o e ca e iterao, existe um nmero mximo de instrues que sero executadas que independente de N , e que logo ca u a co a e e constante. Conclu mos portanto que este algoritmo O(n). e Algoritmo 5 (subseqnciaSomaMxima) ue a
1 2 3 4 5 6 7 8 9 10 11 12 13 14

ue a funct subseqnciaSomaMxima(v : array Z, n : N) : Z var somaSuxo, somaMxima : Z; i, j : N a end begin somaMxima v[1] a somaSuxo 0 for i = 1 to n step 1 do if v[i] + somaSuxo > somaMxima a somaSuxo somaSuxo + v[i] somaMxima somaSuxo a elsif (v[i] > 0) somaSuxo somaSuxo + v[i] else somaSuxo 0

4.3

Um algoritmo linear

10

15 16 17 18

od result somaMxima a end .

Exerc cios
1. Quais so as diferentes notaes apresentadas para denir e comparar a complexidade de algoritmos ? a co Dar a denio de cada uma dela. ca 2. Revisar os principais algoritmos de ordenao que voc conhece e determina a complexidade de cada um ca e utilizando notaes formais. co 3. Mostrar por que o nmero de vezes que as expresses do algoritmo 3 n(n + 1)(n + 2)/6. u o e 4. Suponha C1 (n) = O(F (n)) e C2 (n) = O(F (n)). Qual das relaes seguintes verdadeira ? co e (a) C1 (n) + C2 (n) = O(F (n)) (b) C1 (n) C2 (n) = O(F (n)) (c) C1 (n)/C2 (n) = O(1) (d) C1 (n) = O(C2 (n)) 5. Um algoritmo leva 0.5 ms para uma entrada de tamanho 100. Qual o tamanho da entrada que pode ser e resolvida em um minuto quando o algoritmo em tempo : e (a) linear (b) O(n log n) (c) quadrtico a (d) cbico u 6. Um algoritmo leva 0.5 ms para uma entrada de tamanho 100. Quanto tempo ele levar para terminar a com uma entrada de tamanho 500 se sua complexidade em tempo : e (a) linear (b) O(n log n) (c) quadrtico a (d) cbico u