Що означає "сплющування"?


13

Якби у мене було дерево, інтуїтивно це означало б "сплющити"

отримати список усіх предметів на дереві, рухаючись зліва направо?

Якщо у мене є пов'язаний список, інтуїтивно маю на увазі

отримати список усіх предметів, починаючи з цього

Наприклад, пов'язаний список складе виняток, який сукупно його внутрішній виняток. Чи було б справедливо називати метод на виняток "flattenInnerExceptions" з очікуванням, що він поверне послідовність винятків, спочатку виняток винятків і внутрішній самий виняток - останній?

Відповіді:


25

Якби у мене був список списків, «сплюстити» була б операція, яка повертає список усіх елементів аркуша в порядку, тобто щось, що змінюється:

[[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 стипендіатів: тут вирішується половина питання про дерева. А як щодо пов'язаних списків? Чи інтуїтивно говорити про них терміном "Flatten?"
GregC

@GregC, можливо, ви хочете додати приклад того, що ви вважаєте пов’язаним списком.

Відредагував питання на прикладі.
GregC

3
@GregC: пов'язаний список - це лише реалізація абстрактного типу послідовності. (Масив також є реалізацією цього абстрактного типу принаймні на одному рівні, і так, є суттєві відмінності; абстрактні типи - це не вся історія.) Більшість систем розподілу пам'яті роблять пов'язані списки досить дорогими через те, що ви ' повторно сплачуйте накладні витрати на розподіл пам’яті на комірку списку (частота цього режиму часто становить близько 8 байт у 32-бітній системі), тому я б не рекомендував їх використовувати, якщо у вас не знадобиться вставка та видалення постійного часу.
Дональні стипендіати

1
@BarisDemiray Так. Це було б результат першого уплощенія рівня, а інші б після двох турів ...
Донал Fellows
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.