viernes, 14 de febrero de 2014

Medición del tiempo



Para estimar cuanto tiempo nos toma un algoritmo podemos usar la librería time.h, esta nos facilita 2 funciones que implementaremos con un ejemplo previo de la siguiente manera:
#include <stdio.h>      
#include <time.h>       /* time_t, struct tm, difftime, time, mktime */

int main ()
{
  time_t inicio;
  time_t fin;
  double segundos;


  time(&inicio);  /* Obtiene el tiempo actual; también se puede: timer = time(NULL)  */

  /*****************************
   ** Aquí se inserta         **
   ** el código a cronometrar **
   *****************************/

  time(&fin);

  segundos = difftime(fin,inicio);

  printf ("El algoritmo tomó %f segundos\n", segundos);

  return 0;
}

#include <stdio.h>      
#include <time.h>       /* clock_t, clock, CLOCKS_PER_SEC */

int main ()
{
  clock_t tiempo;
  tiempo = clock();
  
  /*****************************
   ** Aquí se inserta         **
   ** el código a cronometrar **
   *****************************/
  tiempo = clock() - tiempo;
  printf (""El algoritmo tomó %f segundos\n.\n",((float)tiempo)/CLOCKS_PER_SEC);
  return 0;
}
Veamos  un ejemplo de como tomar el tiempo del algoritmo de ordenación rápida:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void quicksort(int *list, int first, int last)
{
   int pivote, j, temp, i;

   if( first < last )
   {
       pivote=first;
    i=first;
    j=last;

    while(i<j)
    {
        while(list[i] <= list[pivote] && i<last) i++;
     while(list[j] > list[pivote]) j--;
     if(i<j)
     {
         temp = list[i];
      list[i] = list[j];
      list[j] = temp;
     }
    }
   }
   temp = list[pivote];
   list[pivote] = list[j];
   list[j] = temp;
   if(j>first+1) quicksort(list,first,j-1);
   if(j<last-1)quicksort(list,j+1,last);

}

int main()
{
    clock_t tiempo;

    int i;//contador
    int size=10000;

    srand(time(NULL));
 //Creación del arreglo.
 int arreglo[size];

 tiempo = clock();

 quicksort(arreglo,0,size-1);

 tiempo = clock()-tiempo;

 printf("Tardó en ordenarse %f segundos\n",((float)tiempo)/CLOCKS_PER_SEC);

    return 0;
}

Ejercicios
  • Medir el tiempo que toma el algorítmo de búsqueda con el arreglo ordenado y sin ordenar.
  • Crear un archivo con los datos del tiempo versus la dimensión del arreglo para los algoritmos de ordenación.

No hay comentarios:

Publicar un comentario