Conversion de nombres aléatoires en coordonnées XY pour la représentation graphique

StackOverflow https://stackoverflow.com/questions/2095168

  •  21-09-2019
  •  | 
  •  

Question

Mon professeur nous a donné une mission pour tester la différence de runtimes et tailles de recherche en utilisant des algorithmes linéaires et binaires, et les données doivent être représentées graphiquement.

Je les méthodes de recherche ont mis les tailles d'exécution et tableau comme points dans un ArrayList, qui est ensuite envoyé à la classe GraphResults pour le traçage. Je dois convertir ces points de données en coordonnées xy avant. La taille de recherche est l'axe des x et le temps d'exécution est l'axe y

Comme les tailles de recherche sont fixés comme un multiple de 128 et il n'y a que 8 tailles, je commutation pour calculer la valeur de x, mais je suis à la recherche d'un moyen plus efficace pour convertir les runtimes en coordonnées.

En ce moment, j'utilise avec 5 conditions imbriquées comme ceci:

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 ce moment, les chiffres qui sont plus 5000ms nécessitent 7 tests. Est-il possible d'attribuer un numéro en fonction de la taille du nombre plus efficace?

Était-ce utile?

La solution

Comme vous essayez de déterminer la portée de votre mesure, vous pouvez diviser le montant par la taille de la plage, puis en calculant le numéro que vous voulez afficher dans le graphique.

BTW, dans votre code, vous avez fait une erreur logique, si la valeur est y <= 1000 la première condition est évaluée à true, et la seconde pour y <= 750 ne sera jamais évaluée.

Il semble également que plus la plage de valeurs, plus votre point de graphique. Est-ce comme prévu? (1000 -> ymax - 128 pendant 1 -> ymax - 32)

En aparté, si vous voulez comparer les valeurs des gammes inégales, vous pouvez aussi faire quelque chose comme une recherche de tableau (pseudo code):

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;

Notez que l'indice hors gamme agit comme la gamme trouvée pour une valeur qui est plus grande que la plus grande valeur dans votre tableau.

Autres conseils

Qu'en est-newy = yaxis - 32 * ((y/250)% 8);?

Je reformater votre code à quelque chose comme ceci:

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

De cette façon, vous calculez le multiplicateur plutôt que de choisir manuellement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top