Cel mai bun BST auto-echilibrare pentru introducerea rapidă a unui număr mare de noduri

voturi
8

Am reușit să găsesc detalii pe mai multe auto - echilibrare BSTe prin mai multe surse, dar nu am găsit nici un descrieri bune care detaliază care unul este cel mai bine de a utiliza în diferite situații (sau în cazul în care într - adevăr nu contează).

Vreau o BSTcare este optimă pentru stocarea de peste zece milioane de noduri. Ordinea de introducere a nodurilor este , în principiu aleatoriu, și niciodată nu am avea nevoie pentru a șterge noduri, astfel încât timpul de inserare este singurul lucru pe care ar trebui să fie optimizate.

Intenționez să-l folosească pentru a stoca stări de joc vizitate anterior într-un joc de puzzle, astfel încât să pot verifica rapid dacă o configurație anterioară a fost deja întâlnite.

Întrebat 05/08/2008 la 16:40
sursa de către utilizator
În alte limbi...                            


4 răspunsuri

voturi
0

Cele două auto - echilibrare BSTs Sunt cel mai familiar sunt rosu-negru și AVL, așa că nu pot spune cu certitudine dacă alte soluții sunt mai bune, dar , după cum îmi amintesc, rosu-negru are inserție mai rapidă și recuperare mai lentă în comparație cu AVL.

Deci, dacă inserția este o prioritate mai mare decât recuperarea, rosu-negru poate fi o soluție mai bună.

Publicat 05/08/2008 la 16:50
sursa de către utilizator

voturi
3

Roșu-negru este mai bună decât AVL pentru aplicații de inserare-grele. Dacă preconizați relativ uniform look-up, apoi rosu-negru este calea de a merge. Dacă preconizați un relativ dezechilibrat aspect-up în cazul în care elementele de mai vizualizate recent sunt mai susceptibile de a fi vizualizate din nou, pe care doriți să utilizați arbori splay .

Publicat 05/08/2008 la 16:59
sursa de către utilizator

voturi
3

De ce să folosiți o BSTla toate? Din descrierea ta un dicționar va funcționa la fel de bine, dacă nu chiar mai bine.

Singurul motiv pentru utilizarea unui BSTar fi dacă ai vrut să lista din conținutul recipientului pentru cheie. Cu siguranță , nu suna ca vrei sa faci asta, caz în care merge pentru tabela hash. O(1)inserție și de căutare, nu vă faceți griji cu privire la ștergerea, ceea ce ar putea fi mai bine?

Publicat 29/08/2008 la 01:10
sursa de către utilizator

voturi
-2

[Tabele de dispersie au] O (1) inserție și căutarea

Cred că acest lucru este greșit.

În primul rând, dacă limitați keyspace să fie finit, ai putea stoca elementele într-o matrice și de a face o O (1) scanare liniară. Sau ai putea shufflesort matrice și apoi face o scanare liniară în O (1) timp de așteptat. Când lucrurile este finit, lucruri este ușor de O (1).

Deci, să presupunem că masa de hash va stoca orice șir de biți arbitrar; aceasta nu contează prea mult, atât timp cât există un set infinit de chei, fiecare dintre acestea sunt finite. Apoi, va trebui să citiți toate biți de orice interogare și inserție de intrare, altfel am insera y0 într-un hash gol și interogare pe y1, în cazul în care y0 și y1 diferă de la o poziție de singur bit care nu te uita la.

Dar să spunem că lungimile cheie nu sunt un parametru. Dacă inserarea și căutați să ia O (1), în special , tocare ia O (1) timp, ceea ce înseamnă că te uiți doar la o cantitate finită de ieșire din funcția de hash ( de la care nu este probabil să fie doar o ieșire finită, acordat ).

Acest lucru înseamnă că, cu multe găleți finit, trebuie să existe un set infinit de șiruri care au toate aceeași valoare hash. Să presupunem că se introduce o mulțime, adică ω (1), dintre acestea, și începe interogarea. Acest lucru înseamnă că tabelul dvs. hash trebuie să cadă din nou pe un alt (1) Mecanismul de inserție / căutare O pentru a răspunde la întrebările mele. Care dintre ele, și de ce nu doar că folosesc în mod direct?

Publicat 01/02/2009 la 13:49
sursa de către utilizator

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