---------------------------------------------------------------------------
Hi.
Folgendes sei gegeben:
Code: Alles auswählen
import time
def f1():
[...]
def f2 ():
[...]
def f3():
[...]
# usw.... = bis fn
[...]
t = time.clock()
f1()
a1 = time.clock() - t
print "Laufzeit: %3.2f sec" %a1
t = time.clock()
f1()
a2 = time.clock() - t
print "Laufzeit: %3.2f sec" %a2
t = time.clock()
f1()
a3 = time.clock() - t
print "Laufzeit: %3.2f sec" %a3
Es geht nun herauszufinden welche Funktion schneller ist. Bis hier hin ja kein Problem wie man an den clock() und prints sieht. Da ich aber nun vorhabe eine Eigene Klasse zu schrieben die die Aufgabe des benchens übernimmt nun folgende Überlegung.
Es sei angenommen, dass der Benchmark Part als Klasse implementiert ist.
Hier mal ein ADT:
Code: Alles auswählen
class Bench:
def __init__(self):
# eine liste die referenzen von funktionen enhält.
self.refOfFunc = []
# die laufzeit jeder einzelnen funktion
self.delay = []
# RegisterFunction
def RegFunc(self, ref):
self.refOfFunc.append(ref)
def StartBench(self):
[...]
Ablauf:
Als erstes werden alle Funktionen die gebencht werden sollen an RegFunc übergeben.
Beispiel:
Code: Alles auswählen
b = Bench()
b.RegFunc(f1) # referenz von funktion f1 übergeben.
b.RegFunc(f2)
b.RegFunc(f3)
[...]
Im Abschluss wir danach ausgegeben wie viel Sekunden jede Funktion gebraucht hat für ihre Ausführung. Es ist klar das deren Laufzeit durch den Overhead von StartBench beeinflusst wird. Aber das ist irrelevant, weil nur ersichtlich werden soll, in wie weit sich die Funktionen von der Geschwindigkeit unterscheiden. Es sol ja schließlich herausgefunden werden welche Funktionen den Schnelten Algorithmus implementiert haben. (Es geht darum auch einen Kompromiss zwischen Speicher und Geschwindigkeit zu finden)
So nun das große Problem:
Für mich ist es aber noch wichtig zu wiesen um wie viel Prozent nun eine Funktion schneller ist! (Es geht darum auch einen Kompromiss zwischen Speicher und Geschwindigkeit zu finden) Da ich nun nicht der große Mathematiker bin und dadurch alles zu kompliziert machen würde (oder sogar Falsch), ist meine frage ob mir einer dabei helfen kann.
Dabei geht es nicht nur herauszufinden welche nun die schnellste ist, sondern um Folgendes:
Angenommen f1 ist langsamer als f2 und f3, und f2 ist schneller als f1 und f3: Nun soll berechnet werden um wie viel Prozent f2 schneller ist als f1 und f3. Weiterhin sol auch berechnet werden um wie viel Prozent schneller f3 als f1 ist. Und so weiter.
Für mich scheint das alles in sehr viele if abfragen auszuarten (oder?) und auch weiß ich nicht genau, welches die Simpelste Möglichkeit wäre das zu berechnen. Eigentlich müsste ich der reinfolge nach herausfinden welche nun die langsamsten Funktionen sind (viele if abfragen) und das geordnet speichern. Z.B.: f1 ist am langsamsten, dann kommt f3 und dann kommt f2 die am schnellste ist. Das alles muss herausgefunden werden ohne das der Code zu unübersichtlich wird.
Wie würdet ihr das machen? Oder gibt es vielleicht eine "einfache" Mathematische Formel mit der ich das alles in einen rutsch berechnen kann?
lg