Que signifie «aplatir»?

13

Si j'avais un arbre, "aplatir" impliquerait intuitivement

obtenir une liste de tous les éléments de l'arborescence, de gauche à droite?

Si j'ai une liste chaînée, "aplatir" impliquerait intuitivement

obtenir une liste de tous les articles, en commençant par celui-ci

Par exemple, une liste chaînée serait constituée d'une exception qui agrège son exception interne. Serait-il juste de nommer une méthode sur l'exception "flattenInnerExceptions" en espérant qu'elle retournerait une séquence d'exceptions, l'exception la plus externe en premier et l'exception la plus interne - la dernière?

GregC
la source

Réponses:

25

Si j'avais une liste de listes, «aplatir» serait l'opération qui renvoie une liste de tous les éléments feuilles dans l'ordre, c'est-à-dire quelque chose qui change:

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

Dans

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

Pour les arbres, l'aplatissement génère une liste de toutes les feuilles dans l'ordre de traversée naturelle (NB: puisque seules les feuilles sont dans le résultat, peu importe si vous les considérez comme des traversées de pré, en- ou post-ordre.)

Par conséquent, pour une simple liste, l'opération d'aplatissement est par définition une transformation d'identité.

L'aplatissement peut être effectué par étapes ou degrés. Par exemple:

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

peut être aplati pour:

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

puis à:

 [a, b, c, d, e, f, g, h]
Associés Donal
la source
@Donal Fellows: Cela répond à la moitié de la question sur les arbres. Et les listes chaînées? Est-il intuitif d'en parler avec le terme «Aplatir»?
GregC
@GregC, vous aimeriez peut-être ajouter un exemple de ce que vous considérez comme une liste chaînée.
Modifié la question avec un exemple.
GregC
3
@GregC: Une liste chaînée n'est qu'une implémentation d'un type abstrait de séquence. (Un tableau est également une implémentation de ce type abstrait à au moins un niveau, et oui, il existe des différences importantes; les types abstraits ne sont pas toute l'histoire.) La plupart des systèmes d'allocation de mémoire rendent les listes liées assez chères du fait que vous '' payer à nouveau la surcharge d'allocation de mémoire par cellule de liste (cette surcharge est souvent d'environ 8 octets sur un système 32 bits), donc je ne recommanderais pas de les utiliser sauf si vous avez besoin d'inserts et de suppressions à temps constant.
Donal Fellows
1
@BarisDemiray Oui. Ce serait le résultat de l'aplatissement du premier niveau, et l'autre serait après deux tours…
Donal Fellows