Ich habe versucht, eine funktionale Grafik zu erstellen. Das Diagramm, das ich mache, hat keine Schleifen, also ist es ein bisschen wie ein Baum, wo einige Knoten mehr als ein Elternteil haben können.Funktionale Graphen
Das Problem ist beim Aktualisieren. Der übliche Weg mit einem Baum besteht darin, bis zu dem zu aktualisierenden Knoten zu gehen, wobei jeder Schritt des Weges einen neuen Knoten erzeugt, der so geändert wird, dass er auf einen neuen Kindknoten zeigt, bis der tatsächlich zu bearbeitende Knoten erreicht ist geändert.
Dieser Ansatz, wenn einige Knoten mehr als einen Elternteil haben, bricht, weil Sie im Grunde den Knoten "teilen". Der Knoten, der von zwei Eltern geteilt wird, wird zu zwei Knoten mit jeweils einem Elternteil, wobei einer (der Pfad, den Sie durchlaufen haben, um den Knoten zu erhalten) den neuen Wert und der andere Elternteil ein Kind mit dem alten Wert hat.
Also versuchte ich stattdessen die Elternknoten in jedem Knoten zu speichern, d. H. Knoten wissen, wer ihre Eltern sind.
Das funktioniert, aber es gibt ein Problem. Wenn ich einen Knoten aktualisiere, muss ich seine Eltern aktualisieren. Aber dann muss ich für jeden seiner Eltern nicht nur ihre Eltern aktualisieren, sondern auch ihre Kinder, weil ihre Kinder ihre Elternknoten speichern, und dieser Elternknoten sich nun geändert hat.
Um einen Knotenwert zu aktualisieren, muss ich jeden Knoten im Diagramm aktualisieren.
Die andere Idee, die ich hatte, war statt die Elternknoten in jedem Knoten zu speichern, nur die "Pfade" zu den Elternknoten in jedem Knoten speichern. Auf diese Weise sollte ich die Kinder des Elternteils nicht aktualisieren müssen, da sich der "Pfad" zum Elternteil nicht geändert hat (obwohl der Knoten selbst).
Aber vielleicht gibt es einen viel besseren Weg, eine funktionale Grafik zu erstellen? Irgendwelche Ideen? Es macht mir nichts aus, wenn Graphen mit Schleifen nicht behandelt werden. Ich schreibe in Haskell, aber eine Beschreibung ohne Programmiersprache wäre auch in Ordnung.
Ein sehr einfacher Weg ist, Ihre Knoten in 'STRef's oder einem anderen veränderbaren Container zu speichern. Wenn Sie den Wert innerhalb eines 'STRef' aktualisieren, hat jede Kante, die diesen Knoten enthält, den neuen Wert. Ich weiß nicht, ob dies Ihren Anforderungen für eine "funktionale" Grafik entspricht. – user2407038