Jeden dokładny algorytm jest jak ten,
start z listkami i tworzyć rozłączne wykresy (w rzeczywistości wszystkie są K1), w każdym kroku odnaleźć rodzica tej liście, i połączyć je w nowym drzewie, w każdym kroku jeśli węzeł x
ma jedno dziecko i stopień węzła to j
taki, że j = r+1
, po prostu węzeł, który nie jest w węźle podrzędnym x
jest elementem nadrzędnym węzła bieżącego w tym przypadku mówimy, że węzeł x
to nice
, w przeciwnym razie istnieje pewne dziecko, takie jak ten pokrewny ukorzeniony poddrzew nie został skonstruowany, w tym przypadku mówimy, że węzeł x
to bad
.
Tak więc w każdym kroku podłącz węzły nice
do pokrewnego rodzica i oczywistym jest, że każdy krok zajmuje sum of {degree of parent nice nodes}
również w każdym kroku masz co najmniej jeden niezły węzeł (ponieważ zaczynasz od liścia), więc algorytm to O (n) , i będzie to wykonane całkowicie, ale dla znalezienia węzła, który powinien zostać usunięty, W rzeczywistości w każdym kroku jest wymagane, aby sprawdzić rozmiar listy rozłącznej (listy poddrzewa), można to zrobić w O (1) w konstrukcji, również jeśli rozmiar listy jest równy lub większy niż n/2, a następnie wybierz powiązany ładny węzeł. (w rzeczywistości znajdź ładny węzeł na liście minimalnej, która spełnia ten warunek).
Oczywistym jest, że jeśli można podzielić drzewo w dobry sposób (każda część ma co najwyżej węzeł n/2), można to zrobić za pomocą tego algorytmu, ale jeśli tak nie jest (w rzeczywistości nie można podzielić go na dwie części lub większa część wielkości mniejszej niż n/2) daje to dobre przybliżenie. Jak widać, nie ma założenia w drzewie wejściowym.
uwaga: Nie wiem, możliwe jest, aby drzewo było takie, że niemożliwe jest podzielenie go na części o wielkości mniejszej niż n/2 przez usunięcie jednego węzła.
Nie rozumiem, jeśli usuniesz 'H', dostaniesz 9 poddrzewa! – Shahbaz
Tak, przepraszam za bycie tutaj niejasnym, mogę zdobyć wiele poddrzew, ale nie chcę, aby jeden był większy niż połowa wykresu, aby zapewnić, że wykonuję tylko logarytmiczną liczbę kroków dzielenia. – Listing
Jeszcze jedno, jak umieścić "drzewo powinno być podzielone jak najbardziej równe" w wartości obliczalnej? – Shahbaz