Dlaczego binarne drzewo poszukiwań?

głosy
6

Czytałam binarne drzewo poszukiwań i myślał, że dlaczego potrzebujemy BST w ogóle? Wszystkie rzeczy, o ile wiem, można również osiągnąć za pomocą prostych posortowanych tablic. Np - W celu stworzenia BST mającego n elementów, to wymaga n*O(log n)czasu IE O(nlog n)i czas wyszukiwania jest O(log n). Ale ta sprawa może być również osiągnąć stosując tablicę. Możemy mieć posortowaną tablicę (wymaga O(nlog n)czasu) oraz czas odnośnika w tym jest również O(log n)tj binarnego przeszukiwania algo. To dlaczego musimy inną strukturę danych na wszystkich? Czy istnieją jakiekolwiek inne wykorzystanie / stosowanie BST które czynią je tak wyjątkowym?

--Ravi

Utwórz 14/10/2010 o 16:28
źródło użytkownik
W innych językach...                            


4 odpowiedzi

głosy
4

Jak o posortowane czasie wstawiania?

Odpowiedział 14/10/2010 o 16:30
źródło użytkownik

głosy
1

W programowaniu graficznym jeśli rozszerzony obiekt (czyli które stanowią odstęp w każdym wymiarze, a nie tylko punkt) można dodać je do najmniejszego poziomu binarnego drzewa (typowo Octree), gdzie zmieści się w całości.

A jeśli nie wstępnie obliczyć drzewo / SortedList do O (n) losowym czasie wstawiania na liście może być zbyt powolny. czas wstawiania w drzewo z drugiej strony to tylko O ​​(log (n)).

Odpowiedział 14/10/2010 o 16:36
źródło użytkownik

głosy
9

Tablice są świetne, jeśli mówisz napisz raz, czytaj wiele razy rodzaj interakcji. To kiedy można dostać się do wkładania, zamiana, i usuwanie, w którym BST naprawdę zaczynają świecić w porównaniu do tablicy. Ponieważ są one oparte węzeł, zamiast opierać się na ciągłym fragmencie pamięci, koszt przesuwając element albo do kolekcji lub z kolekcji jest szybki przy jednoczesnym zachowaniu posortowaną charakter kolekcji.

Pomyśl o tym, jak będzie różnica między wstawiania połączonych listach kontra tablic. Jest to uproszczenie, ale podkreśla aspekt korzyści jakie wyżej.

Odpowiedział 14/10/2010 o 16:53
źródło użytkownik

głosy
7

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

Chcesz wstawić element na miejscu 5.

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

Załóżmy, że tablica jest pełna; to O (nlog n), który jest 6 * 1.000.000 = 6.000.000 operacji.

Wyobraź sobie, że masz wyważone drzewo.

To O (log n), a także bit równoważenia = 6 + a bit nazywają to 10 operacji.

Tak, właśnie spędził 6.000.000 ops sortowania tablicy. Następnie chce znaleźć tego elementu. Co robisz? wyszukiwanie binarne - O (log n) - co jest dokładnie takie samo jak to, co masz zamiar zrobić podczas wyszukiwania w drzewie!

Teraz wyobraź sobie, że chce przeznaczyć -another- element.

Twoja tablica jest pełna! co robisz? ponownie przydzielić tablicę n dodatkowych elementów i memcpy los? Naprawdę chcesz memcpy 4mbytes?

W drzewo, wystarczy dodać kolejny element ...

Odpowiedział 16/10/2010 o 10:14
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more