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?

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]

@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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.