next up previous contents
Next: Kosten im schlimmsten Fall Up: Einordnung Previous: Einordnung

Kosten im besten Fall

Der in der Klasse timetest implementierte unten als Ausschnitt angegebene Algorithmus ermittelte für verschiedene als Referenz herangezogene günstige Zahlen die im folgenden Diagramm dargestellten Daten. Wie man sieht, bildet er schlicht tex2html_wrap328 mal den ggT der anzugebenden Zahlen a und b. Um aussagekräftige Werte zu erhalten, wurde tex2html_wrap328 hier als tex2html_wrap392 gewählt und konstant belassen.

figure133

Das Diagramm zeigt vier Meßreihen, hervorgehoben durch die unterschiedliche Linien und Punktart. Auf der mit 'num' beschrifteten x-Achse sind die gewählten Zahlen tex2html_wrap234 (und tex2html_wrap235) abgetragen, für die der Algorithmus ausgeführt wurde. Die mit 'time' bezeichnete y-Achse zeigt die für den kompletten Vorgang auf dem Beispielsystem jeweils nötige Zeit in Millisekunden.

Die erste der unteren beiden Meßreihen, als durchgezogene Linie dargestellt, zeigt dabei die Laufzeit von tex2html_wrap328 mal tex2html_wrap396 mit tex2html_wrap397 oder anders formuliert tex2html_wrap398 mit tex2html_wrap399. Es wurden also die Zahlen zwischen tex2html_wrap400 und tex2html_wrap401 je zehntausendmal auf sich selbst bearbeitet. Entsprechendes stellt die zweite gestrichelt dargestellte Reihe dar, nur daß diesmal die Zahlen zwischen tex2html_wrap402 und tex2html_wrap403 verwendet wurden. Wie man sieht, besteht kein signifikanter Unterschied zwischen beiden Meßreihen.

Die beiden oberen Kurven stellen dieselben beiden Zahlenbereiche dar, wobei jedoch tex2html_wrap273 jeweils als tex2html_wrap405 gewählt wurde, wodurch der Algorithmus nicht sofort terminieren kann, sondern erst einmal die Schleife aufrufen und durchlaufen muß. Auffallend ist hierbei der recht große Offset zwischen unterer (tex2html_wrap406) und oberer (tex2html_wrap407) Kurve. Doch erklärt sich die erhöhte Laufzeit bei größeren Zahlen schnell durch die Verwendung der Klasse BigInteger zur Darstellung beliebig großer Zahlen. Diese arbeitet intern mit Feldern, deren Größe der Anzahl der Stellen der Zahl entspricht. Bei größeren Zahlen wird die Arithmetik dieser Klasse dann entsprechend langsamer. Das Nichtauftreten eines entsprechenden Offsets in den ersten beiden Meßreihen erklärt sich durch den Wegfall von immerhin drei Methodenaufrufen durch die komplette Nichtausführung der Schleife.

Es zeigt sich also, daß die Größe der Zahlen weitgehend unerheblich ist. Wichtiger ist hingegen ihre Qualität hinsichtlich der Anzahl der Schleifendurchläufe, die nötig sind, bis der Divisionsrest tex2html_wrap274 wird. Im Fall der ersten Meßreihe ist diese Null, während im zweiten die Schleife einmal durchlaufen werden muß.

Aufgrund des allgemeinen Zeitverhaltens des Algorithmus und der Verschiebung zwischen den Meßkurven liegt die Vermutung nahe, daß der Algorithmus mit zunehmender Komplexität der Zahlen ein logarithmisches Laufzeitverhalten an den Tag legen wird, wie bereits unter gif prinzipiell besprochen. Bei weiterer Annäherung an den worst case wird die Laufzeit größer, zeigt jedoch weiterhin logarithmische Abhängigkeit von der Komplexität der zu betrachtenden Zahlen.

Algorithmus:
verbatimtab157


next up previous contents
Next: Kosten im schlimmsten Fall Up: Einordnung Previous: Einordnung

Michael Weiser
Fre Jan 7 00:42:53 CET 2000