aula01 - indução - principio analise

148
Algoritmos I G.P. Telles IC–UNICAMP 13 de agosto de 2015 G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 1 / 100

Upload: acauan-ribeiro

Post on 06-Dec-2015

223 views

Category:

Documents


2 download

DESCRIPTION

Analise de Algoritmos - Complexidade de Algoritmos

TRANSCRIPT

Algoritmos I

G.P. Telles

IC–UNICAMP

13 de agosto de 2015

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 1 / 100

Referencias

Estes slides sao baseados principalmente nos livros:

CLRS09 T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein. Introduction toAlgorithms. 3rd ed. McGraw-Hill, 2009.

Man89 U. Manber. Algorithms: A Creative Approach. Addison-Wesley, 1989.

Estes slides sao incompletos. Contem e sempre conterao erros,inconsistencias, imperfeicoes e outros tipos de defeitos.

Estes slides foram escritos usando gramatica anterior a reformaortografica de 2009.

Guilherme P. Telles, 2015.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 2 / 100

Esta disciplina

Analise de algoritmos.

Tecnicas para a construcao de algoritmos: inducao, divisao econquista, programacao dinamica, algoritmos gulosos.

Algumas estruturas de dados.

Problemas que sao recorrentes em computacao e sao faceis: busca,ordenacao, problemas basicos em grafos etc.

Problemas que sao recorrentes em computacao e que nao sabemos sesao faceis ou difıceis: NP-completos.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 3 / 100

Parte I

Introducao

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 4 / 100

Problemas e algoritmos

Um problema e uma questao que precisa ser respondida. Pode incluirrestricoes sobre os recursos que podem ser usados na solucao.

Em sentido amplo, um algoritmo e um metodo ou processo pararesolver um problema.

Em sentido mais estrito (mas ainda informal) um algoritmo e umprocedimento finito e bem definido que recebe valores como entrada eproduz valores como saıda.

Um algoritmo deve ser composto por instrucoes nao-ambıguas e quepossam ser executadas pelo agente de computacao para o qual foifeito.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 5 / 100

(Problemas)

Podemos classificar problemas computacionais de acordo com o efeitoque se espera:

I Problemas de busca: encontrar x na entrada que satisfaz a propriedadeP .

I Problemas de construcao: construir x satisfazendo a propriedade P .I Problemas de estruturacao: transformar a entrada para satisfazer a

propriedade P .I Problemas de otimizacao: encontrar o melhor x que satisfaz a

propriedade P .I Problemas de decisao: decidir se a entrada satisfaz a propriedade P .I Problemas adaptativos: Manter a propriedade P (enquanto o problema

muda).

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 6 / 100

Algoritmos como tecnologia

Vamos supor que temos um vetor de tamanho n para ordenar.

Vamos supor que temos dois algoritmos para ordenar um vetor:I Insertion-sort, que gasta tempo c1n

2, onde c1 e uma constante que naodepende de n.

I Merge-sort, que gasta tempo c2n log2 n, onde c2 e uma constante quenao depende de n.

Vamos supor que temos duas implementacoes:I uma excelente para Insertion-sort em linguagem de baixo nıvel, tal que

c1 = 2.I uma mediana para Merge-sort em linguagem de alto nıvel, tal que

c2 = 50.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 7 / 100

Algoritmos como tecnologia

Se n for igual a 10 milhoes, a execucao do Insertion-sort em umcomputador muito rapido – 1010 instrucoes por segundo – leva

2(107)2 instrucoes

1010 instrucoes/s= 20000s

Mesmo se usarmos um computador 1000 vezes mais lento– 107 instrucoes por segundo – o Merge-sort leva

50× 107 log2 107 instrucoes

107 instrucoes/s∼ 1163s

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 8 / 100

Algoritmos como tecnologia

A diferenca e de 5.5 horas para menos de 20 minutos executando oMerge-sort em um computador 1000 vezes mais lento.

Para 100 milhoes de numeros a diferenca e de 23 dias para menos de4 horas.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 9 / 100

Algoritmos como tecnologia

O exemplo ilustra que melhorias de desempenho obtidas por escolhasmelhores de algoritmos podem ir alem das melhorias que o hardwarepode prover.

Bons algoritmos sao necessarios para resolver uma infinidade deproblemas reais.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 10 / 100

Outras questoes

Custo de desenvolvimento versus custo de execucao.I Um algoritmo eficiente pode ser complicado e pode nao haver alguem

capaz de mante-lo.I Se um programa sera usado poucas vezes ou para problemas pequenos

o custo de implementacao, depuracao e testes pode nao valer a pena.

Em algumas aplicacoes, precisao e estabilidade sao tao importantesquanto eficiencia.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 11 / 100

Parte II

Inducao

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 12 / 100

Secoes

Man89: capıtulo 2.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 13 / 100

Princıpio da inducao

Seja P um predicado com parametro n.

Se P (1) e verdadeiro e para todo n > 1 o fato de que P (n− 1) everdadeiro implica que P (n) e verdadeiro entao P e verdadeiro paratodo natural n.

Uma intuicao e: se garantimos que o primeiro domino cai egarantimos que quando qualquer domino cai ele derruba o dominoseguinte, entao podemos garantir que todos os dominos caem.

A inducao e uma tecnica para provar teoremas sobre os numerosnaturais e para projetar algoritmos.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 14 / 100

Provas

Para provar um teorema T (n) por inducao e necessario:1 mostrar que T vale para 1 (caso base), e2 mostrar que se T vale para n− 1 (hipotese de inducao) isso implica

que T vale para n (passo da inducao).

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 15 / 100

Exemplo

Seja S1(n) =

n∑i=1

i.

Vamos mostrar que S1(n) =n(n + 1)

2para todo natural n.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 16 / 100

Para todo natural n, S1(n) = n(n+1)2

Prova por inducao em n.

Base: Para n = 1, S1(1) =

1∑i=1

i = 1 en(n + 1)

2=

1(1 + 1)

2= 1.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 17 / 100

Para todo natural n, S1(n) = n(n+1)2

HI: Vamos assumir que S1(n− 1) =(n− 1)n

2.

Passo: Mostrar que se S1(n− 1) =(n− 1)n

2entao S1(n) =

n(n + 1)

2.

S1(n) = S1(n− 1) + n (direto da definicao de S1)

=(n− 1)n

2+ n (HI)

=(n− 1)n

2+

2n

2

=n(n− 1 + 2)

2

=n(n + 1)

2

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 18 / 100

Para todo natural n, S1(n) = n(n+1)2

HI: Vamos assumir que S1(n− 1) =(n− 1)n

2.

Passo: Mostrar que se S1(n− 1) =(n− 1)n

2entao S1(n) =

n(n + 1)

2.

S1(n) = S1(n− 1) + n (direto da definicao de S1)

=(n− 1)n

2+ n (HI)

=(n− 1)n

2+

2n

2

=n(n− 1 + 2)

2

=n(n + 1)

2

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 18 / 100

Para todo natural n, S1(n) = n(n+1)2

HI: Vamos assumir que S1(n− 1) =(n− 1)n

2.

Passo: Mostrar que se S1(n− 1) =(n− 1)n

2entao S1(n) =

n(n + 1)

2.

S1(n) = S1(n− 1) + n (direto da definicao de S1)

=(n− 1)n

2+ n (HI)

=(n− 1)n

2+

2n

2

=n(n− 1 + 2)

2

=n(n + 1)

2

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 18 / 100

Para todo natural n, S1(n) = n(n+1)2

HI: Vamos assumir que S1(n− 1) =(n− 1)n

2.

Passo: Mostrar que se S1(n− 1) =(n− 1)n

2entao S1(n) =

n(n + 1)

2.

S1(n) = S1(n− 1) + n (direto da definicao de S1)

=(n− 1)n

2+ n (HI)

=(n− 1)n

2+

2n

2

=n(n− 1 + 2)

2

=n(n + 1)

2

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 18 / 100

Para todo natural n, S1(n) = n(n+1)2

HI: Vamos assumir que S1(n− 1) =(n− 1)n

2.

Passo: Mostrar que se S1(n− 1) =(n− 1)n

2entao S1(n) =

n(n + 1)

2.

S1(n) = S1(n− 1) + n (direto da definicao de S1)

=(n− 1)n

2+ n (HI)

=(n− 1)n

2+

2n

2

=n(n− 1 + 2)

2

=n(n + 1)

2

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 18 / 100

Para todo natural n, S1(n) = n(n+1)2

HI: Vamos assumir que S1(n− 1) =(n− 1)n

2.

Passo: Mostrar que se S1(n− 1) =(n− 1)n

2entao S1(n) =

n(n + 1)

2.

S1(n) = S1(n− 1) + n (direto da definicao de S1)

=(n− 1)n

2+ n (HI)

=(n− 1)n

2+

2n

2

=n(n− 1 + 2)

2

=n(n + 1)

2

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 18 / 100

Para todo natural n, S1(n) = n(n+1)2

HI: Vamos assumir que S1(n− 1) =(n− 1)n

2.

Passo: Mostrar que se S1(n− 1) =(n− 1)n

2entao S1(n) =

n(n + 1)

2.

S1(n) = S1(n− 1) + n (direto da definicao de S1)

=(n− 1)n

2+ n (HI)

=(n− 1)n

2+

2n

2

=n(n− 1 + 2)

2

=n(n + 1)

2

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 18 / 100

Para todo natural n, S1(n) = n(n+1)2

Mostramos que o enunciado e valido para 1 e que a validade paran− 1 implica na validade para n.

Entao, por inducao concluımos que S1(n) =n(n + 1)

2para todo

natural.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 19 / 100

n, n + 1

Podemos usar n ou n + 1, o que e equivalente:

Se P (1) e verdadeiro e para todo n > 1 o fato de que P (n) everdadeiro implica que P (n + 1) e verdadeiro entao P e verdadeiropara todo natural n.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 20 / 100

Bases e passos

Em alguns casos podemos partir de uma base diferente, ou de variasbases.

Seja P um predicado com parametro n. Se P (1) e P (2) saoverdadeiros e se P (n− 2) verdadeiro implica que P (n) sejaverdadeiro para todo n > 2 entao P e verdadeiro para todo n ≥ 1.

O passo pode ser maior que 1, desde que um conjunto infinito sejacoberto.

Seja P um predicado com parametro n. Se P (1) e verdadeiro e seP (n/2) verdadeiro implica que P (n) seja verdadeiro para todo npotencia inteira de 2 entao P e verdadeiro para toda potencia inteirade 2.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 21 / 100

Inducao forte

Uma variacao muito usada e a inducao forte, em que todos os valoresanteriores de n sao usados na hipotese.

Seja P um predicado com parametro n. Se P (1) e verdadeiro e seP (k) verdadeiro para todo 1 < k < n implica que P (n) sejaverdadeiro entao P e verdadeiro para todo n ≥ 1.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 22 / 100

Parte III

Analise de algoritmos

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 23 / 100

Secoes

CLRS09: capıtulos 2 e 3.

Man89: secoes 3.1 a 3.3.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 24 / 100

Correcao de algoritmos

Um algoritmo e correto se para toda entrada valida ele produzir oresultado esperado.

Algumas maneiras de mostrar que um algoritmo e correto:I Testar.I Provar.I Model checking.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 25 / 100

Testar

Testar e executar um programa com um subconjunto das entradaspossıveis.

E util como tecnica de depuracao, mas nao fornece uma garantia deque o programa esteja correto.

Definir um conjunto de testes de aumente a probabilidade deencontrar erros e uma parte crucial desse processo.

Outra limitacao e que normalmente nao ha um outro programagarantidamente correto (oraculo) valide a saıda do programa.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 26 / 100

Provar

Iterativos: assercoes e invariantes de laco.

Recursivos: inducao.

Nao e facil com programas grandes.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 27 / 100

Assercoes e invariantes de laco

Processo:I Enunciam-se as propriedades que o algoritmo deve ter.I Enunciam-se propriedades para pequenas porcoes do algoritmo

(assercoes).I Mostra-se que as assercoes sao verdadeiras.I Compoem-se as assercoes para mostrar que as propriedades do

algoritmo sao verdadeiras.

Assercoes sao afirmacoes a respeito dos valores de variaveis antes edepois da execucao de um bloco de comandos.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 28 / 100

Assercoes

Assercoes tipicamente tem a forma de pre e pos-condicoes.I Pre-condicoes: conjunto de afirmacoes que devem ser validas antes da

execucao de um bloco.I Pos-condicoes: conjunto de afirmacoes que devem ser validas depois da

execucao de um bloco.

As construcoes atomicas do algoritmo sao consideradas axiomas(propriedades que nao precisam ser demonstradas).

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 29 / 100

Exemplo

Tripla de Hoare: PSQ.Significa: dado que P e verdadeira antes da execucao de S entao Q everdadeira depois da execucao de S.

x > 1 x = x + 2 x > 3x < y while (x < y) x = x + 1 x = y

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 30 / 100

Invariante de laco

Uma invariante de laco e uma assercao que vale antes do inıcio decada iteracao.

Para mostrar que um laco tem certas propriedades sao usadasinvariantes de laco compostas com uma prova de que o laco termina.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 31 / 100

Exemplo

Um algoritmo para somar os elementos de um vetor.

Sum-array(A)

1 sum = 02 for i = 1 to A. length3 sum = sum + A[i]4 return sum

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 32 / 100

Terminacao

O laco 2:3 termina.

No laco o valor inicial de i e 1 e ele e incrementado automaticamente atealcancar A. length. Como A. length e definido, finito e maior ou igual a 0entao o laco termina.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 33 / 100

Invariante

No comeco de cada iteracao do laco 2:3, a variavel sum contem a somados valores do subvetor A[1 . . i− 1].

Antes da primeira iteracao: para i = 1 o subvetor A[1 . . 0] nao contemelementos e o valor de sum e zero.

Cada iteracao mantem a invariante: o corpo do laco adiciona A[i] a sum.Ao termino do laco, i e incrementado e entao sum contem a soma doselementos do subvetor A[1 . . i− 1].

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 34 / 100

Invariante

No comeco de cada iteracao do laco 2:3, a variavel sum contem a somados valores do subvetor A[1 . . i− 1].

Antes da primeira iteracao: para i = 1 o subvetor A[1 . . 0] nao contemelementos e o valor de sum e zero.

Cada iteracao mantem a invariante: o corpo do laco adiciona A[i] a sum.Ao termino do laco, i e incrementado e entao sum contem a soma doselementos do subvetor A[1 . . i− 1].

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 34 / 100

Invariante

No comeco de cada iteracao do laco 2:3, a variavel sum contem a somados valores do subvetor A[1 . . i− 1].

Antes da primeira iteracao: para i = 1 o subvetor A[1 . . 0] nao contemelementos e o valor de sum e zero.

Cada iteracao mantem a invariante: o corpo do laco adiciona A[i] a sum.Ao termino do laco, i e incrementado e entao sum contem a soma doselementos do subvetor A[1 . . i− 1].

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 34 / 100

Correcao de Sum-array

Sum-array retorna a soma dos valores no vetor.

A invariante de laco garante que sum contem a soma dos elementos novetor A na linha 4. Como o laco termina, o algoritmo retorna sum e entaoesta correto.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 35 / 100

Invariantes e inducao

A tecnica de invariantes de laco e similar a inducao.

A validade da invariante antes da primeira iteracao do lacocorresponde ao caso base da inducao e a validade ao termino de cadaiteracao corresponde ao passo da inducao.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 36 / 100

Model-checking

Especificam-se as propriedades desejadas para o algoritmo.

Constroi-se um modelo do algoritmo (p.ex. um sistema de estadosonde os estados sao valores das variaveis e transicoes sao operacoesatomicas do algoritmo.)

Executa-se um verificador de modelos para verificar se o modelo temas propriedades enunciadas (p.ex. se o sistema alcanca algum estadoinconsistente). Tem limitacoes de tamanho e restricoes para modelosinfinitos.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 37 / 100

Mais sobre analise de correcao

M. Huth and M. Ryan. Logic in Computer Science: Modelling andReasoning about Systems, Cambridge University Press, 2nd edition2004.

e outros.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 38 / 100

Desempenho de algoritmos

Analise experimental.

Analise assintotica.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 39 / 100

Analise experimental

Varios problemas praticos nao estao bem caracterizados do ponto devista teorico (sao complexos demais). A experimentacao e a unicaforma de analisar eficiencia.

Alguns algoritmos, notoriamente meta-heurısticas, precisam seradaptados aos problemas reais. Essas adaptacoes preservam osprincıpios gerais do algoritmo original mas normalmente nao saoanalisadas formalmente.

Para ajustar parametros e identificar causas de falta de eficiencia eefetividade, notoriamente em heurısticas.

Nao deveria ser motivada pelo mito “fazer um bom experimento emuito mais facil que desenvolver boas teorias”.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 40 / 100

Analise experimental

Depende da implementacao dos algoritmos e e influenciada pelaexperiencia do programador, linguagem de programacao, compilador,sistema operacional e hardware.

O projeto dos experimentos deve ser prever um numero adequado derepeticoes, escolha adequada de parametros para o funcionamentodos algoritmos e para comparacoes de resultados.

A analise dos resultados deve levar a conclusoes que sejamestatisticamente significativas.

A adicao de um novo algoritmo ou mudancas tecnologicasnormalmente exigem que todos os experimentos sejam refeitos.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 41 / 100

Mais sobre analise experimental

I.P. Gent et al. How not to do it. Technical Report U. Strathclyde,1997.

T. Bartz-Beielstein et al. Experimental Methods for the Analysis ofOptimization Algorithms, Springer-Verlag 2010.

e outros.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 42 / 100

Modelo de computacao

Um modelo de computacao representa um agente de computacao.

Cada modelo de computacao e capaz de computar um certo conjuntode funcoes, isto e, resolver um certo conjunto de problemas.

Cada modelo define suas operacoes e uma memoria (se houver).

Quando estivermos analisando um algoritmo estaremos fazendo aanalise em relacao as operacoes definidas para um modelo decomputacao e com relacao a memoria usada pelo modelo decomputacao.

Se modificarmos o modelo entao as analises podem perder a suavalidade.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 43 / 100

Modelo RAM

O modelo RAM (Random Access Machine) e similar a umcomputador digital e sera usado nas nossas analises.

O modelo RAM com memoria infinita e equivalente a outros modelosimportantes, como as Maquinas de Turing, e para os quais variaspropriedades teoricas sao conhecidas.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 44 / 100

Modelo RAM

O modelo e composto por uma CPU e uma memoria.

A CPU possui apenas 2 registradores e opera em ciclos deleitura-decodificacao-execucao das instrucoes. Nao inclui nenhum tipode paralelismo.

A memoria e finita com palavras finitas. Armazena programas edados. As operacoes permitidas sao leitura e escrita de uma posicaoda memoria.

Os dados sao inteiros ou fracionarios e o conjunto de instrucoes incluimovimentacao de dados entre a memoria e os registradores, operacoesaritmeticas, condicionais, loops, chamadas e retorno de funcoes.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 45 / 100

Modelo RAM

[Savage, Models of Computation, 1998]

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 46 / 100

Instancia, tamanho da entrada

Um conjunto de valores que serve como entrada para um problema echamado de instancia.

O tamanho da entrada para um problema vai ser expresso da formamais adequado ao problema. Por exemplo,

I para o problema da ordenacao o tamanho do problema sera o numerode itens,

I para o problema de testar se um numero e primo o tamanho doproblema sera o numero de bits usado para representar o numero,

I para problemas em grafos o tamanho do problema sera o numero devertices e arestas no grafo

I etc.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 47 / 100

Analise assintotica

E uma avaliacao teorica que fornece uma aproximacao do desempenhode um algoritmo em termos de tempo de execucao e memoria semque seja necessario implementar e executar experimentos.

Normalmente e mais rapida que a analise experimental.

A analise assintotica e feita contando-se o numero de operacoes que oalgoritmo executa e expressando o resultado como uma funcao dotamanho da entrada.

A analise assintotica faz simplificacoes na forma de contar e na formade expressar o numero de operacoes.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 48 / 100

Simplificacoes na contagem

Considera-se

1 que cada instrucao do algoritmo pode ser convertida em um conjuntofinito e bem definido de instrucoes da Maquina RAM e

2 cada instrucao leva tanto tempo quanto a instrucao mais lenta.

Dessa forma, considera-se que cada instrucao seja executada em 1unidade de tempo.

Esta simplificacao subestima o numero de operacoes executadas poruma constante multiplicativa.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 49 / 100

Exemplo

Vamos considerar um algoritmo para somar os elementos de um vetor.

O tamanho da entrada e A. length, o numero de elementos do vetor,que vamos chamar de n.

Sum-array(A)

1 sum = 02 for i = 1 to A. length3 sum = sum + A[i]4 return sum

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 50 / 100

Exemplo

Contando temos:

Sum-array(A)

1 sum = 02 for i = 1 to A. length3 sum = sum + A[i]4 return sum

operacoes

1n + 1n1

Somando temos: 1 + (n + 1) + n + 1 = 2n + 3.

Entao o tempo de execucao de Sum-array e aproximadamente2n + 3.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 51 / 100

Simplificacao na forma de expressar

Depois de contar o numero de instrucoes, desconsideramos os termosde menor ordem, coeficientes e constantes na equacao, e fazemos asuposicao de que o tamanho da entrada e arbitrariamente grande.

No nosso exemplo, ao inves de 2n + 3 ficamos apenas com n.

Dizemos que o tempo de execucao do algoritmo e aproximadamenten, para valores suficientemente grandes de n.

Outro exemplo: se contamos n2 + 200n + 2000 operacoes para oalgoritmo A, dizemos que o tempo de execucao de A eaproximadamente n2.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 52 / 100

Outra simplificacao na contagem: operacao dominante

Como os termos constantes e termos de menor ordem sao ignorados,podemos simplificar o processo contando apenas o numero deexecucoes de uma operacao dominante.

Uma operacao que e executada m vezes pelo algoritmo e dominantese nenhuma outra operacao e executada mais que cm vezes, parauma constante c.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 53 / 100

Exemplo

Sum-array(A)

1 sum = 02 for i = 1 to A. length3 sum = sum + A[i]4 return sum

Nesse algoritmo a soma e uma operacao dominante.

Assim podemos contar apenas o numero de somas.

Obtemos tempo de execucao aproximadamente n contando apenas onumero de execucoes da linha 3.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 54 / 100

Outras operacoes

if: numero de operacoes do then ou pelo else, o que executar maisoperacoes.

switch: numero de operacoes de sua clausula com mais operacoes.

subrotina: numero de operacoes da subrotina.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 55 / 100

Tipos de analise

Frequentemente o tempo de execucao de um algoritmo depende dovalor das entradas.

Entao dentre as entradas de um certo tamanho e necessario escolheralguma que vai ser usada como referencia para analise.

As possibilidades sao:

– uma entrada que causa a execucao do menor numero de instrucoes(melhor caso),

– uma entrada que causa a execucao de um numero medio deinstrucoes (caso medio) ou

– uma entrada que causa a execucao o maior numero de instrucoes(pior caso).

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 56 / 100

Analise de pior caso

O melhor caso nunca e usado porque todo algoritmo tem algum casotrivial que nao e representa a dificuldade do problema.

O caso medio custuma ser difıcil de definir e difıcil de analisar.

O pior caso e uma boa indicacao pratica do comportamento tıpico doalgoritmo.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 57 / 100

Algoritmo eficiente

Um algoritmo e considerado eficiente se seu tempo de execucao elimitado por um polinomio no tamanho da entrada.

Por exemplo, 3n, 2n2 − 100, n51, 1.000.000n2, etc.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 58 / 100

Na pratica

Na pratica, polinomios de graus muito grandes nao podem serconsiderados eficientes.

Ha algoritmos com a mesma analise teorica mas constantes muitodiferentes, por exemplo, bubble-sort vs. selection sort.

Ha algoritmos com analise teorica pior que sao melhores na praticaque outros com analise teorica melhor. Em muitos casos isso se devea padroes distintos de acesso a memoria, dependencias de dados quedificultam otimizacoes do programa e paralelismo interno deinstrucoes na CPU.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 59 / 100

No entanto

A combinacao de analise assintotica com analise de pior caso, apesarde aproximada, e rapida (!) e fornece uma boa indicacao da eficienciade um algoritmo.

E independente de tecnologia e de todas as tecnicalidades daexperimentacao.

A analise teorica e particularmente util para indicar limites inferiorespara problemas.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 60 / 100

Memoria

Para analisar o uso de memoria podemos usar a mesma tecnica,contando o numero de posicoes de memoria usadas pelo algoritmo.

Nao contamos a memoria usada pela entrada nem pela saıda.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 61 / 100

(Combinacoes)

Um problema P pode ser resolvido em um numero infinito demodelos.

Para cada modelo M existe um numero infinito de algoritmos pararesolver P .

Para cada algoritmo A existe um numero infinito de medidas derecursos R usados por A (tempo, memoria, tamanho, efetividade,etc.)

Para cada medida R permite um numero infinito de analises (melhorcaso, caso medio, pior caso, potencias de 2, etc.)

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 62 / 100

Exemplo: Insertion-Sort

O algoritmo Insertion-Sort ordena um vetor A[1 . . n].

Insertion-Sort(A)

1 for j = 2 to A. length2 key = A[j]3 // Insert A[j] into the sorted sequence A[1 . . j − 1].4 i = j − 15 while i > 0 and A[i] > key6 A[i + 1] = A[i]7 i = i− 18 A[i + 1] = key

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 63 / 100

Insertion-sort

Vamos contar.

Mas o numero de execucoes do bloco 5:7 depende dos valores em A.

Entao vamos denotar o numero de vezes que uma linha no bloco 5:7e executada para um certo valor de j de tj e o tamanho de A por n.

Insertion-Sort(A)

1 for j = 2 to A. length2 key = A[j]3 // Insert A[j] into A[1 . . j − 1].4 i = j − 15 while i > 0 and A[i] > key6 A[i + 1] = A[i]7 i = i− 18 A[i + 1] = key

operacoes

nn− 10n− 1∑n

j=2 tj∑nj=2(tj − 1)∑nj=2(tj − 1)

n− 1

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 64 / 100

Insertion-sort

Vamos contar.

Mas o numero de execucoes do bloco 5:7 depende dos valores em A.

Entao vamos denotar o numero de vezes que uma linha no bloco 5:7e executada para um certo valor de j de tj e o tamanho de A por n.

Insertion-Sort(A)

1 for j = 2 to A. length2 key = A[j]3 // Insert A[j] into A[1 . . j − 1].4 i = j − 15 while i > 0 and A[i] > key6 A[i + 1] = A[i]7 i = i− 18 A[i + 1] = key

operacoes

nn− 10n− 1∑n

j=2 tj∑nj=2(tj − 1)∑nj=2(tj − 1)

n− 1

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 64 / 100

Insertion-sort

Vamos contar.

Mas o numero de execucoes do bloco 5:7 depende dos valores em A.

Entao vamos denotar o numero de vezes que uma linha no bloco 5:7e executada para um certo valor de j de tj e o tamanho de A por n.

Insertion-Sort(A)

1 for j = 2 to A. length2 key = A[j]3 // Insert A[j] into A[1 . . j − 1].4 i = j − 15 while i > 0 and A[i] > key6 A[i + 1] = A[i]7 i = i− 18 A[i + 1] = key

operacoes

n

n− 10n− 1∑n

j=2 tj∑nj=2(tj − 1)∑nj=2(tj − 1)

n− 1

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 64 / 100

Insertion-sort

Vamos contar.

Mas o numero de execucoes do bloco 5:7 depende dos valores em A.

Entao vamos denotar o numero de vezes que uma linha no bloco 5:7e executada para um certo valor de j de tj e o tamanho de A por n.

Insertion-Sort(A)

1 for j = 2 to A. length2 key = A[j]3 // Insert A[j] into A[1 . . j − 1].4 i = j − 15 while i > 0 and A[i] > key6 A[i + 1] = A[i]7 i = i− 18 A[i + 1] = key

operacoes

nn− 1

0n− 1∑n

j=2 tj∑nj=2(tj − 1)∑nj=2(tj − 1)

n− 1

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 64 / 100

Insertion-sort

Vamos contar.

Mas o numero de execucoes do bloco 5:7 depende dos valores em A.

Entao vamos denotar o numero de vezes que uma linha no bloco 5:7e executada para um certo valor de j de tj e o tamanho de A por n.

Insertion-Sort(A)

1 for j = 2 to A. length2 key = A[j]3 // Insert A[j] into A[1 . . j − 1].4 i = j − 15 while i > 0 and A[i] > key6 A[i + 1] = A[i]7 i = i− 18 A[i + 1] = key

operacoes

nn− 10

n− 1∑nj=2 tj∑nj=2(tj − 1)∑nj=2(tj − 1)

n− 1

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 64 / 100

Insertion-sort

Vamos contar.

Mas o numero de execucoes do bloco 5:7 depende dos valores em A.

Entao vamos denotar o numero de vezes que uma linha no bloco 5:7e executada para um certo valor de j de tj e o tamanho de A por n.

Insertion-Sort(A)

1 for j = 2 to A. length2 key = A[j]3 // Insert A[j] into A[1 . . j − 1].4 i = j − 15 while i > 0 and A[i] > key6 A[i + 1] = A[i]7 i = i− 18 A[i + 1] = key

operacoes

nn− 10n− 1

∑nj=2 tj∑nj=2(tj − 1)∑nj=2(tj − 1)

n− 1

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 64 / 100

Insertion-sort

Vamos contar.

Mas o numero de execucoes do bloco 5:7 depende dos valores em A.

Entao vamos denotar o numero de vezes que uma linha no bloco 5:7e executada para um certo valor de j de tj e o tamanho de A por n.

Insertion-Sort(A)

1 for j = 2 to A. length2 key = A[j]3 // Insert A[j] into A[1 . . j − 1].4 i = j − 15 while i > 0 and A[i] > key6 A[i + 1] = A[i]7 i = i− 18 A[i + 1] = key

operacoes

nn− 10n− 1∑n

j=2 tj

∑nj=2(tj − 1)∑nj=2(tj − 1)

n− 1

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 64 / 100

Insertion-sort

Vamos contar.

Mas o numero de execucoes do bloco 5:7 depende dos valores em A.

Entao vamos denotar o numero de vezes que uma linha no bloco 5:7e executada para um certo valor de j de tj e o tamanho de A por n.

Insertion-Sort(A)

1 for j = 2 to A. length2 key = A[j]3 // Insert A[j] into A[1 . . j − 1].4 i = j − 15 while i > 0 and A[i] > key6 A[i + 1] = A[i]7 i = i− 18 A[i + 1] = key

operacoes

nn− 10n− 1∑n

j=2 tj∑nj=2(tj − 1)

∑nj=2(tj − 1)

n− 1

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 64 / 100

Insertion-sort

Vamos contar.

Mas o numero de execucoes do bloco 5:7 depende dos valores em A.

Entao vamos denotar o numero de vezes que uma linha no bloco 5:7e executada para um certo valor de j de tj e o tamanho de A por n.

Insertion-Sort(A)

1 for j = 2 to A. length2 key = A[j]3 // Insert A[j] into A[1 . . j − 1].4 i = j − 15 while i > 0 and A[i] > key6 A[i + 1] = A[i]7 i = i− 18 A[i + 1] = key

operacoes

nn− 10n− 1∑n

j=2 tj∑nj=2(tj − 1)∑nj=2(tj − 1)

n− 1

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 64 / 100

Insertion-sort

Vamos contar.

Mas o numero de execucoes do bloco 5:7 depende dos valores em A.

Entao vamos denotar o numero de vezes que uma linha no bloco 5:7e executada para um certo valor de j de tj e o tamanho de A por n.

Insertion-Sort(A)

1 for j = 2 to A. length2 key = A[j]3 // Insert A[j] into A[1 . . j − 1].4 i = j − 15 while i > 0 and A[i] > key6 A[i + 1] = A[i]7 i = i− 18 A[i + 1] = key

operacoes

nn− 10n− 1∑n

j=2 tj∑nj=2(tj − 1)∑nj=2(tj − 1)

n− 1

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 64 / 100

Somando

Somando temos:

T (n) = n + (n− 1) + 0 + (n− 1) +

n∑j=2

tj +

n∑j=2

(tj − 1) +

n∑j=2

(tj − 1) + (n− 1)

= 4n +

n∑j=2

tj + 2

n∑j=2

(tj − 1)− 3

O numero de vezes que as linhas 5, 6 e 7 sao executadas depende doconteudo de A.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 65 / 100

Melhor caso

Quando A esta previamente ordenado, a linha 5 e executada apenas 1vez em todas as iteracoes para j. Assim,

T (n) = 4n +

n∑j=2

tj + 2

n∑j=2

(tj − 1)− 3

= 4n +

n∑j=2

1 + 2

n∑j=2

0− 3

= 4n + n− 1 + 0− 3

= 5n− 4

O tempo de execucao de melhor caso e aproximadamente n.

Cuidado: o melhor caso nao e quando n = 1. Sempre consideramosque n e grande.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 66 / 100

Pior caso

Quando A esta em ordem decrescente, a linha 5 e executada j vezes(j − 1 movimentacoes para a direita e um teste final). Assim,

T (n) = 4n +

n∑j=2

tj + 2

n∑j=2

(tj − 1)− 3

= 4n +

n∑j=2

j + 2

n∑j=2

(j − 1)− 3

= 4n +n(n + 1)

2− 1 + 2

n(n− 1)

2− 3

=3

2n2 +

7

2n− 4

O tempo de execucao de pior caso e aproximadamente n2.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 67 / 100

Memoria

O numero de posicoes de memoria usadas (alem da entrada) econstante.

Insertion-Sort(A)

1 for j = 2 to A. length2 key = A[j]3 // Insert A[j] into A[1 . . j − 1].4 i = j − 15 while i > 0 and A[i] > key6 A[i + 1] = A[i]7 i = i− 18 A[i + 1] = key

memoria

11010000

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 68 / 100

Outro exemplo: Merge

O merge-sort e um algoritmo recursivo que divide um vetor A em doissubvetores, ordena cada um recursivamente e depois intercala os doissubvetores obtendo uma permutacao ordenada de A.

Merge-Sort(A, p, r)

1 if p < r2 q = b(p + r)/2c3 Merge-Sort(A, p, q)4 Merge-Sort(A, q + 1, r)5 Merge(A, p, q, r)

Merge, mostrado a seguir, e o algoritmo que intercala os subvetoresordenados A[p . . q] e A[q + 1 . . r].

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 69 / 100

Intercalacao

Merge(A, p, q, r)

1 n1 = q − p + 12 n2 = r − q3 let L[1 . .n1 + 1] and R[1 . .n2 + 1] be new arrays4 for i = 1 to n1

5 L[i] = A[p + i− 1]6 for j = 1 to n2

7 R[j] = A[q + j]8 L[n1 + 1] = inf9 R[n2 + 1] = inf

10 i = 111 j = 112 for k = p to r13 if L[i] ≤ R[j]14 A[k] = L[i]15 i = i + 116 else A[k] = R[j]17 j = j + 1

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 70 / 100

Intercalacao

Merge(A, p, q, r)

1 n1 = q − p + 12 n2 = r − q3 let L[1 . .n1 + 1] and R[1 . .n2 + 1] be new arrays4 for i = 1 to n1

5 L[i] = A[p + i− 1]6 for j = 1 to n2

7 R[j] = A[q + j]8 L[n1 + 1] = inf9 R[n2 + 1] = inf

10 i = 111 j = 112 for k = p to r13 if L[i] ≤ R[j]14 A[k] = L[i]15 i = i + 116 else A[k] = R[j]17 j = j + 1

operacoes

112n1 + 1n1

n2 + 1n2

1111n + 1nnn00

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 71 / 100

Intercalacao

Merge(A, p, q, r)

1 n1 = q − p + 12 n2 = r − q3 let L[1 . .n1 + 1] and R[1 . .n2 + 1] be new arrays4 for i = 1 to n1

5 L[i] = A[p + i− 1]6 for j = 1 to n2

7 R[j] = A[q + j]8 L[n1 + 1] = inf9 R[n2 + 1] = inf

10 i = 111 j = 112 for k = p to r13 if L[i] ≤ R[j]14 A[k] = L[i]15 i = i + 116 else A[k] = R[j]17 j = j + 1

operacoes

1

12n1 + 1n1

n2 + 1n2

1111n + 1nnn00

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 71 / 100

Intercalacao

Merge(A, p, q, r)

1 n1 = q − p + 12 n2 = r − q3 let L[1 . .n1 + 1] and R[1 . .n2 + 1] be new arrays4 for i = 1 to n1

5 L[i] = A[p + i− 1]6 for j = 1 to n2

7 R[j] = A[q + j]8 L[n1 + 1] = inf9 R[n2 + 1] = inf

10 i = 111 j = 112 for k = p to r13 if L[i] ≤ R[j]14 A[k] = L[i]15 i = i + 116 else A[k] = R[j]17 j = j + 1

operacoes

11

2n1 + 1n1

n2 + 1n2

1111n + 1nnn00

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 71 / 100

Intercalacao

Merge(A, p, q, r)

1 n1 = q − p + 12 n2 = r − q3 let L[1 . .n1 + 1] and R[1 . .n2 + 1] be new arrays4 for i = 1 to n1

5 L[i] = A[p + i− 1]6 for j = 1 to n2

7 R[j] = A[q + j]8 L[n1 + 1] = inf9 R[n2 + 1] = inf

10 i = 111 j = 112 for k = p to r13 if L[i] ≤ R[j]14 A[k] = L[i]15 i = i + 116 else A[k] = R[j]17 j = j + 1

operacoes

112

n1 + 1n1

n2 + 1n2

1111n + 1nnn00

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 71 / 100

Intercalacao

Merge(A, p, q, r)

1 n1 = q − p + 12 n2 = r − q3 let L[1 . .n1 + 1] and R[1 . .n2 + 1] be new arrays4 for i = 1 to n1

5 L[i] = A[p + i− 1]6 for j = 1 to n2

7 R[j] = A[q + j]8 L[n1 + 1] = inf9 R[n2 + 1] = inf

10 i = 111 j = 112 for k = p to r13 if L[i] ≤ R[j]14 A[k] = L[i]15 i = i + 116 else A[k] = R[j]17 j = j + 1

operacoes

112n1 + 1

n1

n2 + 1n2

1111n + 1nnn00

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 71 / 100

Intercalacao

Merge(A, p, q, r)

1 n1 = q − p + 12 n2 = r − q3 let L[1 . .n1 + 1] and R[1 . .n2 + 1] be new arrays4 for i = 1 to n1

5 L[i] = A[p + i− 1]6 for j = 1 to n2

7 R[j] = A[q + j]8 L[n1 + 1] = inf9 R[n2 + 1] = inf

10 i = 111 j = 112 for k = p to r13 if L[i] ≤ R[j]14 A[k] = L[i]15 i = i + 116 else A[k] = R[j]17 j = j + 1

operacoes

112n1 + 1n1

n2 + 1n2

1111n + 1nnn00

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 71 / 100

Intercalacao

Merge(A, p, q, r)

1 n1 = q − p + 12 n2 = r − q3 let L[1 . .n1 + 1] and R[1 . .n2 + 1] be new arrays4 for i = 1 to n1

5 L[i] = A[p + i− 1]6 for j = 1 to n2

7 R[j] = A[q + j]8 L[n1 + 1] = inf9 R[n2 + 1] = inf

10 i = 111 j = 112 for k = p to r13 if L[i] ≤ R[j]14 A[k] = L[i]15 i = i + 116 else A[k] = R[j]17 j = j + 1

operacoes

112n1 + 1n1

n2 + 1

n2

1111n + 1nnn00

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 71 / 100

Intercalacao

Merge(A, p, q, r)

1 n1 = q − p + 12 n2 = r − q3 let L[1 . .n1 + 1] and R[1 . .n2 + 1] be new arrays4 for i = 1 to n1

5 L[i] = A[p + i− 1]6 for j = 1 to n2

7 R[j] = A[q + j]8 L[n1 + 1] = inf9 R[n2 + 1] = inf

10 i = 111 j = 112 for k = p to r13 if L[i] ≤ R[j]14 A[k] = L[i]15 i = i + 116 else A[k] = R[j]17 j = j + 1

operacoes

112n1 + 1n1

n2 + 1n2

1111n + 1nnn00

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 71 / 100

Intercalacao

Merge(A, p, q, r)

1 n1 = q − p + 12 n2 = r − q3 let L[1 . .n1 + 1] and R[1 . .n2 + 1] be new arrays4 for i = 1 to n1

5 L[i] = A[p + i− 1]6 for j = 1 to n2

7 R[j] = A[q + j]8 L[n1 + 1] = inf9 R[n2 + 1] = inf

10 i = 111 j = 112 for k = p to r13 if L[i] ≤ R[j]14 A[k] = L[i]15 i = i + 116 else A[k] = R[j]17 j = j + 1

operacoes

112n1 + 1n1

n2 + 1n2

1

111n + 1nnn00

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 71 / 100

Intercalacao

Merge(A, p, q, r)

1 n1 = q − p + 12 n2 = r − q3 let L[1 . .n1 + 1] and R[1 . .n2 + 1] be new arrays4 for i = 1 to n1

5 L[i] = A[p + i− 1]6 for j = 1 to n2

7 R[j] = A[q + j]8 L[n1 + 1] = inf9 R[n2 + 1] = inf

10 i = 111 j = 112 for k = p to r13 if L[i] ≤ R[j]14 A[k] = L[i]15 i = i + 116 else A[k] = R[j]17 j = j + 1

operacoes

112n1 + 1n1

n2 + 1n2

11

11n + 1nnn00

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 71 / 100

Intercalacao

Merge(A, p, q, r)

1 n1 = q − p + 12 n2 = r − q3 let L[1 . .n1 + 1] and R[1 . .n2 + 1] be new arrays4 for i = 1 to n1

5 L[i] = A[p + i− 1]6 for j = 1 to n2

7 R[j] = A[q + j]8 L[n1 + 1] = inf9 R[n2 + 1] = inf

10 i = 111 j = 112 for k = p to r13 if L[i] ≤ R[j]14 A[k] = L[i]15 i = i + 116 else A[k] = R[j]17 j = j + 1

operacoes

112n1 + 1n1

n2 + 1n2

111

1n + 1nnn00

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 71 / 100

Intercalacao

Merge(A, p, q, r)

1 n1 = q − p + 12 n2 = r − q3 let L[1 . .n1 + 1] and R[1 . .n2 + 1] be new arrays4 for i = 1 to n1

5 L[i] = A[p + i− 1]6 for j = 1 to n2

7 R[j] = A[q + j]8 L[n1 + 1] = inf9 R[n2 + 1] = inf

10 i = 111 j = 112 for k = p to r13 if L[i] ≤ R[j]14 A[k] = L[i]15 i = i + 116 else A[k] = R[j]17 j = j + 1

operacoes

112n1 + 1n1

n2 + 1n2

1111

n + 1nnn00

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 71 / 100

Intercalacao

Merge(A, p, q, r)

1 n1 = q − p + 12 n2 = r − q3 let L[1 . .n1 + 1] and R[1 . .n2 + 1] be new arrays4 for i = 1 to n1

5 L[i] = A[p + i− 1]6 for j = 1 to n2

7 R[j] = A[q + j]8 L[n1 + 1] = inf9 R[n2 + 1] = inf

10 i = 111 j = 112 for k = p to r13 if L[i] ≤ R[j]14 A[k] = L[i]15 i = i + 116 else A[k] = R[j]17 j = j + 1

operacoes

112n1 + 1n1

n2 + 1n2

1111n + 1

nnn00

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 71 / 100

Intercalacao

Merge(A, p, q, r)

1 n1 = q − p + 12 n2 = r − q3 let L[1 . .n1 + 1] and R[1 . .n2 + 1] be new arrays4 for i = 1 to n1

5 L[i] = A[p + i− 1]6 for j = 1 to n2

7 R[j] = A[q + j]8 L[n1 + 1] = inf9 R[n2 + 1] = inf

10 i = 111 j = 112 for k = p to r13 if L[i] ≤ R[j]14 A[k] = L[i]15 i = i + 116 else A[k] = R[j]17 j = j + 1

operacoes

112n1 + 1n1

n2 + 1n2

1111n + 1n

nn00

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 71 / 100

Intercalacao

Merge(A, p, q, r)

1 n1 = q − p + 12 n2 = r − q3 let L[1 . .n1 + 1] and R[1 . .n2 + 1] be new arrays4 for i = 1 to n1

5 L[i] = A[p + i− 1]6 for j = 1 to n2

7 R[j] = A[q + j]8 L[n1 + 1] = inf9 R[n2 + 1] = inf

10 i = 111 j = 112 for k = p to r13 if L[i] ≤ R[j]14 A[k] = L[i]15 i = i + 116 else A[k] = R[j]17 j = j + 1

operacoes

112n1 + 1n1

n2 + 1n2

1111n + 1nn

n00

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 71 / 100

Intercalacao

Merge(A, p, q, r)

1 n1 = q − p + 12 n2 = r − q3 let L[1 . .n1 + 1] and R[1 . .n2 + 1] be new arrays4 for i = 1 to n1

5 L[i] = A[p + i− 1]6 for j = 1 to n2

7 R[j] = A[q + j]8 L[n1 + 1] = inf9 R[n2 + 1] = inf

10 i = 111 j = 112 for k = p to r13 if L[i] ≤ R[j]14 A[k] = L[i]15 i = i + 116 else A[k] = R[j]17 j = j + 1

operacoes

112n1 + 1n1

n2 + 1n2

1111n + 1nnn

00

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 71 / 100

Intercalacao

Merge(A, p, q, r)

1 n1 = q − p + 12 n2 = r − q3 let L[1 . .n1 + 1] and R[1 . .n2 + 1] be new arrays4 for i = 1 to n1

5 L[i] = A[p + i− 1]6 for j = 1 to n2

7 R[j] = A[q + j]8 L[n1 + 1] = inf9 R[n2 + 1] = inf

10 i = 111 j = 112 for k = p to r13 if L[i] ≤ R[j]14 A[k] = L[i]15 i = i + 116 else A[k] = R[j]17 j = j + 1

operacoes

112n1 + 1n1

n2 + 1n2

1111n + 1nnn0

0

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 71 / 100

Intercalacao

Merge(A, p, q, r)

1 n1 = q − p + 12 n2 = r − q3 let L[1 . .n1 + 1] and R[1 . .n2 + 1] be new arrays4 for i = 1 to n1

5 L[i] = A[p + i− 1]6 for j = 1 to n2

7 R[j] = A[q + j]8 L[n1 + 1] = inf9 R[n2 + 1] = inf

10 i = 111 j = 112 for k = p to r13 if L[i] ≤ R[j]14 A[k] = L[i]15 i = i + 116 else A[k] = R[j]17 j = j + 1

operacoes

112n1 + 1n1

n2 + 1n2

1111n + 1nnn00

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 71 / 100

Intercalacao

O tempo de execucao do Merge, e aproximadamente n.

Isso vale para o melhor caso e tambem para o pior caso.

A memoria (alem da entrada e da saıda) tambem e aproximadamenten.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 72 / 100

Secoes

CLRS09: capıtulo 3.

Man89: secoes 3.1 a 3.3.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 73 / 100

Classes de funcoes assintoticas

As notacoes O,Ω,Θ, o e ω sao usadas para expressar as simplificacoesfeitas na analise assintotica e para formalizar a nocao de umaaproximacao em funcao do tamanho da entrada.

Cada uma delas define um conjunto (ou classe) de funcoes.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 74 / 100

O

O(g(n)) = f(n) : existem constantes positivas c e n0

tais que 0 ≤ f(n) ≤ cg(n) para todo n ≥ n0

Informalmente, se f(n) ∈ O(g(n)) entao f(n) cresce no maximo taorapidamente quanto g(n).

Se f(n) ∈ O(g(n)) com o mesmo sentido tambem dizemosf(n) = O(g(n)) e f(n) e O(g(n)).

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 75 / 100

Exemplos

Seja f(n) = 6n + 10. Vamos verificar se f(n) = O(n).

Vamos escolher c = 10. Entao

6n + 10 ≤ 10n

n ≥ 10/4

n > 3

Entao para c = 10 e n0 = 3 temos f(n) ≤ cn. Concluımos quef(n) = O(n).

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 76 / 100

Exemplos

Seja f(n) = 6n + 10. Vamos verificar se f(n) = O(n).

Vamos escolher c = 10. Entao

6n + 10 ≤ 10n

n ≥ 10/4

n > 3

Entao para c = 10 e n0 = 3 temos f(n) ≤ cn. Concluımos quef(n) = O(n).

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 76 / 100

ExemplosSeja f(n) = 1

2n2 − 3n. Vamos verificar se f(n) ∈ O(n2).

12n

2 − 3n = 0 tem zeros em n = 0, n = 6 e entao f(n) ≥ 0 se n ≤ 0ou n ≥ 6. Tomando n0 = 7,

1

2n2 − 3n ≤ cn2

1

272 − 3 · 7 ≤ c72

1

249− 21 ≤ 49c

7

2≤ 49c

1

14≤ c

Entao para c = 1/14 e n0 = 7 temos f(n) ≤ cn2. Concluımos quef(n) = O(n2).

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 77 / 100

ExemplosSeja f(n) = 1

2n2 − 3n. Vamos verificar se f(n) ∈ O(n2).

12n

2 − 3n = 0 tem zeros em n = 0, n = 6 e entao f(n) ≥ 0 se n ≤ 0ou n ≥ 6. Tomando n0 = 7,

1

2n2 − 3n ≤ cn2

1

272 − 3 · 7 ≤ c72

1

249− 21 ≤ 49c

7

2≤ 49c

1

14≤ c

Entao para c = 1/14 e n0 = 7 temos f(n) ≤ cn2. Concluımos quef(n) = O(n2).

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 77 / 100

Exemplos

5n2 + 15 = O(n3).

Fazendo c = 6 e n0 = 1, 5n2 + 15 ≤ 6n3 para todo n > 1.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 78 / 100

Exemplos

5n2 + 15 6= O(n) (n 6≤ c−155 ).

n = O(n)

n = O(n2)

n = O(n3)

n = O(nn)

n = O(n2)

Π = O(1)

1080 = O(1)

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 79 / 100

Exemplos

5n2 + 15 6= O(n) (n 6≤ c−155 ).

n = O(n)

n = O(n2)

n = O(n3)

n = O(nn)

n = O(n2)

Π = O(1)

1080 = O(1)

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 79 / 100

Exemplos

5n2 + 15 6= O(n) (n 6≤ c−155 ).

n = O(n)

n = O(n2)

n = O(n3)

n = O(nn)

n = O(n2)

Π = O(1)

1080 = O(1)

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 79 / 100

Exemplos

5n2 + 15 6= O(n) (n 6≤ c−155 ).

n = O(n)

n = O(n2)

n = O(n3)

n = O(nn)

n = O(n2)

Π = O(1)

1080 = O(1)

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 79 / 100

Exemplos

5n2 + 15 6= O(n) (n 6≤ c−155 ).

n = O(n)

n = O(n2)

n = O(n3)

n = O(nn)

n = O(n2)

Π = O(1)

1080 = O(1)

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 79 / 100

Exemplos

5n2 + 15 6= O(n) (n 6≤ c−155 ).

n = O(n)

n = O(n2)

n = O(n3)

n = O(nn)

n = O(n2)

Π = O(1)

1080 = O(1)

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 79 / 100

Exemplos

5n2 + 15 6= O(n) (n 6≤ c−155 ).

n = O(n)

n = O(n2)

n = O(n3)

n = O(nn)

n = O(n2)

Π = O(1)

1080 = O(1)

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 79 / 100

Exemplos

5n2 + 15 6= O(n) (n 6≤ c−155 ).

n = O(n)

n = O(n2)

n = O(n3)

n = O(nn)

n = O(n2)

Π = O(1)

1080 = O(1)

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 79 / 100

Exemplos

5n2 + 15 6= O(n) (n 6≤ c−155 ).

n = O(n)

n = O(n2)

n = O(n3)

n = O(nn)

n = O(n2)

Π = O(1)

1080 = O(1)

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 79 / 100

Ω

Ω(g(n)) = f(n) : existem constantes positivas c e n0

tais que 0 ≤ cg(n) ≤ f(n) para todo n ≥ n0

Informalmente, se f(n) ∈ Ω(g(n)) entao f(n) cresce no mınimo taolentamente quanto g(n).

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 80 / 100

Θ

Θ(g(n)) = f(n) : existem constantes positivas c1, c2 e n0

tais que 0 ≤ c1g(n) ≤ f(n) ≤ c2g(n)para todo n ≥ n0

Informalmente, se f(n) ∈ Θ(g(n)) entao f(n) cresce tao rapidamentequanto g(n).

Se f(n) ∈ O(g(n)) e f(n) ∈ Ω(g(n)) entao f(n) ∈ Θ(g(n)) evice-versa.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 81 / 100

o

o(g(n)) = f(n) : para toda constante positiva c, existeconstante n0 > 0 tal que 0 ≤ f(n) < cg(n),para todo n ≥ n0

Informalmente, se f(n) ∈ o(g(n)) entao f(n) cresce mais lentamenteque g(n).

o representa um limite assintotico superior que nao e apertado.

Se f(n) = o(g(n)) entao f(n) = O(g(n)).

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 82 / 100

Exemplos

Vamos mostrar que 1000n2 ∈ o(n3).Precisamos mostrar que,

0 ≤ 1000n2 < cn3, para todo n ≥ n0.

Dividindo por n3, obtemos a inequacao

0 ≤ 1000

n< c.

1000n e decrescente e se iguala a c quando n = 1000

c . Fazendon0 =

⌈1000c

⌉+ 1 a equacao sempre se verifica para n ≥ n0.

E facil ver que 1000n2 6∈ o(n2).

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 83 / 100

Exemplos

Vamos mostrar que 1000n2 ∈ o(n3).Precisamos mostrar que,

0 ≤ 1000n2 < cn3, para todo n ≥ n0.

Dividindo por n3, obtemos a inequacao

0 ≤ 1000

n< c.

1000n e decrescente e se iguala a c quando n = 1000

c . Fazendon0 =

⌈1000c

⌉+ 1 a equacao sempre se verifica para n ≥ n0.

E facil ver que 1000n2 6∈ o(n2).

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 83 / 100

ω

ω(g(n)) = f(n) : para toda constante positiva c, existe umaconstante n0 > 0 tal que 0 ≤ cg(n) < f(n),para todo n ≥ n0

Informalmente, se f(n) ∈ ω(g(n)), entao f(n) cresce maisrapidamente que g(n).

ω representa um limite assintotico inferior que nao e apertado.

Se f(n) = ω(g(n)) entao f(n) = Ω(g(n)).

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 84 / 100

Melhor, medio, pior

Nao confundir melhor caso com Ω, caso medio com Θ e pior casocom O.

A rigor cada tipo de analise leva a um resultado que pode ser limitadoinferior ou superiormente.

Por exemplo, suponha um algoritmo A com entrada de tamanho nexecuta 3n2 operacoes no pior caso. Exceto quando n e potencia de2, caso em que o algoritmo executa 5n operacoes no pior caso.

Entao podemos dizer que o tempo de execucao de pior caso de A eO(n2) e e Ω(n).

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 85 / 100

Definicoes pelo limite

f(n) ∈ o(g(n)) se limn→∞

f(n)

g(n)= 0

f(n) ∈ O(g(n)) se limn→∞

f(n)

g(n)<∞

f(n) ∈ Θ(g(n)) se 0 < limn→∞

f(n)

g(n)<∞

f(n) ∈ Ω(g(n)) se limn→∞

f(n)

g(n)> 0

f(n) ∈ ω(g(n)) se limn→∞

f(n)

g(n)=∞

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 86 / 100

Regra de L’Hopital

Sejam f e g funcoes diferenciaveis tais quelimn→∞ f(n) = limn→∞ g(n) = 0 ou ±∞. Se o limite def(n)′/g(n)′ existir entao,

limn→∞

f(n)

g(n)= lim

n→∞

f ′(n)

g′(n)

Exemplo: Seja f(n) = lnn e g(n) =√n. Como f ′(n) = 1/n e

g′(n) = 1/2√n,

limn→∞

f(n)

g(n)= lim

n→∞

f ′(n)

g′(n)= lim

n→∞

1/n

1/2√n

= limn→∞

1

2n√n

= 0

Portanto, f(n) = o(g(n)).

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 87 / 100

Propriedades das classes

Transitividade:

Se f(n) ∈ O(g(n)) e g(n) ∈ O(h(n)), entao f(n) ∈ O(h(n))

Se f(n) ∈ Ω(g(n)) e g(n) ∈ Ω(h(n)), entao f(n) ∈ Ω(h(n))

Se f(n) ∈ Θ(g(n)) e g(n) ∈ Θ(h(n)), entao f(n) ∈ Θ(h(n))

Se f(n) ∈ o(g(n)) e g(n) ∈ o(h(n)), entao f(n) ∈ o(h(n))

Se f(n) ∈ ω(g(n)) e g(n) ∈ ω(h(n)), entao f(n) ∈ ω(h(n))

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 88 / 100

Propriedades das classes

Reflexividade:

f(n) ∈ O(f(n))

f(n) ∈ Ω(f(n))

f(n) ∈ Θ(f(n))

Simetria:

f(n) ∈ Θ(g(n)) se e somente se g(n) ∈ Θ(f(n))

Simetria transposta:

f(n) ∈ O(g(n)) se e somente se g(n) ∈ Ω(f(n))

f(n) ∈ o(g(n)) se e somente se g(n) ∈ ω(f(n))

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 89 / 100

Em expressoes

As notacoes podem ser usadas em expressoes quando for conveniente.

Por exemplo,T (n) = T (bn/2c) + O(n)

I(n) = n log n + O(1)

S(n) = 3n3 + n2 + ω(n)

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 90 / 100

Exemplo: Merge-sort

Merge-Sort(A, p, r)

1 if p < r2 q = b(p + r)/2c3 Merge-Sort(A, p, q)4 Merge-Sort(A, q + 1, r)5 Merge(A, p, q, r)

Ja vimos que Merge faz 3n + 11 operacoes no pior caso para umaentrada de tamanho n. Entao e Θ(n).

O tempo de execucao de algoritmos recursivos como o merge-sortpode ser expresso por uma relacao de recorrencia, uma formuladefinida em termos dela mesma.

Vamos denotar o tempo de execucao do merge-sort para uma entradade tamanho n por T (n).

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 91 / 100

Tempo de execucao do Merge-sort

Merge-Sort(A, p, r)

1 if p < r2 q = b(p + r)/2c3 Merge-Sort(A, p, q)4 Merge-Sort(A, q + 1, r)5 Merge(A, p, q, r)

operacoes

Θ(1)Θ(1)T (dn/2e)T (bn/2c)Θ(n)

Somando temos T (n) = T (dn/2e) + T (bn/2c) + Θ(n) + Θ(2).

A recorrencia e

T (n) =

Θ(1) se n = 1T (dn/2e) + T (bn/2c) + Θ(n) c.c.

Resolvendo a recorrencia, obtemos T (n) = Θ(n log n).

A resolucao de recorrencias e um dos proximos assuntos.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 92 / 100

Exemplo: busca sequencial

Sequential-Search(A, k)

1 A[|A|+ 1] = k2 i = 13 while (true)4 if A[i] == k5 if i ≤ |A|6 return i7 else8 return 09 i = i + 1

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 93 / 100

Exemplo: busca sequencial

Quais os tempos de execucao de melhor e de pior caso em funcao dotamanho da entrada?

Qual o tempo de execucao de caso medio se todas as chaves tem amesma probabilidade de serem selecionadas?

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 94 / 100

Exemplo: busca binaria

Binary-Search(A, l, r, k)

1 if l > r2 return 03 m = b(l + r)/2c4 if A[m] == k5 return m6 elseif k < A[m]7 return Binary-Search(A, l,m− 1, k)8 else9 return Binary-Search(A,m + 1, r, k)

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 95 / 100

Busca binaria

Qual o tempo de execucao de pior caso em funcao do tamanho daentrada?

A cada passo a busca realiza trabalho constante e divide a entradaem partes de tamanho dn−12 e e bn−12 cA recorrencia para o pior caso e T (n) = T (dn−12 e) + c.

O algoritmo e O(lg n) no pior caso.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 96 / 100

Busca binaria

Qual o tempo de execucao de pior caso em funcao do tamanho daentrada?

A cada passo a busca realiza trabalho constante e divide a entradaem partes de tamanho dn−12 e e bn−12 cA recorrencia para o pior caso e T (n) = T (dn−12 e) + c.

O algoritmo e O(lg n) no pior caso.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 96 / 100

Exemplo: count

Count(x)

1 k = 12 for i = 1 to x3 k = k + 14 return k

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 97 / 100

Exemplo: count

Qual o tempo de execucao de pior caso em funcao do tamanho daentrada?

O tamanho da entrada n e o menor numero de bits na representacaode x. Entao 2n−1 ≤ x < 2n.

No pior caso, a linha 3 e executada O(2n) vezes.

Dizer que o algoritmo e O(x) e um abuso da notacao, ja que otamanho da entrada nao e x.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 98 / 100

Exemplo: count

Qual o tempo de execucao de pior caso em funcao do tamanho daentrada?

O tamanho da entrada n e o menor numero de bits na representacaode x. Entao 2n−1 ≤ x < 2n.

No pior caso, a linha 3 e executada O(2n) vezes.

Dizer que o algoritmo e O(x) e um abuso da notacao, ja que otamanho da entrada nao e x.

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 98 / 100

Exemplo: pairing

Pairing(A,B)

1 c = 02 for i = 1 to n3 for j = 1 to m4 if A[i] == B[j]5 c = c + 16 break7 if c == n8 return 19 else

10 return 0

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 99 / 100

Exemplo: pairing

Qual o tempo de execucao de pior caso em funcao do tamanho daentrada?

T (n,m) = Θ(nm).

T (n,m) 6= O(n2), T (n,m) 6= O(m2), T (n,m) 6= Ω(n2),T (n,m) 6= Ω(m2).

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 100 / 100

Exemplo: pairing

Qual o tempo de execucao de pior caso em funcao do tamanho daentrada?

T (n,m) = Θ(nm).

T (n,m) 6= O(n2), T (n,m) 6= O(m2), T (n,m) 6= Ω(n2),T (n,m) 6= Ω(m2).

G.P. Telles (IC–UNICAMP) Algoritmos I 13 de agosto de 2015 100 / 100