ANÁLISE DE ALGORITMOS

Tamanho: px
Começar a partir da página:

Download "ANÁLISE DE ALGORITMOS"

Transcrição

1 ANÁLISE DE ALGORITMOS pf/analise de algoritmos/ Paulo Feofiloff Transparências baseadas no Introduction to Algorithms de Cormen, Leiserson, Rivest, Stein A análise de algoritmos é uma disciplina de engenharia. Um engenheiro civil, por exemplo, tem métodos e tecnologia para prever o comportamento de uma estrutura antes de constui-la. Da mesma forma, um projetista de algoritmos deve ser capaz de prever o comportamento de um algoritmo antes de implementá-lo. CLRS = Cormen, Leiserson, Rivest, Stein, Introduction to Algorithms AU = Aho, Ullman, Foundations of Computer Science 1

2 AULA 1 Piso, teto, log etc. CLRS 3.2, A.1 AU 2.9 2

3 Definições x := inteiro i tal que i x < i + 1 x := inteiro j tal que j 1 < x j Exercício 1.A Desenhe os gráficos das funções x e x para x não-negativo. Exercício 1.B Mostre que n n 1 n e para qualquer inteiro n 1. n 2 n 2 n Exercício 1.C É verdade que x + y = x + y para quaisquer x e y? Exercício 1.D Desenhe os gráficos das funções lg x e 2 x para x inteiro não-negativo. 3

4 Exercício 1.E Explique o significado da expressão log 3/2 n. Exercício 1.F Calcule 5 log 5 n, log 3 3 n e lg2 n. Exercício 1.G Qual a relação entre log 8 n e log 2 n? Exercício 1.H Se i := lg n, qual a relação entre n e 2 i? Se j := lg n, qual a relação entre n e 2 j? Exercício 1.I É verdade que lg n + 1 = lg(n + 1) para todo inteiro n 1? Exercício 1.J Escreva um algoritmo que calcule lg n. 4

5 TAREFA 1 Exercício 1.L Mostre que para qualquer número real x tem-se x 1 < x x x < x + 1. Exercício 1.M Mostre que n/2 + n/2 = n para todo inteiro positivo n. Exercício 1.N Mostre que x + y x + y, com igualdade se e somente se x + y 1 < x + y. Encontre uma fórmula análoga para. Exercício 1.O Se c é inteiro e x é racional, é verdade que cx = c x? Exercício 1.P Use a notação para representar o resto da divisão de n por 7. Exercício 1.Q É verdade que 2 2n/3 /3 = 4n/9? É verdade que 2 2n/3 /3 = 4n/9? Exercício 1.R É verdade que n/2 /2 = n/4? Exercício 1.S Se n, a, b são inteiros positivos, é verdade que n/a /b = n/ab? Exercício 1.T É verdade que lg n lg(n 1) para todo inteiro n 2? É verdade que lg n lg(n + 1) para todo inteiro n 1? Exercício 1.U Prove que para qualquer número racional x > 1 tem-se lg x lg x lg x lg x lg x Exercício 1.V Quanto vale 1/2 + 1/4 + 1/ /2 n +? 5

6 AULA 2 Introdução à AA CLRS AU 3.3, 3.6 6

7 Exercício 2.A Quanto vale S no fim do algoritmo? 1 S 0 2 para i 2 até n 2 faça 3 para j i até n faça 4 S S + 1 Escreva um algoritmo mais eficiente que tenha o mesmo efeito. Solução Se n 4 então no fim da execução das linhas 1 4, S = (n 1) + (n 2) = (n 3)(n + 2)/2 = 1 2 n2 1 2 n 3. 7

8 Análise da ordenação por inserção Algoritmo rearranja A[1.. n] em ordem crescente (A[1.. n] é crescente se A[1] A[n]) ORDENA-POR-INSERÇÃO (A, n) 1 para j 2 até n faça 2 chave A[j] 3 i j 1 4 enquanto i 1 e A[i] > chave faça 5 A[i + 1] A[i] 6 i i 1 7 A[i + 1] chave O algoritmo faz o que promete? Invariante: antes de cada execução do bloco de linhas 2 7, A[1.. j 1] é crescente 1 j n Prove! 8

9 Quantas atribuições ( ) algoritmo faz? 3 i j 1 2 j n 4 enquanto i 1 e A[i] > chave faça 5 A[i + 1] A[i] 6 i i 1 linha atribuições j 1 n 1 6 n n 1 9

10 1 para j 2 até n faça j j + 1 escondido 2 chave A[j] 3 LINHAS A[i + 1] chave linha atribuições 1 n n (n 1)(2n 1) 7 n 1 total 2n

11 Análise mais fina do número de atribuições: linha atribuições 1 n n 1 3 n (n 1) = n(n 1)/ (n 1) = n(n 1)/2 7 n 1 total n 2 + 3n 3 n n 2 + 3n 3 n n 2 domina os outros termos 11

12 Exercício 2.B Se cada linha de código consome 1 unidade de tempo, qual o consumo total? 1 para j 2 até n faça 2 chave A[j] 3 i j 1 4 enquanto i 1 e A[i] > chave faça 5 A[i + 1] A[i] 6 i i 1 7 A[i + 1] chave Solução linha todas as execuções da linha 1 n 2 n 1 3 n n = (n 1)(n + 2)/ (n 1) = n(n 1)/ (n 1) = n(n 1)/2 7 n 1 total 3 2 n n 4 12

13 TAREFA 2 Exercício 2.C (bom!) Quanto vale S no fim do seguinte algoritmo? 1 S 0 2 i n 3 enquanto i > 0 faça 4 para j 1 até i faça 5 S S i i/2 Exercício 2.D Prove o invariante do algoritmo ORDENA-POR-INSERÇÃO. Exercício 2.E Quantas comparações faz o algoritmo ORDENA-POR-INSERÇÃO, no pior caso, ao receber um vetor A[1.. n]? Exercício 2.F Quantas atribuições faz o algoritmo abaixo? s 0 para i 1 até n faça s s + i devolva s Escreva um algoritmo melhorado que produza o mesmo efeito com menos atribuições. Exercício 2.G (AU 3.7.1) O algoritmo abaixo opera sobre um vetor A[1.. n]. Quantas atribuições ele faz no pior caso? Quantas comparações? 1 s 0 2 para i 1 até n faça 3 s s + A[i] 4 m s/n 5 k 1 6 para i 2 até n faça 7 se (A[i] m) 2 < (A[k] m) 2 8 então k i 9 devolva k 13

14 Exercício 2.H (AU 3.7.2) O fragmento abaixo opera sobre uma matriz A[1.. n, 1.. n]. Quantas atribuições faz? 1 para i 1 até n 1 faça 2 para j i + 1 até n faça 3 para k i até n faça 4 A[j, k] A[j, k] A[i, k] A[j, i]/a[i, i] Exercício 2.I (AU 3.7.3*) Quantas atribuições faz o algoritmo? SumPowersOfTwo (n) 1 s 0 2 para i 1 até n faça 3 j i 4 enquanto 2 j/2 = j faça 5 j j/2 6 s s devolva s 14

15 AULA 3 Análise assintótica Notação O CLRS 3.1 AU 3.4, p (muito bom!) 15

16 Funções de n: 5n 2 9n 4n + 8 n/ n n 3 log n Qual é maior: n 2 9 ou 4n + 8? Qual cresce mais? Comparação assintótica (i.e., para n grande) O(f(n)) funções q não crescem mais rápido que f(n) funções menores ou iguais a um múltiplo de f(n) n n é O(n 2 ) 33n 2 é O(n 2 ) 9n + 2 é O(n 2 ) 0,00001n 3 200n 2 não é O(n 2 ) 16

17 Definição T(n) = O(f(n)) se existem c e n 0 positivos tais que para todo n n 0. 0 T(n) c f(n) Mais informal: T(n) = O(f(n)) se existe c > 0 tq 0 T(n) c f(n) para todo n suficientemente grande. T(n) = O(f(n)) deve ser entendido como T(n) O(f(n)) Exemplo Se T(n) 500f(n) para todo n 10 então T(n) = O(f(n)) Exemplo 10n 2 = O(n 3 ) Prova: Para n 0, temos 0 10n 2 10 n 3 Outra prova: Para n 10, temos 0 10n 2 n n 2 = n 3 17

18 Exercício 3.A Prove que n n + 20 = O(n 2 ) Exercício 3.B Prove que 300 = O(1) Exercício 3.C Prove que n/3 = O(n) É verdade que n = O( n/3 )? Exercício 3.D Prove que lg n = O(log 10 n) Exercício 3.E Prove que n = O(2 n ) Exercício 3.F Prove que lg n = O(n) Exercício 3.G Prove que n/1000 não é O(1) Exercício 3.H Prove que 1 2 n2 não é O(n) 18

19 Exercício 3.I Suponha T definida para n = 0,1,... Se T(n) = O(1), mostre que existe c tal que T(n) c para todo n 0. Se T(n) = O(n), mostre que existe c tal que T(n) c n para todo n 1. 19

20 TAREFA 3 Exercício 3.J Prove que n n = O(n 2 ). Exercício 3.K Prove que 1 2 n(n + 1) = O(n2 ). Exercício 3.L É verdade que n2 999n 9999 = O(n)? Justifique. Exercício 3.M Suponha que f(n) = n 2 quando n é par e f(n) = n 3 quando n é ímpar. É verdade que f(n) = O(n 2 )? É verdade que f(n) = O(n 3 )? É verdade que n 2 = O(f(n))? É verdade que n 3 = O(f(n))? Exercício 3.N É verdade que n 2 = O(2 n )? Exercício 3.O É verdade que lg n = O( n)? Exercício 3.P Suponha f(n) = 64nlg n e g(n) = 8n 2, com n inteiro positivo. Para que valores de n temos f(n) g(n)? Exercício 3.Q (bom!) Suponha T e f definidas para n = 1,2,... Mostre que se T(n) = O(f(n)) e f(n) > 0 para n 1 então existe c tal que T(n) c f(n) para todo n 1. Exercício 3.R (bom!) Faz sentido dizer T(n) = O(n 2 ) para n 3? 20

21 TAREFA ADICIONAL Exercício 3.S É verdade que 2 n = O(n)? É verdade que n = O(lg n)? Justifique. Exercício 3.T É verdade que n + n é O(n)? É verdade que n é O( n)? É verdade que n 2/3 é O( n)? É verdade que n é O(n)? Exercício 3.U É verdade que lg n = O(n 1/2 )? É verdade que n = O(lg n)? É verdade que lg n = O(n 1/3 )? Justifique. (Sugestão: prove, por indução, que lg x x para todo número real x 1.) Exercício 3.V É verdade que lg n = O(lg n)? 21

22 AULA 4 Análise de algoritmos iterativos CLRS AU 3.3, 3.6 (muito bom) 22

23 Análise com notação O ORDENA-POR-INSERÇÃO (A, p, r) 1 para j p + 1 até r faça 2 chave A[j] 3 i j 1 4 enquanto i p e A[i] > chave faça 5 A[i + 1] A[i] 6 i i 1 7 A[i + 1] chave Quanto tempo o algoritmo consome? Tamanho de uma instância: n := r p + 1 linha consumo de todas as execuções da linha 1 O(n) 2 O(n) 3 O(n) 4 no(n) = O(n 2 ) 5 no(n) = O(n 2 ) 6 no(n) = O(n 2 ) 7 O(n) total O(3n 2 + 4n) = O(n 2 ) 23

24 Explicação: Bloco de linhas 4 6 é executado n vezes; cada execução consome O(n); todas juntas consomem no(n). Êpa! Quem garante que no(n) = O(n 2 )? Quem garante que O(n 2 ) + O(n 2 ) + O(n 2 ) = O(3n 2 )? Quem garante que O(3n 2 + 4n) = O(n 2 )? Veja exercícios na próxima aula. Conclusão: O algoritmo consome O(n 2 ) unidades de tempo Notação O cai como uma luva! 24

25 Análise da intercalação Dados A[p.. q] e A[q+1.. r] crescentes, rearranjar A[p.. r] em ordem crescente. Para que valores de q o problema faz sentido? p q r A B INTERCALA (A, p, q, r) 00 crie vetor B[p.. r] 01 para i p até q faça 02 B[i] A[i] 03 para j q + 1 até r faça 04 B[r + q + 1 j] A[j] 05 i p 06 j r 07 para k p até r faça 08 se B[i] B[j] 09 então A[k] B[i] 10 i i senão A[k] B[j] 12 j j 1 25

26 00 crie vetor B[p.. r] 01 para i p até q faça 02 B[i] A[i] 03 para j q + 1 até r faça 04 B[r + q + 1 j] A[j] 05 i p 06 j r 07 para k p até r faça 08 se B[i] B[j] 09 então A[k] B[i] 10 i i senão A[k] B[j] 12 j j 1 Quanto tempo consome em função de n := r p + 1? linha consumo de todas as execuções da linha 00 O(n) O(n) O(1) 07 no(1) = O(n) 08 no(1) = O(n) no(1) = O(n) Consumo total = O(5n + 1) = O(n) 26

27 TAREFA 4 Exercício 4.A Problema: rearranjar um vetor A[p.. r] em ordem crescente. Escreva um algoritmo de seleção para o problema. Analise a correção do algoritmo (ou seja, encontre e prove os invariantes apropriados). Analise o consumo de tempo do algoritmo; use notação O. Exercício 4.B Analise a correção e o consumo de tempo do seguinte algoritmo: EXERC (A, p, r) 1 q (p + r)/2 2 ORDENA-POR-INSERÇÃO(A, p, q) 3 ORDENA-POR-INSERÇÃO(A, q + 1, r) 4 INTERCALA(A, p, q, r) 27

28 AULA 5 Mais notação O CLRS 3.1 AU 3.5, p

29 Exercício 5.A Interprete e prove a afirmação O(n 2 ) + O(n 2 ) + O(n 2 ) = O(3n 2 ). Exercício 5.B Interprete e prove a afirmação no(n) = O(n 2 ). Exercício 5.C Interprete e prove a afirmação O(3n 2 + 4n) = O(n 2 ). Exercício 5.D (propriedade transitiva) Suponha T(n) = O(f(n)) e f(n) = O(g(n)). Mostre que T(n) = O(g(n)). Dê um exemplo interessante. Exercício 5.E (regra da soma, caso especial) Suponha que T(n) = O(f(n)) e mostre que T(n) + f(n) = O(f(n)). Dê um exemplo interessante. 29

30 Exercício 5.E (regra da soma, geral) Suponha T 1 (n) = O(f 1 (n)) e T 2 (n) = O(f 2 (n)). Se f 1 (n) = O(f 2 (n)), mostre que T 1 (n) + T 2 (n) = O(f 2 (n)). Exercício 5.F O que significa T(n) = n 2 + O(n)? Mostre que se T(n) = n 2 + O(n) então T(n) = O(n 2 ). 30

31 TAREFA 5 Exercício 5.G O que significa T(n) = no(lg n)? Mostre que T(n) = no(lg n) se e só se T(n) = O(nlg n). Exercício 5.H Interprete e prove a afirmação 7 O(n) = O(n). Exercício 5.I Interprete e prove a afirmação O(n) + O(n) = O(n). Exercício 5.J Prove que O(n) = O(n 2 ). É verdade que O(n 2 ) = O(n)? Exercício 5.K Interprete e prove a afirmação (n + 2) O(1) = O(n). Exercício 5.L Interprete e prove a afirmação O(1) + + O(1) = O(n). }{{} n+2 Exercício 5.M Prove que O(1) + O(1) + O(1) = O(1). É verdade que O(1) = O(1) + O(1) + O(1)? Exercício 5.N Interprete e prove a afirmação O(f) + O(g) = O(f + g). 31

32 AULA 6 Cotas inferiores: notação Ω CLRS

33 Definição T(n) = Ω(f(n)) se existem c e n 0 positivos tq para todo n n 0 0 c f(n) T(n) Mais informal: T(n) = Ω(f(n)) se existe c > 0 tq 0 cf(n) T(n) para todo n suficientemente grande. Exemplo: Se T(n) 0.001n 2 para todo n 8 então T(n) = Ω(n 2 ). Exemplo: INTERCALA é O(n) e também Ω(n). Fácil: T = Ω(f) f = O(T) Definição T = Θ(f) T = O(f) e T = Ω(f) 33

34 Alguns nomes de classes Θ: Θ(1) constante Θ(log n) logarítmica Θ(n) linear Θ(nlog n) nlog n Θ(n 2 ) quadrática Θ(n 3 ) cúbica Θ(2 n ) exponencial Exercício 6.A Já sabemos que ORDENA-POR-INSERÇÃO é O(n 2 ). Mostre que o algoritmo é Ω(n). Exercício 6.B Mostre que ORDENA-POR-INSERÇÃO é Ω(n 2 ) no pior caso. Exercício 6.C Mostre que ORDENA-POR-INSERÇÃO é O(n) no melhor caso. 34

35 TAREFA 6 Exercício 6.D Prove que n n + 20 = Ω(n 2 ). Prove que n 2 10n 20 = Θ(n 2 ). Exercício 6.E Prove que n = Ω(lg n). Exercício 6.F Prove que lg n = Θ(log 10 n). Exercício 6.G É verdade que 2 n = Ω(3 n )? Exercício 6.H É verdade que 2n n = Θ(n 3 )? Exercício 6.I Suponha que os algoritmos A e B só dependem de um parâmetro n. Suponha ainda que A consome S(n) unidades de tempo enquanto B consome T(n) unidades de tempo. Quero provar que algoritmo A é pelo menos tão eficiente quanto o algoritmo B (no sentido assintótico). Devo mostrar que existe f(n) tal que S(n) = O(f(n)) e T(n) = O(f(n))? S(n) = O(f(n)) e T(n) = Ω(f(n))? S(n) = Ω(f(n)) e T(n) = O(f(n))? S(n) = Ω(f(n)) e T(n)Ω(f(n))? Que devo fazer para mostrar que A é mais eficiente que B? Exercício 6.J Mostre que o consumo de tempo do algoritmo INTERCALA é Θ(n), sendo n o número de elementos do vetor que o algoritmo recebe. 35

36 AULA 7 Recursão AU 2.6, 2.7,

37 Recursão: resolve uma instância do problema a partir das soluções de instâncias menores "To understand recursion, we must first understand recursion. Exercício 7.A Problema: verificar se v é elemento de A[p.. r]. (Para q valores de p e r faz sentido?) Escreva algoritmo recursivo. Exercício 7.B Problema: verificar se v é elemento de vetor crescente A[p.. r]. Escreva algoritmo recursivo de busca linear e outro de busca binária. Exercício 7.C Escreva versão recursiva da ordenação por inserção. 37

38 TAREFA 7 Exercício 7.D (Versão sofisticada de busca) Problema: verificar se v é elemento de vetor crescente A[p.. r]. Escreva um algoritmo que devolva j tal que A[j] v < A[j + 1]. Quais os possíveis valores de j? Escreva duas versões: uma linear e uma binária. Prove que os seus algoritmos estão corretos. Exercício 7.E Escreva uma versão recursiva do algoritmo de ordenação por seleção. 38

39 AULA 8 Recorrências CLRS AU 3.9,

40 Recorrência = = fórmula que define uma função em termos d ela mesma = algoritmo recursivo que calcula uma função Exemplo 1 T(1) = 1 T(n) = T(n 1) + 3n + 2 para n = 2,3,4,... Define função T sobre inteiros positivos: n T(n)

41 Resolver uma recorrência = = obter uma fórmula fechada para T(n) Método da substituição: chute fórmula e verifique por indução Exemplo 1 (continuação) Eu acho que T(n) = 3 2 n n 4. Verificação: Se n = 1 então T(n) = 1 = Tome n 2 e suponha que a fórmula está certa para n 1: T(n) = T(n 1) + 3n + 2 Bingo! hi = 3 2 (n 1) (n 1) 4 + 3n + 2 = 3 2 n2 3n n n + 2 = 3 2 n n 4. 41

42 Como adivinhei fórmula fechada? Árvore da recorrência: T(n) 3n+2 3n+2 3n+2 3n+2 T(n 1) 3(n 1)+2 3n 1 3n 1 T(n 2) 3(n 2)+2 3n 4 T(n 3). 8 T(1) 1 + n 1 níveis T(n) = (3n + 2) + (3n 1) T(1) = 3 2 n n 4 42

43 Exemplo 2 T(1) = 1 T(n) = 2T(n/2) + 7n + 2 para n = 2,3,4,5,... Não é uma recorrência! Não faz sentido! Exemplo 3 G(1) = 1 G(n) = 2G(n/2) + 7n + 2 para n = 2,4,..,2 i,.. n G(n) Fórmula fechada: G(n) =? 43

44 Acho que G é da forma nlg n n G(n) 6nlg n 7nlg n 8nlg n n

45 Acho que a fórmula fechada é para n = 1,2,4,8,16,... G(n) = 7nlg n + 3n 2 Prova: Se n = 1 então G(n) = 1 = 7 1lg Se n 2 então Bingo! G(n) = 2G( n 2 ) + 7n + 2 hi = 2(7 n 2 lg n n 2 2) + 7n + 2 = 7n(lg n 1) + 3n 4 + 7n + 2 = 7nlg n 7n + 3n 2 + 7n = 7nlg n + 3n 2 45

46 Como adivinhei fórmula fechada? Árvore da recorrência: G(n) 7n + 2 / \ G( n 2 ) G(n 2 ) 7n + 2 / \ 7 n n / \ / \ G( n 4 ) G(n 4 ) G(n 4 ) G(n 4 ) 7n + 2 / \ 7 n n / \ / \ 7 n n n n G(1) G(1) G(1) G(1) total de 1 + lg n níveis 46

47 nível soma no nível 0 7n n n k 1 7n + 2 k k 2 k G(1) n = 2 k G(n) = 7n n n + 2 lg n + 2 lg n G(1) = 7nlg n + ( lg n ) + 2 lg n = 7nlg n lg n 2 + n = 7nlg n + 2n 2 + n = 7nlg n + 3n 2 Lembrete: x x k = xk+1 1 x 1 CLRS (A.5), p

48 Exemplo 3 (continuação) É mais fácil mostrar que G(n) = O(n lg n). Vou provar que G(n) 9nlg n quando n = 2,4,8,16,..,2 i,... Prova: Se n = 2, G(n) = 18 = 9 2 lg2. Se n 4, G(n) = 2G(n/2) + 7n + 2 hi 2 9(n/2)lg(n/2) + 7n + 2 = 9n(lg n 1) + 7n + 2 = 9nlg n 2n + 2 < 9nlg n (pois n > 1) Da linha 1 para a linha 2, a hipótese de indução vale pois 2 n/2 < n. 48

49 TAREFA 8 Exercício 8.A Seja T a função definida pela recorrência T(1) = 1 T(n) = T(n 1) + 2n 2 para n = 2,3,4,5,... Verifique que a recorrência é honesta, ou seja, de fato define uma função. A partir da árvore da recorrência, adivinhe uma boa cota assintótica para T(n); dê a resposta em notação O. Prove a cota pelo método da substituição. Exercício 8.B Resolva a recorrência T(1) = 1 T(n) = T(n 2) + 2n + 1 para n = 2,3,4,5,... Desenhe a árvore da recorrência. Dê a resposta em notação O. Exercício 8.C Resolva a recorrência T(1) = 1 T(2) = 2 T(n) = T(n 2) + 2n + 1 para n = 3,4,5,6,... Exercício 8.D Resolva a recorrência Exercício 8.E Resolva a recorrência Exercício 8.F Resolva a recorrência T(1) = 1 T(n) = T(n/2) + 1 para n = 2,3,4,5,... T(1) = 1 T(n) = T( n/2 ) + 1 para n = 2,3,4,5,... T(1) = 1 T(n) = T( n/2 ) + n para n = 2,3,4,5,... 49

50 Exercício 8.G Resolva a recorrência T(1) = 1 T(n) = 2T( n/2 ) + n para n = 2,3,4,5,... Exercício 8.H Resolva a recorrência T(1) = 1 T(n) = 2T( n/2 ) + n para n = 2,3,4,5,... 50

51 AULA 9 Recorrências com notação O CLRS AU 3.9,

52 Classe O da solução de uma recorrência Não faço questão de solução exata: basta solução aproximada Exemplo (n é potência de 2): G(1) = 1 G(n) = 2G(n/2) + 7n + 2 para n 2 Solução exata (n é potência de 2): G(n) = 7nlg n + 3n 2 Solução aproximada: G(n) = O(nlg n) Em geral, é mais fácil obter e provar solução aproximada que solução exata 52

53 Dica prática (sem prova) A solução da recorrência T(1) = 1 T(n) = 2T( n/2 ) + 7n + 2 para n = 2,3,4,5,.. está na mesma classe Θ que a solução de T (1) = 1 T (n) = 2T (n/2) + n para n = 2 1,2 2,2 3,... e na mesma classe Θ que a solução de T (4) = 10 T (n) = 2T (n/2) + n para n = 2 3,2 4,2 5,... 53

54 Recorrências com O do lado direito A recorrência T(n) = 2T(n/2) + O(n) representa todas as recorrências da forma T(n) = 2T(n/2) + F(n) em que F(n) = O(n) Melhor: representa todas as recorrências do tipo T (n) = a para n = n 0 1 T (n) 2T ( n/2 ) + cn para n n 0 quaisquer que sejam a, c > 0 e n 0 > 0 (poderíamos tomar n 0 = 1; veja ex 3.I) Também representa todas as do tipo T (n) = a para n = 2 k 1 T (n) 2T (n/2) + cn para n = 2 k,2 k+1,... quaisquer que sejam a, c > 0 e k > 0 As soluções exatas vão depender de a, c, n 0, k; mas todas estarão na mesma classe O (especificamente, em O(n lg n)) 54

55 Dicas práticas recorrência condição solução T(n) = T(n 1) + 4n 3 Θ(n 3+1 ) T(n) = 6T(n 1) + 4n 3 Θ(6 n ) T(n) = at(n/5) + 4n 3 a < 5 3 Θ(n 3 ) T(n) = at(n/5) + 4n 3 a = 5 3 Θ(n 3 log n) T(n) = at(n/5) + 4n 3 a > 5 3 Θ(n log a 5 ) Veja AU, sec 3.11, p.151 A mesma coisa, escrita de maneira um pouco diferente (Master Theorem, CLRS, sec. 4.3, p.73): Suponha T(n) = at(n/5) + f(n) para algum a 1. Então, em geral, se f(n) = O(n log a ǫ 5 ) então T(n) = Θ(n log a 5 ) se f(n) = Θ(n log a 5 ) então T(n) = Θ(n log a 5 lg n) se f(n) = Ω(n log a+ǫ 5 ) então T(n) = Θ(f(n)) para qquer ǫ > 0 No lugar de n/5, posso escrever n/5 ou n/5 5, posso escrever qualquer b > 1 4, posso escrever qualquer número real 4n 3 posso escrever qualquer polinômio de grau 3 3, posso escrever qualquer inteiro k 0 6, posso escrever qualquer número a > 1 55

56 TAREFA 9 Exercício 9.A A que classe O pertencem as solução de recorrência do tipo T(n) = T(n/3) + O(1)? Exercício 9.Aa Seja T a função definida pela recorrência T(1) = 1 T(n) = 4T( n/2 ) + n para n = 2,3,4,5,... A que ordem Θ pertence T? Exercício 9.B [CLRS 4.2-1] Seja T a função definida pela recorrência T(1) = 1 T(n) = 3T( n/2 ) + n para n = 2,3,4,5,... A partir da árvore da recorrência, adivinhe a que classe Θ pertence T(n). Prove a cota pelo método da substituição. Exercício 9.C Resolva a recorrência T(1) = 1 T(n) = 2T( n/2 ) + 7n + 2 para n = 2,3,4,5,... Exercício 9.D Resolva a recorrência T(n) = T(n 2) + O(n). Exercício 9.E Resolva a recorrência T(n) = 5T(n 1) + O(n). 56

57 AULA 10 Análise de algoritmos recursivos CLRS 2.3 AU 2.8, 3.9,

58 Exemplo 1: Ordenação por inserção Rearranja A[p.. r], com p r, em ordem crescente ORDENA-POR-INS (A, p, r) 1 se p < r 2 então ORDENA-POR-INS(A, p, r 1) 3 chave A[r] 4 i r 1 5 enquanto i p e A[i] > chave faça 6 A[i + 1] A[i] 7 i i 1 8 A[i + 1] chave O algoritmo está correto? T(n) := consumo de tempo máximo quando r p + 1 = n linha consumo na linha 1 O(1) 2 T(n 1) 3 O(1) 4 O(1) 5 O(n) 6 O(n) 7 O(n) 8 O(1) T(n) = T(n 1) + O(3n + 4) 58

59 T(n) = T(n 1) + O(n) Tradução: existe fção F(n) em O(n) tq T(n) = T(n 1) + F(n) para todo n suficientemente grande Mais tradução: Existem a, c > 0 e n 0 > 0 tq T(n 0 1) = a e T(n) T(n 1) + cn para todo n n 0 (em virtude do ex 3.I poderíamos tomar n 0 = 0) Solução: T(n) = O(n 2 ) Prova? Exemplo: T(1) = 1 T(n) = T(n 1) + 3n + 4 para n 2 Solução: T(n) 4n 2 para n 1 Prova? 59

60 Exemplo 2: Merge-Sort Rearranja A[p.. r], com p r, em ordem crescente. MERGE-SORT (A, p, r) 1 se p < r 2 então q (p + r)/2 3 MERGE-SORT(A, p, q) 4 MERGE-SORT(A, q + 1, r) 5 INTERCALA(A, p, q, r) p q r O algoritmo está correto? T(n) := consumo de tempo máximo quando r p + 1 = n linha consumo na linha 1 O(1) 2 O(1) 3 T( n/2 ) 4 T( n/2 ) 5 O(n) T(n) = T( n/2 ) + T( n/2 ) + O(n + 2) 60

61 T(n) = T( n/2 ) + T( n/2 ) + O(n) Solução: T(n) = O(nlg n). Prova? 61

62 AULA 11 Heapsort CLRS 6 (veja tb CLRS B.5.3) 62

63 Heap sort Rearranja A[1.. n] em ordem crescente. HEAPSORT (A, n) 1 BUILD-MAX-HEAP(A, n) 2 para m n decrescendo até 2 3 faça A[1] A[m] 4 MAX-HEAPIFY(A, m 1, 1) 1 m n Invariante: no início de cada execução de 2 4, A[m+1.. n] grandes, ordem crescente A[1.. m] pequenos, max-heap 63

64 Estrutura de heap A[1..29] filho esquerdo de i 2i filho direito de i 2i + 1 pai de i i/2 nível de i lg i (nível p tem 2 p nós) altura de i lg m i raiz (i = 1) nível = 0 folha altura = 0 A[1.. m] é um max-heap se A[ i 2 ] A[i] para cada nó i. 64

65 Exercício 11.A CLRS A altura de i em A[1.. m] é o comprimento da mais longa seqüência da forma f(i), f(f(i)), f(f(f(i))),..., onde f(i) vale 2i ou 2i + 1. Mostre que a altura de i é lg m i 65

66 Exercício 11.B CLRS Mostre que um heap A[1.. m] tem no máximo m/2 h+1 nós com altura h. EXEMPLO: N h = número de nós à altura h m m/2 N 0 m/2 m/4 N 1 m/

67 Exercício 11.C Mostre que m/2 h+1 m/2 h quando h lg m. 67

68 Rotina básica de manipulação de max-heap MAX-HEAPIFY (A, m, i) 01 l 2i 02 r 2i se l m e A[l] > A[i] 04 então maior l 05 senão maior i 06 se r m e A[r] > A[maior] 07 então maior r 08 se maior i 09 então A[i] A[maior] 10 MAX-HEAPIFY(A, m, maior) Recebe A[1.. m] e i 1 tais que subárvores com raiz 2i e 2i + 1 são max-heaps. Rearranja de modo que subárvore com raiz i seja max-heap. h := altura de i = lg m i T(h) := consumo de tempo no pior caso 68

69 Recorrência: T(h) = T(h 1) + O(1) pois altura de maior é h 1 Solução: T(h) = O(h) Prova? Como h lg m, podemos dizer que consumo de tempo de MAX-HEAPIFY(A, m, i) é O(lg m) 69

70 Construção de um max-heap BUILD-MAX-HEAP (A, n) 2 para i n/2 decrescendo até 1 3 faça MAX-HEAPIFY(A, n, i) T(n) := consumo de tempo no pior caso T(n) = n 2 O(lg n) = O(nlg n). Análise mais cuidadosa: T(n) = O(n). PROVA: Digamos que MAX-HEAPIFY(A, n, i) consome h = lg n i unidades de tempo. Então 70

71 T(n) = lg n h=1 n 2 h+1 h lg n h=1 n 2 h h n ( lg n lg n < n = 2n 1/2 (1 1/2) 2 ) Comentário: x 0 + x 1 + x 2 + x 3 + = 1 1 x 1x 0 + 2x 1 + 3x = (1 x) 2 1x 1 + 2x 2 + 3x 3 x + = (1 x) 2 71

72 Consumo de tempo do Heap sort HEAPSORT (A, n) 1 BUILD-MAX-HEAP(A, n) 2 para m n decrescendo até 2 3 faça A[1] A[m] 4 MAX-HEAPIFY(A, m 1,1) linha consumo na linha 1 O(n) 2 O(n) 3 O(n) 4 no(lg n) Total:O(n lg n) 72

73 AULA 12 Filas com prioridades CLRS

74 Filas com prioridade Tipo abstrato de dados (= abstract data type) A 1 m Como organizar A[1.. m] de modo que as operações consulte máximo extraia máximo aumenta valor de elemento insira novo elemento sejam eficientes? Vetor sem ordem alguma? crescente? decrescente? Implementações com max-heap: HEAP-MAX (A, m) 1 devolva A[1] Consome O(1) 74

75 HEAP-EXTRACT-MAX (A, m) m 1 3 max A[1] 4 A[1] A[m] 5 m m 1 6 MAX-HEAPIFY (A, m, 1) 7 devolva max HEAP-INCREASE-KEY (A, i, chave) chave A[i] 3 A[i] chave 4 enquanto i > 1 e A[ i/2 ] < A[i] 5 faça A[i] A[ i/2 ] 6 i i/2 MAX-HEAP-INSERT (A, m, chave) 1 m m A[m] 3 HEAP-INCREASE-KEY (A, m, chave) Todos consomem O(lg m) 75

76 AULA 13 Exercício relevante para o Quicksort 76

77 Exercício 13.A T(1) = 1 T(n) = T( n/3 ) + T( 2n/3 ) + 5n para n = 2,3,4,... Faz sentido? Solução?? T(n) = O(??) Para adivinhar a cara da solução, vou tentar uma recorrência mais simples: T(1) = 1 T(n) = T(n/3) + T(2n/3) + 5n para n = 2,3,4,... Mas isso não faz sentido! Então que tal essa: T(x) = 1 para x racional tq 3 1 < x 1 T(x) = T(x/3) + T(2x/3) + 5x para x racional, x > 1. 77

78 Árvore da recorrência: 5n / \ 5 n 3 5 2n 3 / \ / \ 5 n 9 5 2n 9 5 2n 9 5 4n 9 \ / \ / \ 5 4n 5 4n 5 8n soma em cada horizontal = 5n número de níveis log 3/2 n T(n) = a soma de tudo T(n) 5n log 3/2 n }{{} log 3/2 n T(n) = O(nlg n) 78

79 De volta à recorrência: T(1) = 1 e T(n) = T( n/3 ) + T( 2n/3 ) + 5n para n = 2,3,4,... n T(n) = = = 44 Vou mostrar que T(n) 100 nlg n para n = 2,3,4,5,6,... Prova: Para n = 2 temos T(2) = 12 < lg2. Para n = 3 temos T(3) = 28 < lg3. Suponha agora que n > 3. Então 79

80 T(n) = T( n 3 ) + T( 2n 3 ) + 5n hi 100 n 3 lg n n 3 lg 2n 3 + 5n 100 n < 100 n = 100 n lg n n 3 lg 2n 3 + 5n (lg n 3 + 1) n 3 lg 2n 3 + 5n lg 2n n 3 lg 2n 3 + 5n = 100 n 3 lg 2n lg 2n n 3 lg 2n 3 + 5n < 100nlg 2n lg 2n 3 + 5n = 100nlg n + 100nlg lg n + 67lg n < 100nlg n + 100n( 0.58) + 67lg n + 67( 0.58) + 5n < 100nlg n 58n + 67lg n n = 100nlg n 53n + 67lg n 38 < 100nlg n Bingo! 80

81 AULA 14 Quicksort CLRS 7 81

82 Quicksort Rearranja A[p.. r] em ordem crescente. QUICKSORT (A, p, r) 1 se p < r 2 então q PARTICIONE(A, p, r) 3 QUICKSORT(A, p, q 1) 4 QUICKSORT(A, q + 1, r) p q r No começo da linha 3, A[p.. q 1] A[q] A[q+1.. r] 82

83 PARTICIONE rearranja A de modo que p q r e A[p.. q 1] A[q] A[q+1.. r] PARTICIONE (A, p, r) 1 x A[r] x é o pivô 2 i p 1 3 para j p até r 1 4 faça se A[j] x 5 então i i A[i] A[j] 7 A[i + 1] A[r] 8 devolva i + 1 Invariantes: no começo de cada iteração de 3 6, A[p.. i] x A[i+1.. j 1] > x A[r] = x p i j r Consumo de tempo de PARTICIONE é Θ(n), sendo n = r p

84 Consumo de tempo do Quicksort QUICKSORT (A, p, r) 1 se p < r 2 então q PARTICIONE(A, p, r) 3 QUICKSORT(A, p, q 1) 4 QUICKSORT(A, q + 1, r) T(n) := consumo de tempo no pior caso sendo n := r p + 1 Recorrência grosseira: T(n) = T(0) + T(n 1) + Θ(n) Solução: T(n) = Θ(n 2 ) Recorrência cuidadosa: T(n) = { } max T(k) + T(n k 1) + Θ(n) 0 k n 1 Solução: T(n) = Θ(n 2 ) Prova? 84

85 EXEMPLO CONCRETO: S(0) = S(1) = 1 e { } S(n) = S(k) + S(n k 1) + n para n 2. max 0 k n 1 n S(n) Vou provar que S(n) n para n 0. Prova: Trivial para n 1. Se n 2 então S(n) = hi max 0 k n 1 max 0 k n 1 { S(k) + S(n k 1) } + n { k (n k 1) } + n = (n 1) n exerc 14.E = n 2 n + 3 n Prove que S(n) 1 2 n2 para n 1. 85

86 Tempo do QUICKSORT no melhor caso: n 1 R(n) = R( ) + R( 2 n 1 2 ) + Θ(n) Solução: R(n) = Θ(nlg n) 86

87 TAREFA 14 Exercício 14.A Submeta ao algoritmo PARTICIONE um vetor com n elementos iguais. Como o algoritmo permuta o vetor recebido? Quantas trocas faz (linhas 6 e 7) entre elementos do vetor? Exercício 14.B [CLRS 7.2-2] Qual o consumo de tempo do QUICKSORT quando aplicado a um vetor com n elementos iguais? Exercício 14.C [CLRS 7.2-3] Mostre que o consumo de tempo do QUICKSORT é Ω(n 2 ) quando aplicado a um vetor crescente com n elementos distintos. Exercício 14.D [CLRS 7.4-1, modificado] Seja S a função definida sobre os inteiros positivos pela seguinte recorrência: S(0) = S(1) = 1 e S(n) = max {S(k) + S(n k 1)} + n 0 k n 1 quando n 2. Mostre que S(n) 1 2 n2 para n 1. Exercício 14.E [CLRS 7.4-3] Mostre que k 2 + (n k 1) 2 atinge o máximo para 0 k n 1 quando k = 0 ou k = n 1. Exercício 14.F É verdade que 2 2n/3 /3 = 4n/9? É verdade que 2 2n/3 /3 = 4n/9? Exercício 14.G [CLRS 7-4] Considere a seguinte variante do algoritmo Quicksort: QUICKSORT (A, p, r) enquanto p < r faça q PARTICIONE(A, p, r) QUICKSORT (A, p, q 1) p q + 1 Mostre que a pilha de recursão pode atingir altura proporcional a n, onde n := r p + 1. Modifique o código de modo que a pilha de recursão tenha altura O(lg n). (Veja enunciado completo em CLRS p.162.) 87

88 AULA 15 Consumo médio de tempo do Quicksort CLRS

89 Quicksort Consumo de tempo no pior caso: Θ(n 2 ) No melhor caso: Θ(n lg n) Consumo médio? Divisão 1 3 para 2 3 : R(n) = R( n 1 3 ) + R( 2n 2 3 ) + Θ(n) Solução: R(n) = Θ(n lg n) veja exercício 13.A Divisão 1 10 para 9 10 : R(n) = R( n 1 10 ) + R( 9n 9 10 Solução: R(n) = Θ(nlg n) ) + Θ(n) Isso sugere que consumo médio é Θ(nlg n). Confirmação? 89

90 EXEMPLO: Número médio de execuções da linha 4 do PARTICIONE. Suponha que A[p.. r] é permutação de 1.. n A[p.. r] execs 1,2 1 2,1 1 média 1 A[p.. r] execs 1,2, ,1, ,3, ,1, ,3, ,2,1 2+1 média 16/6 A[p.. r] execs 1,2,3, ,1,3, ,3,2, ,1,2, ,3,1, ,2,1, ,2,4, ,1,4, ,4,2, ,1,2, ,4,1, ,2,1,3 3+1 A[p.. r] execs 1,3,4, ,1,4, ,4,3, ,1,3, ,4,1, ,3,1, ,3,4, ,2,4, ,4,3, ,2,3, ,4,2, ,3,2,1 3+3 média 116/24 O número médio coincide exatamente com a fórmula E[X] = n 1 a=1 dada algumas transparência adiante. n a k=1 2 k+1 90

91 Algo melhor: Quicksort aleatorizado PARTICIONE-ALEA (A, p, r) 1 i RANDOM(p, r) 2 A[i] A[r] 3 devolva PARTICIONE(A, p, r) QUICKSORT-ALE (A, p, r) 1 se p < r 2 então q PARTICIONE-ALEA(A, p, r) 3 QUICKSORT-ALE(A, p, q 1) 4 QUICKSORT-ALE(A, q + 1, r) Análise do consumo medio? Basta contar o número esperado de comparações na linha 4 do PARTICIONE 91

92 Suponha A[p.. r] permutação de 1.. n Quero calcular X = total de comparaçs A[j] x = n 1 n X ab a=1 b=a+1 X ab = número de comparações entre a e b EXEMPLO:

93 Supondo a < b, X ab = 1 se primeiro pivô em {a,..., b} é a ou b 0 caso contrário Pr {X ab =1} = 1 b a b a + 1 X = n 1 n X ab a=1 b=a+1 E[X] =? 93

94 E[X] = = n 1 n a=1 b=a+1 n 1 n a=1 b=a+1 E[X ab ] Pr {X ab =1} = n 1 n a=1 b=a+1 2 b a + 1 = n 1 n a a=1 k=1 2 k + 1 < n 1 a=1 2( n ) < 2n( n ) < 2n(ln n + 1) CLRS (A.7), p.1060 Consumo esperado do QUICKSORT-ALE: O(nlg n) 94

95 AULA 16 E por falar em análise probabilística e algoritmos aleatorizados... CLRS 5 e C.2 C.3 95

96 Hiring problem: Encontrar o máximo de permutação A[1.. n] de 1,..., n MAX (A, n) 1 max 0 2 para i 1 até n 3 faça se A[i] > max 4 então max A[i] 5 devolva max Quantas vezes linha 4 é executada? Melhor caso, pior caso, caso médio Suponha que A[1.. n] é permutação aleatória uniforme de 1,..., n isto é, cada permutação tem probabilidade 1/n! 96

97 EXEMPLO: número de execuções da linha 4 A[1..2] linha 14 1,2 2 2,1 1 E[X] 3/2 A[1..4] linha 14 1,2,3,4 4 1,2,4,3 3 1,3,2,4 3 1,3,4,2 3 1,4,2,3 2 1,4,3,2 2 2,1,3,4 3 2,1,4,3 2 2,3,1,4 3 2,3,4,1 3 2,4,1,3 2 2,4,3,1 2 A[1..3] linha 14 1,2,3 3 1,3,2 2 2,1,3 2 2,3,1 2 3,1,2 1 3,2,1 1 E[X] 11/6 A[1..4] linha 14 3,1,2,4 2 3,1,4,2 2 3,2,1,4 2 3,2,4,1 2 3,4,1,2 2 3,4,2,1 2 4,1,2,3 1 4,1,3,2 1 4,2,1,3 1 4,2,3,1 1 4,3,1,2 1 4,3,2,1 1 E[X] 50/24 97

98 Variáveis aleatórias: X i = 1 se max A[i] é executado 0 caso contrário X = núm total de execs da linha 4 = X X n Esperanças: E[X i ] = probabilidade de que A[i] seja máximo em A[1.. i] = 1/i E[X] = E[X X n ] = E[X 1 ] + + E[X n ] = 1/ /n < ln n + 1 = O(lg n) 2.92 < < 2.93 < 3.30 < 1 + ln10 98

99 Como garantir permutação aleatória uniforme? MAX-ALEATORIZADO (A, n) 0 PERMUTE(A) 1 max 0 2 para i 1 até n 3 faça se A[i] > max 4 então max A[i] 5 devolva max Linha 0 faz uma permutação aleatória uniforme dos elementos de A Como? 99

100 Solução 1 PERMUTE-POR-ORDENAÇÃO (A, n) 1 para i 1 até n faça 2 P[i] RANDOM(1, n 3 ) 3 ordene A[1.. n] com chaves P[1.. n] No começo da linha 3, com grande probabilidade, P[1.. n] não tem elementos repetidos Linha 3 faz permutação A[j 1.. j n ] de A[1.. n] tal que P[j 1 ] P[j n ] Consumo de tempo: Θ(n lg n) se RANDOM for Θ(1) 100

101 Solução 2 (Como se diz in place em portugues?) PERMUTE-IN-PLACE (A, n) 1 para i 1 até n faça 2 j RANDOM(i, n) 3 A[j] A[i] Não é óbvio que isso produz permutação aleatória uniforme de A[1.. n] Consumo de tempo: Θ(n) supondo que RANDOM é Θ(1) 101

102 TAREFA 16 Exercício 16.A [CLRS 5.3-3] Que acontece se trocarmos RANDOM(i, n) por RANDOM(1, n) no algoritmo PERMUTE-IN-PLACE? O algoritmo continua produzindo permutação aleatória uniforme? Exercício 16.B [CLRS C.3-2] Um vetor A[1.. n] contém n números distintos aleatoriamente ordenados. Suponha que cada permutação dos n números é igualmente provável. Qual é a esperança do índice do maior elemento do vetor? Qual é a esperança do índice do menor elemento do vetor? 102

103 AULA 17 Limite inferior para o problema da ordenação CLRS

104 Ordenação: limite inferior Problema: Rearranjar A[1... n] em ordem crescente Existem algoritmos O(n lg n) Existe algoritmo assintoticamente melhor? NÃO, se o algoritmo é baseado em comparações Prova? Qualquer algoritmo de comparações é uma árvore de decisão 104

105 EXEMPLO: INSERTION-SORT com n = 3 Árvore de decisão para a, b, c, todos distintos a : b representa comparação entre a e b a : b < > b : c a : c / \ / \ abc a : c bac b : c / \ / \ acb cab bca cba bac significa que b < a < c 105

106 Árvore de decisão para A[1.. n] todas as n! permutações de 1,..., n devem ser folhas número de comparações, no pior caso? resposta: altura, h, da árvore devemos ter 2 h n!, donde h lg(n!) (n!) 2 = n 1 i=0 (n i)(i+1) n i=1 n = n n h lg(n!) 1 2 nlg n Conclusão: Todo algoritmo de ordenação baseado em comparações faz Ω(nlg n) comparações no pior caso 106

107 AULA 18 Ordenação em tempo linear CLRS

108 Ordenação por contagem Cada A[i] está em {0,..., k} COUNTING-SORT (A, B, n, k) 1 para i 0 até k 2 faça C[i] 0 3 para j 1 até n 4 faça C[A[j]] C[A[j]] para i 1 até k 6 faça C[i] C[i] + C[i 1] 7 para j n decrescendo até 1 8 faça B[C[A[j]]] A[j] 9 C[A[j]] C[A[j]] 1 A 1 n B C 0 k Entre linhas 4 e 5, C[i] = núm de js tq A[j] = i entre linhas 6 e 7, C[i] = núm de js tq A[j] i 108

109 Consumo de tempo do COUNTING-SORT: linha consumo na linha 1 2 Θ(k) 3 4 Θ(n) 5 6 Θ(k) 7 9 Θ(n) Consumo total: Θ(n + k) se k n então consumo é Θ(n) se k 10n então consumo é Θ(n) se k = O(n) então consumo é Θ(n) se k n 2 então consumo é Θ(k) A propósito: COUNTING-SORT é estável 109

110 Ordenação digital (= radix sort) Exemplo: Cada A[j] têm d dígitos decimais: A[j] = a d 10 d a a Exemplo com d = 3: RADIX-SORT (A, n, d) 1 para i 1 até d faça 2 1 até d e não o contrário! 3 ordene A[1.. n] pelo dígito i 110

111 Linha 3: faz ordenação A[j 1.. j n ] de A[1.. n] tal que A[j 1 ] i A[j n ] i ordenação deve ser estável use COUNTING-SORT Consumo de tempo: dígitos decimais: dígitos em 0.. k: Θ(dn) Θ(d(n + k)). Exemplo com d = 5 e k = 128: a a a a a 1 sendo 0 a i

112 AULA 19 Mediana e i-ésimo menor elemento CLRS 9 112

113 Mínimo e mediana Problema: Encontrar o i-ésimo menor elemento de A[1.. n] Suponha A[1.. n] sem elementos repetidos Exemplo: 33 é o 4-o menor elemento: A ordenado Mediana é o n+1 2 -ésimo menor ou o n+1 2 -ésimo menor elemento 113

114 Algoritmo SELECT Recebe A[p.. r] e i tal que 1 i r p+1 e devolve valor do i-ésimo menor elemento de A[p.. r] SELECT (A, p, r, i) 1 se p = r 2 então devolva A[p] 3 q PARTICIONE(A, p, r) 4 k q p se k = i 6 então devolva A[q] 7 se k > i 8 então devolva SELECT (A, p, q 1, i) 9 senão devolva SELECT (A, q + 1, r, i k) p q r } {{ } } {{ } k 1 n k 114

115 T(n) = núm comparações entre elementos de A quando n = r p + 1 Pior caso: T(n) = T(n 1) + n 1 Solução: T(n) = Θ(n 2 ) T(1) = 0 e T(n) = T(n 1) + n 1 para n 2 Solução: T(n) = 1 2 n2 1 2 n Consumo médio? E[T(n)] =? 115

116 EXEMPLO: Número médio de comparações sobre todas as permutações de A[p.. r] (supondo que nas linhas 8 e 9 o algoritmo sempre escolhe o lado maior): A[p.. r] comps 1, ,1 1+0 média 2/2 A[p.. r] comps 1,2, ,1, ,3, ,1, ,3, ,2,1 2+1 média 16/6 A[p.. r] comps 1,2,3, ,1,3, ,3,2, ,1,2, ,3,1, ,2,1, ,2,4, ,1,4, ,4,2, ,1,2, ,4,1, ,2,1,3 3+1 A[p.. r] comps 1,3,4, ,1,4, ,4,3, ,1,3, ,4,1, ,3,1, ,3,4, ,2,4, ,4,3, ,2,3, ,4,2, ,3,2,1 3+3 média 116/24 No caso r p + 1 = 5, a média é 864/

117 SELECT-ALEATORIZADO (= randomized select) Usa PARTICIONE-ALEATORIZADO Consumo médio de tempo: E[T(1)] = 0 e E[T(n)] n n n 1 h=ae[t(h)]+ 1 n n 1 h=b E[T(h)] onde a = n/2 e b = n/2 Compare com a recorrência do Quicksort n E[T(n)] = / / / / Solução: E[T(n)] = O(n) 117

118 AULA 20 Programação dinâmica CLRS

119 Programacão dinâmica = recursão com tabela = transformação inteligente de recursão em iteração EXEMPLO 1: Números de Fibonacci F 0 = 0 F 1 = 1 F n = F n 1 + F n 2 Algoritmo recursivo para F n : FIBO-REC (n) 1 se n 1 2 então devolva n 3 senão a FIBO-REC(n 1) 4 b FIBO-REC(n 2) 5 devolva a + b Consumo de tempo? Número de somas: T(0) = 0 T(1) = 0 T(n) = T(n 1) + T(n 2) + 1 se n 2 119

120 Solução: T(n) 3 n /2 n para n 6. Prova: T(6) = 12 > (3/2) 6 e T(7) = 20 > (3/2) 7. Se n 8 então T(n) = T(n 1) + T(n 2) + 1 (3/2) n 1 + (3/2) n = (3/2 + 1)(3/2) n (5/2)(3/2) n 2 (9/4)(3/2) n 2 = (3/2) 2 (3/2) n 2 = (3/2) n. Consumo de tempo: Ω(( 3 2 )n ) Exponencial! Algoritmo resolve as mesmas subinstâncias muitas vezes: F 5 / \ F 4 F 3 / \ / \ F 3 F 2 F 2 F 1 / \ / \ / \ F 2 F 1 F 1 F 0 F 1 F 0 120

121 Algoritmo de programação dinâmica: FIBO (n) 1 f[0] 0 2 f[1] 1 3 para i 2 até n 4 faça f[i] f[i 1] + f[i 2] 5 devolva f[n] Note a tabela f[0.. n 1] Consumo de tempo: Θ(n) 121

122 Programacão dinâmica, EXEMPLO 2: Subset-sum (soma de cheques) Dados inteiros não-negativos w 1,..., w n, W, encontrar subconjunto K de {1,..., n} tal que k K w k = W. Exemplo w = 100,30,90,35,40,30,10 e W = 160 Motivação: Algum subconjunto dos cheques w 1,..., w n (w i é o valor do cheque i) tem soma W? Propriedade da subestrutura ótima: Suponha que K é solução da instância (n, W) do problema. Se K n então K {n} é solução da instância (n 1, W w n ) senão K é solução da instância (n 1, W). 122

123 Simplificação: diga 1 se a instância tem solução e 0 em caso contrário. Solução recursiva: REC (w, n, W) 1 se W = 0 2 então devolva 1 3 se n = 0 4 então devolva 0 5 se REC(w, n 1, W) = 1 6 então devolva 1 7 se w n > W 8 então devolva 0 9 senão devolva REC(w, n 1, W w n ) Consumo de tempo: Ω(2 n ) Por que demora tanto? A mesmo instância é resolvida muitas vezes. 123

124 Programação dinâmica s[i, Y ] := 1 se instância (i, Y ) tem solução 0 caso contrário Recorrência: s[i,0] = 1 s[0, Y ] = 0 se Y > 0 s[i, Y ] = s[i 1, Y ] se w i > Y s[i, Y ] = max {s[i 1, Y ], s[i 1, Y w i } Y i ? 5 W = 4 n = 5 Lembrete: W e w 1,..., w n são inteiros 124

125 Cada instâcia (i, Y ) do problema é resolvida uma só vez: SOMA-DE-SUBCONJ (w, n, W) 1 para i 0 até n faça 2 s[i,0] 1 3 para Y 1 até W faça 4 s[0, Y ] 0 5 para i 1 até n faça 6 s[i, Y ] s[i 1, Y ] 7 se s[i, Y ] = 0 e w i Y 8 então s[i, Y ] s[i 1, Y w i ] 9 devolva s[n, W] Consumo de tempo: Θ(nW) NOTA: O consumo Θ(n2 lg W ) é exponencial! Explicação: o tamanho de W é lg W e não W (tente multiplicar w 1,..., w n e W por 1000) EXERCÍCIO: Escreva uma versão que devolva K tal que k K w k = W 125

126 Programacão dinâmica, EXEMPLO 3: Multiplicação iterada de matrizes Preliminares: Se A é p q e B é q r então AB é p r (AB)[i, j] = k A[i, k] B[k, j] Número de multiplicações escalares = p q r MULT-MAT (p, A, q, B, r) 1 para i 1 até p faça 2 para j 1 até r faça 3 AB[i, j] 0 4 para k 1 até q faça 5 AB[i, j] AB[i, j] + A[i, k] B[k, j] Multiplicação iterada: A 1 A 2 A 3 10 A A 2 5 A 3 50 ((A 1 A 2 ) A 3 ) 7500 mults escalares (A 1 (A 2 A 3 )) mults escalares 126

127 Problema: Encontrar número mínimo de multiplicações escalares necessário para calcular produto A 1 A 2 A n. p 0 p 1 p 2... p n 1 p n A 1 A 2... A n cada A i é p i 1 p i Soluções ótimas contêm soluções ótimas: se (A 1 A 2 )(A 3 ((A 4 A 5 )A 6 )) é ordem ótima de multiplicação então (A 1 A 2 ) e (A 3 ((A 4 A 5 )A 6 )) também são ordens ótimas. 127

128 m[i, j] = número mínimo de multiplicações escalares para calcular A i A j Decomposição: (A i A k )(A k+1 A j ) Recorrência: se i = j então m[i, j] = 0 se i < j então m[i, j] = min i k<j { m[i, k] + p i 1 p k p j + m[k+1, j] } Exemplo: m[3,7] = min 3 k<7 { m[3, k] + p 2p k p 7 + m[k+1,7] } 128

129 Algoritmo recursivo: recebe p i 1,..., p j e devolve m[i, j] REC-MAT-CHAIN (p, i, j) 1 se i = j 2 então devolva 0 3 m[i, j] 4 para k i até j 1 faça 5 q 1 REC-MAT-CHAIN (p, i, k) 5 q 2 REC-MAT-CHAIN (p, k + 1, j) 5 q q 1 + p i 1 p k p j + q 2 6 se q < m[i, j] 7 então m[i, j] q 8 devolva m[i, j] Consumo de tempo: Ω(2 n ) onde n = j i + 1. Por que demora tanto? Uma mesma instância é resolvida muitas vezes. 129

130 Cálculo do consumo de tempo de REC-MAT-CHAIN: T(n) = número comparações entre q e m[, ] na linha 6 quando n := j i + 1 para n 2 T(1) = 0 T(n) = n 1 k=1 n 1 = 2 k=2 (T(k) + T(n k) + 1) T(h) + (n 1) = 2(T(2) + + T(n 1)) + (n 1) Fácil verificar: T(n) 2 n 2 para n 2 130

131 Programação dinâmica: cada instância A i A j resolvida uma só vez. Em que ordem calcular os componentes da tabela m? Para calcular m[2, 6] preciso de m[2,2], m[2,3], m[2,4], m[2,5] e de m[3,6], m[4,6], m[5,6], m[6,6] j ? i Calcule todos os m[i, j] com j i + 1 = 2, depois todos com j i + 1 = 3, depois todos com j i + 1 = 4, etc. 131

132 Algoritmo de programação dinâmica: recebe p 0, p 1,..., p n e devolve m[1, n] MATRIX-CHAIN-ORDER (p, n) 02 para i 1 até n faça 03 m[i, i] 0 04 para l 2 até n faça 05 para i 1 até n l + 1 faça 06 j i + l 1 07 m[i, j] 08 para k i até j 1 faça 09 q m[i, k] + p i 1 p k p j + m[k+1, j] 10 se q < m[i, j] 11 então m[i, j] q 12 devolva m[1, n] Linhas 4 11: tratam das subcadeias A i A j de comprimento l Consumo de tempo: O(n 3 ) 132

133 Curioso verificar que consumo é Ω(n 3 ): Número de execuções da linha 9 (para cada i, linha 9 é executada l 1 vezes) l i execs linha 9 2 1,..., n 1 (n 1) 1 3 1,.., n 2 (n 2) 2 4 1,., n 3 (n 3) 3 n 1 1,2 2 (n 2) n 1 1 (n 1) total n 1 h=1 h(n h) Para n 6, n 1 h=1 h(n h) = = n n 1 h=1 h n 1 h=1 h2 = n 1 2 n(n 1) 1 (n 1)n(2n 1) (CLRS p.1060) n2 (n 1) 1 6 2n3 1 2 n25n n3 = 5 12 n3 1 3 n3 = 1 12 n3 Consumo de tempo é Ω(n 3 ) 133

134 AULA 21 Mais programação dinâmica CLRS

135 Def: z 1,..., z k é subseqüência de x 1,..., x m se existem índices i 1 < < i k tais que z 1 = x i1... z k = x ik EXEMPLO: 5, 9, 2, 7 é subseqüência de 9,5,6,9,6,2,7,3 135

136 Pequeno exercício: Decidir se z 1,..., z k é subseqüência de x 1,..., x m Exemplo: z = A A A x = B A B B A B B B A A B B A B A B A B B Solução: SUB-SEQ- (z, k, x, m) 0 i k 1 j m 2 enquanto i 1 e j 1 faça 3 se z i = x j 4 então i i 1 5 j j 1 6 se i 1 7 então devolva não 8 senão devolva sim 136

137 Programacão dinâmica, EXEMPLO 4: Subseqüência comum máxima Z é subseq comum de X e Y se Z é subseq de X e de Y ssco = subseq comum Problema: Encontrar uma ssco máxima de X e Y Exemplo: X = A B C B D A B Y = B D C A B A ssco = B C A ssco maximal = A B A ssco máxima = B C A B Outra ssco máxima = B D A B LCS = longest common subsequence 137

138 Subestrutura ótima: Suponha que Z = z 1,..., z k é sscomáx de X = x 1,..., x m e Y = y 1,..., y n. Se x m = y n então z k = x m = y n e Z k 1 é sscomáx de X m 1 e Y n 1 Se x m y n então z k x m implica que Z é sscomáx de X m 1 e Y Se x m y n então z k y n implica que Z é sscomáx de X e Y n 1 Notação: X j := x 1,..., x j Prove a propriedade! 138

139 Simplificação: encontrar o comprimento de uma ssco máxima c[i, j] = comprimento de uma sscomáx de x 1,..., x i e y 1,..., y j Recorrência: c[0, j] = c[i,0] = 0 c[i, j] = c[i 1, j 1] + 1 se x i = y j c[i, j] = max(c[i, j 1], c[i 1, j]) se x i y j 139

140 Algoritmo de programação dinâmica: SSCOMÁX-COMPR (X, m, Y, n) 01 para i 1 até m faça 02 c[i,0] 0 03 para j 1 até n faça 04 c[0, j] 0 05 para i 1 até m faça 06 para j 1 até n faça 07 se x i = y j 08 então c[i, j] c[i 1, j 1] senão se c[i 1, j] c[i, j 1] 10 então c[i, j] c[i 1, j] 11 senão c[i, j] c[i, j 1] 12 devolva c[m, n] Consumo de tempo: O(mn) 140

141 AULA 22 Algoritmos gulosos (greedy) CLRS

142 Máximo e maximal S = coleção de subconjuntos de {1,..., n} Elemento X de S é máximo se não existe Y em S tal que Y > X. Elemento X de S é maximal se não existe Y em S tal que Y X. Exemplo: { {1,2}, {2,3}, {4,5}, {1,2,3}, {2,3,4,5}, {1,3,4,5} } {1,2} não é maximal {1,2,3} é maximal {2, 3, 4, 5} é maximal e máximo Problema 1: Encontrar elemento máximo de S. Usualmente difícil. Problema 2: Encontrar elemento maximal de S. Muito fácil: aplique algoritmo guloso. S tem estrutura gulosa se todo maximal é máximo. Se S tem estrutura gulosa, Problema 1 é fácil. 142

143 Algoritmos gulosos Algoritmo guloso procura maximal e acaba obtendo máximo procura ótimo local e acaba obtendo ótimo global costuma ser muito simples e intuitivo muito eficiente difícil provar que está correto Problema precisa ter subestrutura ótima (como na programação dinâmica) propriedade da escolha gulosa (greedy-choice property) 143

144 Algoritmo guloso, EXEMPLO 1: Caso especial da mochila booleana Dados inteiros não-negativos w 1,..., w n e W, encontrar um subconjunto máximo K de {1,..., n} dentre os que satisfazem k K w k W. Subestrutura ótima (já vimos): Se K é ótimo para (n, W) e n K então K {n} é ótimo para (n 1, W w n ) senão K é ótimo para (n 1, W). Propriedade da escolha gulosa: Se w n w i para todo i e w n W então n pertence a alguma solução ótima. Prove as propriedades! 144

145 Simplificação: basta dar tamanho de K ótimo Algoritmo guloso, versão recursiva, supondo w 1 w n : SS-REC (w, n, W) 1 se n = 0 ou w n > W 2 então devolva 0 3 senão devolva 1+SS-REC(w, n 1, W w n ) Consumo de tempo: T(n) = T(n 1) + O(1) Consumo de tempo: O(n) 145

146 Algoritmo guloso, versão iterativa, supondo w 1 w n : SS-ITER (w, n, W) 1 soma 0 2 para j n decrescendo até 1 faça 3 se w j > W 4 então devolva soma 5 senão soma soma W W w j 7 devolva soma Prove que o algoritmo está correto! Consumo de tempo: O(n) Prog din consumiria Θ(n 2 ) 146

147 AULA 23 Mais algoritmos gulosos CLRS

148 Algoritmo guloso, EXEMPLO 2: Problema dos intervalos disjuntos Dados intervalos [s 1, f 1 ),...,[s n, f n ), encontrar uma coleção máxima de intervalos disjuntos dois a dois. Solução é um subconjunto A de {1,..., n} Exemplo: s 1 f 1 Solução: Se cada intervalo é uma atividade, queremos coleção disjunta máxima de atividades compatíveis (i e j são compatíveis se f i s j ) 148

149 Análise do problema: Intervalos S := {1,..., n} Propriedade da escolha gulosa: Se f m é mínimo em S então m está em alguma solução ótima. Propriedade da subestrutura ótima: Suponha que f i é mínimo em S. Se A é solução ótima de S e A i então A {i} é solução ótima de S i. Notação: S i := {k : s k f i } (todos os intervalos à direita de i) Prove as propriedades! 149

150 Algoritmo guloso: Supõe f 1 f n Primeira versão: FEIO-INTERVALOS-DISJUNTOS (s, f, n) 1 A 2 i 1 3 enquanto i n faça 4 A A {i} 5 m i enquanto m n e s m < f i faça 7 m m i m 9 devolva A Correta, eficiente, mas deselegante. 150

151 Segunda versão: mais elegante Supõe f 1 f n INTERVALOS-DISJUNTOS (s, f, n) 1 A {1} 2 i 1 3 para m 2 até n faça 4 se s m f i 5 então A A {m} 6 i m 7 devolva A Consumo de tempo: Θ(n) Nome do algoritmo no CLRS: Greedy-Activity-Selector 151

152 AULA 24 Estrutura de dados para conjuntos disjuntos dinâmicos CLRS 21.1,

153 Exemplo de coleção disjunta dinâmica: componentes conexos de grafo dinâmico aresta componentes {a} {b} {c} {d} {e} (b, d) {a} {b, d} {c} {e} (c, e) {a} {b, d} {e, c} (c, d) {a} {b, d, c, e} (e, d) {a} {b, d, c, e} Operações básicas: MAKESET (x) UNION (x, y) FINDSET (x) x é elemento novo x e y em comps diferentes devolve representante do comp 153

154 Componentes conexos de um grafo G: CONNECTED-COMPONENTS (G) 1 para cada v em V [G] faça 2 MAKESET(v) 3 para cada (u, v) em E[G] faça 4 se FINDSET(u) FINDSET(v) 5 então UNION(u, v) Decide se u e v estão no mesmo componente: SAME-COMPONENT (u, v) 1 se FINDSET(u) = FINDSET(v) 2 então devolva SIM 3 senão devolva NÃO 154

155 Generalização: conjuntos disjuntos dinâmicos Seqüência de operações MAKESET, UNION, FINDSET M M M U F U U F U F F F U F } {{ } } n {{ } m Que estrutura de dados usar? Compromissos (trade-off s) Estrutura disjoint-set forest: cada conj tem uma raiz cada nó x tem um pai pai[x] = x se e só se x é uma raiz 155

Análise de Algoritmos

Análise de Algoritmos Análise de Algoritmos Estes slides são adaptações de slides do Prof. Paulo Feofiloff e do Prof. José Coelho de Pina. Algoritmos p. 1 Introdução CLRS 2.2 e 3.1 AU 3.3, 3.4 e 3.6 Essas transparências foram

Leia mais

Melhores momentos AULA 1. Algoritmos p.38/86

Melhores momentos AULA 1. Algoritmos p.38/86 Melhores momentos AULA 1 Algoritmos p.38/86 Definições x := inteiro i tal que i x < i + 1 x := inteiro j tal que j 1 < x j Exercício A1.B Mostre que n 1 2 n 2 n 2 e n 2 n 2 n + 1 2 para qualquer inteiro

Leia mais

Aula 2. Divisão e conquista. Exemplo 1: Número de inversões de uma permutação (problema 2-4 do CLRS; veja também sec 5.4 do KT)

Aula 2. Divisão e conquista. Exemplo 1: Número de inversões de uma permutação (problema 2-4 do CLRS; veja também sec 5.4 do KT) Aula 2 Divisão e conquista Exemplo 1: Número de inversões de uma permutação (problema 2-4 do CLRS; veja também sec 5.4 do KT) Exemplo 2: Par de pontos mais próximos (sec 33.4 do CLRS) Essas transparências

Leia mais

AULA 13. Algoritmos p.526/582

AULA 13. Algoritmos p.526/582 AULA 13 Algoritmos p.526/582 Ordenação em tempo linear CLRS 8.2 8.3 Algoritmos p.527/582 Ordenação por contagem Recebe vetores A[1.. n] e B[1.. n] e devolve no vetor B[1.. n] os elementos de A[1.. n] em

Leia mais

Melhores momentos AULA 3. Algoritmos p.148/188

Melhores momentos AULA 3. Algoritmos p.148/188 Melhores momentos AULA 3 Algoritmos p.148/188 Análise da intercalação Problema: Dados e crescentes, rearranjar de modo que ele fique em ordem crescente. Entra: Sai: Algoritmos p.149/188 Algoritmos p.150/188

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos A. G. Silva Baseado nos materiais de Souza, Silva, Lee, Rezende, Miyazawa Unicamp Ribeiro FCUP Manber, Introduction to Algorithms (989) Livro de abril de 08 Conteúdo programático

Leia mais

Ordenação em tempo linear

Ordenação em tempo linear Ordenação em tempo linear CLRS cap 8 Algoritmos p. 1 Ordenação: limite inferior Problema: Rearranjar um vetor A[1..n] de modo que ele fique em ordem crescente. Existem algoritmos que consomem tempo O(n

Leia mais

Análise de Algoritmos

Análise de Algoritmos Algoritmos p. 1/25 Análise de Algoritmos Parte destes slides são adaptações de slides do Prof. Paulo Feofiloff e do Prof. José Coelho de Pina. Algoritmos p. 2/25 Ordenação em tempo linear CLRS cap 8 Algoritmos

Leia mais

ANÁLISE DE ALGORITMOS

ANÁLISE DE ALGORITMOS ANÁLISE DE ALGORITMOS Paulo Feofiloff Instituto de Matemática e Estatística Universidade de São Paulo agosto 2009 Introdução P. Feofiloff (IME-USP) Análise de Algoritmos agosto 2009 2 / 102 Introdução

Leia mais

Análise de Algoritmos

Análise de Algoritmos Análise de Algoritmos 2008 Aula 1: Introdução Paulo Feofiloff IME, Universidade de São Paulo 1 2 CLRS: Cormen, Leiserson, Rivest, Stein O que é AA? Um exemplo Having a solid base of algorithmic knowledge

Leia mais

Mediana. Aula 09. Menor. i-ésimo menor elemento. Algoritmo de Seleção. -ésimo menor elemento. Mediana é o n+1. -ésimo menor ou o n+1

Mediana. Aula 09. Menor. i-ésimo menor elemento. Algoritmo de Seleção. -ésimo menor elemento. Mediana é o n+1. -ésimo menor ou o n+1 Mediana Aula 09 Algoritmo de Seleção Prof. Marco Aurélio Stefanes marco em dct.ufms.br www.dct.ufms.br/ marco Baseado em slides do Prof. Paulo Fiofilof Mediana é o n+1 2 -ésimo menor ou o n+1 2 -ésimo

Leia mais

Bucketsort. CLRS sec 8.4. Algoritmos p. 1

Bucketsort. CLRS sec 8.4. Algoritmos p. 1 Bucketsort CLRS sec 8.4 Algoritmos p. 1 Bucket Sort Recebe um inteiro n e um vetor A[1..n] onde cada elemento é um número no intervalo [0, 1). Algoritmos p. 2 Bucket Sort Recebe um inteiro n e um vetor

Leia mais

Análise de Algoritmos

Análise de Algoritmos Análise de Algoritmos CLRS 2.2 e 3.1 AU 3.3, 3.4 e 3.6 Essas transparências foram adaptadas das transparências do Prof. Paulo Feofiloff e do Prof. José Coelho de Pina. Algoritmos p. 1 Intuitivamente...

Leia mais

AULA 15. Algoritmos p.600/637

AULA 15. Algoritmos p.600/637 AULA 15 Algoritmos p.600/637 Programação dinâmica CLRS 15.1 15.3 = recursão com tabela = transformação inteligente de recursão em iteração Algoritmos p.601/637 Programação dinâmica "Dynamic programming

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos A. G. Silva Baseado nos materiais de Souza, Silva, Lee, Rezende, Miyazawa Unicamp Ribeiro FCUP 18 de agosto de 2017 Conteúdo programático Introdução (4 horas/aula) Notação

Leia mais

Programação dinâmica

Programação dinâmica Programação dinâmica CLRS 15.2 15.3 = recursão com tabela = transformação inteligente de recursão em iteração Algoritmos p. 1 Multiplicação iterada de matrizes Se A é p q e B é q r então AB é p r. (AB)[i,j]

Leia mais

Análise de Algoritmos

Análise de Algoritmos Algoritmos p. 1/28 Análise de Algoritmos Parte destes slides são adaptações de slides do Prof. Paulo Feofiloff e do Prof. José Coelho de Pina. Algoritmos p. 2/28 Análise de Algoritmos CLRS 7 Essas transparências

Leia mais

Algoritmos gulosos (greedy)

Algoritmos gulosos (greedy) Algoritmos gulosos (greedy) CLRS 16.1 e mais... Algoritmos p. 1 Algoritmos gulosos Algoritmo guloso procura ótimo local e acaba obtendo ótimo global costuma ser muito simples e intuitivo muito eficiente

Leia mais

Análise de Algoritmos

Análise de Algoritmos Análise de Algoritmos CLRS 2.3, 3.2, 4.1 e 4.2 Essas transparências foram adaptadas das transparências do Prof. Paulo Feofiloff e do Prof. José Coelho de Pina. Algoritmos p. 1 Número de inversões Problema:

Leia mais

Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência

Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência Busca Binária Aula 05 Equações com Recorrência Prof. Marco Aurélio Stefanes marco em dct.ufms.br www.dct.ufms.br/ marco Idéia: Divisão e Conquista Busca_Binária(A[l...r],k) 1:if r < lthen 2: index = 1

Leia mais

Conjuntos disjuntos dinâmicos

Conjuntos disjuntos dinâmicos Conjuntos disjuntos dinâmicos CLRS 21 Algoritmos p. 1 Conjuntos disjuntos Seja S = {S 1,S 2,...,S n } uma coleção de conjuntos disjuntos, ou seja, S i S j = para todo i j. Algoritmos p. 2 Conjuntos disjuntos

Leia mais

Tópico 5 Algoritmos de Ordenação. Parte I - métodos de ordenação: inserção, mergesort, heapsort e quicksort.

Tópico 5 Algoritmos de Ordenação. Parte I - métodos de ordenação: inserção, mergesort, heapsort e quicksort. Tópico 5 Algoritmos de Ordenação Parte I - métodos de ordenação: inserção, mergesort, heapsort e quicksort. 1 Problema Computacional: Ordenação Problema computacional que surge em diversas situações. Definição:

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Algoritmos Pontifícia Universidade Católica de Minas Gerais harison@pucpcaldas.br 26 de Maio de 2017 Sumário A complexidade no desempenho de Quando utilizamos uma máquina boa, ela tende a ter

Leia mais

Melhores momentos AULA PASSADA. Complexidade Computacional p. 205

Melhores momentos AULA PASSADA. Complexidade Computacional p. 205 Melhores momentos AULA PASSADA Complexidade Computacional p. 205 MT multifita por MT fita única Duas máquinas são equivalentes se elas reconhecem a mesma linguagem. Teorema. Dada uma máquina de Turing

Leia mais

AULA 17. Algoritmos p.662/695

AULA 17. Algoritmos p.662/695 AULA 17 Algoritmos p.662/695 Mochila Dados dois vetores x[1.. n] e w[1.. n], denotamos por x w o produto escalar w[1]x[1] + w[2]x[2] + + w[n]x[n]. Suponha dado um número inteiro não-negativo W e vetores

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos A. G. Silva Baseado nos materiais de Souza, Silva, Lee, Rezende, Miyazawa Unicamp Ribeiro FCUP Manber, Introduction to Algorithms (1989) Livro 06 de abril de 2018 Conteúdo

Leia mais

Análise de Algoritmos Algoritmos de Ordenação

Análise de Algoritmos Algoritmos de Ordenação Análise de Algoritmos Algoritmos de Ordenação Nelson Cruz Sampaio Neto nelsonneto@ufpa.br Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação 5 de abril de 2016

Leia mais

Algoritmos de ordenação Quicksort

Algoritmos de ordenação Quicksort Algoritmos de ordenação Quicksort Sumário Introdução Descrição do quicksort Desempenho do quicksort Pior caso Melhor caso Particionamento balanceado Versão aleatória do quicksort Análise do quicksort Pior

Leia mais

Aula 02 Notação Assintótica p. 4. Usodanotação O. Notação O. Notação O, Ω, ΘeExemplos. Intuitivamente... O(f(n)) funções que não crescem mais

Aula 02 Notação Assintótica p. 4. Usodanotação O. Notação O. Notação O, Ω, ΘeExemplos. Intuitivamente... O(f(n)) funções que não crescem mais Notação O Aula 02 Notação Assintótica Notação O, Ω, Θe Prof. Marco Aurélio Stefanes marco em dct.ufms.br www.dct.ufms.br/ marco Intuitivamente... O() funções que não crescem mais rápido que funções menores

Leia mais

Mergesort. Aula 04. Algoritmo Mergesort. Divisão e Conquista. Divisão e Conquista- MergeSort

Mergesort. Aula 04. Algoritmo Mergesort. Divisão e Conquista. Divisão e Conquista- MergeSort Mergesort Aula 0 Divisão e Conquista- MergeSort Prof. Marco Aurélio Stefanes marco em dct.ufms.br www.dct.ufms.br/ marco Mergesort é um algoritmo de ordenação recursivo Ele recursivamente ordena as duas

Leia mais

Aula 1. Teoria da Computação III

Aula 1. Teoria da Computação III Aula 1 Teoria da Computação III Complexidade de Algoritmos Um problema pode ser resolvido através de diversos algoritmos; O fato de um algoritmo resolver um dado problema não significa que seja aceitável

Leia mais

Coloração de intervalos

Coloração de intervalos Coloração de intervalos Problema: Dados intervalos de tempo [s 1,f 1 ),...,[s n,f n ), encontrar uma coloração dos intervalos com o menor número possível de cores em que dois intervalos de mesma cor sempre

Leia mais

Estruturas de Dados 2

Estruturas de Dados 2 Estruturas de Dados 2 Técnicas de Projeto de Algoritmos Dividir e Conquistar IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/83 Projeto de Algoritmos por Divisão

Leia mais

Alguns comentários. Segunda prova. Programação dinâmica em grafos. Guloso em grafos. Algoritmos p. 1

Alguns comentários. Segunda prova. Programação dinâmica em grafos. Guloso em grafos. Algoritmos p. 1 Alguns comentários Segunda prova Programação dinâmica em grafos Guloso em grafos Algoritmos p. 1 Problema dos intervalos disjuntos Problema: Dados intervalos [s[1],f[1]),...,[s[n],f[n]), encontrar coleção

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos Aula 01 Complexidade de Algoritmos Edirlei Soares de Lima O que é um algoritmo? Um conjunto de instruções executáveis para resolver um problema (são

Leia mais

Melhores momentos AULA 22. Algoritmos p.824/855

Melhores momentos AULA 22. Algoritmos p.824/855 Melhores momentos AULA 22 Algoritmos p.824/855 Conjuntos disjuntos dinâmicos CLR 22 CLRS 21 Algoritmos p.825/855 Conjuntos disjuntos Seja S = {S 1, S 2,..., S n } uma coleção de conjuntos disjuntos, ou

Leia mais

Análise de algoritmos

Análise de algoritmos Análise de algoritmos Introdução à Ciência da Computação 2 Baseado nos slides do Prof. Thiago A. S. Pardo Algoritmo Noção geral: conjunto de instruções que devem ser seguidas para solucionar um determinado

Leia mais

CT-234. Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

CT-234. Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches CT-234 Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural Carlos Alberto Alonso Sanches Bibliografia T.H. Cormen, C.E. Leiserson and R.L. Rivest Introduction to algorithms R. Sedgewick

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos Aula 10 Métodos de Ordenação de Complexidade Linear Edirlei Soares de Lima Ordenação Problema: Entrada: conjunto de itens a 1, a 2,..., a n ; Saída:

Leia mais

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser executado 1 Fazendo estimativas e simplificações... O número

Leia mais

Análise de algoritmos

Análise de algoritmos Análise de algoritmos Ordenação em tempo linear Prof. Flávio Rogério Uber (UEM/DIN) Autor: Prof. Marco Aurélio Lopes Barbosa (UEM/DIN) Conteúdo Limites inferiores para ordenação por comparações Ordenação

Leia mais

Tópico 5 Algoritmos de Ordenação. Parte II - métodos de ordenação: counting sort, radix sort e bucket sort.

Tópico 5 Algoritmos de Ordenação. Parte II - métodos de ordenação: counting sort, radix sort e bucket sort. Tópico 5 Algoritmos de Ordenação Parte II - métodos de ordenação: counting sort, radix sort e bucket sort. 1 Árvore de Decisão Todos os algoritmos descritos anteriormente utilizam comparações para determinar

Leia mais

AULA 24. Algoritmos p.856/905

AULA 24. Algoritmos p.856/905 AULA 24 Algoritmos p.856/905 Máximo divisor comum CLRS 31.1 e 31.2 Algoritmos p.857/905 Divisibilidade Suponha que a, b e d são números inteiros. Dizemos que d divide a se a = k d para algum número inteiro

Leia mais

1 a Lista de Exercícios

1 a Lista de Exercícios Universidade Federal de Ouro Preto Instituto de Ciências Exatas e Biológicas Programa de Pós-Graduação em Ciência da Computação Projeto e Análise de Algoritmos - 1 o semestre de 2010 Professor: David Menotti

Leia mais

Lista de Exercícios 6: Soluções Funções

Lista de Exercícios 6: Soluções Funções UFMG/ICEx/DCC DCC Matemática Discreta Lista de Exercícios 6: Soluções Funções Ciências Exatas & Engenharias o Semestre de 06 Conceitos. Determine e justifique se a seguinte afirmação é verdadeira ou não

Leia mais

03 Análise de Algoritmos (parte 3) SCC201/501 - Introdução à Ciência de Computação II

03 Análise de Algoritmos (parte 3) SCC201/501 - Introdução à Ciência de Computação II 03 Análise de Algoritmos (parte 3) SCC201/501 - Introdução à Ciência de Computação II Prof. Moacir Ponti Jr. www.icmc.usp.br/~moacir Instituto de Ciências Matemáticas e de Computação USP 2010/2 Moacir

Leia mais

AULA 22. Algoritmos p.793/823

AULA 22. Algoritmos p.793/823 AULA 22 Algoritmos p.793/823 Conjuntos disjuntos dinâmicos CLR 22 CLRS 21 Algoritmos p.794/823 Conjuntos disjuntos Seja S = {S 1, S 2,..., S n } uma coleção de conjuntos disjuntos, ou seja, S i S j = para

Leia mais

Algoritmos e Estrutura de Dados. Algoritmos Prof. Tiago A. E. Ferreira

Algoritmos e Estrutura de Dados. Algoritmos Prof. Tiago A. E. Ferreira Algoritmos e Estrutura de Dados Aula 3 Conceitos Básicos de Algoritmos Prof. Tiago A. E. Ferreira Definição de Algoritmo Informalmente... Um Algoritmo é qualquer procedimento computacional bem definido

Leia mais

Algoritmos de Ordenação: Tempo Linear

Algoritmos de Ordenação: Tempo Linear Algoritmos de Ordenação: Tempo Linear ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 10/2008 Material

Leia mais

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( ) Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista (2.1-2.2) DECOM/UFOP 2013/1 5º. Período Anderson Almeida Ferreira Adaptado do material desenvolvido por Andréa Iabrudi

Leia mais

Algoritmos gulosos (greedy)

Algoritmos gulosos (greedy) Algoritmos gulosos (greedy) CLRS 16.2 Algoritmos p. 1 Algoritmos gulosos A greedy algorithm starts with a solution to a very small subproblem and augments it successively to a solution for the big problem.

Leia mais

Ordenação em Tempo Linear. Leitura: Cormen Capítulo 8

Ordenação em Tempo Linear. Leitura: Cormen Capítulo 8 Ordenação em Tempo Linear Leitura: Cormen Capítulo 8 Revisão Insertion sort: Vantagens Fácil de implementar Rápido em entradas com menos de 50 elementos. Rápido em entradas aproximadamente ordenadas. Desvantagens

Leia mais

Mochila. Dados dois vetores x[1..n] e w[1..n], denotamos por x w o produto escalar

Mochila. Dados dois vetores x[1..n] e w[1..n], denotamos por x w o produto escalar Mochila Dados dois vetores x[1..n] e w[1..n], denotamos por x w o produto escalar w[1]x[1] + w[2]x[2] + + w[n]x[n]. Suponha dado um número inteiro não-negativo W e vetores positivos w[1..n] e v[1..n].

Leia mais

I. Correção de Algoritmos Não-Recursivos

I. Correção de Algoritmos Não-Recursivos I. Correção de Algoritmos Não-Recursivos Nos exercícios a seguir, você deverá demonstrar a correção dos algoritmos por meio dos conceitos vistos nos slides da Aula 03. 1) Prove que o seguinte algoritmo

Leia mais

Teoria dos Grafos Aula 7

Teoria dos Grafos Aula 7 Teoria dos Grafos Aula 7 Aula passada Implementação BFS DFS, implementação Complexidade Aplicações Aula de hoje Classe de funções e notação Propriedades da notação Funções usuais Tempo de execução Comparando

Leia mais

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula Tópicos Introdução Ordenação por bolha (bubble sort)

Leia mais

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 4, 6

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 4, 6 Análise e Síntese de Algoritmos Revisão CLRS, Cap. 4, 6 Contexto Revisão Algoritmos e complexidade Notação Fundamentos: somatórios, logaritmos, etc. Exemplos de algoritmos Ordenação Procura Selecção 2007/2008

Leia mais

Análise de Algoritmos e Estruturas de Dados

Análise de Algoritmos e Estruturas de Dados Análise de Algoritmos e Estruturas de Dados Guilherme Oliveira Mota CMCC - Universidade Federal do ABC g.mota@ufabc.edu.br 21 de julho de 2018 Esta versão é um rascunho ainda em elaboração e não foi revisado

Leia mais

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b.

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b. Lista 1 8 de abril de 2013 1 Exercícios Básicos 1.1 Na bibliografia Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b. 1.2 Outros 1. Projete

Leia mais

Análise de algoritmos

Análise de algoritmos Análise de algoritmos Recorrências Conteúdo Introdução O método mestre Referências Introdução O tempo de execução de um algoritmo recursivo pode frequentemente ser descrito por uma equação de recorrência.

Leia mais

1. O que é a eficiência assintótica de um algoritmo. Explique com suas palavras.

1. O que é a eficiência assintótica de um algoritmo. Explique com suas palavras. Disciplina: Estrutura de Dados II Turma: 4EC/5CC Data: 13/11/15 Nota: Professor: Renato E. N. de Moraes Semestre: 2015-2 Valor: 0,0 pts Aluno: Lista de exercícios 04 1. O que é a eficiência assintótica

Leia mais

Análise de algoritmos. Parte I

Análise de algoritmos. Parte I Análise de algoritmos Parte I 1 Recursos usados por um algoritmo Uma vez que um procedimento está pronto/disponível, é importante determinar os recursos necessários para sua execução Tempo Memória Qual

Leia mais

Análise de Algoritmos e Estruturas de Dados

Análise de Algoritmos e Estruturas de Dados Análise de Algoritmos e Estruturas de Dados Carla Negri Lintzmayer Guilherme Oliveira Mota CMCC Universidade Federal do ABC {carla.negri g.mota}@ufabc.edu.br 12 de junho de 2019 Esta versão é um rascunho

Leia mais

Complexidade Assintótica de Programas Letícia Rodrigues Bueno

Complexidade Assintótica de Programas Letícia Rodrigues Bueno Complexidade Assintótica de Programas Letícia Rodrigues Bueno Análise de Algoritmos 1. Introdução; Análise de Algoritmos 1. Introdução; 2. Conceitos básicos; Análise de Algoritmos 1. Introdução; 2. Conceitos

Leia mais

Análise de algoritmos. Parte I

Análise de algoritmos. Parte I Análise de algoritmos Parte I 1 Procedimento X Algoritmo Procedimento: sequência finita de instruções, que são operações claramente descritas, e que podem ser executadas mecanicamente, em tempo finito.

Leia mais

Classes, Herança e Interfaces

Classes, Herança e Interfaces Escola de Artes, Ciências e Humanidades EACH-USP ACH2002 Introdução à Ciência da Computação II Professor: Delano Medeiros Beder revisada pelo professor: Luciano Digiampietri EACH Segundo Semestre de 2011

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos A. G. Silva Baseado nos materiais de Souza, Silva, Lee, Rezende, Miyazawa Unicamp Ribeiro FCUP Mariani UFSC Manber, Introduction to Algorithms (1989) Livro 16 de março de

Leia mais

Estruturas de Dados 2

Estruturas de Dados 2 Estruturas de Dados 2 Algoritmos de Ordenação em Tempo Linear IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/38 Algoritmos de Ordenação em Tempo Linear Limite Assintótico

Leia mais

7. Introdução à Complexidade de Algoritmos

7. Introdução à Complexidade de Algoritmos 7. Introdução à Complexidade de Algoritmos Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 7. Introdução à Complexidade de Algoritmos Estruturas de Dados 1 / 1 Análise de Algoritmos

Leia mais

Algoritmos de Ordenação. Cota inferior. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO

Algoritmos de Ordenação. Cota inferior. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO Algoritmos de Ordenação Cota inferior Professora: Fátima L. S. Nunes 1 1 1 Algoritmos de Ordenação Algoritmos de ordenação que já conhecemos: 2 2 2 Algoritmos de Ordenação Algoritmos de ordenação que já

Leia mais

Aula 19: Métodos eficientes de ordenação

Aula 19: Métodos eficientes de ordenação Algoritmos e Estruturas de Dados I Aula 19: Métodos eficientes de ordenação (Merge sort e Quick sort) Prof. Jesús P. Mena-Chalco jesus.mena@ufabc.edu.br 1Q-2019 1 Intercalando 2 vetores ordenados 2 Intercalando

Leia mais

Melhores momentos AULA PASSADA. Complexidade Computacional p. 136

Melhores momentos AULA PASSADA. Complexidade Computacional p. 136 Melhores momentos AULA PASSADA Complexidade Computacional p. 136 Configurações controle q 7 cabeça 1 0 1 1 0 1 1 1 fita de leitura e escrita Configuração 1 0 1q 7 1 0 1 1 1 Complexidade Computacional p.

Leia mais

Os métodos de ordenação que ordenam os elementos in situ podem ser classificados em três principais categorias:

Os métodos de ordenação que ordenam os elementos in situ podem ser classificados em três principais categorias: ORDENAÇÃO A atividade de ordenação é o processo de rearranjo de um certo conjunto de objetos de acordo com um critério (ordem) específico. O objetivo da ordenação é facilitar a localização dos membros

Leia mais

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013 Lista 1 - PMR2300 Fabio G. Cozman 3 de abril de 2013 1. Qual String é impressa pelo programa: p u b l i c c l a s s What { p u b l i c s t a t i c void f ( i n t x ) { x = 2 ; p u b l i c s t a t i c void

Leia mais

Algoritmos gulosos (greedy) CLRS Cap 16 e KT Cap 4

Algoritmos gulosos (greedy) CLRS Cap 16 e KT Cap 4 Algoritmos gulosos (greedy) CLRS Cap 16 e KT Cap 4 Algoritmos gulosos A greedy algorithm starts with a solution to a very small subproblem and augments it successively to a solution for the big problem.

Leia mais

Mochila. Dados dois vetores x[1..n] e w[1..n], denotamos por x w o produto escalar

Mochila. Dados dois vetores x[1..n] e w[1..n], denotamos por x w o produto escalar Mochila Dados dois vetores x[1..n] e w[1..n], denotamos por x w o produto escalar w[1]x[1] + w[2]x[2] + + w[n]x[n]. Suponha dado um número inteiro não-negativo W e vetores positivos w[1..n] e v[1..n].

Leia mais

Análise de algoritmos

Análise de algoritmos Análise de algoritmos Introdução à Ciência de Computação II Baseados nos Slides do Prof. Dr. Thiago A. S. Pardo Análise de algoritmos Existem basicamente 2 formas de estimar o tempo de execução de programas

Leia mais

Aula 19 Conjuntos disjuntos (Union-find)

Aula 19 Conjuntos disjuntos (Union-find) MC3305 Algoritmos e Estruturas de Dados II Aula 19 Conjuntos disjuntos (Union-find) Prof. Jesús P. Mena-Chalco jesus.mena@ufabc.edu.br 2Q-2015 1 Números de Ackermann 2 3 Ackermann A função de Ackermann

Leia mais

Algoritmos de Ordenação: Cota Inferior

Algoritmos de Ordenação: Cota Inferior Algoritmos de Ordenação: Cota Inferior ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 10/2008 Material

Leia mais

Métodos de Ordenação Parte 4

Métodos de Ordenação Parte 4 Métodos de Ordenação Parte 4 Introdução à Ciência de Computação II Prof. Diego Raphael Amancio Baseado no material do Prof. Rudinei Goularte e Prof. Thiago A. S. Pardo 1 Ordenação por Intercalação Revisando...

Leia mais

Melhores momentos AULA 24. Algoritmos p.906/953

Melhores momentos AULA 24. Algoritmos p.906/953 Melhores momentos AULA 24 Algoritmos p.906/953 Problemas polinomiais Analise de um algoritmo em um determinado modelo de computação estima o seu consumo de tempo e quantidade de espaço como uma função

Leia mais

Teoria da Computação. Aula 3 Comportamento Assintótico 5COP096. Aula 3 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

Teoria da Computação. Aula 3 Comportamento Assintótico 5COP096. Aula 3 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr 5COP096 Teoria da Computação Aula 3 Prof. Dr. Sylvio Barbon Junior 1 Sumário 1) Exercícios Medida de Tempo de Execução. 2) Comportamento Assintótico de Funções. 3) Exercícios sobre Comportamento Assintótico

Leia mais

Introdução à Análise Algoritmos

Introdução à Análise Algoritmos Introdução à Análise Algoritmos Notas de aula da disciplina IME 4-182 Estruturas de Dados I Paulo Eustáquio Duarte Pinto (pauloedp arroba ime.uerj.br) abril/218 Ordenação por SELEÇÃO: Idéia: Dado um vetor

Leia mais

QuickSort CI/2015. Análise e Projeto de Algoritmos. - Prof. Lucídio A. F. Cabral

QuickSort CI/2015. Análise e Projeto de Algoritmos. - Prof. Lucídio A. F. Cabral QuickSort 1 Quicksort A[p q] A[q+1 r] Ordena um vetor A[p r] Divisão Particiona um vetor A em 2 subvetores A[p..q] e A[q+1..r], de tal modo que cada elemento de A[p..q] seja menor ou igual a cada elemento

Leia mais

Quantidade de memória necessária

Quantidade de memória necessária Tempo de processamento Um algoritmo que realiza uma tarefa em 10 horas é melhor que outro que realiza em 10 dias Quantidade de memória necessária Um algoritmo que usa 1MB de memória RAM é melhor que outro

Leia mais

QUESTÕES DE PROVAS ANTIGAS

QUESTÕES DE PROVAS ANTIGAS CT-24 QUESTÕES DE PROVAS ANTIGAS ) Preencha a tabela abaixo com Î ou Ï: ω(log n) Θ(n) O(n log n) Ω(n 2 ) o(n ) 6n + 2n 2 + 2.log n + 4n + n.log n + log n 2) Dada a árvore binária abaixo, escreva os seus

Leia mais

Estruturas de Dados 2

Estruturas de Dados 2 Estruturas de Dados 2 Recorrências IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/31 Recorrências Análise da Eficiência de Algoritmos: Velocidade de Execução; Análise

Leia mais

Notação Assintótica Letícia Rodrigues Bueno

Notação Assintótica Letícia Rodrigues Bueno Notação Assintótica Letícia Rodrigues Bueno Notação Assintótica Para valores suficientemente pequenos de n, qualquer algoritmo custa pouco para ser executado, mesmo os algoritmos ineficientes; Notação

Leia mais

Lista de exercícios sobre contagem de operações Prof. João B. Oliveira

Lista de exercícios sobre contagem de operações Prof. João B. Oliveira Lista de exercícios sobre contagem de operações Prof. João B. Oliveira 1. metodo m ( Vetor V ) int i, res = 0; para i de 1 a V.size res = res + V[i]; return res; Soma de elementos de um vetor, O( ). 2.

Leia mais

Complexidade de Algoritmos

Complexidade de Algoritmos Complexidade de Algoritmos! Uma característica importante de qualquer algoritmo é seu tempo de execução! é possível determiná-lo através de métodos empíricos, considerando-se entradas diversas! é também

Leia mais

5. Análise de Complexidade de Algoritmos. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006)

5. Análise de Complexidade de Algoritmos. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006) 5. Análise de Complexidade de Algoritmos João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006) FEUP - MIEEC Prog 2-2006/2007 Introdução Algoritmo: conjunto

Leia mais

LISTA DE EXERCÍCIOS 1

LISTA DE EXERCÍCIOS 1 UFMG/ICEx/DCC Algoritmos e Estruturas de Dados II LISTA DE EXERCÍCIOS 1 Graduação (Ciências Exatas & Engenharias) 1 o Semestre de 2007 Exercícios a serem entregues: 2, 4, 9, 12, 13, 17, 18, 19, 21, 22.

Leia mais

Estruturas de Dados Algoritmos

Estruturas de Dados Algoritmos Estruturas de Dados Algoritmos Prof. Eduardo Alchieri Algoritmos (definição) Sequência finita de instruções para executar uma tarefa Bem definidas e não ambíguas Executáveis com uma quantidade de esforço

Leia mais

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO Disciplina: Estrutura de Dados II Turma: 4EC/5CC Data: 13/11/15 Nota: Professor: Renato E. N. de Moraes Semestre: 2015-2 Valor: 0,0 pts Aluno: Lista de exercícios 04 1. O que é a eficiência assintótica

Leia mais

5. Invólucros Convexos no Plano (cont )

5. Invólucros Convexos no Plano (cont ) 5. Invólucros Convexos no Plano (cont ) Antonio Leslie Bajuelos Departamento de Matemática Universidade de Aveiro Mestrado em Matemática e Aplicações Complexidade Algorítmica Notação O Sejam T(n) e f(n)

Leia mais

Teoria da Computação Aula 9 Noções de Complexidade

Teoria da Computação Aula 9 Noções de Complexidade Teoria da Computação Aula 9 Noções de Complexidade Prof. Esp. Pedro Luís Antonelli Anhanguera Educacional Análise de um Algoritmo em particular Qual é o custo de usar um dado algoritmo para resolver um

Leia mais

Análise e Complexidade de Algoritmos

Análise e Complexidade de Algoritmos Análise e Complexidade de Algoritmos Professor Ariel da Silva Dias Algoritmos Divisão e Conquista Construção incremental Resolver o problema para um sub-conjunto dos elementos de entrada; Então, adicionar

Leia mais

Algoritmos de Ordenação: QuickSort

Algoritmos de Ordenação: QuickSort Algoritmos de Ordenação: QuickSort ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 10/2008 Material

Leia mais

Ordenação em Tempo Linear

Ordenação em Tempo Linear Ordenação em Tempo Linear Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 19 Algoritmos e Estruturas de Dados I Ordenação em tempo linear Algoritmos de ordenação por comparação: InsertSort; Quicksort;

Leia mais