deepcopy zu langsam?

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.
Dakre
User
Beiträge: 16
Registriert: Dienstag 13. Juni 2006, 22:40

deepcopy zu langsam?

Beitragvon Dakre » Montag 26. Juni 2006, 16:05

Hallo ;)
ich habe für Minesweeper einen Algorithmus programmiert, der jede erdenkliche Möglichkeit von Minen in der näheren Umgebung konstruiert und die Realisierungen, die nicht konform mit den Bedingungen sind, streicht.
Bei sehr großen Feldern braucht der Algorithmus ca. 30 sekunden, wovon deepcopy aus dem modul copy 20 sekunden also 2/3 der zeit verschlingt. Auf das deepcopy bin ich, denke ich, angewiesen, da ich die alten "maps" kopieren muss und die neue info aus der aktuellen iteration hinzufüge...

Eine Map ist dabei als Hash/Dictionary aufgebaut, in das ich die Koordinaten als key hineingebe. Als value erhalte ich dann eine Liste mit drei Elementen, wobei alle Elemente Integer sind. Das erste bezeichnet den Zustand des Feldes (markierte Bombe, versteckt oder Zahl), das nächste die Anzahl der angrenzenden markierten Bomben und der letzte Eintrag enthält die Zahl der anliegenden versteckten Felder (schien mir lohnenswert diese zu speichern, da ich sie sehr oft brauchte)

Gibt es nun eine Möglichkeit dieses lästige deepcopy zu beschleunigen?
Wahrscheinlich, wenn ich mein Feld anders kodieren würde, anstatt ein Dictionary zu verwenden. Vielleicht einfach nur eine lineare liste, bei der ich den "Zeilenumbruch" selbst herausrechne und so meine Koordinaten (x,y) transformiere? also anstelle von dict[(x,y)] schreib ich dann list[ x+y*felderprozeile ] ?
Würde das helfen? Gibt's noch eine andere Möglichkeit?

Danke für eure Zeit und Mühe
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: deepcopy zu langsam?

Beitragvon gerold » Montag 26. Juni 2006, 16:31

Dakre hat geschrieben:Gibt es nun eine Möglichkeit dieses lästige deepcopy zu beschleunigen?

Hi Dakre!

Deepcopy kannst du wahrscheinlich nicht beschleunigen. Es deckt einfach zu viele Fälle ab. Scheller bist du, wenn du auf deepcopy verzichtest.

Da du die Struktur deiner Daten kennst, kannst du ohne weiteres auf deepcopy verzichten. Laufe einfach deine alten Daten durch und erstelle für jeden Eintrag einen neuen in der "Kopie".

Eine flache Liste kannst du mit

Code: Alles auswählen

new_list = old_list[:]
kopieren.

Ein flaches Dictionary kannst du mit

Code: Alles auswählen

new_dict = old_dict.copy()
kopieren.

Siehe auch: http://www.python-forum.de/topic-5728.html

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Dakre
User
Beiträge: 16
Registriert: Dienstag 13. Juni 2006, 22:40

Beitragvon Dakre » Montag 26. Juni 2006, 16:56

vielen Dank ;) auf einmal ist es rasend schnell *gg*
tut mir leid, hätte wohl auch durch suchen zum ziel finden können...
Danke nochmal!

Wer ist online?

Mitglieder in diesem Forum: Holger Chapman