B-tree (pronunțat în rusă ca B-tree ) este o structură de date , un arbore de căutare. Din punctul de vedere al reprezentării logice externe - un arbore echilibrat , foarte ramificat . Adesea folosit pentru a stoca date în memoria externă.
Utilizarea arborilor B a fost propusă pentru prima dată de R. Bayer și E. McCreight în 1970 .
Echilibrat înseamnă că lungimile oricăror două căi de la rădăcină la frunze diferă cu cel mult unul.
Ramificarea unui arbore este proprietatea fiecărui nod de arbore de a se referi la un număr mare de noduri descendente.
Din punct de vedere al organizării fizice, arborele B este reprezentat ca o structură multilistă a paginilor de memorie, adică fiecărui nod al arborelui îi corespunde un bloc de memorie (pagină). Paginile interioare și cele cu frunze au de obicei o structură diferită.
Structura B-tree este utilizată pentru a organiza indecși în multe SGBD-uri moderne .
Un arbore B poate fi folosit pentru a structura (indexa) informații pe un hard disk (de obicei metadate). Timpul de acces la un bloc arbitrar de pe un hard disk este foarte lung (de ordinul milisecundelor), deoarece este determinat de viteza de rotație a discului și de mișcarea capului. Prin urmare, este important să se reducă numărul de noduri scanate la fiecare operație. Folosirea unei căutări în listă de fiecare dată pentru a găsi un bloc aleatoriu ar putea duce la un număr excesiv de accesări pe disc din cauza necesității de a trece secvențial prin toate elementele sale premergătoare celui dat, în timp ce căutarea în arborele B, datorită proprietăților lui echilibru și ramificare ridicată, pot reduce semnificativ numărul de astfel de operațiuni.
Implementarea relativ simplă a algoritmilor și existența unor biblioteci gata făcute (inclusiv cele pentru C ) pentru lucrul cu structura B-tree fac ca o astfel de organizare a memoriei să fie populară într-o mare varietate de programe care lucrează cu cantități mari de date.
Un arbore B este un arbore care satisface următoarele proprietăți:
Proprietatea 2 poate fi enunțată diferit: fiecare nod al arborelui B, cu excepția frunzelor, poate fi considerat ca o listă ordonată în care alternează cheile și pointerii către copii.
Dacă cheia este conținută în rădăcină, este găsită. În caz contrar, determinăm intervalul și mergem la descendentul corespunzător. Repetăm.
Vom numi arborele descendenților unui anumit nod un subarboresc format din acest nod și descendenții săi.
Mai întâi, să definim o funcție care adaugă cheia K la arborele copil al nodului x. După executarea funcției, în toate nodurile trecute, cu excepția, poate, a nodului x însuși, vor exista mai puține , dar nu mai puține , taste.
Acum să definim adăugarea cheii K la întregul arbore. Litera R reprezintă nodul rădăcină.
Dacă rădăcina este și o frunză, adică există un singur nod în arbore, pur și simplu scoatem cheia din acest nod. În caz contrar, găsim mai întâi nodul care conține cheia, amintindu-ne calea către acesta. Fie acest nod .
Dacă - frunză, ștergeți cheia de acolo. Dacă au rămas cel puțin chei în nod , ne oprim aici. În caz contrar, ne uităm la numărul de chei din două noduri învecinate. Dacă există un nod învecinat din dreapta și are cel puțin chei, adăugăm la cheia de separare între acesta și nodul învecinat din dreapta, iar în locul acestei chei punem prima cheie a nodului din dreapta vecin, după care ne oprim . Dacă nu este cazul, dar există un nod din stânga vecin și are cel puțin chei, adăugăm la cheia de separare dintre acesta și nodul din stânga vecin, iar în locul acestei chei punem ultima cheie a celei vecine. nodul stâng, după care ne oprim. În cele din urmă, dacă cheia din stânga eșuează, îmbinăm nodul cu nodul din stânga sau din dreapta vecin și mutăm cheia care a separat anterior aceste două noduri în nodul îmbinat. În acest caz, numai cheile pot rămâne în nodul părinte . Apoi, dacă nu este o rădăcină, efectuăm o procedură similară cu ea. Dacă, prin urmare, am ajuns la rădăcină și au rămas de la 1 la chei în ea, nu trebuie făcut nimic, deoarece rădăcina poate avea mai puține chei. Dacă nu a mai rămas o singură cheie în rădăcină, excludem nodul rădăcină și facem singurul său copil noua rădăcină a arborelui.
Dacă nu este o frunză și K este cheia sa --a, ștergeți cheia cea mai din dreapta din subarborele descendenților celui de-al --lea descendent sau, dimpotrivă, cheia cea mai din stânga din sub-arborele descendenților celui --lea descendent . După aceea, înlocuim cheia K cu cheia de la distanță. Ștergerea cheii are loc așa cum este descris în paragraful anterior.
Principalul dezavantaj al arborilor B este că nu au un mijloc eficient de a prelua date (adică o metodă de traversare a arborilor) ordonate după o altă proprietate decât cheia aleasă.
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 |