miércoles, 12 de noviembre de 2008

Problema 6 Practica 2

public class Practi02E6 {
public static void main(String[ ] args) {
int [ ] size = {10000, 100000, 1000000, 10000000};
long [ ] tiempos= new long [ 3*size.length];
Temporizador t = new Temporizador(5);
CronometraMetodoBinarySearch CMBN = new CronometraMetodoBinarySearch(1,1);

for(int i=0;i < size.length;i++){
CMBN.setTamaño(size[ i]);
for(int j=0;j<3;j++){
CMBN.setCaso(j);
t.cronometra(CMBN);
tiempos[ 3*i+j]=t.getTiempoMinimo();
}
}
for(int i=0;i < size.length;i++){
System.out.println("Caso: EP, Tamaño: "+size[ i]+" \tTiempo: "+tiempos[ 3*i]+" ns");
System.out.println("Caso: EM, Tamaño: "+size[ i]+" \tTiempo: "+tiempos[ 3*i+1]+" ns");
System.out.println("Caso: EF, Tamaño: "+size[ i]+" \tTiempo: "+tiempos[ 3*i+2]+" ns");
}
}
}


public class CronometraMetodoBinarySearch implements EstrategiaSolucion{

public static final int EXITO_PRINCIPIO = 0;
public static final int EXITO_MITAD = 1;
public static final int EXITO_FINAL = 2;
public static final int SIN_EXITO_PRINCIPIO = 3;
public static final int SIN_EXITO_MITAD = 4;
public static final int SIN_EXITO_FINAL = 5;

private int numElem;
private int casoDeBusqueda;
private int [] datos;
private int numBuscado;

public CronometraMetodoBinarySearch(int numElem, int casoDeBusqueda) {

// TODO
this.numElem=numElem;
this.casoDeBusqueda=casoDeBusqueda;
this.datos= new int[this.numElem];
this.inicializaDatos();
this.generaNumBuscado();

}

public void setTamaño(int tam){
this.numElem=tam;
this.datos= new int[this.numElem];
this.inicializaDatos();
}

public void setCaso(int casoBusqueda) {

// TODO
this.casoDeBusqueda=casoBusqueda;
this.generaNumBuscado();
}

private void generaNumBuscado() {
switch(casoDeBusqueda) {
case EXITO_PRINCIPIO:
numBuscado = datos[0];
break;
case EXITO_MITAD:
numBuscado = datos[(numElem - 1) / 2];
break;
case EXITO_FINAL:
numBuscado = datos[numElem - 1];
break;
case SIN_EXITO_PRINCIPIO:
numBuscado = datos[0] - 1;
break;
case SIN_EXITO_MITAD:
numBuscado = datos[numElem / 2] - 1;
break;
case SIN_EXITO_FINAL:
numBuscado = datos[numElem - 1] + 1;
break;
default:
// no puede darse ningún otro caso
}
}

private void inicializaDatos() {
for(int i = 0; i < numElem; i++) {
// tomando pares dejamos sitio para las búsquedas fallidas
datos[i] = 2 * (i + 1);
}
}

public void procesamientoFinal() {

}

public void procesamientoInicial() {

}

public void solucion() {
Arrays.binarySearch(this.datos, this.numBuscado);

}

}

1 comentario:

Manu dijo...

Eso tu por si acaso =P