Proč Binární vyhledávací stromy?

hlasů
6

Četl jsem strom binárního vyhledávání a myslel, že důvod, proč potřebujeme BST vůbec? Všechny věci, co vím, že může být také dosaženo pomocí jednoduchých tříděných polí. Pro např - Za účelem vybudování BST s n elementy, jsme vyžaduje n*O(log n)čas IE O(nlog n)a doba vyhledávání je O(log n). Ale to, co je možné dosáhnout i pomocí pole. Můžeme mít seřazené pole (vyžaduje O(nlog n)čas) a čas vyhledávání v tom, že je O(log n)tedy binární vyhledávání algo. Tak proč potřebujeme další datovou strukturu vůbec? Existují nějaké jiné použití / aplikace BST díky čemuž jsou tak zvláštní?

--Ravi

Položena 14/10/2010 v 16:28
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
4

Co takhle seřazené době vložení?

Odpovězeno 14/10/2010 v 16:30
zdroj uživatelem

hlasů
1

V grafickém programování, pokud jste rozšířil předmět (tj které představují interval v každém rozměru a ne jen bod), můžete je přidat do nejmenšího úrovně binárního stromu (obvykle octree), kde se vejde do úplně.

A pokud nechcete předem vypočítat strom / sortedlist na O (n) náhodné době vložení do seznamu mohou být neúnosně pomalý. čas vložení na stromě na druhé straně je jen O (log (n)).

Odpovězeno 14/10/2010 v 16:36
zdroj uživatelem

hlasů
9

Pole jsou skvělé, pokud mluvíme o zápis jednou, číst mnohonásobně druh interakce. Je to, když se dostanete až k vkládání, odkládání a delece v němž BST opravdu začnou zářit ve srovnání s poli. Vzhledem k tomu, že jsou založeny uzel, spíše než na souvislém bloku paměti, náklady na stěhování prvek buď do sběru nebo z kolekce je velmi jednoduché a přitom zachování tříděný charakter kolekce.

Myslet na to, jak byste je rozdíl mezi vložením spojových seznamů oproti polí. To je zjednodušením, ale zdůrazňuje jeden aspekt výhodu jsem uvedeno výše.

Odpovězeno 14/10/2010 v 16:53
zdroj uživatelem

hlasů
7

Představte si, že máte pole s milionem prvků.

Chcete-li vložit prvek na místě 5.

Takže si vložit na konec pole a pak třídit.

Řekněme, že pole je plná; to je O (nlog n), který je 1,000,000 * 6 = 6,000,000 operace.

Představte si, že máte vyvážený strom.

To je O (log n), plus bit pro vyrovnávání = 6 + trochu, říkejte tomu 10 operací.

Takže jste právě strávil 6.000.000 ops třídění své pole. Potom chcete najít tento prvek. Co děláš? binární vyhledávání - O (log n) - což je přesně to samé, co budete dělat, když budete hledat na stromě!

Teď si představte, že chcete přidělit -another- prvek.

Vaše pole je plná! co děláš? re-alokovat pole s n pomocných prvků a memcpy se hodně? Chcete opravdu memcpy 4mbytes?

Na stromě, stačí přidat další prvek ...

Odpovězeno 16/10/2010 v 10:14
zdroj uživatelem

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