Increiblemente complicado!
Buenas gente, espero me ayuden en esta.
Les cuento que estuve analizando por todos lados (mayormente en internet) el hecho de medir el tiempo de un algoritmo cualquiera e implemente en mi codigo un cronometro con System.currentTimeMillis() para medir el metodo de clasificacion por inserci贸n directa. Hasta ahi bastante bien.
El problema se me vino cuando tuve que medir el tiempo del quicksort. No saben el trabajo que me esta dando el bendito QuickSort. Los tiempo (obviamente como no podia ser de otra manera) dan 0 ya que es el algoritmo mas rapido.
El problema es que yo tengo que mostrar un valor que no sea 0, ya que 0 no es una medida de tiempo valida a la hora de decir el tiempo de un algoritmo de clasificacion.
Luego, prob茅 ordenar el conjunto de datos varias veces hasta que no me de 0, y luego promediarlo con la cantidad de veces que se corrio, pero nada; el valor que tira es 0 (hasta encontre la manera de tirar varios numeros despues de la coma con el NumberFormat y el setMinimunFractionDigits, por lo que pueden ver que no me daba por vencido) pero adivinen que result贸........0.0000000!!!!! esta bien que sea rapido, pero de ahi a que no se pueda tomar el tiempo ya es demasiado!!!!.......
Asique como ultimo recurso, luego de haber intentado de mil formas distintas e investigado por cualquier lado, acudo en ayuda de un grupo tan culto como este.
Desde ya muchas gracias,
Leo.
Les cuento que estuve analizando por todos lados (mayormente en internet) el hecho de medir el tiempo de un algoritmo cualquiera e implemente en mi codigo un cronometro con System.currentTimeMillis() para medir el metodo de clasificacion por inserci贸n directa. Hasta ahi bastante bien.
El problema se me vino cuando tuve que medir el tiempo del quicksort. No saben el trabajo que me esta dando el bendito QuickSort. Los tiempo (obviamente como no podia ser de otra manera) dan 0 ya que es el algoritmo mas rapido.
El problema es que yo tengo que mostrar un valor que no sea 0, ya que 0 no es una medida de tiempo valida a la hora de decir el tiempo de un algoritmo de clasificacion.
Luego, prob茅 ordenar el conjunto de datos varias veces hasta que no me de 0, y luego promediarlo con la cantidad de veces que se corrio, pero nada; el valor que tira es 0 (hasta encontre la manera de tirar varios numeros despues de la coma con el NumberFormat y el setMinimunFractionDigits, por lo que pueden ver que no me daba por vencido) pero adivinen que result贸........0.0000000!!!!! esta bien que sea rapido, pero de ahi a que no se pueda tomar el tiempo ya es demasiado!!!!.......
Asique como ultimo recurso, luego de haber intentado de mil formas distintas e investigado por cualquier lado, acudo en ayuda de un grupo tan culto como este.
Desde ya muchas gracias,
Leo.
Hola Leo:
Creo que la respuesta que buscas es bastante l贸gica. Si bien al correr el QuickSort no cambia el resultado de currentTimeMillis() es porque obviamente el ordenamiento se produce dentro del primer milisegundo.
No creo que sea posible obtener una medida temporal menor a un milisegundo (una fracci贸n de milisegundo), pero por lo menos sabes que el ordenamiento se obtiene en un tiempo intermedio entre 0 y 1 milisegundo.
Quizas podr铆as probar con una mayor cantidad de datos a ordenar... algo as铆 como generar unos 100000 numeros aleatorios y correr los ordenamientos... Creo que de esa manera podr铆as obtener resultados mas l贸gicos (y visibles por supuesto).
Espero que te haya ayudado en algo.
Slds
Creo que la respuesta que buscas es bastante l贸gica. Si bien al correr el QuickSort no cambia el resultado de currentTimeMillis() es porque obviamente el ordenamiento se produce dentro del primer milisegundo.
No creo que sea posible obtener una medida temporal menor a un milisegundo (una fracci贸n de milisegundo), pero por lo menos sabes que el ordenamiento se obtiene en un tiempo intermedio entre 0 y 1 milisegundo.
Quizas podr铆as probar con una mayor cantidad de datos a ordenar... algo as铆 como generar unos 100000 numeros aleatorios y correr los ordenamientos... Creo que de esa manera podr铆as obtener resultados mas l贸gicos (y visibles por supuesto).
Espero que te haya ayudado en algo.
Slds
Puedes expresar el tiempo en nanosegundos con la funci贸n System.nanoTime() en vez de milisegundos. He hecho una prueba con el siguiente programa:
public class Ejemplo {
public static void main(String[] args) {
long tiempo1 = System.currentTimeMillis();
long tiempo2 = System.currentTimeMillis();
System.out.println(tiempo2 - tiempo1);
long tiempo3 = System.nanoTime();
long tiempo4 = System.nanoTime();
System.out.println(tiempo4 - tiempo3);
}
}
La salida que me da es esta:
0
1397
Supongo que esto ser谩 mejor que lo que ten铆as antes. Que te vaya bien. Hasta luego.
public class Ejemplo {
public static void main(String[] args) {
long tiempo1 = System.currentTimeMillis();
long tiempo2 = System.currentTimeMillis();
System.out.println(tiempo2 - tiempo1);
long tiempo3 = System.nanoTime();
long tiempo4 = System.nanoTime();
System.out.println(tiempo4 - tiempo3);
}
}
La salida que me da es esta:
0
1397
Supongo que esto ser谩 mejor que lo que ten铆as antes. Que te vaya bien. Hasta luego.