Práctica1: Medición del Tiempo Objetivo Medir teórica y experimentalmente el tiempo de ejecución de algoritmos. Procedimiento General. En Netbeans cree el proyecto P1_Timing para incorporar los códigos que están disponibles en la sección de ayudas y los que se generen en esta práctica. 1. Haga la puesta en marcha del programa Time.java que mide el tiempo de ejecución en milisegundos y nanosegundos. Esta clase tiene su propio main, así que ejecútelo como archivo y no como proyecto con shif+f6.. Haga la puesta en marcha del programa Random.java que genera números aleatorios en el intervalo 1-100 y escribe su frecuencia de ocurrencia. Esta clase tiene su propio método main. 3. Haga la puesta en marcha del programa ListFile.java que muestra el contenido de un archivo de texto. Esta clase tiene su propio método main. 4. Haga la puesta en marcha del Programa DoubleSpace.java, el recibe un archivo de texto y crea uno similar separando cada línea por un espacio. 5. Haga la puesta en marcha del programa DataProcessing.java. Esta clase por ahora contiene sólo una rutina de ordenamiento (insertsort) que ordena datos de cualquier tipo (Object). Como esta clase no tiene método main propio, desde la clase Main del proyecto invoque al algoritmo de ordenamiento con datos de tipo entero (Integer) introducidos en código duro y mida el tiempo de ejecución. 6. Agregue a la clase Main el código necesario para ordenar datos de los tipos siguientes: a) Tipo cadena (String) introducidos en código duro. b) Tipo Cadena (String) introducidos por teclado. Utilice los métodos getstrings( ) y resizestringsarray( ). c) Tipo Cadena introducidos desde archivo de texto. 7. Incorpore al programa DataProcessing.java, como métodos estáticos, cada uno de los códigos de los siguientes algoritmos. En el método main realice llamadas a esos métodos y mida el tiempo de ejecución con los datos enteros del punto 3. Ordenamiento por Inserción (ojo: ya está incorporado) Ordenamiento Burbuja (requiere que los datos estén ordenados) Ordenamiento por Selección Búsqueda binaria iterativa Menor de una secuencia de números Segundo mayor 8. Haga un programa que genere aleatoriamente datos (enteros) para los programas anteriores y los guarde en archivo de texto de acuerdo con el formato del inciso g de la sección de ayudas. 9. Ejecute los algoritmos con entradas ordenadas-ascendentemente y desordenadas, así como de diferentes tamaño. Recuerde que para ejecutar la Búsqueda binaria primero debe ordenar los elementos. Para cada algoritmo elabore una tabla de desempeño con la siguiente información:
n Tipo 56 Ordenado 56 Desordenado 16384 Ordenado 16384 Desordenado 09715 Ordenado 09715 Desordenado Algoritmo 1: Análisis experimental Tiempo en nanoseg Análisis teórico T(n)= número de veces que se ejecutan las operaciones Básicas Constante de proporcionalidad T(n)/nanoseg. Presentación de resultados a) Elabore un documento pdf que contenga una descripción general de la práctica (un párrafo) y los siguiente resultados de la práctica: PUNTO 1-5, una explicación breve de cada procedimiento. PUNTO 6, E/S que muestren el funcionamiento correcto de los códigos. PUNTO 7-9 tablas de desempeño con conclusiones. b) Suba a la página del grupo, en el directorio correspondiente (Files/Practicas/Practica3), un sólo archivo en formato zip o rar que contenga: el documento pdf y archivos de la aplicación (proyecto java-netbeans que incluya archivos de entrada, jar). c) Muestre a la profesora que los códigos de la práctica funcionan. La profesora está disponibles en cualquiera de los siguientes horarios (lu-jue 13-14 hrs) o el viernes de 9-1 hrs o 18-0 hrs. Fecha de entrega (subir archivos a la página del grupo) Lunes 19 de septiembre Nota: Los puntos 1 al 4 se deben traer listos de casa y los puntos 5 y 6 se deben terminar en el laboratorio y cuentan para la calificación de la práctica. Los puntos 7 a 9 son para casa. Ayudas a) Código: Time.java public class Time public static void main(string[] args) int numpasses; numpasses = 1000; //Milliseconds long time1 = System.currentTimeMillis(); for (int i = 0; i < numpasses; i++) System.out.println("hola "); long time = System.currentTimeMillis(); //Nanoseconds long time3 = System.nanoTime(); for (int i = 0; i < numpasses; i++) System.out.println("hola "); long time4 = System.nanoTime();
System.out.println("Completed " + numpasses + " passes in " + (time - time1) + " milliseconds"); System.out.println("Completed " + numpasses + " passes in " + (time4 - time3) + " nanoseconds"); b) Código: Random.java import java.util.random; public class RandomNumbers // Generate random numbers (from 1-100) // Print number of occurrences of each number public static final int DIFF_NUMBERS = 100; public static final int TOTAL_NUMBERS = 1000000; public static void main( String [ ] args ) // Create the array; initialize to zero int [ ] numbers = new int [ DIFF_NUMBERS + 1 ]; for( int i = 0; i < numbers.length; i++ ) numbers[ i ] = 0; Random r = new Random( ); // Generate the numbers for( int i = 0; i < TOTAL_NUMBERS; i++ ) numbers[ r.nextint( DIFF_NUMBERS ) + 1 ]++; // Output the summary for( int i = 1; i <= DIFF_NUMBERS; i++ ) System.out.println( i + ": " + numbers[ i ] ); c) Códigos: ListFile.java import java.util.scanner; import java.io.filereader; import java.io.ioexception; public class ListFiles public static void listfile(string filename) Scanner filein = null; System.out.println("FILE: " + filename); try filein = new Scanner(new FileReader(fileName)); //for read Integer objects uses hasnextint while (filein.hasnextline()) String oneline = filein.nextline(); System.out.println(oneLine); catch (IOException e) System.out.println(e); finally // Close the stream if (filein!= null) filein.close(); public static void main(string[] args) listfile("./src/p1_timing/data.txt");
d) Códigos: DoubleSpace.java import java.io.filereader; import java.util.scanner; import java.io.filewriter; import java.io.printwriter; import java.io.ioexception; public class DoubleSpace public static void main( String [ ] args ) doublespace( "./src/p1_timing/data.txt" ); public static void doublespace( String filename ) PrintWriter fileout = null; Scanner filein = null; try filein = new Scanner( new FileReader( filename ) ); fileout = new PrintWriter( new FileWriter( filename + ".ds" ) ); while( filein.hasnextline( ) ) String oneline = filein.nextline( ); fileout.println( oneline + "\n" ); catch( IOException e ) e.printstacktrace( ); finally if( fileout!= null ) fileout.close( ); if( filein!= null ) filein.close( ); e) Códigos: DataProcessing.java y Main.java public class DataProcessing public static void insertsort (Object [] A) Object tmp = new Object(); for (int p = 1 ; p < A.length ; p++) int j = p; tmp = A [p]; for (; j > 0 && ((Comparable) tmp).compareto (A [j - 1])<0 ; j--) //((Comparable) dest[j-1]).compareto(dest[j])>0; j--) A [j] = A [j - 1]; A [j] = tmp;
public class Main public static void main(string[] args) throws Exception Integer[] num =, 4, 15, 5, 7, 0, 1, 8, 7, 3, 4, 30, 6, 33, 1, 18, 39, 5; DataProcessing.insertSort(num); System.out.println("\nOrdenado"); for (int i = 0; i < num.length; i++) System.out.print(num[i] + " "); f) Códigos: método getstrings, método resizestringsarray e invocación. // Read an unlimited number of String; return a String [ ] public static String[] getstrings() Scanner in = new Scanner(System.in); String[] array = new String[5]; int itemsread = 0; System.out.println("Enter any number of strings, one per line; "); System.out.println("Terminate with empty line: "); while (in.hasnextline()) String oneline = in.nextline(); if (oneline.equals("")) break; if (itemsread == array.length) array = resizestringsarray(array, array.length * ); array[itemsread++] = oneline; System.out.println("Done reading"); return resizestringsarray(array, itemsread); // Resize a String[ ] array; return new array public static String [ ] resizestringsarray( String [ ] array, int newsize ) String [ ] original = array; int numtocopy = Math.min( original.length, newsize ); array = new String[ newsize ]; //manual array copy, can be replaced with System.arraycopy() for( int i = 0; i < numtocopy; i++ ) array[ i ] = original[ i ]; return array; public static void main(string[] args) String[] nom = getstrings(); g) Formato para archivo de datos //data type 1)ordered, ) disordered //number of elements 4 //elements 5 4 6 // search keys 5