Pregunta

Mi profesor nos dio una tarea para probar la diferencia en los tiempos de ejecución y tamaños buscar utilizando algoritmos lineales y binarios, y los datos que se representarán gráficamente.

Tengo los métodos de búsqueda ponen los tamaños de tiempo de ejecución y de la matriz como puntos en un ArrayList, que se envía a la clase GraphResults para el trazado. Necesito convertir esos puntos de datos en coordenadas xy antes. El tamaño de búsqueda es el eje x y el tiempo de ejecución es el eje y

A medida que los tamaños de búsqueda se fijan como un múltiplo de 128 y sólo hay 8 tamaños, que utiliza el interruptor para calcular el valor de x, pero estoy buscando una manera más eficiente para convertir los tiempos de ejecución en coordenadas.

En este momento, estoy usando las condiciones anidadas con 5 como esto:

if (y<=1000) {
    if (y<= 500) { 
        if (y<= 250) {
            newy= yaxis-32; }//equals to 250ms category
        else {
            newy= yaxis-(32*2); }//500ms category
   } 
else if (y<=750) {
    newy= yaxis-(32*3);} //750ms category
else {
    newy= yaxis-(32*4);} //1000ms category
} //end of the 1000ms tests

En este momento, los números que son más de 5000 ms requieren 7 pruebas. ¿Hay una manera más eficiente para asignar un número basado en un tamaño de número?

¿Fue útil?

Solución

A medida que usted está tratando de determinar el alcance de su medición, se puede dividir la cantidad por el tamaño del rango, seguido por el cálculo del número que desea mostrar en el gráfico.

Por cierto, en su código, que cometió un error de lógica, si el valor es y <= 1000 la primera condición se evalúa como verdadera, y nunca será evaluado por el segundo y <= 750.

También parece que cuanto mayor es el rango de valores, menor es su punto de gráfico. Es que como se pretende? (1000 -> ymax - 128, mientras que 1 -> ymax - 32)

Como acotación al margen, si se desea comparar los valores a intervalos irregulares, también puede hacer algo como una búsqueda de array (pseudocódigo):

int[] ranges = new int { 50, 500, 5000, 50000 };

for (int n = 0; n < ranges.length && value > ranges[n]; n++) {
}

int range = n;
int newy = yaxis - range * 32;

Tenga en cuenta que el índice fuera de rango actúa como el rango de encontrar un valor que es mayor que el valor más grande de la matriz.

Otros consejos

¿Qué hay de newy = yaxis - 32 * ((y/250)% 8);?

I de formatear su código a algo más parecido a esto:

newy = yaxis - 32 * ((y-1)/250 + 1);

De esta manera, usted está calculando el multiplicador en lugar de elegir de forma manual.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top