Está en la página 1de 4

ESTRUCTURAS DE DATOS Y ALGORITMOS Escuela T ecnica Superior de Ingenier a Inform atica Curso 2009-2010

Pr actica 4. An alisis experimental del algoritmo Quicksort


Duraci on: 1 sesi on

1.

Objetivo de la pr actica

El objetivo de esta pr actica consiste en estudiar en el laboratorio el comportamiento temporal del algoritmo Quicksort compar andolo, adem as, con el de otros procedimientos de ordenaci on.

2.

Descripci on del problema

Este estudio de costes se va a realizar sobre arrays de guras generadas aleatoriamente. El tipo de gura (Circulo, Rectangulo o Cuadrado) se escoger a aleatoriamente, de igual forma que su tama no (su radio, su base y altura o su lado, dependiendo del tipo de gura). Puesto que el color de la gura no es relevante para la ordenaci on, todas las guras generadas ser an de color negro.

2.1.

La clase Ordenacion

La clase Ordenacion proporciona algunos m etodos est aticos para ordenar un array de elementos de tipo gen erico que implementen el interfaz Comparable<T>. Esta clase se encuentra disponible en PoliformaT y debe incluirse dentro de un nuevo subpaquete, denominado operacionesArray, dentro del paquete librerias.util que se cre o en pr acticas anteriores. Si se genera la documentaci on del paquete, se podr a estudiar las caracter sticas de las operaciones proporcionadas en el mismo.

2.2.

Estudio experimental de la eciencia de un algoritmo

Como ya se vio durante el curso pasado, el estudio experimental de la eciencia de un algoritmo conlleva la elaboraci on de conjuntos de prueba que reejen condiciones diferentes de funcionamiento del mismo (caso en que el algoritmo se comporta mejor, en que se comporta peor, aleatorio, etc.) realizado para vol umenes de datos, o tallas, crecientes del problema. A medida que se generan los distintos casos de prueba, o bien posteriormente, se somete el o los algoritmos a dichos casos, determin andose para cada uno de ellos una medida del esfuerzo computacional necesario para su resoluci on (dicha medida suele ser el tiempo de ejecuci on). Por u ltimo, los resultados se tabulan y se presentan adecuadamente. Adem as, en estudios del tiempo promedio ser a necesario generar, para cada posible talla, diferentes instancias aleatorias, de forma que la medida nal ser a un promedio de las efectuadas individualmente.

2.3.

Medida del tiempo de ejecuci on (temporizaci on)

Tal como se coment o en PRG, la temporizaci on consiste en medir el tiempo de ejecuci on de un programa o segmento de programa utilizando alguna rutina del sistema. Naturalmente, si se trabaja en

un sistema de tiempo compartido, se deber a tomar precauciones para que las medidas que se realicen sean independientes, en lo posible, de la carga del sistema. En el lenguaje Java existe, dentro de la clase System, el m etodo currentTimeMillis() que devuelve el n umero de milisegundos transcurridos desde cierto instante inicial (1 de enero de 1970) hasta el momento en que se efect ua la llamada. El valor que devuelve dicho m etodo es de tipo entero largo (long ). Mediante la diferencia entre dos llamadas sucesivas al m etodo currentTimeMillis() se puede obtener el tiempo, en milisegundos, transcurrido entre ambas. Consid erese, por ejemplo, el siguiente fragmento de programa:
long t1 = System.currentTimeMillis(); S; long t2 = System.currentTimeMillis(); long tiempo = t2 - t1; // // // // medida 1 de tiempo cualquier instrucci on medida 2 de tiempo tiempo de ejecuci on de S

Cuando se temporiza un fragmento de programa, deben colocarse cuidadosamente las instrucciones de temporizaci on, evitando incluir entre las mismas toda aquella parte de c odigo no correspondiente al mismo.

3.

Actividades en el laboratorio
Para el desarrollo de esta pr actica se proponen las siguientes actividades a desarrollar:

3.1.

Creaci on del paquete operacionesArray

El alumno deber a crear un nuevo paquete denominado librerias.util.operacionesArray. A este nuevo paquete se deber a a nadir la clase Ordenacion, disponible en PoliformaT. La clase Ordenacion proporciona diversos m etodos para la ordenaci on de arrays gen ericos: insercionDirecta, quickSort y mergeSort. Se aconseja generar la documentaci on del paquete para estudiar con mayor detalle los perles de las operaciones implementadas en esta clase.

3.2.

Implementaci on del interfaz Comparable<Figura>

Los m etodos de ordenaci on que se van a analizar son insercionDirecta, quickSort y mergeSort. Para estudiar su comportamiento vamos a medir el tiempo que necesitan para ordenar varios grupos de guras generados aleatoriamente. Para ello es necesario que la clase Figura implemente el interfaz Comparable<Figura>. El alumno deber a modicar convenientemente la clase Figura para que dos guras puedan ordenarse de acuerdo a su area.

3.3.

Comparaci on de los m etodos de ordenaci on

En PoliformaT se proporciona la clase TestOrdenacion, que se habr a de incluir dentro del paquete aplicaciones.guras.gestionFiguras. Esta clase se encarga de comparar el coste de los tres m etodos de ordenaci on arriba mencionados y de mostrar el resultado por pantalla de forma tabulada. El alumno deber a completar el m etodo comparar de la clase TestOrdenacion, que se encarga de comparar el coste temporal de los dos m etodos de ordenaci on que recibe como par ametros. Este m etodo muestra por pantalla el tiempo de ejecuci on en promedio de dichos m etodos para arrays de guras generados aleatoriamente, y con tallas sucesivamente crecientes: 1000, 2000, 3000, 4000, . . ., 9000 y 10000 guras. La clase TestOrdenacion dispone de dos m etodos que son de gran utilidad para esta tarea: crearArrayDeFiguras : crea un array de guras aleatorias de la talla indicada. ordenarArrayDeFiguras : ordena un array de guras, utilizando el m etodo de ordenaci on indicado, y devuelve el tiempo empleado en el proceso.

Para cada una de estas tallas se ejecutar a el algoritmo de ordenaci on un cierto n umero de veces, que ser a distinto para cada m etodo de ordenaci on y que est a denido en el atributo NUM_REPETICIONES. De esta forma se podr a obtener el coste medio como la media aritm etica de las medidas tomadas. La salida del programa deber a ser tabulada, con un formato legible, similar al que se muestra a continuaci on:
# Ordenacion por Ins. directa y Quicksort # Tiempos de ejecucion promedio # Talla # 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 Tiempo (mseg) Ins. directa 15,80 46,80 78,00 137,20 215,40 318,20 424,40 561,60 702,00 873,80 Tiempo (mseg) Quicksort 3,29 3,10 1,90 2,21 2,94 3,46 4,37 5,32 5,78 7,02

Una vez completado el c odigo, se deber a ejecutar el m etodo main de la clase TestOrdenacion y probar las tres opciones del men u para vericar que los m etodos de ordenaci on implementados funcionan correctamente y estudiar cu al de los tres m etodos es el m as eciente.

3.4.

Interpretaci on de los resultados

Habitualmente, la interpretaci on de los resultados obtenidos mediante un proceso de temporizaci on similar al realizado se facilita representando los resultados de forma gr aca. Para ello, se sit uan en abscisas valores crecientes de la talla, mientras que en ordenadas se representan los tiempos de ejecuci on. Adem as, para poder prever tiempos de ejecuci on fuera del rango de tallas medido, es conveniente ajustar los resultados mediante una funci on matem atica de forma que, sustituyendo en la misma los valores de talla deseados, sea posible deducir el comportamiento temporal requerido. Hoy en d a, mediante el uso de hojas de c alculo (OpenOce, por ejemplo), o de programas m as especializados de interpretaci on y presentaci on gr aca (gnuplot, por ejemplo) es posible realizar la representaci on gr aca de los resultados. Por ejemplo, para obtener la gr aca correspondiente al m etodo de insercionDirecta en el gnuplot se deben seguir los siguientes pasos: on 2 del men u) en un chero llamado, por 1. Se guardan los resultados de la comparativa (opci ejemplo, tiempos.dat. Para ello se aconseja: Activar la opci on Clear screen at method call del terminal antes de ejecutar el programa. Guardar el chero mediante la opci on Save to le...del terminal una vez obtenidos los resultados. El chero obtenido deber a editarse para eliminar las l neas correspondientes al men u de la aplicaci on. 2. Lanzar el gnuplot. Para visualizar los datos obtenidos basta con escribir: plot tiempos.dat using 1:2 El par ametro 1:2 indica que las columnas que se utilizar an para obtener la gr aca ser an 1 (donde se muestra la talla del problema) y la 2 (donde est an los tiempos de insercionDirecta ). 3. Ajustar los resultados a un polinomio de segundo grado para poder predecir el comportamiento del m etodo para tallas m as grandes. Para ello se crea una nueva funci on con tres par ametros (a, b y c) para, posteriormente, ajustar el valor de dichos par ametros: insDir(x) = a*x**2 + b*x + c fit insDir(x) tiempos.dat using 1:2 via a,b,c 3

Figura 1: Inserci on directa, tiempo promedio. Ajuste a una parabola. on obtenida es: 4. Tras el ajuste la funci insDir(x) = 8,977e 06 x2 0,00364 x + 11,3 Finalmente, mostramos la gr aca resultante (ver Figura 1), con los tiempos obtenidos y con la funci on de ajuste: plot tiempos.dat using 1:2, insDir(x) Del mismo modo, podemos ajustar los resultados obtenidos con el m etodo quickSort a una curva de tipo x*log(x). Tras el ajuste se obtiene: quick (x) = 0,00116 x log(x) 0,0106 x + 5,724

Figura 2: Quicksort, tiempo promedio. Ajuste a curva x*log(x). Naturalmente, ahora es sencillo predecir el comportamiento temporal de cualquiera de los dos algoritmos mediante el uso de las funciones de ajuste. Est udiese, por ejemplo, cu anto tiempo emplear an ambos algoritmos en ordenar una array de un mill on de elementos. 4

También podría gustarte