W CLRS, wydanie trzecie, na stronie 155 podano, że w MAX-HEAPIFY,
Każde poddrzewo dziecięce ma rozmiar co najwyżej 2n / 3 - najgorszy przypadek ma miejsce, gdy dolny poziom drzewa jest dokładnie w połowie zapełniony.
Rozumiem, dlaczego jest najgorzej, gdy dolny poziom drzewa jest wypełniony dokładnie do połowy. W tym pytaniu odpowiedź na najgorszy przypadek w MAX-HEAPIFY: „najgorszy przypadek występuje, gdy dolny poziom drzewa jest dokładnie w połowie zapełniony”
Moje pytanie brzmi jak zdobyć 2n / 3?
Dlaczego jeśli dolny poziom jest w połowie zapełniony, to rozmiar drzewa podrzędnego wynosi do 2n / 3?
Jak to obliczyć?
Dzięki
algorithm
tree
heap
time-complexity
Jackson Tale
źródło
źródło
Odpowiedzi:
W drzewie, w którym każdy węzeł ma dokładnie 0 lub 2 dzieci, liczba węzłów z 0 dziećmi jest o jeden większa niż liczba węzłów z 2 potomkami. {Objaśnienie: liczba węzłów na wysokości h wynosi 2 ^ h, co wzór sumowania szeregu geometrycznego równa się (suma węzłów od wysokości 0 do h-1) + 1; a wszystkie węzły od wysokości 0 do h-1 to węzły z dokładnie 2 dziećmi}
Niech k będzie liczbą węzłów w R.Liczba węzłów w L to k + (k + 1) = 2k + 1. Całkowita liczba węzłów to n = 1 + (2k + 1) + k = 3k + 2 (pierwiastek plus L plus R). Stosunek wynosi (2k + 1) / (3k + 2), który jest ograniczony powyżej 2/3. Nie ma stałej mniejszej niż 2/3, ponieważ granica przy k do nieskończoności wynosi 2/3.
źródło
Understand the maximum number of elements in a subtree happens for the left subtree of a tree that has the last level half full.Draw this on a piece of paper to realize this.
Gdy to już jest jasne, granica 2N / 3 jest łatwa do zdobycia.
Załóżmy, że całkowita liczba węzłów w drzewie to N.
W naszym przypadku, gdy ostatni poziom drzewa jest w połowie zapełniony, iF zakładamy, że prawe poddrzewo ma wysokość h, a lewe poddrzewo, jeśli ma wysokość (h + 1):
Liczba węzłów w lewym poddrzewie = 1 + 2 + 4 + 8 .... 2 ^ (h + 1) = 2 ^ (h + 2) -1 ..... (i)
Liczba węzłów w prawym poddrzewie = 1 + 2 + 4 + 8 .... 2 ^ (h) = 2 ^ (h + 1) -1 ..... (ii)
Zatem podłączenie do:
Liczba węzłów w drzewie = 1 + (liczba węzłów w lewym poddrzewie) + (liczba węzłów w prawym poddrzewie)
=> N = 1 + (2^(h+2)-1) + (2^(h+1)-1)
=> N = 1 + 3*(2^(h+1)) - 2
=> N = 3*(2^(h+1)) -1
=> 2^(h+1) = (N + 1)/3
Podstawiając tę wartość do równania (i), otrzymujemy:
Number of nodes in Left Subtree = 2^(h+2)-1 = 2*(N+1)/3 -1 =(2N-1)/3 < (2N/3)
Stąd górna granica maksymalnej liczby węzłów w poddrzewie dla drzewa z N węzłami wynosi 2N / 3.
źródło
This is the most the heap can get imbalanced; adding another node will either begin to rebalance the heap (by filling out the other, right, half of the last level) or break the heap's shape property of being a complete binary tree
W przypadku pełnego binarnego drzewa wysokości
h
liczba węzłów wynosif(h) = 2^h - 1
. W powyższym przypadku mamy prawie pełne drzewo binarne z pełną dolną połową. Możemy to sobie wyobrazić jako zbiór plikówroot + left complete tree + right complete tree
. Jeśli wysokość oryginalnego drzewa toh
, to wysokość lewejh - 1
i prawej jesth - 2
. Więc staje się równanien = 1 + f(h-1) + f(h-2)
(1)Chcemy rozwiązać powyższe rozwiązanie
f(h-1)
wyrażone jako w zakresien
f(h-2) = 2^(h-2) - 1 = (2^(h-1)-1+1)/2 - 1 = (f(h-1) - 1)/2
(2)Używając powyższego w (1) mamy
n = 1 + f(h-1) + (f(h-1) - 1)/2 = 1/2 + 3*f(h-1)/2
=> f(h-1) = 2*(n-1/2)/3
Stąd O (2n / 3)
źródło
Aby dodać do szwedzkiej odpowiedzi. Jak (2k + 1) / (3k + 2) zmierza do 2/3, kiedy k dąży do nieskończoności,
Lim_ (k -> inf) (2k + 1) / (3k + 2) = Lim_ (k -> inf) k (2 + 1 / k) / k (3 + 2 / k) = Lim_ (k -> inf) ) (2 + 1 / k) / (3 + 2 / k)
zastosuj limit, a otrzymasz 2/3
źródło
Liczba węzłów w -
Suma wszystkich węzłów od poziomu 0 do poziomu n,
Wiemy to z reguły sumowania szeregów geometrycznych
Zastępując x = 2, otrzymujemy
Ponieważ 2 ^ (n + 1) to całkowita liczba węzłów na poziomie n + 1, możemy powiedzieć, że liczba węzłów z 0 dziećmi jest o jeden większa niż liczba węzłów z 2 dziećmi.
Teraz obliczmy liczbę węzłów w lewym poddrzewie, prawym drzewie i łącznie.
Zgodnie z powyższym rozumowaniem, liczba węzłów liści w lewym poddrzewie lub korzeniu = k + 1. Liczba węzłów nielistnych w prawym poddrzewie korzenia = k, ponieważ mówi się, że drzewo jest dokładnie w połowie zapełnione.
Całkowita liczba węzłów w lewym poddrzewie korzenia = k + k + 1 = 2k +
To jest powód, dla którego mówi się, że każde poddrzewo dzieci ma rozmiar co najwyżej 2n / 3.
źródło