Conversione di numeri casuali in coordinate XY per la rappresentazione grafica
Domanda
Il mio professore ci ha dato l'incarico di verificare la differenza di tempi di esecuzione e dimensioni di ricerca utilizzando algoritmi lineari e binari, ed i dati devono essere graficamente.
Ho i metodi di ricerca messo i formati di runtime e array come punti in un ArrayList, che viene poi inviato alla classe GraphResults per la stampa. Ho bisogno di convertire i punti dati in coordinate xy prima. La dimensione di ricerca è l'asse x ed il runtime è l'asse y
Per quanto le dimensioni di ricerca sono fissati come multiplo di 128 e ci sono solo 8 dimensioni, ho usato l'interruttore per il calcolo del valore di x, ma sono alla ricerca di un modo più efficiente per convertire i tempi di esecuzione in coordinate.
In questo momento, sto usando condizionali nidificate con 5 in questo modo:
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
In questo momento, i numeri che sono più di 5000ms richiedono 7 prove. C'è un modo più efficiente per assegnare un numero basato su un formato numero?
Soluzione
Mentre si sta cercando di determinare la portata della misura, è possibile dividere l'importo per la dimensione gamma, seguito dal calcolo del numero che si desidera visualizzare nel grafico.
A proposito, nel codice, hai fatto un errore logico, se il valore è y <= 1000
la prima condizione restituisce true, e la seconda per y <= 750
non sarà mai valutato.
Inoltre sembra che maggiore è il campo di valori, minore sarà il punto del grafico. È che come previsto? (1000 -> Ymax - 128 mentre 1 -> Ymax - 32)
Per inciso, se si vuole confrontare i valori a intervalli irregolari, si può anche fare qualcosa di simile a una ricerca di array (pseudo codice):
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;
Si noti che l'indice di out-of-range agisce come la gamma trovato per un valore che è più grande il più grande valore nella vostra matrice.
Altri suggerimenti
Come su newy = yaxis - 32 * ((y/250)% 8);?
Vorrei riformattare il codice per qualcosa di più simile a questo:
newy = yaxis - 32 * ((y-1)/250 + 1);
In questo modo, si sta calcolando il moltiplicatore anziché scegliere manualmente.