2.11.5. Einige nützliche Funktionen

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

Weitere Informationen

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.