Вы находитесь на странице: 1из 3

ESTRUCTURAS DE DATOS Y ANLISIS DE ALGORITMOS TAREA I DIEGO CONTRERAS ESTRADA 1

Anlisis emprico sobre algoritmos de ordenamiento


Diego Contreras Estrada B62074

ResumenEn este trabajo se llev acabo un estudio acerca de Cuadro I


los algoritmos de ordenamiento, y se investig si los resultados T IEMPO DE EJECUCIN DE LOS ALGORITMOS .
de la teora se cumplen en la prctica. Para esto se usaron cinco
arreglos de tamaos 10 000, 20 000, 30 000 y 40 000, y se Tiempo (ms)
ejecut cada algoritmo para que ordenara dichas estructuras Corrida
de datos y se calcul el tiempo promedio. El resultado fue que
efectivamente se pudo comprobar la teora, debido a las curvas de Algoritmo Tam. (k) 1 2 3 4 5 Prom.
los grficos, en las cuales se apreciaba que los algoritmos (n2 ) Seleccin 10 122,2 121,4 122,2 122,0 121,2 121,8
son sumamente lentos y el de (n log n) significativamente ms 20 485,4 486,2 486,6 486,2 487,0 486,2
rpido. Adems, se evidenci que el algoritmo de seleccin es 30 1094,8 1095,0 1094,0 1092,2 1093,2 1093,8
en promedio ms lento que el de insercin y para encontrar el 40 1945,2 1945,0 1943,0 1944,0 1945,2 1944,4
elemento medio en un conjunto de datos, la forma ms rpida Insercin 10 68,6 67,6 68,0 68,2 68,2 68,1
no es ordenar todo el conjunto, sino usar el algoritmo bsqueda 20 274,6 273,0 270,0 271,8 274,2 272,1
de la mediana. 30 616,0 608,2 614,0 619,0 612,8 614,0
40 1095,0 1094,6 1087,2 1083,8 1088,6 1089,8
Mezcla 10 2,2 2,0 2,0 2,0 2,0 2,1
I. I NTRODUCCIN 20 4,4 4,2 4,2 4,2 4,2 4,2
os algoritmos de ordenamiento son ampliamente usados 30 6,8 6,8 7,0 7,0 6,4 6,8
L para elaborar estructuras de datos. Debido a esto, a lo
largo de los aos se han estudiado las formas ms eficientes Montculos
40
10
9,4
3,0
9,4
2,0
9,2
3,0
9,2
3,0
9,2
2,0
9,2
2,6
20 5,0 5,0 5,0 6,0 6,0 5,4
de ordenar grandes cantidades de datos en el menor tiempo 30 9,0 8,0 8,0 8,0 8,0 8,2
posible. En este trabajo se analiza si realmente en la prctica 40 11,0 11,0 11,0 12,0 10,0 11,0
los algoritmos de seleccin, insercin, mezcla, montculos, Rpido 10 2,0 2,0 2,0 2,0 3,0 2,2
rpido y bsqueda de la mediana, cumplen con los tiempos 20 4,0 4,0 4,0 4,0 3,0 3,8
previstos en el libro de Cormen y colaboradores[1]. 30 6,0 6,0 6,0 7,0 7,0 6,4
40 8,0 8,0 8,0 8,0 8,0 8,0
Mediana 10 0,0 0,0 0,0 0,0 0,0 0,0
II. M ETODOLOGA 20 0,0 1,0 0,0 1,0 0,0 0,4
Para lograr lo propuesto se emple el lenguaje C++ para 30 0,1 0,0 0,1 0,1 0,0 0,6
40 0,1 0,1 0,0 0,1 0,1 0,8
programar los algoritmos y crear los datos de prueba, para las
cuales se opt por arreglos de nmeros enteros, positivos y
negativos, seleccionados al azar de tamao 10 000, 20 000,
30 000 y 40 000. Cada algoritmo se ejecut cinco veces que los resultados fueron consistentes y las variaciones en el
por arreglo, con el fin de obtener un promedio de tiempo de tiempo fueron relativamente similares. Los tiempos promedio
ejecucin por tamao de datos. Por otra parte para calcular el de cada algoritmo se muestran grficamente en la figura 1 . Se
tiempo se emple la librera time.h de C++, especficamente aprecia que los algoritmos de seleccin e insercin, cumplen
la funcin clock , la cual fue activada cada vez que se llamaba con la grfica de una funcin parablica y el algoritmo de
a un algoritmo y finalizaba cuando este regresaba el control. mezcla con el de una funcin lineal. Las curvas se muestran de
En cuanto a la programacin de los algoritmos se bas en forma conjunta en la figura 2. Se us una escala logartmica en
los pseudocdigos del libro de Cormen y colaboradores [1], los tiempos para poder colocarlas una sobre otra en el mismo
por ejemplo, al transcribir el cdigo del algoritmo insercin a grfico.
C++, el resultado fue el obtenido en el apartado de cdigo
de algoritmos 1. Para efectuar las pruebas se usaron dos IV. C ONCLUSIONES
archivos. El primero simplemente contena el cdigo de los A partir de los resultados se concluye que los tiempos de
algoritmos, mientras que el segundo fue el encargado de crear ejecucin calculados en la teora, son proporcionales a los
los arreglos, generar copias de cada uno de los arreglos, iniciar conseguidos en la prctica. Los algoritmos insercin y selec-
el tiempo, llamar a cada algoritmo de ordenamiento y eliminar cin, cuyo tiempo promedio de tiempo es (n2 ), cumplieron
los arreglos al finalizar el programa, para liberar el espacio con tener una curva parablica y ser los ms lentos para
utilizado. Al terminar, en la consola se presentaba por pantalla conseguir ordenar los arreglos. Se aclara que estos algoritmos
los resultados de cada corrida y sus promedios. a pesar de tener el mismo tiempo promedio en la teora, en la
prctica se pudo apreciar que el ordenamiento por insercin
III. R ESULTADOS es ms rpido que el de seleccin. Adems los algoritmos
Los tiempos de ejecucin de las cinco corridas de los de mezcla, rpido y montculos, con tiempo promedio de
algoritmos se muestran en el cuadro I. Se puede observar (n log n) obtuvieron una curva lineal y el menor tiempo
ESTRUCTURAS DE DATOS Y ANLISIS DE ALGORITMOS TAREA I DIEGO CONTRERAS ESTRADA 2

Seleccin Insercin

2 000
1 000
1 500
800
Tiempo (ms)

1 000 600

400
500
200

0 0
10 20 30 40 10 20 30 40

Mezcla Montculos
10

10
8
Tiempo (ms)

8
6
6
4
4

2
2
10 20 30 40 10 20 30 40

Rpido Mediana

8 0,8

0,6
Tiempo (ms)

6
0,4

4
0,2

2 0
10 15 20 25 30 35 40 10 15 20 25 30 35 40
Tamao del arreglo (miles) Tamao del arreglo (miles)

Figura 1. Tiempos promedio de ejecucin de los algoritmos de ordenamiento por seleccin, insercin, mezcla, montculos, rpido y mediana.
ESTRUCTURAS DE DATOS Y ANLISIS DE ALGORITMOS TAREA I DIEGO CONTRERAS ESTRADA 3

Comparacin

Seleccin
Insercin
103
Mezcla
Montculos
Rpido
Tiempo (ms)
102 Mediana

101

100

10 20 30 40
Tamao del arreglo (miles)

Figura 2. Grfico comparativo de los tiempos promedio de ejecucin de los algoritmos.

de ordenamiento. El algortimo busqueda de la mediana, con


promedio (n), demostr que no es necesario ordenar todo
los datos para encontrar el trmino medio.

V. C DIGO DE LOS ALGORITMOS

Algoritmo 1 Cdigo de Insercin en lenguaje C++

v o i d i n s e r c i o n ( i n t a r r e g l o , i n t tam a o )
{
f o r ( i n t i = 1 ; i < tam a o ; i ++)
{
int copia = arreglo [ i ] ;
int x = i 1;
w h i l e ( x >= 0 && a r r e g l o [ x ] > c o p i a )
{
a r r e g l o [ x +1 ] = a r r e g l o [ x ] ;
x ;
}
a r r e g l o [ x +1 ] = c o p i a ;
}
}

R EFERENCIAS
[1] T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein, Introduction
to Algorithms, 3rd ed. The MIT Press, 2009.

Вам также может понравиться