Algoritimos e Estruturas de Dados III CIC210 Divisão e Conquista Haroldo Gambini Santos Concurso Universidade Federal de Ouro Preto - UFOP 3 de setembro de 2009 Haroldo Gambini Santos Divisão e Conquista 1/21
Conteúdo 1 Introdução 2 Exemplos Busca Binária Quicksort 3 Resolvendo Recorrências O Método Mestre Haroldo Gambini Santos Divisão e Conquista 2/21
Seção 1 Introdução 2 Exemplos Busca Binária Quicksort 3 Resolvendo Recorrências O Método Mestre
Técnica de Divisão e Conquista Passos Básicos Dividir Dividir o problema em uma ou mais subproblemas Haroldo Gambini Santos Divisão e Conquista 3/21
Técnica de Divisão e Conquista Passos Básicos Dividir Dividir o problema em uma ou mais subproblemas Conquistar Resolver os subproblemas caso esses sejam sucientemente pequenos, caso contrário continuar a divisão Haroldo Gambini Santos Divisão e Conquista 3/21
Técnica de Divisão e Conquista Passos Básicos Dividir Dividir o problema em uma ou mais subproblemas Conquistar Resolver os subproblemas caso esses sejam sucientemente pequenos, caso contrário continuar a divisão Combinar Soluções dos subproblemas para a solução do problema original Haroldo Gambini Santos Divisão e Conquista 3/21
Divisão e Conquista Haroldo Gambini Santos Divisão e Conquista 4/21
Divisão e Conquista Haroldo Gambini Santos Divisão e Conquista 4/21
Divisão e Conquista Haroldo Gambini Santos Divisão e Conquista 4/21
Divisão e Conquista Haroldo Gambini Santos Divisão e Conquista 4/21
Divisão e Conquista Haroldo Gambini Santos Divisão e Conquista 4/21
Divisão e Conquista Haroldo Gambini Santos Divisão e Conquista 4/21
Divisão e Conquista Haroldo Gambini Santos Divisão e Conquista 4/21
Divisão e Conquista Haroldo Gambini Santos Divisão e Conquista 4/21
Divisão e Conquista Haroldo Gambini Santos Divisão e Conquista 4/21
Divisão e Conquista Haroldo Gambini Santos Divisão e Conquista 4/21
Divisão e Conquista Haroldo Gambini Santos Divisão e Conquista 4/21
Divisão e Conquista 1 2 3 4 5 6 7 8 9 10 11 função divconq( x ) se x é sucientemente pequeno então retorna resolver(x) ; senão decomponha x em k conjuntos menores: x 1, x 2,..., x k ; para i=1 até k faça y i = divconq( x i ); m combine o resultados de y 1, y 2,..., y k ; retorne y; m Haroldo Gambini Santos Divisão e Conquista 5/21
Divisão e Conquista Vantagens Eciência do algoritmo Haroldo Gambini Santos Divisão e Conquista 6/21
Divisão e Conquista Vantagens Eciência do algoritmo Tratamento da complexidade Haroldo Gambini Santos Divisão e Conquista 6/21
Divisão e Conquista Vantagens Eciência do algoritmo Tratamento da complexidade Paralelismo Haroldo Gambini Santos Divisão e Conquista 6/21
Divisão e Conquista Vantagens Eciência do algoritmo Tratamento da complexidade Paralelismo Acesso à memória Haroldo Gambini Santos Divisão e Conquista 6/21
Seção 1 Introdução 2 Exemplos Busca Binária Quicksort 3 Resolvendo Recorrências O Método Mestre
Subseção 1 Introdução 2 Exemplos Busca Binária Quicksort 3 Resolvendo Recorrências O Método Mestre
Entrada Entrada: 2 inteiros, x e y representados em n bits. Algoritmo trivial Θ(n 2 ) Haroldo Gambini Santos Divisão e Conquista 7/21
Entrada Entrada: 2 inteiros, x e y representados em n bits. Algoritmo trivial Θ(n 2 ) Pode-se melhorar? Haroldo Gambini Santos Divisão e Conquista 7/21
Entrada Entrada: 2 inteiros, x e y representados em n bits. Algoritmo trivial Θ(n 2 ) Pode-se melhorar? SIM, ao menos comportamento assintotico. Haroldo Gambini Santos Divisão e Conquista 7/21
Passo 1 Dividir os números x e y em duas partes: x = 2 n 2 a + b y = 2 n 2 c + d Haroldo Gambini Santos Divisão e Conquista 8/21
Passo 1 Dividir os números x e y em duas partes: x = 2 n 2 a + b y = 2 n 2 c + d Obtemos xy = 2 n ac + 2 n 2 (ad + bc) + bd Haroldo Gambini Santos Divisão e Conquista 8/21
Continuando xy = 2 n ac + 2 n 2 (ad + bc) + bd 4 multiplicações Haroldo Gambini Santos Divisão e Conquista 9/21
Continuando xy = 2 n ac + 2 n 2 (ad + bc) + bd 4 multiplicações Alternativa x 1 = multiplica(a, c) x 2 = multiplica(b, d) x 3 = multiplica(a + b, c + d) x 1 x 2 Haroldo Gambini Santos Divisão e Conquista 9/21
Alternativa x 1 = multiplica(a, c) x 2 = multiplica(b, d) x 3 = multiplica(a + b, c + d) x 1 x 2 Recorrência T (n) = 3T ( n 2 ) + Θ(n) Θ(n 1.59 ) Haroldo Gambini Santos Divisão e Conquista 10/21
1 função multiplicainteiros( x, y, n ) 2 // x e y são vetores binários de tamanho n Saída: vetor binário z com o resultado da multiplicação 3 se n == 1 então 4 retorne xy; 5 m 6 x L = n bits à esquerda de x; 7 2 x R = n bits à direita de x; 8 y 2 L = n bits à esquerda de y; 9 y 2 R = n bits à direita de y; 10 P 2 1 = multiplicainteiros(x L, y L, n ) 2 ; 11 P 2 = multiplicainteiros(x R, y R, n ) 2 ; 12 P 3 = multiplicainteiros(x L + y R, x L + y R, n ) 2 ; 13 retorne P 1 2 n + (P 3 P 1 P 2) 2 n 2 + P2 Haroldo Gambini Santos Divisão e Conquista 11/21
Subseção 1 Introdução 2 Exemplos Busca Binária Quicksort 3 Resolvendo Recorrências O Método Mestre
Busca Binária Busca Binária 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 função buscabin( V [], n, chave ) // V deve ser um vetor ordenado com posições 0,..., n 1 Saída: posição de V com valor igual a chave ou -1 l = 0; r = n 1; enquanto l r faça m = (l+r) ; 2 se V [m] == chave então retorne m; senão se chave < V [m] então r = m - 1; senão l = m + 1; m m m retorne 1; Haroldo Gambini Santos Divisão e Conquista 12/21
Busca Binária Busca Binária Exemplo chave 31 V[i] = 3 14 27 31 39 42 55 70 74 81 85 93 98 i 0 1 2 3 4 5 6 7 8 9 10 11 12 it. 1 l m r it. 2 l m r it. 3 l m r it. 4 l m r Haroldo Gambini Santos Divisão e Conquista 13/21
Busca Binária Busca Binária Comentários número de possíveis índices: r l + 1 reduz-se pela metade (ou mais) a cada iteração nr. de vezes que n é divido por 2 até que n < 1 lg n Haroldo Gambini Santos Divisão e Conquista 14/21
Subseção 1 Introdução 2 Exemplos Busca Binária Quicksort 3 Resolvendo Recorrências O Método Mestre
Quicksort Quicksort 1 2 3 4 5 6 função quicksort( V [l,..., r] ) se l < r então p = partition( V [l,..., r] ); quicksort(v[l,...,p-1]); quicksort(v[p+1,...,r]); m Haroldo Gambini Santos Divisão e Conquista 15/21
Quicksort Quicksort 1 2 3 4 5 6 7 8 9 10 11 12 13 função partition( V [l,..., r] ) pivot = V [l]; i = l; j = r + 1; repita repita i = i + 1 até que V [i] pivot; repita j = j 1 até que V [j] pivot; se i < j então troque V [i] e V [j] m até i j ; troque V [l] e V [j]; retorne j; Haroldo Gambini Santos Divisão e Conquista 16/21
Quicksort Quicksort Exemplo 5 3 1 9 8 2 7 4 2 3 1 4 *5 8 7 9 1 *2 3 4 7 *8 8 3 4 Haroldo Gambini Santos Divisão e Conquista 17/21
Seção 1 Introdução 2 Exemplos Busca Binária Quicksort 3 Resolvendo Recorrências O Método Mestre
Resolvendo Recorrências Padrão Genérico Problema é sucessivamente: Dividido em a subproblemas Cada subproblema de tamanho n b Haroldo Gambini Santos Divisão e Conquista 18/21
Resolvendo Recorrências tamanho n divisão em a subproblemas tamanho n/b tamanho n/b 2...... profundidade log b n... tamanho 1 largura a log b n Haroldo Gambini Santos Divisão e Conquista 19/21
Subseção 1 Introdução 2 Exemplos Busca Binária Quicksort 3 Resolvendo Recorrências O Método Mestre
O Método Mestre O Método Mestre Utilidade Caracterizar assintoticamente um algoritmo recursivo Permite resolver recorrências que aparecem em algoritmos do tipo D e C Formato T (n) = at ( n b ) + O(nd ) a: número de subproblemas (> 1) n b : tamanho de cada subproblema (b > 1) custo de dividir o problema e de se combinar os resultados (d 0) Haroldo Gambini Santos Divisão e Conquista 20/21
O Método Mestre O Método Mestre Utilidade Caracterizar assintoticamente um algoritmo recursivo Permite resolver recorrências que aparecem em algoritmos do tipo D e C Formato T (n) = at ( n b ) + O(nd ) a: número de subproblemas (> 1) n b : tamanho de cada subproblema (b > 1) custo de dividir o problema e de se combinar os resultados (d 0) Haroldo Gambini Santos Divisão e Conquista 20/21
O Método Mestre O Método Mestre Utilidade Caracterizar assintoticamente um algoritmo recursivo Permite resolver recorrências que aparecem em algoritmos do tipo D e C Formato T (n) = at ( n b ) + O(nd ) a: número de subproblemas (> 1) n b : tamanho de cada subproblema (b > 1) custo de dividir o problema e de se combinar os resultados (d 0) Haroldo Gambini Santos Divisão e Conquista 20/21
O Método Mestre O Método Mestre Utilidade Caracterizar assintoticamente um algoritmo recursivo Permite resolver recorrências que aparecem em algoritmos do tipo D e C Formato T (n) = at ( n b ) + O(nd ) a: número de subproblemas (> 1) n b : tamanho de cada subproblema (b > 1) custo de dividir o problema e de se combinar os resultados (d 0) Haroldo Gambini Santos Divisão e Conquista 20/21
O Método Mestre O Método Mestre T (n) T (n) = at ( n b ) + O(nd ) Limitação assintotica de T (n) O(n d ) T (n) = O(n d log n) O(n log b a ) se d > log b a se d = log b a se d < log b a Haroldo Gambini Santos Divisão e Conquista 21/21