140 likes | 298 Views
Paradigma de Divisão e Conquista. II Trabalho Prático da Disciplina de ATP II Gustavo Eloi , Taygor Pradella. 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.
E N D
Paradigma de Divisão e Conquista II Trabalho Prático da Disciplina de ATP II Gustavo Eloi, Taygor Pradella
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 QuickSortdifere do esquema padrão.
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.
Divisão e Conquista • Divisão: • Conquistar: • Combinar:
Multiplicação de inteiros • Apresentação do Pseudocódigo:
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 .
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 .
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. Sen 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.
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.
Descrição detalhada • 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. 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.
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.
Descrição detalhada • 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 ax , seguido de zero ou mais elementos > x .
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.