ISUTIC 2017 Algoritmos de ordenação em forma paralela. Docente: MSc. Angel Alberto Vazquez Sánchez
Bibliografía A. Grama, Introduction to parallel computing. Pearson Education, 2003. I. Foster, Designing and Building Parallel Programs: Concepts and Tools for Parallel Software Engineering, 1st ed. Addison Wesley, 1995. Parallel Programming in Java, Coursera Course.
Introdução A ordenação é um das operações mas realizadas por um computador. devido a que os dados ordenados que são mais fáceis de manipular que os dados ordenados aleatoriamente, muitos algoritmos requerem dados ordenados. Ordenar que é de uma importância adicional para a computação paralela devido a sua próxima relação à tarefa de enrutar dados entre processos, o qual é uma parte essencial de muitos algoritmos paralelos. Muitos algoritmos paralelos foram investigados para uma variedade de arquitetura de computadores paralelos.
Ordenação A ordenação é definida como a tarefa de organizar uma coleção desorganizada de elementos em ordem monotonamente crescente (decrescente).
Ordenação Especificamente, seja S= a 1, a 2,, a n uma seqüência de n elementos em uma ordem arbitrária; a ordenação transforma S em uma seqüência monotonamente crescente S= a' 1, a' 2,,a' n tal que a' i a' j para 1 i j n, e S é uma permutação do S.
Ordenação Os algoritmos de ordenação estão categorizados como internos ou externos. Na ordenação interna, o numero de elementos a ser ordenado é pequena e suficiente para ajustarse na memória do processo principal. Em contraste, algoritmo de ordenação externa usa armazenamento auxiliar (como o disco rígido) para ordenar devido a que o número de elementos a ser ordenados que é muito grande para ajustar-se à memória.
Ordenação Os algoritmos de ordenação podem categorizar-se como apoiados em comparação e não apoiados em comparação: Nos algoritmos apoiados em comparação, ordena uma seqüência desordenada de elementos mediante a comparação de pares de elementos repetidamente, e se não estarem na ordem correta se intercambiam. Esta operação fundamental é chamada compara-intercambia. O limite inferior da complexidade seqüencial para qualquer algoritmo de ordenação apoiada em comparação é Θ(n log n) onde n é o número de elementos a ordenar.
Ordenação Os algoritmos de ordenação podem categorizar-se como apoiados em comparação e não apoiados em comparação: Os algoritmos não apoiados em comparação ordenam usando certas propriedades conhecidas dos elementos (tais como sua representação binária ou sua distribuição). O limite inferior de complexidade para estes algoritmos é Θ(n)
Problemas na ordenação em computadores paralelas Paralelizar um algoritmo de ordenação seqüencial implica distribuir os elementos a ordenar nos processos disponíveis. Este processo provoca um grupo de problemas que se devem resolver para fazer mais clara a apresentação dos algoritmos paralelos.
Problemas na ordenação em computadores paralelas Onde a seqüências de entrada e saída são armazenadas? Nos algoritmos de ordenação seqüencia, as seqüências de entrada e saída são armazenados na memória do processo. Entretanto, na ordenação paralela há dois lugares onde estas seqüências podem residir. Estas podem ser armazenadas em só um dos processos ou pode ser distribuída entre processos. A última aproximação é particularmente útil se a ordenação for um passo imediato de outro algoritmo.
Problemas na ordenação em computadores paralelas Como a comparação é realizada? Um algoritmo de ordenação seqüencial pode facilmente realizar uma comparación-intercambio de dois elementos porque eles estão armazenados localmente na memória do processo. Nos algoritmos de ordenação paralela, este passo não é tão fácil. Se os elementos residirem no mesmo processo, a comparação é realizada facilmente. Mas se os elementos residem em processos diferentes a situação se torna mais complicada
Problemas na ordenação em computadores paralelas Como a comparação é realizada? Um elemento por processo compare-exchange mais de um elemento por processo compare-split
Ordenação Borbulha e seus variantes O algoritmo de ordenação seqüencial borbulha compara e intercambia elementos adjacentes na seqüência a ser ordenada. Dada uma seqüência <a 1, a 2,..., a n >, o primeiro algoritmo realiza n-1 operações de comparación-intercambio na seguinte ordem:(a 1, a 2 ), (a 2, a 3 ),..., (a n-1, a n ). Este passo move o elemento maior ao final da seqüência. O último elemento da seqüência transformada é ignorado e a série de comparación-intercambio é aplicada à seqüência resultante.
Ordenação Borbulha e seus variantes A seqüência é ordenada logo depois de n-1 reiterações. Podemos melhorar o rendimento do a ordenação borbulha terminando quando não se realizarem intercâmbios durante uma reiteração. Uma reiteração no ciclo interno da ordenação borbulha toma uma tempo de Θ(n), e realizamos um total de Θ(n) reiterações; por isso a complexidade da ordenação por borbulha é Θ(n 2 ). A ordenação borbulha é difícil de paralelizar.
Ordenação Borbulha e seus variantes
Ordenação Borbulha e seus variantes Odd-Even Transposition O algoritmo odd-even transposition ordena n elementos em n fases (n é par), cada uma das quais requer de n/2 operações de comparação - intercâmbio. Este algoritmo alterna entre dois passes chamadas fases odd e even.
Ordenação Borbulha e seus variantes Seja <a 1, a 2,..., a n > a seqüência a ser ordenada. Durante a fase odd, elementos com índices ímpares são comparados com seus vizinhos, e se não estarem em ordem eles são intercambiados; isto é: os pares (a 1, a 2 ), (a 3, a 4 ),..., (a n-1, a n ) são comparados-intercambiados (assumindo que n é par). Similarmente, duranta a fase even, elementos com índice par é comparado com seu vizinho direito, e se não estarem em ordem são intercambiadas; isto é: os pares (a 2, a 3 ), (a 4, a 5 ),..., (a n-2, a n-1 ) são comparados-intercambiados. Logo depois de n fases de intercâmbios odd-even, a seqüência está ordenada.
Odd-Even Transposition Cada fase del algoritmo (tanto odd como even) requiere de Θ(n) comparaciones, y hay un total de n fases; por tanto, la complejidad secuencial es Θ(n 2 ). Cada fase do algoritmo (tanto odd como even) requer de Θ(n) comparações, e há um total de n fases; portanto, a complexidade seqüencial é Θ(n 2 ).
Odd-Even Transposition
Odd-Even Transposition
Odd-Even Transposition É fácil paralelizar a ordenação por transposição even-odd. Durante cada fase do algoritmo, as operações compare-exchange nos pares de elementos são desenvolvidas simultaneamente. Considera o caso de un-elemento-por-processo. Seja n o número de processos (também o número de elementos a ordenar). Além disso que os processos são ordenados em um acerto unidimensional.
Odd-Even Transposition O elemento ai inicialmente reside no processo Pi para i = 1, 2,..., n. Durante a fase odd, cada processo com uma etiqueta ímpar comparaintercambia com o elemento residente no vizinho direito. Similarmente, durante a fase even, cada processo com uma etiqueta par comparaintercambia seus elementos com o elemento do vizinho direito.
Odd-Even Transposition
Odd-Even Transposition Se p é o número de processos, onde p<n. Então tempo de execução paralelo é: Ver derivação da equação na seção 9.3.1 do livro Introduction to parallel computing
Estudo independente Ler o epígrafe 9.3.2 Shellsort do livro Introduction to parallel computing. Entregar uma folha com um resumo de dito método.
Quicksort Quicksort é um algoritmo divide-y-vencerás que ordena uma seqüência dividindo-a recursivamente em subsecuencias menores. Assume que a seqüência de n-elementos a ser ordenada é armazenada em um acerto A[1..n]. Consiste em dois passos: Divide e conquista Durante o passo de divide, uma seqüência A[q..r] é particionado (re-ordenado) em dois subsecuencias não esvazia A[q..s] e A[s+1..r] tal que cada elemento na primeira sub-seqüencia é menor que ou igual a cada elemento na segunda sub-seqüencia.
Quicksort Durante o passo de conquista, seqüencia-as são ordenadas aplicando quicksort recursivamente. Desde que as seqüencia A[q..s] e A[s+1..r] são ordenados e a primeira sub-seqüencia tem menores elementos que a segunda, a seqüência completa está ordenada.
Quicksort
Quicksort A complexidade de partir a seqüência de tamanho k é Θ(k) O rendimento do Quicksort é grandemente afetado pela maneira em que particiona uma seqüência. De forma general a melhor partição possível é quando se divide em partes iguais e cada parte tem k /2 e k /2 elementos, obtendo um tempo de T(n) = Θ(n log n)
Quicksort paralelo O algoritmo Quicksort pode ser paralelizado em uma variedade de maneiras. As linhas 14 e 15 do algoritmo mostram que, durante cada chamada ao Quicksort, o array é partido em duas partes e cada parte é resolvida de maneira recursiva. Ordenar os dois array mas pequenos representam dois sub-problemas completamente independentes que podem ser resolvidos em paralelo. portanto, uma maneira de paralelizar Quicksort é executálo inicialmente em um processo simples, então, quando o algoritmo realiza sua chamada recursiva (linhas 14 e 15), atribui um dos sub-problemas em outro processo.
Quicksort paralelo Agora cada um desses processos ordena seu array usando Quicksort e atribuindo um de seu sub-problemas a outro processo. O algoritmo termina quando o array não pode ser dividido. Até a terminação, cada processo mantém um elemento do array, e a ordem ordenada pode ser recuperado ao percorrer os processos. Esta formulação dessa quicksort n processos para ordenar n elementos.
Quicksort paralelo Sua maior desvantagem é que a divisão do array A[q.. r] em dois acertos menor, A[q.. s] e A[s+1.. r], é feito por um processo seqüencial. Desde que um processo deve partir o acerto original A[1.. n], o tempo de execução desta formulação demarcada de maneira inferior por Ω(n). A principal limitação desta formulação é que realiza o passado divisão de maneira seqüencial.
Quicksort paralelo O tempo de execução desta variante é T (n) = 2T (n/2) + Θ(n) O término Θ(n) es debido a que particionando el arreglo. Comparando esta complejidad con la complejidad del algoritmo Θ(n log n) Entretanto, sem paralelizar o passado do particionado, o melhor que podemos fazer é usar sozinho Θ(log n) processos para ordenar n elementos em um tempo Θ(n).
Estudo independente Estudar o epígrafe 9.4.2 Parallel Formulation for ao CRCW PRAM do livro Introduction to parallel computing. Entregar um resumo em uma folha.
Conclusões