Was bedeutet "Abflachen"?

13

Wenn ich einen Baum hätte, würde das intuitiv "platt drücken"

Eine Liste aller Elemente im Baum erhalten, die von links nach rechts durchlaufen werden?

Wenn ich eine verknüpfte Liste habe, würde "abflachen" intuitiv implizieren

Holen Sie sich eine Liste aller Elemente, beginnend mit diesem

Eine verknüpfte Liste besteht beispielsweise aus einer Ausnahme, die ihre innere Ausnahme aggregiert. Wäre es fair, eine Methode für die Ausnahme "flattenInnerExceptions" mit der Erwartung zu benennen, dass sie eine Folge von Ausnahmen zurückgibt, die äußerste Ausnahme zuerst und die innerste Ausnahme - die letzte?

GregC
quelle

Antworten:

25

Wenn ich eine Liste von Listen hätte, wäre "Abflachen" die Operation, die eine Liste aller Blattelemente in der angegebenen Reihenfolge zurückgibt , dh etwas, das sich ändert:

[[a, b, c], [d, e, f], [g, h i]]

In

[a, b, c, d, e, f, g, h, i]

Bei Bäumen wird durch die Abflachung eine Liste aller Blätter in natürlicher Durchlaufreihenfolge erstellt.

Infolgedessen ist für eine einfache Liste die Operation "Abflachen" per Definition eine Identitätsumwandlung.

Die Abflachung kann stufenweise oder graduell erfolgen. Zum Beispiel:

[[[a, b], [c, d]], [[e, f], [g, h]]]

kann abgeflacht werden auf:

[[a, b, c, d], [e, f, g, h]]

und dann zu:

 [a, b, c, d, e, f, g, h]
Donal Fellows
quelle
@Donal Fellows: Hier wird die Hälfte der Frage nach Bäumen beantwortet. Was ist mit verknüpften Listen? Ist es intuitiv, mit dem Begriff "Abflachen" darüber zu sprechen?
GregC
@GregC, vielleicht möchten Sie ein Beispiel hinzufügen, wie eine verknüpfte Liste Ihrer Meinung nach aussieht.
Bearbeitet die Frage mit einem Beispiel.
GregC
3
@GregC: Eine verknüpfte Liste ist nur eine Implementierung eines Sequenzzusammenfassungstyps. (Ein Array ist auch eine Implementierung dieses abstrakten Typs auf mindestens einer Ebene, und ja, es gibt erhebliche Unterschiede. Abstrakte Typen sind nicht die ganze Geschichte.) Die meisten Speicherzuweisungssysteme machen verknüpfte Listen ziemlich teuer, da Sie Bezahlen Sie den Speicherzuweisungs-Overhead pro Listenzelle (dieser Overhead beträgt auf einem 32-Bit-System häufig etwa 8 Byte). Ich würde daher nicht empfehlen, sie zu verwenden, es sei denn, Sie benötigen Einfügungen und Löschungen mit konstanter Zeit.
Donal Fellows
1
@BarisDemiray Ja. Das wäre das Ergebnis der ersten Ebene Abflachung, und die andere wäre nach zwei Runden ...
Donal Fellows