Laufzeit

Heinrich500

Bekanntes Mitglied
Hallo,
ich möchte die Laufzeit meines Sortieralgorithmus messen. Ich will dabei Testinstanzen mit Einträgen zwischen 10.000 und 100.000 erstellen. Wie kann ich das am besten realisieren. Habt ihr vllt einen Tipp, wie man da vorgeht?
Mein Code:
Java:
public static <T extends Comparable<? super T>> void sort(List<T> list) {
        
       for(int j = 1 ; j < list.size(); j++){
           T elem=list.get(j);
           int i=j-1;
           while(i>=0 && (elem.compareTo(list.get(i))<0)){
               list.set(i+1,list.get(i));     
               i--;
           }
           list.set(i+1,elem);
        
       }


}
 
X

Xyz1

Gast
Ich versuche das mal informal zu erklären....
Du hast zweimal die Methode sort. Zum Bleistift sortA und sortB.
Jetzt erstellt Du Testinstanzen. Das sind zum Bleistift Listen mit 50.000 Elem welche sortiert werden sollen und welche durcheinander und/oder sortiert sind.
Jetzt rufst Du sortA und sortB mit den Testinstanzen auf.
Vorher und Nachher erstellst Du einen Zeitstempel, wann das sortieren anfängt und was das sortieren fertig ist.
Jeweils rechnest Du dann Zeitstempel 2 minus Zeitstempel 1. Das speicherst Du und/oder gibst es aus.
Und dann kannst Du alles vergleichen und zum Bleistift eine Tabelle oÄ erstellen.
 

Heinrich500

Bekanntes Mitglied
Wie genau soll der Zeitstempel aussehen?
Und wie kann ich am besten so große Listen in Java erstellen. Eine for Schleife bis 5000 mit Zufallszahlen
?
 

Heinrich500

Bekanntes Mitglied
Mit dem current Time kann ich also die Zeit messen. Am besten wäre es doch, wenn ich einen anderen Sortieralgorithmus mit meinnem vergleiche.
D.h nachdem ich eine Arraylist aus Zahlen erstellt habe, erstelle mit Current time vor und nach dem Sortierbefehl eine Zeitmessung und betrachte die Differenz. Das gleiche kann ich dann mit meinem anderen Sortieralgo machen. Wäre das die richtige Ausführung?
 

mrBrown

Super-Moderator
Mitarbeiter
Für Zeitmessungen bei sowas besser System.nanoTime verwenden, currentTimeMillis ist meist zu schlecht aufgelöst.

Außerdem solltest du nicht nur einen Durchlauf messen, sondern viele, und dann den Durchschnitt bilden. Warmup ist auch nicht zu vergessen.


Wenn du’s richtig machen willst, guck dir JMH an, das ist genau für sowas gemacht ;)
 
K

kneitzel

Gast
nein,


nein, hoffe das war ein Witz, da die Zeitauflösung so ca 16ms beträgt...

Dem kann ich gerade nicht ganz folgen. Ich interpretiere Deine Aussage, dass die Zeitauflösung bei nanoTime schlechter sein soll?

Aber das ist doch Quatsch. Der Timer ist ja gerade dazu da, um hier noch feinere Werte zu bekommen. Und es gibt diesbezüglich ja auch Dokumentationen wie z.B.:
https://web.archive.org/web/2016030...om/dholmes/entry/inside_the_hotspot_vm_clocks
The relative-time clock is represented by the System.nanoTime() method that returns a "free-running" time in nanoseconds. This time is useful only for comparison with other nanoTime values. The nanoTime method uses the highest resolution clock available on the platform, and while its return value is in nanoseconds, the update resolution is typically only microseconds. However, on some systems there is no choice but to use the same clock source as for currentTimeMillis() - fortunately this is rare and mostly affects old Linux systems, and Windows 98.

Also laut der Aussage dort, ist es mindestens genau so gut aufgelöst aber eher besser (Hier werden nur alte Linux Systeme und Windows 98 genannt.)

Und dann habe ich das mal kurz angetestet:
Java:
    public static void doSomething() {
        int arraySize = 500;
        int loopNumber = 500;

        boolean[] array = new boolean[arraySize];
        for (int loop=0; loop < loopNumber; loop++) {
            for (int i=0; i<arraySize; i++) {
                array[i] = !array[i]; 
            }
        }
    }
    public static void main(String[] args) {
        long startMilis = System.currentTimeMillis();
        long startNano = System.nanoTime();

        doSomething();

        long stopMilis = System.currentTimeMillis();
        long stopNano = System.nanoTime();

        System.out.println("currentTimeMillis: " + (stopMilis - startMilis) + " (" + startMilis + " - " + stopMilis + ")");
        System.out.println("nanoTime: " + (stopNano - startNano) + " (" + startNano + " - " + stopNano + ")");
    }

Und da sieht man dann auch den direkten Vergleich. Es mag sein, dass man eh sehr schnell in den ms Sekunden Bereich kommt, so dass man das nicht braucht. (Die Größe mit 500/500 sind bei mir z.B. schon ca. 3ms, die da gemessen werden).
Aber das hat man ja nicht unbedingt. Und wenn man da nur sehr kleine Dinge hat, dann kann das durchaus interessant sein.

Also die Auflösung ist danach bei nanoTime deutlich höher (Wie ja schon erwartet). Da bekomme ich auch verlässig Werte, die < 1ms sind und die relativ stabil sind bei wiederholten Messungen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
E Alter (Laufzeit) berechnen Java Basics - Anfänger-Themen 11
W Array zur Laufzeit bearbeiten? Java Basics - Anfänger-Themen 31
D Objekterzeugungen mit zur Laufzeit variierenden Attributen Java Basics - Anfänger-Themen 7
J GroupLayout zur Laufzeit erweitern Java Basics - Anfänger-Themen 1
B Übersetzungszeit und Laufzeit Java Basics - Anfänger-Themen 3
amgadalghabra Die vier Sortieralgorithmen die durchschnittliche Laufzeit in Millisekunden Java Basics - Anfänger-Themen 37
U Dijkstra Algorithmus Laufzeit Java Basics - Anfänger-Themen 3
S Laufzeit Quicksort wenn alle Elemente gleich sind Java Basics - Anfänger-Themen 4
L Anzahl der Elemente key in einem Array mit log(N) Laufzeit Java Basics - Anfänger-Themen 4
S Interpreter-Fehler Endlosschleife zur Laufzeit aber warum? Java Basics - Anfänger-Themen 15
J JavaFX Label,Button zur Laufzeit Java Basics - Anfänger-Themen 30
C Laufzeit eines Sortier-Algorithmus ermitteln Java Basics - Anfänger-Themen 4
L Objekt Typ zur Laufzeit ermitteln Java Basics - Anfänger-Themen 1
J Datei im Package zur Laufzeit editieren Java Basics - Anfänger-Themen 1
M Quicksort Laufzeit langsam Java Basics - Anfänger-Themen 5
M Quicksort Laufzeit langsam Java Basics - Anfänger-Themen 0
R Objekte zur Laufzeit in Schleife erzeugen und in ArrayList ablegen Java Basics - Anfänger-Themen 4
C Laufzeit von Stack Operation Java Basics - Anfänger-Themen 5
D Laufzeit von einfachem Programm Java Basics - Anfänger-Themen 21
J Laufzeit berechnen/Laufzeitanalyse Java Basics - Anfänger-Themen 2
M Input/Output Datei in Laufzeit-JAR kopieren Java Basics - Anfänger-Themen 6
V Laufzeit Java Basics - Anfänger-Themen 23
G Laufzeit/ O/Θ-Notation einer Treeset Methode Java Basics - Anfänger-Themen 0
W Klassen [GELÖST] Objekte während der Laufzeit mit neuen veränderten Werten beliebig oft initialisieren Java Basics - Anfänger-Themen 2
M Erste Schritte Code zur Laufzeit ändern lassen Java Basics - Anfänger-Themen 3
C Klassen aus einem Package ermitteln und per Laufzeit laden Java Basics - Anfänger-Themen 17
J Objekte zur Laufzeit erzeugen und direkt verwenden Java Basics - Anfänger-Themen 9
M Möglich? Methode aufrufen deren Bezeichner zur Laufzeit durch einen überg. String festgelegt wird Java Basics - Anfänger-Themen 3
K JLabel zur Laufzeit dynamisch erzeugen Java Basics - Anfänger-Themen 7
M Methoden miteinander verbinden (Laufzeit) Java Basics - Anfänger-Themen 6
llabusch Interface Layout eines Labels während der Laufzeit ändern Java Basics - Anfänger-Themen 0
Streeber reale Laufzeit meines Programms ausgeben Java Basics - Anfänger-Themen 1
D Algorithmus zu gegebener Laufzeit implementieren Java Basics - Anfänger-Themen 1
R Variablen Datentyp erst während Laufzeit festlegen Java Basics - Anfänger-Themen 6
S Klassentyp zur Laufzeit ändern? Java Basics - Anfänger-Themen 3
M Laufzeit und O-Notation Java Basics - Anfänger-Themen 3
M Variablen Variable zur Laufzeit erzeugen Java Basics - Anfänger-Themen 3
A Laufzeit von verschachtelter for-Schleife Java Basics - Anfänger-Themen 4
B Variablen Instanz von Enum zur Laufzeit erstellen und zuweisen Java Basics - Anfänger-Themen 2
L Panels zur Laufzeit ändern Java Basics - Anfänger-Themen 2
A Laufzeit Java Basics - Anfänger-Themen 11
M Methodennamen zur Laufzeit ausgeben Java Basics - Anfänger-Themen 5
F JTable zur laufzeit füllen Java Basics - Anfänger-Themen 7
P GUI - Layout per Laufzeit erstellen/verändern? Java Basics - Anfänger-Themen 6
N Variablen VariableNamen auswirkung auf Laufzeit Java Basics - Anfänger-Themen 3
R Rekursionsformel für Laufzeit von Algorithmus Java Basics - Anfänger-Themen 3
J Erste Schritte Zinseszinsberechnung Ermittlung Laufzeit Java Basics - Anfänger-Themen 3
S Laufzeit bei rekursiver Methode messen Java Basics - Anfänger-Themen 6
S Erste Schritte Weihnachtsbaum / Laufzeit O(n) Java Basics - Anfänger-Themen 9
E Laufzeit verkürzen Java Basics - Anfänger-Themen 14
A Threads Zur Laufzeit hinzufügen/entfernen Java Basics - Anfänger-Themen 10
D Classpath compiler zur Laufzeit aufrufen & lib-classpath Java Basics - Anfänger-Themen 6
E Input/Output Inputstream während der Laufzeit füllen Java Basics - Anfänger-Themen 2
B Laufzeit berechnen? Java Basics - Anfänger-Themen 7
S Klasse bei Laufzeit laden? Java Basics - Anfänger-Themen 2
B Klassen Objekte während der Laufzeit dynamisch anlegen Java Basics - Anfänger-Themen 8
K jButton zur Laufzeit hinzufügen Java Basics - Anfänger-Themen 22
D globale Variablen zur Laufzeit erzeugen Java Basics - Anfänger-Themen 5
A Frage zur Laufzeit / Optimierung Java Basics - Anfänger-Themen 2
N Laufzeit in Nanosekunden - in Minuten umrechnen Java Basics - Anfänger-Themen 6
alderwaran objekthierarchie darstellen während der laufzeit Java Basics - Anfänger-Themen 2
G Objekte von Klassen die erst zur Laufzeit bekannt sind erstellen Java Basics - Anfänger-Themen 6
B Frage zur Laufzeit Java Basics - Anfänger-Themen 2
Luk10 Variablen zur Laufzeit ändern! Java Basics - Anfänger-Themen 7
G JAR zur Laufzeit nachladen Java Basics - Anfänger-Themen 2
S JDialog resize zur Laufzeit PROBLEM!!! Java Basics - Anfänger-Themen 5
E Pfad zu einem gif-Bild wird zur Laufzeit nicht gefunden Java Basics - Anfänger-Themen 5
A Applet Bild zu laufzeit hinzufügen Java Basics - Anfänger-Themen 4
C Frage zu Syntax-,Laufzeit-, Semantikfehler Java Basics - Anfänger-Themen 3
R JVM zur laufzeit manipulieren? Java Basics - Anfänger-Themen 4
S Zur Laufzeit Strings Compilieren Java Basics - Anfänger-Themen 5
A Objekte während der Laufzeit erstellen Java Basics - Anfänger-Themen 3
A Objektzugriff zur Laufzeit ändern Java Basics - Anfänger-Themen 20
G Text eines JLabels zur Laufzeit ändern Java Basics - Anfänger-Themen 4
M Laufzeit von Programmen Java Basics - Anfänger-Themen 3
A Jar-Archive zur Laufzeit erstellen Java Basics - Anfänger-Themen 3
G Zu Laufzeit von Tastatur einlesen Java Basics - Anfänger-Themen 11
E Einen String auch über die Laufzeit hinaus speichern Java Basics - Anfänger-Themen 4
A Neue Objekte zur Laufzeit erzeugen Java Basics - Anfänger-Themen 5
D Locale zur Laufzeit über JComboBox laden? Java Basics - Anfänger-Themen 17
S Ausdruck zur Laufzeit auswerten Java Basics - Anfänger-Themen 10
G Anzahl Textfelder zur Laufzeit verändern. Java Basics - Anfänger-Themen 4
Z Benutzerdaten währen Laufzeit speichern Java Basics - Anfänger-Themen 2
K JProgressbar, zur laufzeit steuern Java Basics - Anfänger-Themen 7
V Vektoren zur Laufzeit erzeugen Java Basics - Anfänger-Themen 7
N zur Laufzeit gefundene class-Datei verwenden - wie geht das? Java Basics - Anfänger-Themen 2
G Look and Feel zur Laufzeit ändern Java Basics - Anfänger-Themen 2
A Text einer JComboBox während der Laufzeit ändern ? Java Basics - Anfänger-Themen 4
K Chart zur Laufzeit erstellen und aktualisieren Java Basics - Anfänger-Themen 2
G JAR: Externe Dateien zur Laufzeit aufrufen Java Basics - Anfänger-Themen 12
C Variablen zur Laufzeit erstellen? Java Basics - Anfänger-Themen 14
B Warum hat dieser einfache Algorithmus lineare Laufzeit? Java Basics - Anfänger-Themen 3
M JButton zur laufzeit erzeugen/ löschen Java Basics - Anfänger-Themen 3
B Laufzeit und Übersetzungszeit Java Basics - Anfänger-Themen 11
H ComboBox zur Laufzeit erzeugen? Fehler. Java Basics - Anfänger-Themen 8
M Java Heap Space während der Laufzeit ändern Java Basics - Anfänger-Themen 2
M Klassen zur Laufzeit laden, aus einer jar heraus. Java Basics - Anfänger-Themen 14
A classpath zur Laufzeit erweitern Java Basics - Anfänger-Themen 4
G Anpassen einer JComboBox zur Laufzeit Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben