Geschwindigkeitsproblem bei nem Algo

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
BlackJack

DasPinsch hat geschrieben:gleich noch ne Frage:
ist
for i in xrange(1000):
bla

schneller oder langsamer als
i = 0
while i < 1000:
bla
i += 1

?
irgendwie habe ich Angst, dass das Erstellen einer Liste viel Zeit in Anspruch nehmen könnte ;)
Die Funktion `xrange()` erstellt im Gegensatz zu `range()` keine Liste sondern ein Objekt, das sich nur so verhält als wäre es eine Sequenz. Der Speicherverbrauch für `xrange(10)` ist der gleiche wie der für `xrange(100000)`.

An Deinem Primzahlentest finde ich "unpythonic", das er Schritt für Schritt dem Computer erklärt was er machen soll, aber für einen Menschen nicht "lesbar" ist. Man muss auch erstmal schauen was getan wird.

Schöner finde ich zum Beispiel dieses Rezept: http://aspn.activestate.com/ASPN/Cookbo ... ipe/117119

Ich habe gerade ein wenig nach A* gesucht und es scheint den normalen Dijkstra Algorithmus um eine Heuristik zu erweitern. Ich würde es erstmal mit dem normalen Dijkstra probieren und schauen ob der von der Geschwindigkeit her nicht ausreicht. Die Knotenmenge U verwaltet man am besten in einer Heap-Queue. Python liefert netterweise ein entprechendes Modul: 'heapq'. Das ist wesentlich schneller als Listen + sortieren.
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Leonidas hat geschrieben:
DasPinsch hat geschrieben:Zwei Sache ist mir noch aufgefallen, du schreibst immer:
x = x + 1
anstatt
x += 1, ist das 2. nicht schneller?
Sie sind gleich schnell, denn die Schreibweisen sind äquivalent.
HI. Das etwas äquivalent ist heißt noch lange nicht das es gleich schnell ist. x+=1 ist um einiges schneller als x=x+1, das hängt damit zusammen das im ersten Fall schon bekannt ist wohin das Ergebnis gespeichert werden soll und wo der Ausgangswert steht. Im 2. Fall wird erst gesagt, dass er nach x speichern soll und dann muss er rechts vom Gleichheitszeichen nochmal das x ausm speicher rauskramen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Milan hat geschrieben: Das etwas äquivalent ist heißt noch lange nicht das es gleich schnell ist. x+=1 ist um einiges schneller als x=x+1, das hängt damit zusammen das im ersten Fall schon bekannt ist wohin das Ergebnis gespeichert werden soll und wo der Ausgangswert steht. Im 2. Fall wird erst gesagt, dass er nach x speichern soll und dann muss er rechts vom Gleichheitszeichen nochmal das x ausm speicher rauskramen.
Ja, hast recht, denn bei x = x + 1 wird zweimal nach x gesucht.. na, ich habe es mal in meinem Benchmark gefixt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten