Lernziele
Nützliche Funktionen aus misc.h |
Laufzeiten messen mit used_time() |
LEDA hält eine kleine Anzahl von nützlichen Funktionen
bereit, die in der Header-Datei Header misc.h deklariert
sind. Einige davon haben wir schon kennen gelernt, z. B.
read_string() zum Einlesen von Strings
oder print_statistics() zur Ausgabe von
Informationen über den Zustand des Speichermanagers.
Eine weitere, sehr häufig benutzte Funktion daraus ist
used_time() zum Messen von Laufzeiten.
Sie wird wie folgt benutzt:
Ein Aufruf
float T = used_time();
ohne
Parameter liefert die bisher verbrauchte CPU-Zeit zurück. Diese
kann für spätere Messungen in einer Variablen
T gespeichert werden.
Um zu einem späteren Zeitpunkt festzustellen, wie viel Zeit
von T an vergangen ist, kann
used_time() mit T als
Argument aufgerufen werden:
float elapsed_time = used_time(T);
Die Funktion
liefert dann die Differenz zwischen den beiden Zeitpunkten
zurück, also die dazwischen vergangene Zeit. Außerdem setzt
sie T erneut auf die bis dahin verbrauchte
CPU-Zeit; dadurch können Aufrufe von
used_time(T) in Reihe geschaltet werden, um nacheinander die Zeiten zu messen, die in einzelnen Code-Abschnitten verbraucht wurden.
Den Gebrauch von used_time() führen wir
vor, indem wir in unserem Anagramm-Programm aus Abschnitt 2.3.5 die Laufzeiten einzelner Abschnitte
messen. Dieses Programm gliedert sich in die drei Teilschritte
Einlesen, Sortieren und Ausgeben und läuft insgesamt recht lange,
da die Anzahl der Wörter, die einzulesen und zu sortieren sind, in
unserem Beispielwörterbuch mit ca. 300.000 recht groß ist. Die
Funktion used_time() wird wie folgt benutzt,
um die Laufzeiten der drei Teilschritte zu messen:
...
#include <LEDA/misc.h>
...
using leda::used_time;
// later inside main()
// Set startTime and T to the currently used CPU time
float startTime = used_time();
float T = startTime;
// Read all words
...
// Set T to the currently used CPU time and return the difference
cout << "Time to read in words: " << used_time(T) << endl;
// Sort according to user defined ordering
...
cout << "Time to sort: " << used_time(T) << endl;
// Print all sequences of equivalent words of length > 1
...
cout << "Time to find all sequences of length > 1: "
<< used_time(T) << endl;
cout << "Total time: " << used_time(startTime) << endl;Die Ausgabe des Programmes ist:
Time to read in words: 7.51 Time to sort: 4.08 Time to find all sequences of length > 1: 0.4 Total time: 11.99
In der Datei misc.h sind noch
einige andere, nützliche Funktionen deklariert.
So gibt es z. B. Funktionen zum Vertauschen zweier Variablen oder zur
Bestimmung des Minimums bzw. des Maximums zweier Werte.
Mehr Informationen dazu finden sich auf der
entsprechenden Manualseite.