A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Paradigma de Divisão e Conquista

Apresentações semelhantes


Apresentação em tema: "Paradigma de Divisão e Conquista"— Transcrição da apresentação:

1 Paradigma de Divisão e Conquista
II Trabalho Prático da Disciplina de ATP II Gustavo Eloi, Taygor Pradella

2 Introdução Através do estudo de algoritmos baseados no método de Divisão e Conquista pode-se notar a eficiência desta ideia em diversas aplicações. A multiplicação com números muito grandes, ao contrário do que se pressupõe, se torna mais eficiente a partir de números de grandes de dimensões. Tratando-se de algoritmos já existente, é possível a leitura e compreensão dos métodos em sites diversos, assim o método utilizado para o QuickSort difere do esquema padrão.

3 Divisão e Conquista Esta técnica consiste em dividir um problema maior recursivamente em problemas menores até que o problema possa ser resolvido diretamente. Então a solução do problema inicial é dada através da combinação dos resultados de todos os problemas menores computados. Vários problemas podem ser solucionados através desta técnica, como o de ordenação que trataremos neste trabalho.

4 Divisão e Conquista PROBLEMA SUBPROBLEMA SUB SOLUÇÃO SOLUÇÃO SOLUÇÃO
Conquistar: Combinar: PROBLEMA SUBPROBLEMA SUB SOLUÇÃO SOLUÇÃO SOLUÇÃO

5 Multiplicação de inteiros
Apresentação do Pseudocódigo:  Karatsuba-Ofman (u, v, n) 1  se  n ≤ 3 2  então  devolva u · v 3  senão  m ← ⌈n/2⌉ 4  p ← ⌊u/10m⌋ 5  q ← u mod 10m 6  r ← ⌊v/10m⌋ 7  s ← v mod 10m 8  pr ← Karatsuba-Ofman (p, r, m) 9  qs ← Karatsuba-Ofman (q, s, m) 10  y ← Karatsuba-Ofman (p+q, r+s, m+1) 11  x ← pr · 102m + (y − pr − qs) · 10m + qs 12  devolva  x

6 Descrição detalhada Sejam u e v dois números com no máximo n dígitos cada. Suponha, por enquanto, que n é par. Seja p o número formado pelos n/2 primeiros dígitos (dígitos mais significativos) de ue seja q o número formado pelos n/2 últimos dígitos (dígitos menos significativos) de u. Assim, u   =   p 10n/2 + q . Defina r e s analogamente para v, de modo que v = r 10n/2 + s.  Teremos então uv  =  pr 10n + (ps+qr) 10n/2 + qs .

7 Descrição detalhada Esta expressão reduz a multiplicação de dois números com no máximo n dígitos cada a quatro multiplicações (a saber, p por r, p por s, q por r e q por s) de números com no máximo n/2 dígitos cada.  Infelizmente, essa redução não é suficiente para tornar a multiplicação mais eficiente. Agora observe que os três números de que precisamos do lado direito de (*) — a saber  pr,  (ps+qr)  e  qs — podem ser obtidos com apenas três multiplicações, pois ps + qr   =   y  −  pr  −  qs ,    sendo  y  =  (p+q)(r+s),  e portanto a equação (*) pode ser substituída por uv   =   pr 10n + ( y − pr − qs) 10n/2 + qs .

8 Conclusão do Método É bem verdade que esta equação envolve duas adições e duas subtrações adicionais, mas essas operações consomem muito menos tempo que as multiplicações. Se n não é par, basta trocar n/2 por k = ⌈n/2⌉.  Teremos então  u = p 10k + q  e  v = r 10k + s  e portanto uv  =  pr 102k + ( y − pr − qs) 10k + qs . Esta é a base do algoritmo.

9 Algoritmo de QuickSort
Este método baseia-se na divisão da tabela em duas sub-tabelas, dependendo de um elemento chamado pivô, normalmente o 1º elemento da tabela. Uma das sub-tabelas contém os elementos menores que o pivô enquanto a outra contém os maiores. O pivô é colocado entre ambas, ficando na posição correcta. As duas sub-tabelas são ordenadas de forma idêntica, até que se chegue à tabela com um só elemento.

10 Descrição detalhada Quicksort (A, p, r) 1 se p < r
Apresentação do Pseudocódigo: O Quicksort é um algoritmo de ordenação: ele recebe um vetor A[p..r] e rearranja o vetor em ordem crescente. Quicksort (A, p, r) 1   se  p < r 2   então  q ← Separe (A, p, r) 3   Quicksort (A, p, q) 4   Quicksort (A, q+1, r) Obs: q ≥ p e q < r;  portanto os vetores A[p..q] e A[q+1 .. r] são estritamente menores que o vetor original A[p..r].  Isso garante que a execução do algoritmo termina, mais cedo ou mais tarde.

11 Descrição detalhada O algoritmo Separe rearranja o vetor A[p..r] e determinar um índice q tal que p ≤ q e cada elemento de A[p..q] é menor ou igual a x , q < r e cada elemento de A[q+1 .. r] é maior ou igual a x para algum x. O número x é o pivô da separação.   Separe (A, p, r) 1   x ← A[p] 2   i ← p−1 3   j ← r+1 4   enquanto 0 = 0 faça 5   repita j ← j−1 6   até que A[j] ≤ x 7   repita i ← i+1 8   até que A[i] ≥ x 9   se i < j 10   então troque A[i] ↔ A[j] 11   senão devolva j

12 Descrição detalhada p i j r ≤ x ≥ x
Para entender como e por que o algoritmo funciona como deveria, observe que no início de cada iteração do loop que começa na linha 4 temos as seguintes propriedades invariantes: A[p..i] ≤ x ,    i < j ,    A[j..r] ≥ x . Na última passagem pela linha 4, o vetor A[i+1 .. j−1] consiste em zero ou mais elementos < x  seguidos de zero ou mais elementos > x     ou zero ou mais elementos < x ,  seguidos de exatamente um elemento igual a x , seguido de zero ou mais elementos > x . p i j r ≤ x ≥ x

13 Descrição detalhada No primeiro caso, o algoritmo chega à linha 11 com j = i−1. No segundo caso, o algoritmo chega à linha 11 com j = i. Assim o algoritmo cumpre sua função; em particular, que p ≤ j <r na linha 11. p j i r ≤ x ≥ x p j=i r ≤ x = x ≥ x

14 Visualização do Método e comparação com Bubble


Carregar ppt "Paradigma de Divisão e Conquista"

Apresentações semelhantes


Anúncios Google