Univesidad Técnica Federico Santa María
     Estructura de Datos y Algoritmos

Tarea 01



Por:

        Eric de la Goublaye de Ménorval    9792010-9
        Nicolas Cheker                                 9892002-1   





Introducción:

        El siguiente programa permite observar gráficamente los costos y metodos de ordenamientos de los conocidos algoritmos Insertion Sort, Merge Sort y Heap Sort. Ademas permite comparar los algoritmos selecionados, es decir, se puede ver un algoritmo, compararlo con otro o con otros dos.   
       El programa consta de dos funciones, la primera de graficar los costos de tiempo de los algoritmos versus el tamaño de los arreglos a ordenar y la segunda de graficar dinámicamente la posición de los elementos del arreglo versus el tamaño de los arreglos a ordenar.

Desarrollo:

       El programa consta de varios archivos los cuales son compilados por medio de un Makefile. Existen archivos con los codigos fuentes (*.c) y librerías (*.h), tambien se podra observar la creación automática de un archivo de configuración  de Gnuplot *.gnu y la creación de archivos (*.DAT) que son creados al momento de ejecutar el programa.
       Se tiene cinco archivos código fuente, de los cuales tres son para cada algoritmo (insertion.c, mergesort.c, heapsort.c), otro para la creacion del archivo de configuración del Gnuplot () y un último que hace el llamado de los algoritmos y de los gráficos (diagrama.c)
        Tambien se encuentra un archivo makefile altamente configurado para compilar los archivos y por último este archivo Readme.html.
        El contenido de los arreglos en el programa son generados de manera aleatoria, partiendo de una semilla sacada del tiempo del computador, esto se observa claramente en el código fuente del archivo creararreglo.c

NOTA: Todos los archivos son fuertemente comentados para un mejor entendimiento de para del corrector.

Modo de empleo:

        Despues de descomprimir el archivo nicoeric01.tar aparece una carpeta con el mismo nombre incluyendo los archivos mencionados anteriormente.
        Para complar los archivos basta colocar el la linea de comando: (# = linea de comando)
                # make
        Una ventaja de este programa a diferencia de los otros es que permite al usuario ingresar los algoritmos que se deseen estudiar y comparar . Esto permite una posible extención del programa, es decir, si se desea estudiar otro algorimto bastaría con colocar el codigo fuente, por ejemplo otroalgoritmo.c, permitiendo entonces una expansión de este programa para otros programadores por medio de modulos. Para lograr este objetivo se debe colocar los siguientes argumentos de entrada al momento de ejecutar el programa:
                #./diagrama 1 2 3 m  
        Donde:
               1 es el llamado al Algoritmo Insertion Sort.
               2 es el llamado al Algoritmo MergeSort.
               3 es el llamado al Algoritmo HeapSort.
               m es el valor de la posición máxima del conetnido de los arreglos para la segunda fase (Diagrama Dinámico)

           Al momento de ejecutar el programa crea archivos objetos (*.o) los cuales pueden ser eliminados de manera simple ejecutando en la linea de comando la siguiente instrucción:
                #make clean
            Igualmente para que el programa pueda graficar se crean automaticamente archivos de datos (*.DAT los cuales para ), los cuales pueden ser facilmente eliminados colocando en la linea de comado la siguiente instrucción:
                #make data

Ejemplos de Uso:

               
#./diagrama 1 1000 (permite observar par el Algoritmo InsertionSort con m=1000)

                #./diagrama 3 2 5000 (permite observar para los Algoritmos HeapSort y MergeSort con m=1000)

                #./diagrama 1 2 3 4500 (permite observar el ordenamiento de todos los algoritmos con m=4500)

NOTA: El primer argumento y m son datos obligadatorios que deben ser colocados para poder ejecutar el problema.

Conclusion:

       
Este programa entrega gráficos de gran importancia para el entendimiento de los algoritmos, en su primera fase muestra el costo de los algoritmos y en su segunda fase muestra como se va costruyendo el ordenamiento de los algoritmos de una manera dinámica y amistosa.

        Gracias a este programa se ve claramente los algoritmos a baja y alta carga permitiendo estudiar el desempeño de ellos, como tambien su manera de construir el arreglo ordenando permitiendo un mejor entendimiento de los Algoritmos InsertionSort, MergeSort y HeapSort.