Ich habe eine Funktion die Gesamtlaenge mehrerer Kanten (zwischen zwei Punkten) zurück geben soll. Das Problem ist, dass die kleine Funktion viel zu langsam läuft. In der Laufzeitanalyse sieht das so aus:
Gesamtlaufzeit: 23.367 sec
Laufzeit der Funktion: 16.757 sec bei 866854 Aufrufen
Wenn die Anzahl der Aufrufe reduziert werden kann schaff ich das alleine, das Problem liegt woanders:
Alle Kanten und ihre Längen sind bereits in einer Matrix abgespeichert.
Der Funktion können allerdings nur Punkte übergeben werden (das hat einen bestimmten Grund auf den ich nicht näher eingehen möchte). Der (bereits optimierte) Zugriff von den beiden Punkten auf ihre dazugehörige Kante dauert länger als die Neuberechnung des Absandes der Punkte. Die Funktion brauch nun deshalb so lange, weil für ein und dieselbe Kante mehrmals die Länge berechnet wird. Ich müsste eigentlich den Abstand zwischen zwei Punkten berechnen, abspeichern und beim erneuten Auftreffen auf die selben Punkte den abgespeicherten Wert benutzen.
Nun fällt mir keine elegante Lösung ein die das Problem auf diese Weise optimaler Lösen könnte.
Code: Alles auswählen
def matchinglaenge(self,punkte):
geslaenge=0
for nummer in xrange(1, len(punkte),2):
punkt1=punkte[nummer]
punkt2=punkte[nummer-1]
geslaenge+=((punkt2.x-punkt1.x)**2+(punkt2.y-punkt1.y)**2)**0.5
return geslaenge