Hi Cruz,
Gut ich könnte nach jedem execute erstmal komplett durchloopen
und alles in einem Array festhalten,
genau das wirst Du wohl tun müssen - eine nicht reentrante Datenstruktur
in eine reentrante übertragen.
Falls die dabei vorrätig zu haltenden Daten um Größenordnungen mehr
Platz benötigen als deren Primärschlüssel (oder bereits die kompletten
Daten eines Traversierungspfades inklusive der jeweils lokalen Listen
Deinen Hauptspeicher sprengen), könnte es sich im Extremfall sogar
lohnen, nur die Primärschlüssel zu speichern und die Zugriffe auf die
einzelnen Attribute bei Bedarf zu wiederholen. (Das würde natürlich
langsamer, aber ...)
aber irgendwie drängt es mich noch zu einer eleganteren Lösung. :)
Falls Du eine findest, würde sie mich durchaus interessieren. Ich sehe
da einen prinzipiellen Zusammenhang zwischen der Rekursionsfähigkeit
Deines Programms und der reentrant-Eigenschaft Deiner Datenstruktur.
Aber ich lerne auch gerne etwas dazu ...
Wenn ich die Rekursion ohne Rückkehr gestalte, dann brauche ich die
Rekursion gar nicht mehr. Dann ist es nur noch ein sequentielles
vorgehen von Ebene zu ebene und das würde viel komplizierter enden,
weil ich immer darauf achten muss, wie ich die Ergebnisse der neuen
Ebene einordne, damit es optisch auch die Baumstruktur ergibt.
Das kommt darauf an, was Du mit den Ergebnissen anfängst.
Du könntest Dir ja auch eine komplette Baumstruktur im Hauptspeicher
aufbauen (sofern das Deine verfügbaren Ressourcen nicht sprengt) und
diese erst am Ende komplett abarbeiten.
Aber offensichtlich möchtest Du die ressourcen-schonende depth-first-
Traversierung haben - und dafür brauchst Du eben Datenstrukturen mit
den entsprechenden Eigenschaften. Deine lokalen Variablen haben diese.
Viele Grüße
Michael
P.S.: Wie breit sind eigentlich Deine Bäume? Bringt Dir das gecachete
prepare() denn überhaupt meßbare Vorteile?
Ich habe das bisher noch nicht genutzt (hm, könnte aber heute noch
kommen ... meine Anwendung eignet sich eigentlich sehr dafür),
würde aber damit rechnen, daß es erst ab einer bestimmten Anzahl
von Wiederholungen etwas bringt. Das Anlegen der Struktur dürfte
ja wohl einen gewissen Overhead kosten, oder?