Está en la página 1de 7

NÚMERO 1 CAMACHO LINETH

CASTILLO GONZALO
FERNANDEZ MARCOS
F UE N T E S G E R B E R

Algoritmos de ordenamiento
Programación paralela
30 de noviembre de 2007

Resumen
En este artículo El presente trabajo explora y muestra tres algoritmos de ordenamiento
Quicksort paralelos y las caracateristicas particulares de cada uno de estos.
1 Introducción
Deacuerdo al balance del tamaño de las listas se generan por cada
2 Algoritmo Quicksort algoritmo se verá que el Algoritmo Quicksort es pobre, el algoritmo
Hiperquicksort es mejor y el algoritmo PSRS es excelente.
3 Algoritmo Quicksort paralelo

4 Algoritmo Hyperquicksort

5
Introducción
Algoritmo por muestreo (PSRS)

6 Conclusiones

7 Bibliografía
Dada una secuencia de números que deben ser ordenados. Esa secuencia
es ordenada en partes que son colecciones de datos llamados registros.
Con cada registro el valor con el que se ordena se llama llave, el resto del
registro contiene datos satélites. Dependiendo de estos datos satélites, si son
numerosos o no, el algoritmo se puede descomponer en muchos registros.
Este documento se centra solo en la ordenación de una secuencia de
números dejando de lado aspectos como la implementación, y problemas
asociados con los datos satelites.

Se enfocara entonces en métodos convenientes para múltiples CPUs de dos


formas:
• Sorteo interno (todo el proceso se maneja en la memoria, son
algoritmos que manejan listas pequeñas para almacenarlas en
memoria).
• Algoritmos que compararan pares de números.
PÁGINA 2 ALGORITMOS DE ORDENAMIENTO

Algoritmo Quicksort

Fue desarrollada por C. Antony R. Hoare en 1960, El algoritmo original es


recursivo, pero se utilizan versiones iterativas para mejorar su rendimiento (los
algoritmos recursivos son en general más lentos que los iterativos, y
consumen más recursos).

El algoritmo fundamental es el siguiente:

• Elegir un elemento de la lista de elementos a ordenar, al que


llamaremos pivote.

• Resituar los demás elementos de la lista a cada lado del pivote, de


manera que a un lado queden todos los menores que él, y al otro
los mayores. En este momento, el pivote ocupa exactamente el
lugar que le corresponderá en la lista ordenada.

• La lista queda separada en dos sublistas, una formada por los


elementos a la izquierda del pivote, y otra por los elementos a su
derecha.
{4, 11, 14, 17, 22, 63, 65, 79, 89, 95}

Q(79, 17, 14, 65, 89, 4, 95, 22, 63, 11)

• Repetir este proceso de forma recursiva para cada sublista


{4, 11, 14, 17, 22, 63, 65}
{89, 95}
Q(17, 14, 65, 4, 22, 63, 11) Q(89, 95)

mientras éstas contengan más de un elemento. Una vez terminado


{4, 11, 14} {22, 63, 65} {95}
este proceso todos los elementos estarán ordenados. Q(14, 4, 11) Q(65, 22, 63) Q(95)

• Como se puede suponer, la eficiencia del algoritmo depende de la


{4, 11} {22, 63}
Q(4, 11) Q(22, 63)

posición en la que termine el pivote elegido. {11} {63}


Q(11) Q(63)

• En el mejor caso, el pivote termina en el centro de la lista,


Fig. 1 sorteo de una lista de números
dividiéndola en dos sublistas de igual tamaño. En este caso, el
usando Quicksort.
orden de complejidad del algoritmo es O(n•log n).

• En el peor caso, el pivote termina en un extremo de la lista. El orden


de complejidad del algoritmo es entonces de O(n²). El peor caso
dependerá de la implementación del algoritmo, aunque
habitualmente ocurre en listas que se encuentran ordenadas, o
casi ordenadas.

• En el caso promedio, el orden es O(n•log n).

No es extraño, pues, que la mayoría de optimizaciones que se aplican al


algoritmo se centren en la elección del pivote.
ALGORITMOS DE ORDENAMIENTO PÁGINA 3

Algoritmo Quicksort Paralelo

Este algoritmo fue desarrollado originalmente por hypercubes, pero puede


ser usado sobre todo por sistemas message-passing, la función quicksort
se llama dos veces porque el numero de “hojas” en la llamada es
potencia de 2. Por esta razón nosotros asumimos que el numero de
procesos activos es también potencia de 2.

Inicia cuando finaliza el quicksort paralelo : cada proceso ordena su


sublista, debe cumplir la primera condición "sortedness“, también la
segunda condición los procesos pueden intercambiar valores. El proceso
puede usar el valor medio de las lista ordenada.

Pasos:

ƒ Un procesador elige un pivote y lo envía por medio de broadcast


al resto.

ƒ Cada procesador divide la lista de elementos en dos sublista, una


contiene los valores menores o igual al pivote y la segunda lista
contiene los valores mayores al pivote.

ƒ Cada procesador divide así mismo en dos grupos y el algoritmo


recursivo.une lo que queda de su lista con la recibida.

ƒ Finalmente cada procesador se ordena en forma secuencial.

Algoritmo Hyperquicksort
Este algoritmo fue desarrollado originalmente por hypercubes, pero puede
ser usado sobre todo por sistemas message-passing, la función quicksort
se llama dos veces porque el numero de “hojas” , llamada potencia de 2.
Por esta razón nosotros asumimos que el numero de procesos activos es
también potencia de 2.

Inicia cuando finaliza el quicksort paralelo: cada proceso ordena su


sublista, debe cumplir la primera condición "sortedness“, también la
segunda condición los procesos pueden intercambiar valores. El proceso
puede usar el valor medio de las lista ordenada.

Pasos:
ƒ Un procesador elige un pivote y lo envía por medio de broadcast
al resto.
ƒ Cada procesador divide la lista de elementos en dos sublista, una
contiene los valores menores o igual al pivote y la segunda lista
contiene los valores mayores al pivote.
ƒ Cada procesador divide así mismo en dos grupos y el algoritmo
recursivo.une lo que queda de su lista con la recibida.
ƒ Finalmente cada procesador se ordena en forma secuencial.

Ejemplo.- Ilustración de el algoritmo hyperquicksort. Inicialmente tenemos


32 elementos que se encuentran desordenados en sus procesos.
PÁGINA 4 ALGORITMOS DE ORDENAMIENTO

y El numero de procesos es un potencia de 2. y Cada proceso controla los valores ordenados


75, 91, 15, 64, 21, 8, 88, 54 8, 15, 21, 54, 64, 75, 88, 91
P0 P0

50, 12, 47, 72, 65, 54, 66, 22 P1 12, 22, 47, 50, 54, 65, 66, 72 P1

83, 66, 67, 0, 70, 98, 99, 82 P2 0, 66, 67, 70, 82, 83, 98, 99 P2

20, 40, 89, 47, 19, 61, 86, 85 P3 19, 20, 40, 47, 61, 85, 86, 89 P3

• El proceso P0 elige un pivote y envía por


y Los procesos intercambian listas “Bajos” y “Altos”
broadcast al resto

8, 15, 21, 54, 64, 75, 91, 88


8, 15, 21, 54, 64, 75, 88, 91 P0
P0
12, 22, 47, 50, 54, 65, 66, 72 P1
12, 22, 47, 50, 54, 65, 66, 72 P1
0, 66, 67, 70, 82, 83, 98, 99 P2
0, 66, 67, 70, 82, 83, 98, 99 P2

19, 20, 40, 47, 61, 85, 86, 89 P3


19, 20, 40, 47, 61, 85, 86, 89 P3

y EL proceso de fusión mantiene y recibe los y Procesos P0 y P2 informa el pivote por medio de
valores broadcast

0, 8, 15, 21, 54 0, 8, 15, 21, 54


P0 P0

12, 19, 20, 22, 40, 47, 47, 50, 54 P1 12, 19, 20, 22, 40, 47, 47, 50, 54 P1

64, 66, 67, 70, 75, 82, 83, 88, 91, 98, 99 P2 64, 66, 67, 70, 75, 82, 83, 88, 91, 98, 99 P2

61, 65, 66, 72, 85, 86, 89 P3 61, 65, 66, 72, 85, 86, 89 P3

y Después de intercambiar y fusionar este es el


resultado Complejidad de Análisis

0, 8, 12, 15 y Inicialmente quicksort tiene la complejidad:


P0 Θ((n/p) log (n/p))
y Total de comparaciones necesarias para la fusion
19, 20, 21, 22, 40, 47, 47, 50, 54 P1 log p: Θ((n/p) log p)
y Tiempo total de comunicación para el intercambio
61, 64, 65, 66, 66, 67, 70, 72, 75, 82 P2
log p : Θ((n/p) log p)

83, 85, 86, 88, 89, 91, 98, 99 P3 Análisis Isoefficiency

y Complejidad del tiempo secuencial: Θ(n log n)


y Paralela overhead: Θ(n log p)
y Relación Isoefficiency: n log n ≥ C n log p ⇒ log n ≥
C log p ⇒ n ≥ pC
y El valor de C determina la escalabilidad.
Escalabilidad depende de la relación entre la
velocidad de comunicación a la velocidad de
cálculo.
ALGORITMOS DE ORDENAMIENTO PÁGINA 5

Algoritmo de muestreo (PSRS)


El algoritmo de ordenamiento por muestreo o más conocido por su
término en ingles PSPR (Paralle sorting by regular sampling) fue
desarrollado por Xiabo Li. Este algoritmo presenta tres ventajas sobre el
anterior algoritmo hyperquicksort. Básicamente estas ventajas se generan
en este algoritmo mantiene listas de tamaños más equilibrados entre los
procesadores y disminuir las comunicaciones entres estos procesadores.

Descripción del algoritmo

Este algoritmo tiene 4 fases que mencionamos a continuación:

Fase 1: Supongamos que tenemos n términos a ordenar en p


procesadores, cada proceso ordena mediante el algoritmo secuencial
quicksort de los elementos distribuidos en cada procesador (cada
procesador procesa no más de n/p elementos), y a continuación se
escogen muestras de los elementos con la siguiente fórmula en los datos
distribuidos en cada procesador.
n 2n ( p − 1)n
0, 2
, 2 ,....,
p p p2
Fase 2: Un proceso reúne y ordena las muestras que se generaron en la
anterior fase. Posteriormente se escogen p-1 pivotes desde la lista
formada por las muestras mediante la siguiente fórmula:
p p p
p+ − 1,2 p + − 1,...., ( p − 1) p +
2 2 2
Los pivotes encontrados ahora los utilizamos para partir las sublistas de
cada procesador en p partes.

Fase 3: En esta fase cada proceso i mantiene su iésima partición con


todos sus elementos y envía jésima partición con todos sus elementos al
proceso j, para todos los proceso j ≠ i.

Fase 4. En esta última fase se ordena cada sublista y se forma una sola lista
haciendo un broadcast al proceso principal.

Este algoritmo con eso termina y ordena de una forma altamente

Conclusiones
El proceso en paralelo puede mejorar en algunos casos el tiempo de
proceso, este es un ejemplo claro que los algoritmos de ordenamiento en
paralelo pueden ser mucho más eficientes que los algoritmos de
ordenamiento secuenciales.

Los algoritmos de ordenamiento en paralelo proveen la ventaja de la


escalabilidad, pero esta ventaja se ve limitada por el tiempo de
comunicación entre los procesadores.

Entre los algoritmos estudiados en este trabajo el mejor y el más


aconsejado por expertos es el algoritmo por muestreo (PSRS).
PÁGINA 6 ALGORITMOS DE ORDENAMIENTO

Bibliografía
Oxford University Press – Introduction to parallel computing. Edición 2004
Wiley - Tools and Environments for Parallel and Distributed Computing
Quinn – Parallel programming in C with MPI and OpenMP.

También podría gustarte