Arborele B⁺ este o structură de date bazată pe un arbore B , un arbore de căutare echilibrat cu un număr variabil, dar adesea mare de copii pe nod. Un arbore B⁺ constă dintr-o rădăcină, noduri interne și frunze, rădăcina poate fi fie o frunză, fie un nod cu doi sau mai mulți copii.
Inițial, structura a fost menită să stocheze date pentru căutare eficientă într-un mediu de stocare orientat pe blocuri - în special, pentru sistemele de fișiere; aplicarea se datorează faptului că, spre deosebire de arborii binari de căutare, arborii B⁺ au un factor de ramificare foarte mare (numărul de pointeri de la un nod părinte la copii este de obicei de ordinul a 100 sau mai mult), ceea ce reduce numărul de Operații I/O care necesită căutarea unui element în arbore.
O variantă a arborelui B⁺, în care toate valorile au fost stocate în nodurile frunză, a fost revizuită sistematic în 1979 [1] , observând că astfel de structuri au fost folosite de IBM în tehnologia de acces la fișiere mainframe VSAM încă cel puțin 1973.
Structura este utilizată pe scară largă în sistemele de fișiere - NTFS , ReiserFS , NSS , XFS , JFS , ReFS și BFS folosesc acest tip de arbore pentru indexarea metadatelor; BeFS folosește și arbori B⁺ pentru a stoca directoare. Sistemele de gestionare a bazelor de date relaționale, cum ar fi DB2 , Informix , Microsoft SQL Server , Oracle Database (de la versiunea 8), Adaptive Server Enterprise și SQLite acceptă acest tip de arbore pentru indici de tabel. Printre SGBD-urile NoSQL care lucrează cu modelul cheie-valoare, structura de date este implementată pentru accesul la date în CouchDB , MongoDB (când se utilizează subsistemul de stocare WiredTiger ) și Tokyo Cabinet .
Un arbore B⁺ este un arbore de căutare echilibrat în ordine (sau grad) care satisface următoarele proprietăți:
Construirea unui arbore B⁺ poate necesita reconstruirea structurii intermediare, acest lucru se datorează faptului că numărul de chei din fiecare nod (cu excepția rădăcinii) trebuie să fie de la până la unde este gradul (sau ordinea) arborelui. Când încercați să introduceți cheia ( )-a în nod, devine necesar să separați acest nod; cheia ( )-a, care este plasată pe nivelul adiacent al arborelui, acționează ca cheie de separare a ramurilor formate . Un caz special este împărțirea rădăcinii, deoarece în acest caz numărul de niveluri ale copacului crește. O caracteristică a despărțirii unei frunze a unui arbore B⁺ este că aceasta este împărțită în părți inegale. Împărțirea unui nod intern sau rădăcină are ca rezultat noduri cu un număr egal de chei Împărțirea unei frunze poate provoca o „reacție în lanț” a nodurilor de divizare, care se termină la rădăcină.
Rădăcina arborelui B⁺ este punctul de plecare pentru întregul interval de valori, în care fiecare nod intern este un subinterval.
De exemplu, să presupunem că trebuie să găsim valoarea unei chei într-un arbore B⁺. Pentru a face acest lucru, căutăm un nod frunză care să conțină valoarea La fiecare nod intern, trebuie să aflăm ce nod copil ulterior să urmăm, nodul intern al arborelui B⁺ are cel mult copii, unde fiecare dintre ei reprezintă un subinterval separat. Nodul corespunzător este selectat prin căutarea valorilor cheie ale nodului:
Funcție : search ( k ) return tree_search ( k , rădăcină ); Funcție : tree_search ( k , node ) dacă nodul este o frunză, atunci returnează nodul ; comutați k do case k < k [ 0 ] return tree_search ( k , p [ 0 ]); caz k [ i ] ≤ k < k [ i + 1 ] returnează căutarea arborelui ( k , p [ i + 1 ]); caz k [ d ] ≤ k returnează căutarea arborelui ( k , p [ d + 1 ]);(Acest pseudocod presupune că duplicatele sunt ignorate.)
Pentru a adăuga o cheie nouă sau o intrare nouă, mai întâi trebuie să găsiți nodul în care doriți să le adăugați. În acest caz, algoritmul este:
Arborii B, spre deosebire de copacii B⁺, se extind din partea rădăcinii, nu din frunze.
Pentru a șterge o cheie sau o intrare, mai întâi trebuie să găsiți nodul frunză în care se află. Algoritm pentru eliminarea dintr-un nod frunză:
Unirea se poate extinde până la rădăcină, caz în care înălțimea copacului scade.
Complexitatea de calcul a fiecărei operații în cel mai rău caz: unde este ordinea arborelui sau a factorului de ramificare; este numărul de elemente din arborele de ramuri din nodurile arborelui.
Arborele (structura de date) | |
---|---|
Arbori binari | |
Arbori binari cu auto-echilibrare |
|
B-copaci |
|
arbori de prefix |
|
Partiționarea binară a spațiului | |
Arbori non-binari |
|
Despărțirea spațiului |
|
Alți copaci |
|
Algoritmi |