Frage

Mein Professor hat uns einen Auftrag gegeben, den Unterschied in Laufzeiten und Suchgrößen mit linearen und binären Algorithmen zu testen, und die Daten sind grafisch zu werden.

Ich habe die Suchmethoden, die die Laufzeit- und Array -Größen als Punkte in einer ArrayList einfügen, die dann zur Plotten an die GraphResults -Klasse gesendet wird. Ich muss diese Datenpunkte zuvor in XY -Koordinaten umwandeln. Die Suchgröße ist die x-Achse und die Laufzeit ist die Y-Achse

Da die Suchgrößen als Mehrfaches von 128 festgelegt sind und es nur 8 Größen gibt, habe ich Switch zur Berechnung des X -Werts verwendet, suche jedoch eine effizientere Möglichkeit, die Laufzeiten in Koordinaten umzuwandeln.

Im Moment verwende ich verschachtelte Bedingungen mit 5 solchen:

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

Derzeit erfordern die Zahlen, die über 5000 ms sind, 7 Tests. Gibt es eine effizientere Möglichkeit, eine Nummer zuzuweisen, die auf einer Zahlengröße basiert?

War es hilfreich?

Lösung

Während Sie versuchen, den Bereich Ihrer Messung zu bestimmen, können Sie die Menge durch die Bereichsgröße teilen, gefolgt von der Berechnung der Anzahl, die Sie im Diagramm anzeigen möchten.

Übrigens haben Sie in Ihrem Code einen Logikfehler gemacht, wenn der Wert ist y <= 1000 Die erste Bedingung bewertet true und die zweite für y <= 750 wird niemals bewertet.

Es scheint auch, dass je höher der Wertbereich ist, desto niedriger Ihr Graph -Punkt. Ist das wie beabsichtigt? (1000 -> Ymax - 128 während 1 -> Ymax - 32)

Abgesehen davon können Sie auch so etwas wie eine Array -Lookup (Pseudo -Code) tun, wenn Sie Werte mit ungleichmäßigen Bereichen vergleichen möchten:

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;

Beachten Sie, dass der Index außerhalb des Bereichs als Bereich für einen Wert fungiert, der größer ist als der größte Wert in Ihrem Array.

Andere Tipps

Wie wäre es mit newy = yaxis - 32 * ((y/250)% 8);?

Ich würde Ihren Code in etwas mehr wie folgt neu formatieren:

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

Auf diese Weise berechnen Sie den Multiplikator, anstatt ihn manuell zu wählen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top