Frage

Angenommen ich die orange node im folgenden Baum ändern möchten.

Also, die einzige andere Änderung, die ich zu machen brauchen, ist in der left pointer des green node.

Die blue node wird das gleiche bleiben.

alt text

Bin ich irgendwo falsch? Da gemäß dieser Artikel (die Reißverschluss ), auch der blaue Knoten Bedarf geändert werden.

Auch in diesem Bild (neugeeinfärbt) aus dem Derselbe elbe~~POS=HEADCOMP Artikel , warum wir die orangefarbenen Knoten überhaupt ändern (wenn wir Knoten x ändern)?

alt text

War es hilfreich?

Lösung

In einer imperativen Sprache, die Sie richtig sind, nur die grüne Knoten geändert werden muss. Doch für rein funktionale Datenstrukturen ist dies nicht der Fall. Um den orangefarbenen Knoten zu ändern, müssen Sie den grünen Knoten ändern. Da Sie den grünen Knoten geändert haben, müssen Sie dann den blauen Knoten ändern (und so weiter). Eigentlich ist das Wort Veränderung ist falsch, Sie kopieren wirklich die relevanten Daten und einen neuen Knoten zu schaffen. So Der blaue Knoten nicht geändert wird, so viel wie ein neuer blauer Knoten (die Punkte auf den neuen grünen Knoten) erstellt wird.

Doing so unterhält Ausdauer , was bedeutet, dass Sie alle früheren Zustände des Baumes speichern. Wenn Sie den Baum vor dem Ändern Sie den orangefarbenen Knoten und nach dem Ändern des orangefarbenen Knoten speichern wollten, dann würden Sie müssen sowohl das Grün und Blau ändern -. Sonst würden beide Kopien des gleichen Baum sein

Im zweiten Fall, das gleiche gilt, nur jetzt muß auch ändern Abstammungszeiger. Da Sie den Wurzelknoten geändert haben, alle orangefarbenen Knoten benötigen, um ihre Eltern Zeiger auf Punkt zu ihren neuen Eltern haben.

Edit: ein bisschen, darüber nachzudenken, wie diese zu klären. In einer rein funktionalen Sprache ändern Sie können nichts, können Sie nur neue Knoten erstellen oder kopieren. Also, wenn Sie wollen Veränderung die orange Knoten, machen Sie eigentlich eine Kopie davon mit unterschiedlichen Daten (die „Änderung“). Nun müssen Sie den grünen Knoten zu Punkt auf dem orangefarbenen Knoten, mit dem Sie einen neuen orangefarbenen Knoten erstellen erfordert - dieses zu dem neuen grünen Knoten zeigt. Das gleiche gilt für den blauen Knoten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top