Rozumiem strukturę drzew binarnych i sposób ich przechodzenia. Jednak mam problemy z realizacją ich rzeczywistych zastosowań, celów w programach i programowaniu. Kiedy myślę o przykładach danych hierarchicznych z „prawdziwego życia”, prawie na pewno mają więcej niż 2 dzieci. Na przykład w drzewie genealogicznym matka często może mieć więcej niż dwoje dzieci.
Czy „drzewa binarne” są naprawdę użyteczne tylko do przechowywania danych powiązanych liniowo ze względu na szybszy czas przetwarzania tablic i list? Alternatywnie, czy służą one konkretnemu celowi w przechowywaniu danych hierarchicznych? Jeśli tak, jakie są przykłady zastosowania drzew binarnych. Jakie dane powodują, że węzeł ma najwyżej 2 dzieci?
data-structures
binary-tree
sw123456
źródło
źródło
Odpowiedzi:
Nie, drzewa binarne nie służą do przechowywania danych hierarchicznych w sensie, o którym myślisz. Podstawowym przypadkiem użycia dla drzew n-ary, gdzie
n
jest stała liczba, jest możliwość szybkiego wyszukiwania , a nie hierarchia semantyczna.Zapamiętaj starą grę, w której jedna osoba myśli o liczbie od 1 do 100, a druga musi zgadywać ją w jak najmniejszej liczbie domysłów, a jeśli pomylisz się, osoba myśląca o liczbie musi powiedzieć ci, czy ty też jesteś zbyt wysoki czy zbyt niski? Po pewnym czasie robi się nudno, ponieważ szybko zdajesz sobie sprawę, że zawsze powinieneś zacząć od 50, a następnie przejść do 25 lub 75 i dalej dzielić zakres do przeszukiwania na pół przy każdej nowej zgadywance, a ostatecznie możesz odgadnąć dowolną liczbę gwarantowane co najwyżej 7 domysłów.
Może to nie być fajna gra, ale ta właściwość sprawia, że drzewa binarne (i inne n-ary) są użyteczne: możesz ich użyć do wyszukiwania bardzo dużego zestawu danych w bardzo krótkim czasie.
źródło
Dowolną strukturę drzewa, w której węzeł może mieć nieograniczoną liczbę dzieci, można zaimplementować za pomocą drzewa binarnego.
Dla każdego węzła w drzewie zastąp go węzłem z prawym i lewym wskaźnikiem. Lewy wskaźnik wskazuje pierwsze dziecko potomne węzła. Właściwy węzeł przechodzi do następnego rodzeństwa węzła. Wszystkie elementy podrzędne węzła znajdują się na połączonej liście połączonej prawymi wskaźnikami, a nagłówek listy wskazuje lewy wskaźnik ich rodzica.
Twoje skomplikowane drzewo n-ary stało się prostym drzewem binarnym.
Jestem pewien, że jest to w Knuth, Vol. 1 gdzieś.
źródło
Drzewa binarne, po co z nich korzystać?
W programowaniu dużo pracujesz z kolekcjami danych tego samego typu.
Dwa podstawowe sposoby przechowywania tych danych to: listy połączone i tablice.
Oba mają wady i zalety: na połączonej liście łatwo jest dodawać elementy w dowolnej pozycji lub usuwać elementy. Ale dostęp do określonego elementu jest trudniejszy, ponieważ musisz przeglądać listę, aż znajdziesz się w żądanym elemencie.
Dostęp do określonego elementu z tablicy jest łatwy, ale trudniej jest wstawić lub usunąć element, ponieważ wstawianie oznacza: przedłużyć tablicę o jeden, przesunąć wszystkie elementy przed pozycją wstawiania 1 w prawo i wstawić element.
Tak więc zarówno lista połączona, jak i tablica mają wady.
Drzewa binarne są tworzone w celu rozwiązania zarówno problemów tablicy, jak i połączonej listy:
Drzewo binarne powstaje wtedy, gdy masz dużo danych, które regularnie się zmieniają.
źródło