Konkretne przykłady wykorzystania binarne drzewo poszukiwań?

głosy
14

Rozumiem, jak binarne drzewo poszukiwań są realizowane, ale nie jestem pewien, jakie są zalety korzystania z niej na stołach hash, że większość języków programowania zostały zbudowane w ich standardowych bibliotek.

Może ktoś proszę podać przykłady rzeczywistych problemów rozwiązywalne z binarne drzewo poszukiwań?

Utwórz 16/02/2011 o 00:44
źródło użytkownik
W innych językach...                            


5 odpowiedzi

głosy
1

Jednym z przykładów, gdzie wymagana jest binarne drzewo binarne partycje przestrzeni w grafice komputerowej

http://en.wikipedia.org/wiki/Binary_space_partitioning

Potrzebny jest drzewo binarne, ponieważ algorytm wymaga zachowania relacji między węzłami w drzewie binarnym. Istnieje wiele innych algorytmów, gdzie struktura drzewa jest ważne, a więc stolik hash nie jest odpowiednią strukturę.

Innym dobrym powodem korzystania binarne drzewo zamiast tabeli mieszania jest, kiedy nie można łatwo wygenerować wydajnego mieszania dla swoich elementów danych, ale można wygenerować funkcję porównawczą.

Często do prostego przechowywania i udostępniania danych tabeli mieszania jest bardziej optymalny, ale bardziej skomplikowane do wykonania.

Odpowiedział 16/02/2011 o 00:53
źródło użytkownik

głosy
0

Jednym z najbardziej znany jest fakt, że wiele systemów plików użyć drzewo binarne zarządzać ofert katalogowych. Rzadko użyć zwykłego drzewa binarnego, ale niektóre odmiany, takie jak B-drzewa. To dlatego, że kwestia przechowywania na dysku drzewa jest dość ważne, aby szczegółów realizacji. Powodem używają tego rodzaju konstrukcji jest dla wydajności i szybkości. To pozwala im robić rzeczy, takich jak wsparcie tysięcy plików w katalogu. Porównania do tworzenia plików i czasy skreślenie podkreślić wydajności dla tego aspektu systemu plików.

Drzewa binarne są również wykorzystywane w wielu gier, które czynią obiektów 3D. Ponownie, powodem jest szybkość. W rzeczywistości prędkość jest tak ważne, że niektóre silniki gry, takie jak Quake Engine rzeczywiście drzewo binarne pre-pre-generowane i zoptymalizowany jako część procesu budowania map.

Odpowiedział 16/02/2011 o 00:56
źródło użytkownik

głosy
0

Jedną rzeczą jest, aby pamiętać, że binarne drzewo poszukiwań są miejsca skuteczny. Na przykład, masz 10 liczb całkowitych do przechowywania i masz funkcji skrótu, który mapuje od 0 - 99, następnie u trzeba tablicę 100 liczb całkowitych. Jeśli użyto binarne drzewo poszukiwań, wtedy można przydzielić tylko tyle pamięci, jak wymagane przez 10 elementów

Odpowiedział 16/02/2011 o 00:57
źródło użytkownik

głosy
29

Istnieje kilka teoretyczne zalety binarne drzewo poszukiwań nad stołami hash:

  1. Przechowują one ich elementów posortowanych . Oznacza to, że jeśli chcesz przechowywać pojemnik w sposób, w którym można łatwo odwiedzić wartości posortowanych, BST jest chyba lepszym wyborem niż tabeli mieszania. Na przykład, jeśli chcesz zapisać zbiór studentów, a następnie wydrukować wszystkich uczniów w porządku alfabetycznym, BST jest znacznie lepszym wyborem niż tabeli mieszania.

  2. Oni efektywnie obsługiwać zapytania zasięgu. Ponieważ BSTS są przechowywane w uporządkowanej kolejności, łatwo odpowiedzieć na pytania w postaci „Jakie wartości w przedziale [x, y]?” w wyszukiwaniu binarnym drzewie. Aby to zrobić, należy wykonać wyszukiwanie w drzewie do najmniejszego elementu większego niż X i największego elementu mniejszej niż Y, następnie iteracyjne nad elementy drzewa między nimi. Oba te pytania prowadzone w O (lg n) w zrównoważonym drzewie, więc całkowity czas pracy dla tej operacji wynosi O (lg n + k), gdzie k jest liczbą elementów pasujących do zapytania.

  3. Oni efektywnie obsługiwać zapytania najbliższego sąsiedztwa. Tabele hash są specjalnie zaprojektowane tak, że nawet nieco inny produce szalenie różne kody hash. Daje wartości hash dyspersji muszą unikać grupowania zbyt wiele elementów w jednym miejscu. Jednak oznacza to również, że trzeba zrobić liniowy skan nad tabeli mieszania, aby znaleźć elementy, które mogą być „blisko” do tego, co szukasz. Z BST, można sprawnie znaleźć poprzednika i następcy dowolną wartość, którą chcesz, nawet jeśli nie jest w drzewie.

  4. Mogą mieć lepsze najgorszego przypadku gwarancji. Większość implementacji tabeli mieszania mieć jakiś zdegenerowanego przypadku, w którym operacja może pogorszyć do O (n) w najgorszym przypadku. Liniowy stół sondowania mieszania lub łańcuchowej tabeli mieszania może ze złym zestaw elementów wymagają O (n) za odnośnika lub wymagają O (n) w rehash. Wstawienie do pewnych typów symetrycznych BSTS, takich jak czerwony / czarny drzew, AVL drzew, lub drzew AA, jest zawsze najgorszy O (log n).

Jeśli jesteś gotów do uogólniania BSTS do bardziej złożonych struktur drzewa, a następnie istnieje wiele aplikacji, w których drzewa mogą być wykorzystywane bardziej efektywnie niż w tabeli mieszania rozwiązywać problemy. Oto kilka przykładów:

  1. kd-drzewa pozwala na przechowywanie danych wielowymiarowych przy jednoczesnym wspieraniu szybkich zapytań zasięgu w wielowymiarowej przestrzeni, jak również wydajne najbliższego sąsiedztwa wyszukiwań. Można ich używać do klasyfikacji (algorytmy leniwy learning) lub geometrii obliczeniowej.

  2. Link / wycięte drzewa mogą być wykorzystywane bardziej efektywnie niż większość konwencjonalnych algorytmów pozwoliłoby rozwiązać problemy max-flow. Dobry Push / Znakowanie algorytmy to wykorzystać, aby przyspieszyć ich implementacji.

  3. Lasy rozłączne zestaw mogą być stosowane do utrzymywania tych elementów, stref asymptotycznie skutecznie jak to możliwe (skorygowanej a (n) za aktualizacji, gdzie α (n) jest funkcją odwrotną Ackermann). Są one wykorzystywane w wielu szybkich algorytmów drzew minimalnej obejmujące, jak również niektórych algorytmów dopasowywania maksimum.

  4. Binarne hałdy mogą być wykorzystane do realizacji kolejek priorytetowych sprawnie. Bardziej skomplikowane drzewa mogą być wykorzystane do budowy kopiec dwumianowy i mnóstwo Fibonacciego , które mają wielkie znaczenie w informatyce teoretycznej.

  5. Drzewa decyzyjne mogą być stosowane w uczeniu maszynowym do klasyfikacji, a jako model w informatyce teoretycznej udowodnić granice dotyczące czasy pracy różnych algorytmów.

  6. Drzewo trójkowe są alternatywą do prób, które są oparte na jak nieznacznie zmodyfikowaną BST. Pozwalają one na bardzo szybkie wyszukiwanie i wprowadzanie elementów i dla nielicznych zestawów danych są dość zwięzłe.

  7. B-drzewa są wykorzystywane przez wielu systemów baz danych, aby skutecznie sprawdzić elementy, gdzie dostęp do dysku jest czynnikiem ograniczającym.

  8. Binarne partycjonowania przestrzeń drzewa są uogólnieniem kd-drzewa, które mogą być używane do szybkiego renderowania grafiki komputerowej (były one wykorzystywane do optymalizacji renderingu w oryginalnej gry Doom) i zrobić wykrywanie kolizji.

  9. BK-drzewa pozwala szybko określić wszystkie słowa, które są w pewnej odległości edycji jakiegoś innego słowa, a bardziej ogólnie, aby znaleźć wszystkie punkty w przestrzeni metrycznej w pewnej odległości od innego punktu.

  10. Drzewa Fusion są alternatywą dla hash tabele dla całkowitych kluczy, które mają bardzo szybką obsługę wyszukiwań, insercji, delecji i.

  11. van Emde Boas drzewa inną alternatywą hash stołów dla kluczy całkowitą obsługujących odnośnika, insercję, delecję, następca i poprzednika O (LG n) na element. Niektóre systemy bazodanowe używać VEB drzew, aby zoptymalizować wydajność.

Nie jestem pewien, jak na temacie to odpowiedź brzmi, ale powinno dać sens, jak wspaniałe i potężne BSTS i bardziej ogólne struktury drzewa może być.

Odpowiedział 16/02/2011 o 01:05
źródło użytkownik

głosy
0

Powinno to prawdopodobnie komentarz ale samobalansujący BST (s) (log (n)) są powszechnie używane zamiast BSTS. Ślizgowe BSTS mają najgorszy O (n) do wprowadzania / usuwania.

Odpowiedział 16/02/2011 o 03: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