이진 트리의 최소 높이가 왜


10

Java 클래스에서는 다양한 유형의 컬렉션의 복잡성에 대해 배우고 있습니다.

곧 우리는 이진 트리에 대해 이야기 할 것입니다. 이 책은 이진 트리의 최소 높이가log2(n+1)1자세한 설명은 제공하지 않습니다.

누군가 이유를 설명 할 수 있습니까?


나는 여기에 그것을 설명한다 stackoverflow.com/a/13093274/550393
2cupsOfTech

답변:


11

이진 트리는 비 리프 노드에 1 개 또는 2 개의 자식이 있고 리프 노드에 0 개의 노드가 있습니다. 하자n 트리에있는 노드들과 우리는 그것들이 여전히 유효한 이진 트리를 형성하는 방식으로 그것들을 배열해야합니다.

증명하지 않고 높이를 최대화하려면 주어진 노드를 선형으로 배열해야합니다. 즉, 각 비 리프 노드에는 자식이 하나만 있어야합니다.

                              O 1
                              |
                              O 2
                              |
                              O 3
                              |
                              O 4
                              |
                              O 5
                              |
                              O 6
                              |
                              O 7
                              |
                              O 8

여기서, 노드 수로 높이의 관계를 계산하는 공식은 간단합니다. 만약h 나무의 높이입니다 h=n1.

이제 이진 트리를 구성하려고하면 n최소 높이의 노드 (항상 완전한 이진 트리로 환원 가능)는 다음 레벨로 넘어 가기 전에 가능한 한 많은 노드를 상위 레벨로 압축해야합니다. 따라서 나무는 다음과 같은 형태를 취합니다.

                              O
                              |1
                              |
                       O------+-----O
                       |2           |3
                       |            |
                   O---+---O    O---+----O
                   |4      |5    6        7
                   |       |
               O---+--O    O
                8      9    10

특별한 경우부터 시작하겠습니다. n=2m1.

우리는 그것을 알고 있습니다

20+21+22+...+2m1=2m1

또한 레벨을 쉽게 증명할 수 있습니다. i 최대를 가질 수 있습니다 2i 그 안에 노드.

위의 합계에서이 결과를 사용하면 각 수준마다 i에서 0m해당 용어가 있습니다. 2i1 의 확장에 2m1. 이것은 완전한 이진 트리를 의미합니다.2m1 노드는 완전히 채워지고 높이가 있습니다. h(2m1)=m1, 어디 h(n)= 완전한 이진 트리의 높이 n 노드.

이 결과를 사용하여 h(2m)=m,와 나무 때문에 2m1 노드가 완전히 채워져 (2m1)+1=2m 노드는 다음 단계에서 추가 노드를 수용해야합니다 m높이를 1 증가 m1m.

지금까지 우리는 증명했다

h(2m)=m,
h(2m+1)=m+1
만큼 잘,
h(2m+11)=m

그러므로, nZ,2mn<2m+1

mh(n)<m+1

하지만 양쪽에 통나무 (베이스 2)를

mlog2(n)<m+1
m=log2(n)

그러므로, n,n[2m,2m+1)

h(n)=m=log2(n)

그리고 우리는이 결과를 일반화 할 수 있습니다 nZ 유도 사용.

추신 : 완전한 이진 트리의 높이를 다음과 같이 기술 한 책 log2(n+1)1 모두에게 유효하지 않습니다 n 때문에 log2(n) 대부분의 정수에 비 정수 값을 제공합니다. n (즉, 완벽한 이진 트리를 제외하고) 모든 나무의 높이는 순수하게 통합됩니다.


19

나는 그것을 가정하고있다. n이진 트리의 총 노드 수를 의미합니다. 이진 트리의 높이 (또는 깊이)는 루트 노드 (부모가없는 노드)에서 가장 깊은 리프 노드까지의 경로 길이입니다. 이 높이를 최소로 만들려면 트리가 가장 완전히 포화됩니다 (마지막 계층 제외). 특정 계층에 자식이있는 노드가있는 경우 부모 계층의 모든 노드에 두 개의 자식이 있어야합니다.

따라서 완전히 포화 된 이진 트리 4 계층은 1+12+122+1222 노드는 최대이며 깊이는 3. 따라서 이진 트리의 깊이가 있으면 트리가 완전히 포화 된 경우 발생하는 최대 노드 수를 매우 쉽게 찾을 수 있습니다. 대수 클래스를 상기하면 기하학적 시리즈 일 뿐이 므로 다음과 같이 나타낼 수 있습니다.

nodes=1+2+22+23+...+2depth=k=0depth2k=12depth+112.

다시 정리하자 :

nodes=2depth+11,
그런 다음 깊이를 해결하십시오.
nodes+1=2depth+1log2(nodes+1)=log2(2depth+1)=depth+1log2(nodes+1)1=depth.
그리고 당신의 공식이 있습니다. 이제 모든 트리가 완전히 채워지면 ( '완벽한 이진 트리) 정수 값만 생성되므로 정수가 아닌 값을 얻으면 반올림해야합니다.

4

높이를 최소로 유지하려면 마지막을 제외한 모든 레벨을 채울 필요가 있음을 쉽게 알 수 있습니다. 왜? 그렇지 않으면 마지막 레벨 노드를 상위 레벨의 빈 슬롯으로 옮길 수 있습니다.

이제 지정되지 않은 수의 콩이 있고 한 번에 하나의 콩을주고 최소 높이로 이진 트리를 구성하도록 요청한다고 상상해보십시오. 마지막 레벨을 완전히 채우거나 마지막 레벨에서 하나 이상의 Bean을 가질 때까지 Bean이 부족할 수 있습니다. 이 시점에서 나무 높이 h를가 집니다.

두 경우 모두 h 는 변하지 않습니다. 따라서 제약 조건 이있는 높이 h 의 완전한 이진 트리가 있음을 의미합니다 . 그러나 나는 마지막 수준에서 상상의 콩을 가정했습니다 (마지막 수준을 채울 수없는 경우). 실제로는

20+21+22+23++2h=2h+11n.
최소한
h=lg(n+1)1.
그러나 가상 콩을 추가하고 삭제하지 않기 때문에 상한을 적용하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.