Nicht mutierende Implementierung eines Array-Baums

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.
Antworten
Borgenta
User
Beiträge: 2
Registriert: Mittwoch 6. Mai 2020, 19:07

Moin, ich stehe gerade vor einem Problem bei einer zu lösenden Aufgabe.

Und zwar ist die Ausgangslage ein Arraybaum, in den ich etwas hinzufügen/verändern soll. An sich nicht weiter problematisch. Mein Problem ist, dass das Ganze nicht mutierend passieren soll.

Hier habe ich nun weniger ein Programmierungsproblem als vielmehr ein Verständnisproblem. Ich will doch etwas in diesen bestehenden Baum einpflegen, wie soll ich das anstellen, ohne den Baum zu verändern? Womöglich verstehe ich etwas an der Aufgabe falsch.

Ich hoffe, man weiß was ich meine und irgendwer kann mir einen Denkanstoß geben. Da steige ich nämlich leider nicht durch.

Eine Funktion zum Suchen eines Wert im Baum sowie eine mutierende Funktion zum Hinzufügen/Ändern eines Werts habe ich, aber weiter komme ich leider nicht.

Besten Dank für die Hilfe!
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist Gang und gäbe in funktionalen Sprachen, die erlauben keine Veränderungen. Das Vorgehen besteht dann in der Erstellungen einer Kopie, die an der entsprechenden Stelle verändert ist. Dazu kommen üblicherweise rekursive Funktionen zum Einsatz, die den Baum traversieren, und ein oder mehrere Argumente mit Funktionen die zb eine gewünschten knoten erkennen, und den dann modifiziert (oder entfernt) zurück geben. Also ziemlich genau was du schon hast.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Borgenta: Ändere „Ich will doch etwas in einen bestehenden Baum einpflegen“ zu „Ich will einen neuen Baum mit dem/den zusätzlichen oder geänderten Wert(en)“. Dabei darf man ruhig unveränderte Teile der Datenstruktur auch in den neuen Baum übernehmen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Borgenta
User
Beiträge: 2
Registriert: Mittwoch 6. Mai 2020, 19:07

Also sehe ich es richtig, dass ich da, einfach weil es begrifflich schon ein Widerspruch ist, nichts dran verändere, sondern das Ding kopiere und an dem kopierten Stück dann meine Änderungen vornehme und diese Kopie an die Stelle des Originals setze? Und wenn ich den nächsten Wert nehme, kopiere ich meine Kopie und setze die an die Stelle der ursprünglichen Kopie? :D

Vielen Dank für die Antworten!
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Jup. Wer nicht mutiert, kopiert.
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Wahrscheinlich meinst du das schon mit Ersetzen, aber es geht halt um die Rückgabe eines neuen veränderten Baums (wie du an sich auch schon erkannt hast). Quasi so:

Code: Alles auswählen

tree = add_node(tree, node)
Antworten