Pergunta

Meu professor nos deu uma tarefa para testar a diferença nos tempos de execução e tamanhos de pesquisa usando algoritmos lineares e binários, e os dados devem ser representados graficamente.

Eu tenho os métodos de pesquisa colocando os tamanhos de tempo de execução e matriz como pontos em uma lista de Arraylist, que é enviada para a classe GraphResults para plotagem. Preciso converter esses pontos de dados em coordenadas XY antes. O tamanho da pesquisa é o eixo x e o tempo de execução é o eixo y

Como os tamanhos de pesquisa são fixos como um múltiplo de 128 e existem apenas 8 tamanhos, usei o Switch para calcular o valor X, mas estou procurando uma maneira mais eficiente de converter os tempos de execução em coordenadas.

No momento, estou usando condicionais aninhados com 5 como este:

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

No momento, os números mais de 5000ms requerem 7 testes. Existe uma maneira mais eficiente de atribuir um número com base no tamanho do número?

Foi útil?

Solução

Enquanto você está tentando determinar o intervalo de sua medição, você pode dividir o valor pelo tamanho do intervalo, seguido pelo cálculo do número que deseja mostrar no gráfico.

Btw, em seu código, você cometeu um erro lógico, se o valor for y <= 1000 a primeira condição avalia para verdadeiro e o segundo para y <= 750 nunca será avaliado.

Também parece que quanto maior o intervalo de valor, menor o seu ponto de gráfico. Isso é o mais pretendido? (1000 -> ymax - 128 while 1 -> ymax - 32)

Como um aparte, se você deseja comparar valores com intervalos desiguais, também pode fazer algo como uma pesquisa de matriz (código pseudo):

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;

Observe que o índice fora do alcance atua como o intervalo encontrado para um valor maior que o maior valor da sua matriz.

Outras dicas

Que tal newy = yaxis - 32 * ((y/250)% 8);?

Eu reforminaria seu código para algo mais assim:

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

Dessa forma, você está calculando o multiplicador, em vez de escolhê -lo manualmente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top