ANÁLISE DE ALGORITMOS
|
|
- Isabela Lopes Amaral
- 6 Há anos
- Visualizações:
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 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 maisMelhores 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 maisAula 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 maisAULA 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 maisMelhores 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 maisProjeto 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 maisOrdenaçã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 maisAná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 maisANÁ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 maisAná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 maisMediana. 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 maisBucketsort. 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 maisAná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 maisAULA 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 maisProjeto 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 maisProgramaçã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 maisAná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 maisAlgoritmos 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 maisAná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 maisBusca 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 maisConjuntos 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 maisTó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 maisProjeto 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 maisMelhores 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 maisAULA 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 maisProjeto 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 maisAná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 maisAlgoritmos 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 maisAula 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 maisMergesort. 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 maisAula 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 maisColoraçã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 maisEstruturas 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 maisAlguns 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 maisProjeto 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 maisMelhores 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 maisAná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 maisCT-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 maisProjeto 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 executado 1 Fazendo estimativas e simplificações... O número
Leia maisAná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 maisTó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 maisAULA 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 mais1 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 maisLista 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 mais03 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 maisAULA 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 maisAlgoritmos 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 maisAlgoritmos 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 maisProjeto 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 maisAlgoritmos 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 maisOrdenaçã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 maisMochila. 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 maisI. 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 maisTeoria 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 maisUniversidade 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 maisAná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 maisAná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 maisLista 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 maisAná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 mais1. 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 maisAná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 maisAná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 maisComplexidade 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 maisAná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 maisClasses, 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 maisProjeto 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 maisEstruturas 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 mais7. 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 maisAlgoritmos 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 maisAula 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 maisMelhores 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 maisOs 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 maisLista 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 maisAlgoritmos 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 maisMochila. 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 maisAná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 maisAula 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 maisAlgoritmos 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 maisMé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 maisMelhores 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 maisTeoria 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 maisIntroduçã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 maisQuickSort 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 maisQuantidade 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 maisQUESTÕ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 maisEstruturas 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 maisNotaçã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 maisLista 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 maisComplexidade 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 mais5. 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 maisLISTA 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 maisEstruturas 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 maisUNIVERSIDADE 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 mais5. 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 maisTeoria 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 maisAná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 maisAlgoritmos 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 maisOrdenaçã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