Что значит «сплющить»?

13

Если бы у меня было дерево, было бы «сплющено», интуитивно подразумевать

получить список всех элементов в дереве, перемещаясь слева направо?

Если бы у меня был связанный список, «сгладил бы» интуитивно

получить список всех предметов, начиная с этого

Например, связанный список будет состоять из исключения, которое объединяет его внутреннее исключение. Было бы справедливо назвать метод для исключения «flattenInnerExceptions» с ожиданием того, что он будет возвращать последовательность исключений, сначала самое внешнее исключение, а самое внутреннее исключение - последнее?

GregC
источник

Ответы:

25

Если бы у меня был список списков, «flatten» была бы операцией, которая возвращает список всех элементов листа по порядку, то есть что-то, что изменяется:

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

В

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

Для деревьев выравнивание генерирует список всех листьев в естественном порядке обхода (примечание: поскольку в результате получаются только листья, не имеет значения, считаете ли вы это обходом до, в или после заказа).

Как следствие, для простого списка операция «выравнивание» по определению является преобразованием идентичности.

Сглаживание может выполняться поэтапно или в градусах. Например:

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

можно сплющить до:

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

а затем:

 [a, b, c, d, e, f, g, h]
Donal Fellows
источник
@Donal Fellows: Это касается половины вопроса о деревьях. А как насчет связанных списков? Интуитивно ли говорить о них с помощью термина «Флаттен»?
GregC
@GregC, возможно, вы хотели бы добавить пример того, что вы считаете связанным списком.
Отредактировал вопрос с примером.
GregC,
3
@GregC: связанный список - это просто реализация абстрактного типа последовательности. (Массив также является реализацией этого абстрактного типа по крайней мере на одном уровне, и да, есть существенные различия; абстрактные типы - это не вся история.) Большинство систем выделения памяти делают связанные списки довольно дорогими из-за того, что вы ' Я оплачиваю накладные расходы на выделение памяти для каждой ячейки списка (в 32-разрядной системе эти издержки часто составляют около 8 байт), поэтому я бы не рекомендовал их использовать, если у вас нет необходимости вставлять и удалять постоянное время.
Donal Fellows
1
@BarisDemiray Да. Это будет результатом сглаживания первого уровня, а другой будет после двух раундов ...
Донал Феллоуз