이진 트리의 평균 높이는 얼마입니까?


10

이진 트리의 평균 높이에 대한 공식적인 정의가 있습니까?

다음 두 가지 방법을 사용하여 이진 트리의 평균 높이를 찾는 방법에 대한 자습서 질문이 있습니다.

  1. 자연적인 해결책은 가능한 모든 경로의 평균 길이를 뿌리에서 잎으로 가져 오는 것입니다.

    avh1(T)=1# leaves in Tv leaf of Tdepth(v) .

  2. 또 다른 옵션은 재귀 적으로 정의하는 것입니다. 즉, 노드의 평균 높이는 하위 트리의 평균 높이에 1을 더한 평균입니다.

    avh2(N(l,r))=avh2(l)+avh2(r)2+1

    함께 리프를위한 및 빈 슬롯.l avh 2 ( _ ) = 02()=12(_)=0

내 현재 이해, 예를 들어 나무의 평균 높이

    1    
   / \
  2   3
 /
4

재귀를 사용하는 두 번째 방법 으로 입니다.2()=1.25

그러나 여전히 첫 번째 방법을 이해하지 못합니다. 가 올바르지 않습니다.1()=(1+2)/2=1.5


1
컨텍스트를 제공 할 수 있습니까? "정확한"수학적 정의와 같은 것은 없습니다. "이진 트리의 평균 높이"를 원하는대로 정의 할 수 있습니다. (평균 무엇 을 통해 어떤 유통 ?)하지만 다른 정의 더 많거나 적은 것입니다 유용한 다른 응용 프로그램.
JeffE

@JeffE "이진 트리의 평균 높이를 정의하는 방법은 즉시 명확하지 않습니다. 아마도 가장 자연스러운 해결책은 루트에서 잎까지 가능한 경로의 평균 길이를 갖는 것입니다. 더 간단한 (아마도 단순한) 솔루션 "노드의 평균 높이는 하위 트리의 평균 높이에 1을 더한 평균입니다.이 대안을 코딩하는 것이 더 쉽다는 것을 알게되었습니다. 차이점을 설명하기 위해 예를들 수 있습니까?"
영원한 시간

두 변형에 대한 정확한 정의를 제공하여 게시물을 더 명확하게 만들려고 노력했습니다. 텍스트를 올바르게 해석했는지 확인하십시오. 특히, 두 번째 변형에 대한 앵커가 누락되었습니다. 높이를 1 또는 0으로 유지하기 위해 잎을 가져갈 지의 차이가 있습니다.
라파엘

답변:


3

두 정의가 모두 동일한 측정 값을 설명한다고 믿을 이유가 없습니다. 재귀 적으로 쓸 수도 있습니다.1

1((,아르 자형))=lv()(Vh1()+1)+lv(아르 자형)(Vh1(아르 자형)+1)lv()+lv(아르 자형)

와 잎에 대한 . 이것이 동일하지 않다면 오른쪽에있는 의 정의를 거나 유도 증명을 수행하십시오.l avh 11()=01

이제 은 과는 매우 다르게 작동합니다 . 하지만 노드 아이들의 재귀 높이 무게 동등하게 (추가, 2로 나누어), 가 포함 잎의 수에 따라 그 무게. 그래서 그들은 잎 균형 나무에 대해 동일합니다 (앵커 모듈러스). 이는 형제 나무가 똑같이 많은 잎을 가지고 있다는 의미에서 균형을 이룹니다. 당신의 재귀 형태로 단순화 경우 과 이 즉시 알 수있다. 그러나 균형이 맞지 않는 나무에서는 다릅니다.avh 2 avh 2 avh 1 avh 1 lv ( l ) = lv ( r )12211lv()=lv(아르 자형)

당신의 계산은 실제로 정확합니다 (정의를 받았습니다). 예제 트리는 잎 균형이 없습니다.


1

@null : 죄송합니다. 질문을 이해하지 못합니다. 의 재귀 적 정의 가 귀하의 것과 동일 하다는 것을 증명하는 방법을 의미 합니까? 1
라파엘

재귀를 사용하는 구현 코드를 의미합니다
Timeless

@null : 기본 사례를 통합하면 수식을 거의 그대로 그대로 복사 할 수 있습니다 . 그렇게하는 방법은 프로그래밍 언어와 트리 구현에 따라 다릅니다. 구현이 장애물이라면 스택 오버플로로 되풀이하는 것이 좋습니다 .
라파엘

2

편집 : Jeffe는 위의 의견에서 좋은 지적을합니다. 다음 답변에서 "정확한 대 부정확 한"을 "편의 / 일관된 대 일관성 없음"으로 읽어야합니다.

두 번째 계산이 잘못된 것 같습니다. 단일 노드 (예 : 리프)가있는 하위 트리의 높이를 0으로 설정합니다. 그런 다음 하위 트리 루트의 높이는 다음과 같습니다.

  • 4의 높이는 0입니다
  • 3의 높이는 0입니다
  • 2의 높이는 3 + 1 = 0 + 1 = 1의 평균 높이입니다.
  • 1에서의 높이는 2에서의 평균 높이이며 3 = (0 + 1) / 2 + 1 = 1.5

첫 번째 계산을 올바르게하고 있다고 생각하며 1.5가 정답입니다.


아이디어는 높이가 -1이고 노드의 평균 높이가 하위 트리의 평균에 1을 더하고 노드 4의 평균 높이가 ((-1) + (-1)) / 2 + 1 = 0 인 null 노드입니다. 노드 2의 평균 높이는 (0 + (-1)) / 2 + 1 = 0.5이므로 루트의 평균 높이는 1.25입니다.
영원한 시간

@null 고집하면 그렇게 정의 할 수 있지만 두 정의는 일치하지 않습니다.
Joe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.