"평평하게"는 무엇을 의미합니까?


13

내가 나무를 가졌다면 직관적으로 "평평하게"

왼쪽에서 오른쪽으로 순회하면서 트리의 모든 항목 목록을 가져옵니다.

연결된 목록이 있으면 직관적으로 "평평하게"나타납니다.

이 항목부터 시작하여 모든 항목의 목록을 얻습니다.

예를 들어, 연결된 목록은 내부 예외를 집계하는 예외로 구성됩니다. 예외 "flattenInnerExceptions"에 대해 예외 시퀀스, 가장 바깥 쪽 예외, 가장 안쪽 예외를 마지막으로 반환 할 것으로 예상하여 메소드 이름을 지정하는 것이 공정합니까?

답변:


25

만약리스트리스트를 가지고 있다면, "flatten"은 모든 리프 요소 리스트를 순서대로 리턴하는 연산입니다 .

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

으로

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

나무의 경우, 평탄화는 자연 순회 순서로 모든 잎의 목록을 생성합니다 (NB : 잎만 결과이므로이 순서를 사전, 순서 또는 후 순서 순으로 생각하는지는 중요하지 않습니다).

결과적으로 간단한 목록의 경우 "평평한"작업은 정의상 ID 변환입니다.

평탄화는 단계 또는도 단위로 수행 할 수 있습니다. 예를 들어 :

[[[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 : 이것은 나무에 대한 질문의 절반을 다룹니다. 링크 된 목록은 어떻습니까? "Flatten"이라는 용어로 그들에 대해 이야기하는 것이 직관적입니까?
GregC

@GregC, 아마도 당신은 링크 된 목록으로 간주되는 것에 대한 예제를 추가하고 싶을 것입니다.

예를 들어 질문을 편집했습니다.
GregC

3
@GregC : 연결리스트는 단지 시퀀스 추상 타입의 구현입니다. (배열은 적어도 하나의 수준에서 해당 추상 유형을 구현 한 것입니다. 그렇습니다. 큰 차이가 있습니다. 추상 유형은 전체 이야기가 아닙니다.) 대부분의 메모리 할당 시스템은 연결 목록을 상당히 비싸게 만듭니다. 목록 셀 당 메모리 할당 오버 헤드 (32 비트 시스템에서 오버 헤드는 종종 약 8 바이트)를 지불하므로 상수 삽입 및 삭제가 필요하지 않은 경우에는 사용하지 않는 것이 좋습니다.
Donal Fellows

1
@BarisDemiray 예. 그것은 1 단계 평탄화의 결과 일 것이고 다른 하나는 2 라운드 이후 일 것입니다.
Donal Fellows
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.