Konkrétní příklady použití binární vyhledávací stromy?

hlasů
14

Chápu, jak binární vyhledávací stromy jsou implementovány, ale nejsem si jistý, jaké jsou výhody použití jej přes hash tabulek, že většina programovacích jazyků zabudovaných do svých standardních knihoven.

Mohl by mi někdo prosím poskytnout příklady reálných problémů řešitelných pomocí binárních vyhledávacích stromů?

Položena 16/02/2011 v 00:44
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
1

Jedním z příkladů, kde je požadována binární strom je binární prostor příčky v počítačové grafice

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

Binární strom je nutný, protože algoritmus vyžaduje zachování vztahů mezi uzly v binárním stromu. Existuje mnoho dalších algoritmů, kde je důležitá struktura stromu, a tak hash tabulka není vhodné struktury.

Dalším dobrým důvodem pro použití binárního stromu namísto hash tabulky je, když nemůžete snadno vytvářet efektivní hash datové položky, ale můžete generovat porovnávací funkci.

Často pro jednoduché ukládání a načítání dat hash tabulka je optimální, ale složitější realizovat.

Odpovězeno 16/02/2011 v 00:53
zdroj uživatelem

hlasů
0

Jedním z nejvíce přehlíženy, že mnoho systémů souborů pomocí binární stromy pro správu adresářů. Oni zřídka používají obyčejný binární strom, ale některé změny, jako je například B-stromu. Důvodem je, že otázka uložení na disku stromu je na detaily implementace velmi důležité. Důvod, proč používat tento druh konstrukce je pro efektivitu a rychlost. To jim umožňuje dělat věci, jako je podpora tisíc souborů v adresáři. Srovnání pro vytváření souborů a občas vypouští zdůraznit efektivitu pro tento aspekt souborového systému.

Binární stromy jsou také používány na mnoha hrách, které poskytují 3D objekty. Opět platí, že důvod, proč je rychlost. Ve skutečnosti, rychlost je tak důležité, že některé herní motory, jako je Quake motor skutečně binární strom pre-tvořil a pre-optimalizovány jako součást mapa procesu sestavení.

Odpovězeno 16/02/2011 v 00:56
zdroj uživatelem

hlasů
0

Jedna věc, kterou si uvědomit, je, že binární vyhledávací strom, jsou prostorově efektivní. Například, máte 10 celá čísla pro ukládání a máte hashovací funkci, která mapuje od 0 - 99, pak u potřebovat matici 100 celá čísla. Pokud jste použili binární vyhledávací strom, pak byste měli přidělit pouze tolik paměti, jak to vyžaduje 10 elementů

Odpovězeno 16/02/2011 v 00:57
zdroj uživatelem

hlasů
29

Existuje několik teoretických výhod binárních vyhledávacích stromů než hash tabulkách:

  1. Ukládají své prvky v seřazeném pořadí . To znamená, že pokud chcete uložit obal na cestě, kde můžete snadno navštívit hodnoty v seřazeném pořadí, je BST je pravděpodobně lepší volbou než hashovací tabulky. Například, pokud chcete uložit soubor studentů a pak vytisknout všechny studenty v abecedním pořadí, je BST je podstatně lepší volbou než hash tabulky.

  2. Ty účinně podporují dotazy doletu. Vzhledem k tomu, BSTs jsou uloženy v seřazeném pořadí, je to snadné odpovědět na otázky ve formuláři „jaké hodnoty jsou v rozmezí [x, y]?“ v binárním vyhledávacím stromu. Chcete-li to provést, proveďte vyhledávání ve stromu pro nejmenší prvek větší než X a největší prvek je menší než y, pak iteraci přes elementy stromu mezi nimi. Obě tyto dotazů běží v O (lg n) ve vyváženém stromu, takže celkový runtime pro tuto operaci je O (lg n + k), kde k je počet prvků odpovídá dotazu.

  3. Ty účinně podporují nejbližšího souseda dotazy. Hashovací tabulky jsou speciálně navrženy tak, aby i mírně odlišné vyrábět divoce různé hash kódy. To dává hodnoty hash disperzi, které potřebují, aby se zabránilo shlukování příliš mnoho prvků na jednom místě. Nicméně, to také znamená, že budete muset provést lineární kontrolu nad hash tabulky najít prvky, které by mohly být „zavřít“ k tomu, co hledáte. S BST můžete efektivně najít předchůdce a následníka jakoukoliv hodnotu byste chtěli, i když to není ve stromu.

  4. Mohou mít lepší nejhoršího případu záruky. Většina implementací hash tabulka mít nějaký degenerované případě, ve kterém může operace degradovat na O (n) v nejhorším případě. Lineární snímání hash tabulky nebo zřetězené hash tabulka může se špatnou sadou prvků, vyžaduje O (n) za vyhledávání nebo vyžadovat O (n) na omílání. Vložení do některých typů vyvážených BSTs, jako je červená / černá stromy, AVL stromy, nebo AA stromů je vždy nejhorší případ O (lg n).

Pokud jste ochotni zobecnit BSTs do složitějších stromové struktury, pak existuje mnoho aplikací, ve kterých mohou být strom použity mnohem efektivněji než v tabulce hash řešit problémy. Zde je několik příkladů:

  1. KD-stromy umožňuje ukládat multidimenzionální data, přičemž bude podporovat rychlé dotazy Dosah ve vícerozměrném prostoru, jakož i účinné nejbližšího souseda vyhledávání. Můžete je použít pro klasifikaci (lazy učících algoritmů) nebo výpočetní geometrie.

  2. Link / řezané stromy mohou být použity mnohem efektivněji než většina běžných algoritmů by umožnil vyřešit problémy max toku. Dobrý push / relabel algoritmy použít k urychlení jejich implementace.

  3. Disjunktní nastaven lesy mohou být použity pro udržování oddíly prvků jako asymptoticky nejefektivněji (zůstatkové a (n) na aktualizaci, kde α (n) je inverzní Ackermann funkce). Jsou používány v mnoha rychlých algoritmů stromů minimálních-klenout, stejně jako některé maximální párování algoritmů.

  4. Binární haldy mohou být použity k realizaci prioritních front efektivně. Složitější stromy mohou být použity k vytvoření binomiální halda a Fibonacciho haldy , které mají velký význam v teoretické informatice.

  5. Rozhodovací stromy mohou být použity v strojového učení pro klasifikaci, a jako vzor v teoretické informatiky dokázat hranice na runtimes různých algoritmů.

  6. Ternární vyhledávací stromy jsou alternativou k pokusech, které jsou založeny na jako mírně upravenou BST. Umožňují velmi rychlé vyhledávání a vkládání prvků a pro řídké datových souborů jsou poměrně stručné.

  7. B-stromy jsou používány mnoha databázovými systémy efektivně vyhledávat prvky, kde je limitujícím faktorem přístup k disku.

  8. Binární prostoru přepážkové stromy jsou zobecněním KD-stromů, které mohou být použity pro rychlé vykreslování počítačové grafiky (které byly použity pro optimalizaci vykreslování v původní hře Doom) a dělat kolizi-detekci.

  9. BK stromy vám umožní rychle zjistit, všechna slova, která jsou v určité vzdálenosti editovat nějaké jiné slovo, a obecněji najít všechny body metrického prostoru v určité vzdálenosti od nějakého jiného bodu.

  10. Fusion stromy jsou alternativou k hash tabulky pro celočíselných klíčů, které mají extrémně rychlou podporu vyhledáváními, inzercí a delecí.

  11. van Emde Boas stromy další alternativou k hashovací tabulky pro celé číslo klíče, které podporují vyhledávání, inserci, deleci následníka a předchůdce O (LG n) na prvku. Některé databázové systémy používají VEB stromy k optimalizaci výkonu.

Nejsem si jistý, jak to je odpověď na téma, ale to by vám smysl pro to, jak úžasné a mocné BSTs a obecnější stromové struktury může být.

Odpovězeno 16/02/2011 v 01:05
zdroj uživatelem

hlasů
0

To by mělo pravděpodobně poznámku, ale samovyvažující BST (y) (log (n)) jsou široce používány spíše než BSTs. Plain BSTs mají nejhorší možný O (n) vkládání / vyjímání.

Odpovězeno 16/02/2011 v 03:14
zdroj uživatelem

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