Exemple concrete de utilizare arbori de căutare binare?

voturi
14

Am înțeles modul în care sunt puse în aplicare binar arbori de căutare, dar eu nu sunt sigur ce sunt avantajele utilizării peste tabelele hash că cele mai multe limbaje de programare au construit în bibliotecile lor standard.

Ar putea cineva vă rugăm să oferiți exemple de probleme din lumea reală rezolvabile cu arbori de căutare binare?

Întrebat 16/02/2011 la 00:44
sursa de către utilizator
În alte limbi...                            


5 răspunsuri

voturi
1

Un exemplu de cazul în care este necesar un arbore binar este partiții spațiu binar în grafica pe calculator

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

Este nevoie de un arbore binar, deoarece algoritmul necesită păstrarea relațiilor dintre nodurile din arborele binar. Există multe alte algoritmi în cazul în care structura de copac este important, și așa mai departe un tabel hash nu este o structură adecvată.

Un alt motiv bun pentru utilizarea unui arbore binar în loc de un tabel hash este atunci când nu se poate genera cu ușurință un hash eficient pentru elementele de date, dar puteți genera o funcție de comparație.

Adesea, pentru stocarea simplă și recuperare a datelor unui tabel hash este mai optim, dar mai complex pentru a pune în aplicare.

Publicat 16/02/2011 la 00:53
sursa de către utilizator

voturi
0

Una dintre cele mai trecut cu vederea este faptul că multe sisteme de fișiere binare folosesc copaci pentru a gestiona directorul de listări. Ei folosesc rar un arbore binar simplu, dar unele variații, cum ar fi B-arbore. Acest lucru se datorează faptului că problema de stocare pe disc de copac este destul de important pentru detaliile de implementare. Motivul pentru care folosesc acest tip de structură este pentru eficiență și viteză. Acest lucru le permite să facă lucruri cum ar fi mii de sprijin de fișiere într-un director. Comparațiile pentru crearea de fișiere și timpii de ștergere a evidenția eficiență pentru acest aspect al sistemului de fișiere.

arbori binari sunt de asemenea folosite pe mai multe jocuri care fac obiecte 3D. Din nou, motivul este viteza. De fapt, viteza este atât de important ca unele motoare de joc, cum ar fi motorul Quake au de fapt, arborele binar pre-generate și de pre-optimizate, ca parte a procesului de hartă a construi.

Publicat 16/02/2011 la 00:56
sursa de către utilizator

voturi
0

Un lucru de remarcat este faptul că binar de căutare Tree sunt eficiente spațiu. De exemplu, aveți 10 numere întregi pentru a stoca și aveți o funcție hash care mapează 0-99, atunci u nevoie de o serie de 100 de numere întregi. Dacă ați utilizat binar de căutare copac, atunci va aloca doar la fel de mult de memorie, în conformitate cu 10 elemente

Publicat 16/02/2011 la 00:57
sursa de către utilizator

voturi
29

Există câteva avantaje teoretice de arbori de căutare binare peste tabele de dispersie:

  1. Ei stoca elementele lor în ordine sortată . Acest lucru înseamnă că , dacă doriți să stocați containerul într - un mod în care puteți vizita cu ușurință valorile în ordine sortată, un BST este , probabil , o alegere mai bună decât un tabel hash. De exemplu, dacă doriți să stocați o colecție de studenți și apoi imprimați toți studenții în ordine alfabetică, un BST este o alegere mai bună decât în mod substanțial un tabel hash.

  2. Ele susțin eficient interogări gama. Deoarece BSTs sunt stocate în ordine sortată, este ușor să răspundă la întrebări de forma „ce valori sunt în intervalul [x, y]?“ într - un arbore binar de căutare. Pentru a face acest lucru, să faci o căutare în copac pentru cel mai mic element mai mare decât x și cel mai mare element de mai mic decât y, apoi itera peste elementele copacului dintre ele. Ambele aceste interogări rulează în O (lg n) într - un copac echilibrat, astfel încât runtime total pentru această operațiune este O (lg n + k), unde k este numărul de elemente care se potrivesc interogării.

  3. Ele susțin eficient interogări vecinul cel mai apropiat. Tabele de dispersie sunt proiectate în mod specific astfel încât chiar și ușor diferite produc diferite salbatic coduri hash. Acest lucru dă valorile hash dispersia care au nevoie pentru a se evita gruparea prea multe elemente într - un singur loc. Cu toate acestea, de asemenea , înseamnă că trebuie să faci o scanare liniară pe tabela de dispersie pentru a găsi elemente care ar putea fi „aproape“ de ceea ce căutați. Cu BST, puteți găsi eficient predecesorul și succesorul orice valoare doriți, chiar dacă nu este în copac.

  4. Ele pot avea mai bine cel mai rău caz garanții. Cele mai multe implementari tabel hash au un fel de caz degenerat în care o operațiune se poate degrada la O (n) , în cel mai rău caz. Un tabel hash sondare liniară sau un tabel hash înlănțuit poate, cu un set de elemente de rău, necesită O (n) pentru fiecare căutare sau necesită O dată (n) pe un rehash. Inserția în unele tipuri de BSTs echilibrate, cum ar fi copaci rosu / negru, copaci AVL, sau copaci AA, este întotdeauna cel mai rău caz O (lg n).

Dacă sunteți dispus să generaliza BSTs la structurile de arbori mai elaborate, atunci există mai multe aplicații în care un copac poate fi folosit pentru a rezolva problemele mult mai eficient decât într-un tabel hash. Iată câteva exemple:

  1. kd-copaci vă permit să stocați date multidimensionale în timp ce sprijinirea interogări interval rapid în spațiu multidimensionale, precum și eficiente interogarile vecinul cel mai apropiat. Le puteți utiliza pentru clasificare (algoritmi de învățare leneș) sau geometrie computațională.

  2. Copaci Link / tăiate pot fi folosite pentru a rezolva problemele de max-flux mult mai eficient decât majoritatea algoritmi convenționale ar permite. Bun push / relabel algoritmi folosi pentru a accelera implementările lor.

  3. Păduri disjuncte-set poate fi utilizat pentru a menține partițiilor de elemente ca asimptotic eficient posibil (α amortizat (n) pentru fiecare actualizare, unde α (n) este funcția inversă Ackermann). Sunt folosite în multe algoritmi de arbori rapid deschizătoare minime, precum și unele algoritmi maxim de potrivire.

  4. Grămezi binare pot fi folosite pentru a pune în aplicare în mod eficient cozile de prioritate. Mai mulți copaci complexe pot fi folosite pentru a construi grămezi binomiale și grămezi Fibonacci , care sunt de o mare importanță în informatică teoretică.

  5. Arbori de decizie pot fi utilizate în procesul de învățare mașină pentru clasificare, și ca model în informatică teoretică pentru a dovedi limite pe diferite algoritmi de runtime.

  6. Arbori de căutare ternare sunt o alternativă la încercări , care se bazează pe BST modificat ușor. Acestea permit de căutare foarte rapid și inserarea de elemente și pentru seturi de date rare sunt destul de concis.

  7. B-arbori sunt folosite de mai multe sisteme de baze de date pentru a căuta în mod eficient în cazul în care elementele de acces pe disc este un factor de limitare.

  8. Binare copaci spațiu de partiționare sunt o generalizare a kd-copaci , care poate fi utilizată pentru a face rapid grafica pe calculator (acestea au fost folosite pentru a optimiza redarea în jocul original Doom) și de a face coliziune detectare.

  9. BK-copaci permit să determine rapid toate cuvintele care sunt într - o anumită distanță de editare de un alt cuvânt, și mai mult , în general , pentru a găsi toate punctele într - un spațiu metric într - o anumită distanță de un alt punct.

  10. Copaci de fuziune sunt o alternativă la hash tabele pentru chei întregi , care au un sprijin extrem de rapid pentru căutări, inserții și deleții.

  11. van Emde Boas copaci o altă alternativă hash tabele pentru chei întregi care suportă căutare, inserare, ștergere, succesorul și predecesorul în O (lg lg n) pentru fiecare element. Unele sisteme de baze de date folosesc arbori VEB pentru a optimiza performanța.

Nu sunt sigur cum on-topic acest răspuns este, dar ar trebui să vă dea un sens pentru modul în care structurile de arbori minunate și BSTs puternice și mai generale pot fi.

Publicat 16/02/2011 la 01:05
sursa de către utilizator

voturi
0

Acest lucru ar trebui să fie, probabil, un comentariu, dar BST-echilibreaza (e) (log (n)) sunt utilizate pe scară largă, mai degrabă decât BSTs. BSTs Plain au cel mai rău caz O (N) timpul de introducere / îndepărtare.

Publicat 16/02/2011 la 03:14
sursa de către utilizator

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