proyecto final algoritmia
TRANSCRIPT
ALGORITMOS DE ORDENACION
Maestría en Ingeniería de Sistemas y Computo
10/08/2012
Sebastián Arboleda D. Néstor Álzate Mejía Ian Pastrana Jorge Iván Montealegre Rondón
2
Contenido Resumen ............................................................................................................................................................. 5
Abstract .............................................................................................................................................................. 5
I. INTRODUCCION ..................................................................................................................................... 5
II. OBJETIVOS .............................................................................................................................................. 5
III. DESCRIPCION DE LOS DATOS A ORDENAR ................................................................................ 6
A. Números a ordenar: ............................................................................................................................... 6
B. Tamaños de las entradas: ....................................................................................................................... 6
IV. ANALISIS EN TIEMPO REAL ........................................................................................................... 7
A. Insertion Sort ....................................................................................................................................... 7
B. Binary Insertion Sort .......................................................................................................................... 7
C. Merge Sort ........................................................................................................................................... 7
D. Heap Sort ............................................................................................................................................. 8
E. Selection Sort ....................................................................................................................................... 8
F. Quick Sort ............................................................................................................................................ 9
G. Counting Sort....................................................................................................................................... 9
H. Bubble Sort .......................................................................................................................................... 9
I. Heapinsert Sort. ................................................................................................................................. 10
V. TIEMPOS DE EJECUCION ESPERADOS SEGÚN EL FACTOR CONSTANTE .............................. 11
A. Insertion Sort ..................................................................................................................................... 11
B. Binary Insertion Sort ........................................................................................................................ 12
C. Merge Sort ......................................................................................................................................... 12
D. Bubble Sort ........................................................................................................................................ 13
E. Heap Sort ........................................................................................................................................... 14
F. Quick Sort .......................................................................................................................................... 15
G. Counting Sort..................................................................................................................................... 16
H. Selection Sort ..................................................................................................................................... 16
I. Heapinsert Sort. ................................................................................................................................. 16
VI. GRÁFICOS DE TAMAÑO DE ENTRADA VERSUS TIEMPO DE EJECUCIÓN ......................... 18
A. Insertion Sort ..................................................................................................................................... 18
B. Binary Insertion Sort ........................................................................................................................ 19
C. Merge Sort ......................................................................................................................................... 20
D. Heap Sort ........................................................................................................................................... 21
E. Quick Sort .......................................................................................................................................... 22
F. Counting Sort..................................................................................................................................... 23
3
G. Bubble Sort ........................................................................................................................................ 23
H. Selection Sort ..................................................................................................................................... 24
I. Heapinsert Sort. ................................................................................................................................. 25
J. Ejecuciones con entradas de 50.000 a 500.000. ............................................................................... 26
K. Ejecuciones con entradas superiores a 1’000.000. .......................................................................... 26
VII. CONCLUSIONES .............................................................................................................................. 27
4
5
RESUMEN
El presente documento presenta la implementación y prueba de varios algoritmos de ordenamiento en Matlab,
con el fin de determinar la eficiencia en tiempo y espacio de almacenamiento de cada algoritmo.
Palabras Clave— Insertion Sort, Binary Insertion Sort, Merge Sort, Heap Sort, Quick Sort, Counting Sort,
Bubble Sort, Selection Sort, y Heapinsert Sort..
ABSTRACT
This paper presents the implementation and testing of several sorting algorithms in Matlab, to determine the
efficiency in time and storage for each algorithm.
Keywords— Insertion Sort, Binary Insertion Sort, Merge Sort, Heap Sort, Quick Sort, Counting Sort, Bubble
Sort, Selection Sort, y Heapinsert Sort.
I. INTRODUCCION
n la computación los algorimos de ordenamiento se encargan, como su nombre lo dice, de organizar todos
los elementos de un vector o arreglos de datos. Por lo tanto estos algoritmos tienen como entrada el vector
en desorden, y como salida el vector ordenado.
Además, hay que tener en cuenta que dichos algoritmos son están amarrados a complejidades distintas, por lo
tanto todos realizan el mismo trabajo pero con eficiencias diferentes. Los algoritmos que se analizaron en este
documento son:
Algoritmo Complejidad
Insertion Sort θ(n2)
Binary Insertion Sort θ(n2)
Merge Sort θ(n log n)
Heap Sort θ(n log n)
Quick Sort θ(n log n)
Counting Sort θ(n)
Bubble Sort θ(n2)
Selection Sort θ(n2)
Heapinsert Sort. θ(n2)
II. OBJETIVOS
Implementar y probar todos los algoritmos de ordenamiento trabajados en clase: InsertionSort,
Merge Sort, Heap Sort, Quick Sorty Counting Sort.
Investigar, implementar y probarlos algoritmos de ordenamiento: Binary InsertionSort, Bubble Sort,
Selection Sort y HeapinsertSort.
Aplicar la técnica de programación de divide y vencerás en los algoritmos de 0rdenamientode Merge
Sort y Quick Sort.
Escoger un lenguaje de programación y unas estructuras de datos para la implementación de los
diferentes algoritmos de ordenamiento.
Analizar los diferentes algoritmos de ordenamiento desde dos puntos de vista: complejidad espacial
y temporal.
E
6
III. DESCRIPCION DE LOS DATOS A ORDENAR
A. Números a ordenar:
Este proyecto está destinado a ordenar números enteros sin signo generados aleatoriamente entre 0 (cero) y
6’000.000 (seis millones). Cada número debe tener la misma probabilidad de aparición.
B. Tamaños de las entradas:
Todos los algoritmos de ordenamiento se tienen que probar (correr) con entradas de tamaño: 50.000, 100.000,
150.000, 200.000, 250.000, 300.000, 350.000, 400.000, 450.000 y 500.000. Para estos tamaños de entrada se
deben calcular los factores constantes para los algoritmos de complejidad en el caso promedio θ(n2).
Adicionalmente para todos los algoritmos de complejidad en el caso promedio de θ(n) o θ(n log n), los
tamaños de las entradas son:1’000.000, 2’000.000, 3’000.000, 4’000.000, 5’000.000, 6’000.000, 7’000.000,
8’000.000, ..., 20’000.000. Con estos tamaños de entrada se deben calcular los factores constantes para estos
algoritmos.
7
IV. ANALISIS EN TIEMPO REAL
A continuación se presentan los datos de los tiempos de ejecución, consumo de espacio de almacenamiento y
factores constantes que fueron tomados durante la práctica para cada uno de los algoritmos.
A. Insertion Sort
B. Binary Insertion Sort
C. Merge Sort
Entrada (n) Tiempo Real [segundos] Espacio en Memoria (Bytes) Complejidad θ(n^2) Factor Constante
50000 35.137522 400,000 2500000000 1.4055E-08
100000 141.818339 800,000 10000000000 1.41818E-08
150000 319.444238 1,200,000 22500000000 1.41975E-08
200000 564.244274 1,600,000 40000000000 1.41061E-08
250000 881.916429 2,000,000 62500000000 1.41107E-08
300000 1275.64653 2,400,000 90000000000 1.41739E-08
350000 1734.490016 2,800,000 1.225E+11 1.41591E-08
400000 2273.353243 3,200,000 1.6E+11 1.42085E-08
450000 2854.472705 3,600,000 2.025E+11 1.40962E-08
500000 3542.149608 4,000,000 2.5E+11 1.41686E-08
1.41457E-08
INSERTION SORT ANALISIS TIEMPO REAL
PROMEDIO FACTOR CONSTANTE =
Entrada (n) Tiempo Real [segundos] Espacio en Memoria (Bytes) Complejidad θ(n^2) Factor Constante
50000 34.42576 400,000 2500000000 1.37703E-08
100000 136.576452 800,000 10000000000 1.36576E-08
150000 306.557098 1,200,000 22500000000 1.36248E-08
200000 549.02097 1,600,000 40000000000 1.37255E-08
250000 856.073595 2,000,000 62500000000 1.36972E-08
300000 1223.861496 2,400,000 90000000000 1.35985E-08
350000 1662.585207 2,800,000 1.225E+11 1.35721E-08
400000 2200.656242 3,200,000 1.6E+11 1.37541E-08
450000 2757.416428 3,600,000 2.025E+11 1.36169E-08
500000 3407.500392 4,000,000 2.5E+11 1.363E-08
1.36647E-08PROMEDIO FACTOR CONSTANTE =
BINARY INSERTION SORT ANALISIS TIEMPO REAL
Entrada (n) Tiempo Real [segundos] Espacio en Memoria (Bytes) Complejidad θ(n Log n) Factor Constante
50000 6.108123 400,000 234948.5002 2.59977E-05
100000 20.789145 800,000 500000 4.15783E-05
150000 42.956784 1,200,000 776413.6889 5.53272E-05
200000 74.379011 1,600,000 1060205.999 7.01552E-05
250000 119.086044 2,000,000 1349485.002 8.82455E-05
300000 184.127953 2,400,000 1643136.376 0.000112059
350000 272.138469 2,800,000 1940423.816 0.000140247
400000 363.766679 3,200,000 2240823.997 0.000162336
450000 476.723519 3,600,000 2543945.631 0.000187395
500000 592.964795 4,000,000 2849485.002 0.000208095
1000000 2209.218212 8,000,000 6000000 0.000368203
0.000132695
MERGE SORT ANALISIS TIEMPO REAL
PROMEDIO FACTOR CONSTANTE =
8
D. Heap Sort
E. Selection Sort
Entrada (n) Tiempo Real [segundos] Espacio en Memoria (Bytes) Complejidad θ(n Log n) Factor Constante
50000 6.201938 400,000 234948.5002 2.6397E-05
100000 13.098625 800,000 500000 2.61973E-05
150000 20.311432 1,200,000 776413.6889 2.61606E-05
200000 28.180881 1,600,000 1060205.999 2.65806E-05
250000 36.187559 2,000,000 1349485.002 2.68158E-05
300000 43.966724 2,400,000 1643136.376 2.67578E-05
350000 52.192144 2,800,000 1940423.816 2.68973E-05
400000 59.008751 3,200,000 2240823.997 2.63335E-05
450000 68.298875 3,600,000 2543945.631 2.68476E-05
500000 75.70731 4,000,000 2849485.002 2.65688E-05
1000000 157.261957 8,000,000 6000000 2.62103E-05
2000000 334.795543 16,000,000 12602059.99 2.65667E-05
3000000 517.361509 24,000,000 19431363.76 2.66251E-05
4000000 703.391089 32,000,000 26408239.97 2.66353E-05
5000000 891.316335 40,000,000 33494850.02 2.66105E-05
6000000 1083.557104 48,000,000 40668907.5 2.66434E-05
7000000 1283.913765 56,000,000 47915686.28 2.67953E-05
8000000 1476.87115 64,000,000 55224719.9 2.67429E-05
9000000 1667.943904 72,000,000 62588182.58 2.66495E-05
10000000 1871.688668 80,000,000 70000000 2.67384E-05
11000000 2045.491806 88,000,000 77455319.54 2.64087E-05
12000000 2236.672086 96,000,000 84950174.95 2.63292E-05
13000000 2454.59471 104,000,000 92481263.58 2.65415E-05
14000000 2664.525537 112,000,000 100045792.5 2.66331E-05
15000000 2872.963084 120,000,000 107641368.9 2.66901E-05
16000000 3040.425081 128,000,000 115265919.7 2.63775E-05
17000000 3251.834246 136,000,000 122917631.7 2.64554E-05
18000000 3465.23878 144,000,000 130594905.1 2.65343E-05
19000000 3664.355189 152,000,000 138296318.4 2.64964E-05
20000000 3876.868282 160,000,000 146020599.9 2.65501E-05
2.65016E-05
HEAP SORT ANALISIS TIEMPO REAL
PROMEDIO FACTOR CONSTANTE =
Entrada (n) Tiempo Real [segundos] Espacio en Memoria (Bytes) Complejidad θ(n^2) Factor Constante
50000 15.325864 400,000 2500000000 6.13035E-09
100000 60.836257 800,000 10000000000 6.08363E-09
150000 136.280917 1,200,000 22500000000 6.05693E-09
200000 241.885267 1,600,000 40000000000 6.04713E-09
250000 379.624277 2,000,000 62500000000 6.07399E-09
300000 547.290854 2,400,000 90000000000 6.08101E-09
350000 748.140632 2,800,000 1.225E+11 6.10727E-09
400000 974.19005 3,200,000 1.6E+11 6.08869E-09
450000 1223.397518 3,600,000 2.025E+11 6.04147E-09
500000 1527.781232 4,000,000 2.5E+11 6.11112E-09
6.08216E-09PROMEDIO FACTOR CONSTANTE =
SELECTION SORT ANALISIS TIEMPO REAL
9
F. Quick Sort
G. Counting Sort
Los datos del couting sort no fueron posibles de tomar, el algoritmo funciono bien, pero los tiempos fueron
demasiado largos, por lo tanto no lo pudimos implementar.
H. Bubble Sort
Entrada (n) Tiempo Real [segundos] Espacio en Memoria (Bytes) Complejidad θ(n Log n) Factor Constante
50000 0.847028 400,000 234948.5002 3.60516E-06
100000 1.824771 800,000 500000 3.64954E-06
150000 2.832826 1,200,000 776413.6889 3.6486E-06
200000 3.731105 1,600,000 1060205.999 3.51923E-06
250000 5.130684 2,000,000 1349485.002 3.80196E-06
300000 5.11696 2,400,000 1643136.376 3.11414E-06
350000 7.175374 2,800,000 1940423.816 3.69784E-06
400000 7.118303 3,200,000 2240823.997 3.17665E-06
450000 7.786632 3,600,000 2543945.631 3.06085E-06
500000 10.091781 4,000,000 2849485.002 3.54162E-06
1000000 19.601449 8,000,000 6000000 3.26691E-06
2000000 37.427275 16,000,000 12602059.99 2.96993E-06
3000000 61.991381 24,000,000 19431363.76 3.19027E-06
4000000 86.950387 32,000,000 26408239.97 3.29255E-06
5000000 94.464484 40,000,000 33494850.02 2.82027E-06
6000000 128.081634 48,000,000 40668907.5 3.14937E-06
7000000 140.288425 56,000,000 47915686.28 2.92782E-06
8000000 160.905011 64,000,000 55224719.9 2.91364E-06
9000000 161.725994 72,000,000 62588182.58 2.58397E-06
10000000 214.513319 80,000,000 70000000 3.06448E-06
11000000 213.888123 88,000,000 77455319.54 2.76144E-06
12000000 274.421142 96,000,000 84950174.95 3.23038E-06
13000000 282.175751 104,000,000 92481263.58 3.05117E-06
14000000 339.369526 112,000,000 100045792.5 3.39214E-06
15000000 334.473732 120,000,000 107641368.9 3.1073E-06
16000000 320.688737 128,000,000 115265919.7 2.78216E-06
17000000 334.208801 136,000,000 122917631.7 2.71897E-06
18000000 427.172042 144,000,000 130594905.1 3.27097E-06
19000000 439.853189 152,000,000 138296318.4 3.18051E-06
20000000 506.296534 160,000,000 146020599.9 3.4673E-06
3.19857E-06
QUICK SORT ANALISIS TIEMPO REAL
PROMEDIO FACTOR CONSTANTE =
Entrada (n) Tiempo Real [segundos] Espacio en Memoria (Bytes) Complejidad θ(n^2) Factor Constante
50000 55.485609 400,000 2500000000 2.21942E-08
100000 221.847542 800,000 10000000000 2.21848E-08
150000 493.801013 1,200,000 22500000000 2.19467E-08
200000 879.00641 1,600,000 40000000000 2.19752E-08
250000 1381.523105 2,000,000 62500000000 2.21044E-08
300000 1994.94568 2,400,000 90000000000 2.21661E-08
350000 2705.325768 2,800,000 1.225E+11 2.20843E-08
400000 3530.178581 3,200,000 1.6E+11 2.20636E-08
450000 4410.715939 3,600,000 2.025E+11 2.17813E-08
500000 5533.220772 4,000,000 2.5E+11 2.21329E-08
2.20633E-08
BUBBLE SORT ANALISIS TIEMPO REAL
PROMEDIO FACTOR CONSTANTE =
10
I. Heapinsert Sort.
Entrada (n) Tiempo Real [segundos] Espacio en Memoria (Bytes) Complejidad θ(n^2) Factor Constante
50000 16.164777 400,000 2500000000 6.46591E-09
100000 63.876305 800,000 10000000000 6.38763E-09
150000 142.85952 1,200,000 22500000000 6.34931E-09
200000 252.1816 1,600,000 40000000000 6.30454E-09
250000 395.690399 2,000,000 62500000000 6.33105E-09
300000 567.880046 2,400,000 90000000000 6.30978E-09
350000 775.62774 2,800,000 1.225E+11 6.33166E-09
400000 1004.564346 3,200,000 1.6E+11 6.27853E-09
450000 1274.276897 3,600,000 2.025E+11 6.29273E-09
500000 1579.125579 4,000,000 2.5E+11 6.3165E-09
6.33676E-09
HEAPINSERT SORT ANALISIS TIEMPO REAL
PROMEDIO FACTOR CONSTANTE =
11
V. TIEMPOS DE EJECUCION ESPERADOS SEGÚN EL FACTOR CONSTANTE
Con los factores constantes de cada uno de los algoritmos se infieren los tiempos de ejecución para cada uno
de ellos con entradas de tamaño: 200’000.000, 210’000.000, 220’000.000,... , 290’000.000.
A continuación se presentan los datos inferidos a partir de los factores constantes y se comparan con los
tiempos tomados en tiempo real de ejecución.
A. Insertion Sort
Entrada (n) Tiempo Estimado [segundos] Espacio en Memoria (Bytes)
200,000,000 565,829,217.26 1,600,000,000
210,000,000 623,826,712.03 1,680,000,000
220,000,000 684,653,352.88 1,760,000,000
230,000,000 748,309,139.82 1,840,000,000
240,000,000 814,794,072.85 1,920,000,000
250,000,000 884,108,151.97 2,000,000,000
260,000,000 956,251,377.17 2,080,000,000
270,000,000 1,031,223,748.45 2,160,000,000
280,000,000 1,109,025,265.83 2,240,000,000
290,000,000 1,189,655,929.29 2,320,000,000
INSERTION SORT ANALISIS TIEMPO ESPERADO
Entrada (n) Tiempo Estimado [segundos] Espacio en Memoria (Bytes) Tiempo Real [segundos]
50000 35.36 400,000 35.137522
100000 141.46 800,000 141.818339
150000 318.28 1,200,000 319.444238
200000 565.83 1,600,000 564.244274
250000 884.11 2,000,000 881.916429
300000 1,273.12 2,400,000 1275.64653
350000 1,732.85 2,800,000 1734.490016
400000 2,263.32 3,200,000 2273.353243
450000 2,864.51 3,600,000 2854.472705
500000 3,536.43 4,000,000 3542.149608
INSERTION SORT ANALISIS TIEMPO ESPERADO DE LOS DATOS CONOCIDOS
12
B. Binary Insertion Sort
C. Merge Sort
Entrada (n) Tiempo Estimado [segundos] Espacio en Memoria (Bytes)
200,000,000 546,587,881.67 1,600,000,000
210,000,000 602,613,139.54 1,680,000,000
220,000,000 661,371,336.82 1,760,000,000
230,000,000 722,862,473.50 1,840,000,000
240,000,000 787,086,549.60 1,920,000,000
250,000,000 854,043,565.10 2,000,000,000
260,000,000 923,733,520.02 2,080,000,000
270,000,000 996,156,414.34 2,160,000,000
280,000,000 1,071,312,248.06 2,240,000,000
290,000,000 1,149,201,021.20 2,320,000,000
BINARY INSERTION SORT ANALISIS TIEMPO ESPERADO
Entrada (n) Tiempo Estimado [segundos] Espacio en Memoria (Bytes) Tiempo Real [segundos]
50000 34.16 400,000 34.42576
100000 136.65 800,000 136.576452
150000 307.46 1,200,000 306.557098
200000 546.59 1,600,000 549.02097
250000 854.04 2,000,000 856.073595
300000 1,229.82 2,400,000 1223.861496
350000 1,673.93 2,800,000 1662.585207
400000 2,186.35 3,200,000 2200.656242
450000 2,767.10 3,600,000 2757.416428
500000 3,416.17 4,000,000 3407.500392
BINARY INSERTION SORT ANALISIS TIEMPO ESPERADO DE LOS DATOS CONOCIDOS
Entrada (n) Tiempo Estimado [segundos] Espacio en Memoria (Bytes)
200,000,000 220,300.23 1,600,000,000
210,000,000 231,905.70 1,680,000,000
220,000,000 243,538.62 1,760,000,000
230,000,000 255,197.74 1,840,000,000
240,000,000 266,881.93 1,920,000,000
250,000,000 278,590.14 2,000,000,000
260,000,000 290,321.41 2,080,000,000
270,000,000 302,074.84 2,160,000,000
280,000,000 313,849.63 2,240,000,000
290,000,000 325,645.00 2,320,000,000
MERGE SORT ANALISIS TIEMPO ESPERADO
13
D. Bubble Sort
Entrada (n) Tiempo Estimado [segundos] Espacio en Memoria (Bytes) Tiempo Real [segundos]
50000 31.18 400,000 6.108123
100000 66.35 800,000 20.789145
150000 103.03 1,200,000 42.956784
200000 140.68 1,600,000 74.379011
250000 179.07 2,000,000 119.086044
300000 218.04 2,400,000 184.127953
350000 257.48 2,800,000 272.138469
400000 297.35 3,200,000 363.766679
450000 337.57 3,600,000 476.723519
500000 378.11 4,000,000 592.964795
1000000 796.17 8,000,000 2209.218212
MERGE SORT ANALISIS TIEMPO ESPERADO DE LOS DATOS CONOCIDOS
Entrada (n) Tiempo Estimado [segundos] Espacio en Memoria (Bytes)
200,000,000 882,533,628.05 1,600,000,000
210,000,000 972,993,324.92 1,680,000,000
220,000,000 1,067,865,689.94 1,760,000,000
230,000,000 1,167,150,723.09 1,840,000,000
240,000,000 1,270,848,424.39 1,920,000,000
250,000,000 1,378,958,793.82 2,000,000,000
260,000,000 1,491,481,831.40 2,080,000,000
270,000,000 1,608,417,537.12 2,160,000,000
280,000,000 1,729,765,910.97 2,240,000,000
290,000,000 1,855,526,952.97 2,320,000,000
BUBBLE SORT ANALISIS TIEMPO ESPERADO
Entrada (n) Tiempo Estimado [segundos] Espacio en Memoria (Bytes) Tiempo Real [segundos]
50000 55.16 400,000 55.485609
100000 220.63 800,000 221.847542
150000 496.43 1,200,000 493.801013
200000 882.53 1,600,000 879.00641
250000 1,378.96 2,000,000 1381.523105
300000 1,985.70 2,400,000 1994.94568
350000 2,702.76 2,800,000 2705.325768
400000 3,530.13 3,200,000 3530.178581
450000 4,467.83 3,600,000 4410.715939
500000 5,515.84 4,000,000 5533.220772
BUBBLE SORT ANALISIS TIEMPO ESPERADO DE LOS DATOS CONOCIDOS
14
E. Heap Sort
Entrada (n) Tiempo Estimado [segundos] Espacio en Memoria (Bytes)
200,000,000 43,998.17 1,600,000,000
210,000,000 46,316.00 1,680,000,000
220,000,000 48,639.32 1,760,000,000
230,000,000 50,967.87 1,840,000,000
240,000,000 53,301.42 1,920,000,000
250,000,000 55,639.78 2,000,000,000
260,000,000 57,982.73 2,080,000,000
270,000,000 60,330.12 2,160,000,000
280,000,000 62,681.77 2,240,000,000
290,000,000 65,037.53 2,320,000,000
HEAP SORT ANALISIS TIEMPO ESPERADO
Entrada (n) Tiempo Estimado [segundos] Espacio en Memoria (Bytes) Tiempo Real [segundos]
50000 6.23 400,000 6.201938
100000 13.25 800,000 13.098625
150000 20.58 1,200,000 20.311432
200000 28.10 1,600,000 28.180881
250000 35.76 2,000,000 36.187559
300000 43.55 2,400,000 43.966724
350000 51.42 2,800,000 52.192144
400000 59.39 3,200,000 59.008751
450000 67.42 3,600,000 68.298875
500000 75.52 4,000,000 75.70731
1000000 159.01 8,000,000 157.261957
2000000 333.98 16,000,000 334.795543
3000000 514.96 24,000,000 517.361509
4000000 699.86 32,000,000 703.391089
5000000 887.67 40,000,000 891.316335
6000000 1,077.79 48,000,000 1083.557104
7000000 1,269.84 56,000,000 1283.913765
8000000 1,463.55 64,000,000 1476.87115
9000000 1,658.69 72,000,000 1667.943904
10000000 1,855.11 80,000,000 1871.688668
11000000 2,052.69 88,000,000 2045.491806
12000000 2,251.32 96,000,000 2236.672086
13000000 2,450.90 104,000,000 2454.59471
14000000 2,651.38 112,000,000 2664.525537
15000000 2,852.67 120,000,000 2872.963084
16000000 3,054.73 128,000,000 3040.425081
17000000 3,257.52 136,000,000 3251.834246
18000000 3,460.98 144,000,000 3465.23878
19000000 3,665.08 152,000,000 3664.355189
20000000 3,869.78 160,000,000 3876.868282
HEAP SORT ANALISIS TIEMPO ESPERADO DE LOS DATOS CONOCIDOS
15
F. Quick Sort
Entrada (n) Tiempo Estimado [segundos] Espacio en Memoria (Bytes)
200,000,000 5,310.29 1,600,000,000
210,000,000 5,590.03 1,680,000,000
220,000,000 5,870.44 1,760,000,000
230,000,000 6,151.48 1,840,000,000
240,000,000 6,433.13 1,920,000,000
250,000,000 6,715.35 2,000,000,000
260,000,000 6,998.13 2,080,000,000
270,000,000 7,281.44 2,160,000,000
280,000,000 7,565.27 2,240,000,000
290,000,000 7,849.60 2,320,000,000
QUICK SORT ANALISIS TIEMPO ESPERADO
Entrada (n) Tiempo Estimado [segundos] Espacio en Memoria (Bytes) Tiempo Real [segundos]
50000 0.75 400,000 0.847028
100000 1.60 800,000 1.824771
150000 2.48 1,200,000 2.832826
200000 3.39 1,600,000 3.731105
250000 4.32 2,000,000 5.130684
300000 5.26 2,400,000 5.11696
350000 6.21 2,800,000 7.175374
400000 7.17 3,200,000 7.118303
450000 8.14 3,600,000 7.786632
500000 9.11 4,000,000 10.091781
1000000 19.19 8,000,000 19.601449
2000000 40.31 16,000,000 37.427275
3000000 62.15 24,000,000 61.991381
4000000 84.47 32,000,000 86.950387
5000000 107.14 40,000,000 94.464484
6000000 130.08 48,000,000 128.081634
7000000 153.26 56,000,000 140.288425
8000000 176.64 64,000,000 160.905011
9000000 200.19 72,000,000 161.725994
10000000 223.90 80,000,000 214.513319
11000000 247.75 88,000,000 213.888123
12000000 271.72 96,000,000 274.421142
13000000 295.81 104,000,000 282.175751
14000000 320.00 112,000,000 339.369526
15000000 344.30 120,000,000 334.473732
16000000 368.69 128,000,000 320.688737
17000000 393.16 136,000,000 334.208801
18000000 417.72 144,000,000 427.172042
19000000 442.35 152,000,000 439.853189
20000000 467.06 160,000,000 506.296534
QUICK SORT ANALISIS TIEMPO ESPERADO DE LOS DATOS CONOCIDOS
16
G. Counting Sort
Los datos del couting sort no fueron posibles de tomar, el algoritmo funciono bien, pero los tiempos fueron
demasiado largos, por lo tanto no lo pudimos implementar.
H. Selection Sort
I. Heapinsert Sort.
Entrada (n) Tiempo Estimado [segundos] Espacio en Memoria (Bytes)
200,000,000 243,286,331.88 1,600,000,000
210,000,000 268,223,180.90 1,680,000,000
220,000,000 294,376,461.58 1,760,000,000
230,000,000 321,746,173.92 1,840,000,000
240,000,000 350,332,317.91 1,920,000,000
250,000,000 380,134,893.57 2,000,000,000
260,000,000 411,153,900.88 2,080,000,000
270,000,000 443,389,339.86 2,160,000,000
280,000,000 476,841,210.49 2,240,000,000
290,000,000 511,509,512.78 2,320,000,000
SELECTION SORT ANALISIS TIEMPO ESPERADO
Entrada (n) Tiempo Estimado [segundos] Espacio en Memoria (Bytes) Tiempo Real [segundos]
50000 15.21 400,000 15.325864
100000 60.82 800,000 60.836257
150000 136.85 1,200,000 136.280917
200000 243.29 1,600,000 241.885267
250000 380.13 2,000,000 379.624277
300000 547.39 2,400,000 547.290854
350000 745.06 2,800,000 748.140632
400000 973.15 3,200,000 974.19005
450000 1,231.64 3,600,000 1223.397518
500000 1,520.54 4,000,000 1527.781232
SELECTION SORT ANALISIS TIEMPO ESPERADO DE LOS DATOS CONOCIDOS
Entrada (n) Tiempo Estimado [segundos] Espacio en Memoria (Bytes)
200,000,000 253,470,511.56 1,600,000,000
210,000,000 279,451,238.99 1,680,000,000
220,000,000 306,699,318.98 1,760,000,000
230,000,000 335,214,751.53 1,840,000,000
240,000,000 364,997,536.64 1,920,000,000
250,000,000 396,047,674.31 2,000,000,000
260,000,000 428,365,164.53 2,080,000,000
270,000,000 461,950,007.31 2,160,000,000
280,000,000 496,802,202.65 2,240,000,000
290,000,000 532,921,750.55 2,320,000,000
HEAPINSERT SORT ANALISIS TIEMPO ESPERADO
17
Entrada (n) Tiempo Estimado [segundos] Espacio en Memoria (Bytes) Tiempo Real [segundos]
50000 15.84 400,000 16.164777
100000 63.37 800,000 63.876305
150000 142.58 1,200,000 142.85952
200000 253.47 1,600,000 252.1816
250000 396.05 2,000,000 395.690399
300000 570.31 2,400,000 567.880046
350000 776.25 2,800,000 775.62774
400000 1,013.88 3,200,000 1004.564346
450000 1,283.19 3,600,000 1274.276897
500000 1,584.19 4,000,000 1579.125579
HEAPINSERT SORT ANALISIS TIEMPO ESPERADO DE LOS DATOS CONOCIDOS
18
VI. GRÁFICOS DE TAMAÑO DE ENTRADA VERSUS TIEMPO DE EJECUCIÓN
Graficas en plano cartesiano, el tiempo de ejecución (eje y) versus el tamaño de la entrada (eje x), de cada uno
de los algoritmos, donde se muestra que efectivamente la gráfica es el g(n) de la complejidad del algoritmo.
Adicionalmente para las ejecuciones con entradas de 50.000 a 500.000 se presentan las graficas en un solo
plano cartesiano con todos los tiempos de ejecución para todos los algoritmos, de igual forma se hace lo
mismo para los algoritmos que se corren con entradas superiores a 1’000.000.
A. Insertion Sort
19
B. Binary Insertion Sort
20
C. Merge Sort
21
D. Heap Sort
22
E. Quick Sort
23
F. Counting Sort
Los datos del couting sort no fueron posibles de tomar, el algoritmo funciono bien, pero los tiempos fueron
demasiado largos, por lo tanto no lo pudimos implementar.
G. Bubble Sort
24
H. Selection Sort
25
I. Heapinsert Sort.
26
J. Ejecuciones con entradas de 50.000 a 500.000.
K. Ejecuciones con entradas superiores a 1’000.000.
27
VII. CONCLUSIONES
Al analizar las gráficas de los algoritmos de ordenamiento n2 se observa que presentan una curva
característica parabólica, es decir y = Cx2, lo que concuerda con la complejidad teórica obtenida. Por otro
lado, para entradas de datos elevadas su comportamiento es lineal (y = mx), debido a que para valores de n
muy grande la velocidad con que crece la parábola es muy alta haciendo que su abertura no cambie.
Comparando los tiempos de ejecución para la misma cantidad de datos, podemos observar que los 5
algoritmos de complejidad n2 desde el más lento hasta el más rápido son: bubble sort, insertion sort, binary
insertion sort, heapInsertion sort y selection sort, respectivamente. La relación aproximada en velocidad es 3
a 1 entre el algoritmo más veloz y el más lento, y está dada por el factor constante de cada uno de ellos.
Los algoritmos de ordenamiento con complejidad n*lg10n presentan una curva característica que se aproxima
a una línea recta y = mx, con pendiente m = lg10n. Para entradas de datos muy grandes el logaritmo de n es
casi constante y la aproximación a una recta es cada vez mejor.
El comportamiento obtenido con el algoritmo Merge Sort es el de un n2 y a priori ello obedece a que Matlab
es un lenguaje de programación que no está diseñado para trabajar con algoritmos recursivos que demandan
altos recursos de memoria.
Los tiempos esperados de ejecución que fueron calculados para cada uno de los algoritmos mostraron el
comportamiento esperado, a excepción del algoritmo quick sort, que aunque sigue una tendencia lineal
muestra cierta varianza entre cada uno de los diferentes tamaños de los vectores.
En los algoritmos que ordenan en “el lugar”, el cálculo de consumo de memoria es directo debido a que está
relacionada directamente con el tamaño n del vector a ordenar. Los algoritmos que requieren mayor consumo
de memoria son Couting Sort y Merge Sort puesto que son algoritmos que requieren hacer copias de sub-
vectores.
Gracias a que se emplearon enteros de 8 bytes para representar los datos, en todos los algoritmos se
obtuvieron tiempos de ordenamiento elevados como resultado del proceso interno que debe hacer el
computador para comparar dos enteros de mayor longitud. Por su parte, la carga computacional impuesta por
Matlab también aporta a que los tiempos sean altos.
Para nuestro desarrollo utilizamos la herramienta Matlab. Se escogió ya que en un principio se pensó en su
gran versatilidad para la simulación, pero hemos comparado nuestros resultados con los de otros grupos y
hemos podido evidenciar que para este tipo de trabajo no es tan eficiente como si lo son lenguajes de
programación como C++ o Java.