Sie sind auf Seite 1von 3

Escuela de Ciencias de la Computación

1ra Práctica de Laboratorio


CC262 Algoritmos
07-04-2016

1) Desarrollar el análisis experimental de los siguientes algoritmos, evaluar


su complejidad numérica en milisegundos
INSERTION-SORT (A)
1 for j = 2 to A.length
2 key = A[j]
3 // Insert A[j] into the sorted sequence A[1..j-1].
4 i=j-1
5 while i > 0 and A[i] > key
6 A[i+1]=A[i]
7 i=i-1
8 A[i+1] = key

MERGE (A, p, q, r)
1 n1 = q - p + 1
2 n2 = r - q
3 let L[1..n1+1] and R[1..n2+1] be new arrays
4 for i = 1 to n1
5 L[i]=A[p+i-1]
6 for j = 1 to n2
7 R[j] = A[q+j]
8 L[n1+1]=infinito
9 R[n2+1]=infinito
10 i = 1
11 j = 1
12 for k = p to r
13 if L[i]<=R[j]
14 A[k]=L[i]
15 i=i+1
16 else A[k] = R[j]
17 j=j+1

MERGE-SORT (A, p,r)


1 if p < r
2 q = (p+r)/2
3 MERGE-SORT (A, p, q)
4 MERGE-SORT (A, q+1, r)
5 MERGE (A, p, q, r)

Haciendo uso del análisis experimental en el que tomara diferentes inputs:


-Cuando se le pida generar números, pueden estar en el intervalo de 1 a
1000000
-Elaborar una función que ingrese datos en orden ascendente en un arreglo
de tamaño n.
-Elaborar una función que ingrese datos desordenado en un arreglo de
tamaño n.
-Elaborar una función que ingrese datos en orden descendente en un arreglo
de tamaño n.
Luego de definir las funciones de input, programar las funciones de
INSERTION-SORT y MERGE-SORT.
Incluir la captura del tiempo actual del sistema al inicio y al final de cada
prueba, luego obtener el tiempo de demora de cada prueba.
Definir n de manera que pueda variar para las diferentes pruebas, por
ejemplo puede ser 10, 100, 1000, 10000, 50000, etc. Con la condición que
el tiempo de demora no sea mayor a 20 segundos para la pruebas.
Se le pide codificar en c o en c++, y escribir en una tabla con un gráfico de
cada uno:

(Datos ascendente)
N (datos) demora INSERTION-SORT
100
1000
...

(Datos ascendente)
N (datos) demora MERGE-SORT.
100
1000
...

(Datos Aleatorios)
N (datos) demora INSERTION-SORT
100
1000
...
(Datos Aleatorios)
N (datos) demora MERGE-SORT.
100
1000
...

(Datos descendente)
N (datos) demora INSERTION-SORT
100
1000
...

(Datos descendente)
N (datos) demora MERGE-SORT.
100
1000
...

Ejemplo de captura del tiempo

#include <time.h>
#include <stdio.h>
int main(){
clock_t start_t, end_t, total_t;
int i;

start_t = clock();
printf("Starting of the program, start_t = %ld\n", start_t);

printf("Going to scan a big loop, start_t = %ld\n", start_t);


for(i=0; i< 10000000; i++)
{
}
end_t = clock();
printf("End of the big loop, end_t = %ld\n", end_t);

total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;


printf("Total time taken by CPU: %f\n", total_t );
printf("Exiting of the program...\n");

return(0);
}

La constante CLOCKS_PER_SEC es 1000000 por segundo dependiendo de su


sistema operativo y de los bits.