2010-10-14 13 views
5

Czytałem drzewo wyszukiwania binarnego i myślałem, że dlaczego potrzebujemy BST w ogóle? Wszystkie rzeczy, o ile wiem, mogą być również osiągnięte przy użyciu prostych uporządkowanych tablic. Dla np. - Aby zbudować BST z n elementami, potrzebujemy czasu n*O(log n), tj. O(nlog n), a czas wyszukiwania to O(log n). Ale można to osiągnąć za pomocą tablicy. Możemy mieć posortowaną tablicę (wymaga czasu O(nlog n)), a czas wyszukiwania w tym jest również O(log n), tj. Wyszukiwanie binarne algo. Dlaczego w ogóle potrzebujemy innej struktury danych? Czy są jakieś inne zastosowania/zastosowania BST, które czynią je tak wyjątkowymi?Dlaczego drzewa wyszukiwania binarnego?

--Ravi

+2

Jaka jest skuteczność wstawiania/usuwania z wersji macierzowej? Jeśli wymaga to przesunięcia wszystkich innych elementów tablicy, może to być kosztowne. –

+1

ok ...znalezienie prawidłowej pozycji nowego/istniejącego elementu nadal byłoby O (log n), ale tak, przesunięcie będzie problemem ... ale właśnie ten .... jak na tekst, który przeczytałem, wydaje się, że oni (BST) są bardzo wyjątkowe? Chcę wiedzieć więcej o rzeczach, które czynią je wyjątkowymi. –

+0

możliwy duplikat [drzewa binarnego i binarnego drzewa wyszukiwania] (http://stackoverflow.com/questions/5968937/binary-search-vs-binary-search-tree) – nawfal

Odpowiedz

8

Tablice są świetne, jeśli mówisz o napisaniu raz, czytaj wiele razy rodzaj interakcji. Dzieje się tak, gdy przystępujesz do wstawiania, zamiany i usuwania, w których BST naprawdę zaczyna świecić w porównaniu do tablicy. Ponieważ są oparte na węzłach, a nie oparte na ciągłym kawałku pamięci, koszt przeniesienia elementu do kolekcji lub z kolekcji jest szybki, przy jednoczesnym zachowaniu sortowanej natury kolekcji.

Pomyśl o tym, podobnie jak różnicę w wstawianiu między połączonymi listami a tablicami. Jest to nadmierne uproszczenie, ale podkreśla aspekt przewagi, który zauważyłem powyżej.

4

Co powiecie na posortowany czas wstawiania?

+0

ok ... znalezienie właściwej pozycji nowego elementu nadal będzie O (log n), ale tak, przesunięcie będzie problemem ... ale tylko ten .... jak na przeczytane teksty, wydaje się, że oni (BST) są bardzo wyjątkowi? Chcę wiedzieć więcej o rzeczach, które czynią je wyjątkowymi. –

+1

Myślę, że inne odpowiedzi mogą ci pomóc. Trzeba też pamiętać, że BST nie są ostateczną strukturą danych, ale tworzą podstawowe podstawy bardziej skomplikowanych i bardziej wydajnych struktur, co tłumaczy ich popularność. Możesz na przykład mieć świadomość, że wyszukiwanie BST jest liniowe w najgorszym przypadku; odpowiedzią na ten problem są drzewa AVL. Masz również czerwono-czarne drzewa, 2-3-4-drzewa, przyrostki/drzewa prefiksów i DAWG, i tak dalej, które wszystkie generalizują BST w inny sposób i wydajne algorytmy, które byłyby poza naszym zasięgiem dzięki tablicom. –

1

W programowaniu graficznym, jeśli masz rozszerzony obiekt (tj. Który reprezentuje interwał w każdym wymiarze, a nie tylko punkt), możesz dodać je do najmniejszego poziomu drzewa binarnego (zazwyczaj oktree), w którym pasują do siebie w całości.

Jeśli nie obliczysz wstępnie drzewa/listy sortowanej, losowy czas wstawienia (O) na liście może być zbyt długi. Czas wstawiania w drzewie z drugiej strony to tylko O ​​(log (n)).

7

Wyobraź sobie, że masz tablicę z milionem elementów.

chcesz wstawić element na miejscu 5.

Więc wstaw na końcu tablicy, a następnie sortowania.

Powiedzmy, że tablica jest pełna; to jest O (nlog n), czyli 1 000 000 * 6 = 6 000 000 operacji.

Wyobraź sobie, że masz zbalansowane drzewo.

To jest O (log n), plus bit do równoważenia = 6 + bit, nazywamy to 10 operacjami.

Po prostu wydałeś 6 000 000 operacji sortowania swojej tablicy. Następnie chcesz znaleźć tego elementu. Co robisz? wyszukiwanie binarne - O (log n) - które jest dokładnie tak samo jak to, co zamierzasz zrobić, gdy przeszukasz drzewo!

Teraz wyobraź sobie, że chcesz przydzielić - kolejny element.

Twoja tablica jest pełna! co robisz? ponownie przydzielić tablicę za pomocą n dodatkowych elementów i zapamiętywać tę partię? naprawdę chcesz pamiętać 4mb?

W drzewie wystarczy dodać kolejny element ...

Powiązane problemy