R* arbore | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tip de | structură de date | ||||||||||||
Anul inventiei | 1990 | ||||||||||||
Autor | Norbert Beckmann, Hans-Peter Kriegel, Ralf Schneider și Bernhard Seeger | ||||||||||||
Complexitatea în simbolurile O | |||||||||||||
|
|||||||||||||
Fișiere media la Wikimedia Commons |
Arborii R* sunt o variantă a arborilor R utilizate pentru indexarea informațiilor spațiale. Arborii R* au un cost puțin mai mare de a crea decât arborii R standard, deoarece poate fi necesar ca datele să fie rearanjate (șterge + inserare), dar arborele rezultat are, de obicei, performanțe de interogare mai bune. Ca un arbore R standard, poate stoca atât puncte, cât și date spațiale. Arborele a fost propus de Norbert Beckmann, Hans-Peter Kriegel, Ralf Schneider și Bernhard Seeger în 1990 [1] .
Minimizarea atât a acoperirii, cât și a suprapunerii este importantă pentru performanța arborilor R. Suprapunerea înseamnă că atunci când se interogează sau se inserează date, mai mult de o ramură a arborelui trebuie extinsă (din cauza metodei de împărțire a datelor în zone care se pot suprapune). Acoperirea minimă îmbunătățește ștergerea, permițând excluderea mai frecventă a paginilor întregi din căutări, în special pentru interogările cu intervale negative. Arborele R* încearcă să reducă ambele valori utilizând o combinație a algoritmului de împărțire a nodurilor scanate și a conceptului de reinstalare forțată la depășirea nodului. Abordarea se bazează pe observația că structurile R-tree sunt foarte sensibile la ordinea în care au fost inserate elementele arborelui, astfel încât structurile bazate pe inserție (mai degrabă decât încărcarea în vrac) sunt mai probabil să fie suboptime. Ștergerea și reinserarea elementelor arborelui le permite să „găsească” un loc în arbore care este mai potrivit decât locația lor inițială.
Când un nod depășește, unele dintre elementele sale sunt îndepărtate din nod și reinstalate în arbore. (Pentru a evita o resetare în cascadă nesfârșită cauzată de un alt nod care se depășește la această operație, procedura de resetare poate fi apelată o singură dată la fiecare nivel al arborelui atunci când este inserat orice element nou.) Acest lucru are ca rezultat grupuri mai bine grupate de elemente la nivelul noduri, reducând acoperirea nodurilor. Mai mult decât atât, adesea divizarea nodului este adesea întârziată, ceea ce duce la o creștere a umplerii medii a nodului. Reinserția poate fi considerată ca o tehnică de optimizare a unui arbore în creștere atunci când un nod se debordează.
R-arbore cu partiție pătrată Gutman [2] .
Există multe pagini care se răspândesc de la stânga la dreapta în Germania și paginile se suprapun foarte mult. Aceasta nu este o proprietate foarte favorabilă pentru majoritatea aplicațiilor, care adesea au nevoie doar de zone dreptunghiulare mici care se intersectează cu multe dungi.
R-arbore cu partiție liniară Anga-Tan [3] .
Deși dreptunghiurile nu sunt la fel de lungi ca în tiling-ul lui Gutmann, problema bandării afectează aproape fiecare foaie de pe pagină. Paginile de foaie se suprapun puțin, dar paginile de manual se suprapun foarte mult.
Partiția topologică R* a unui arbore [1] .
Paginile se suprapun foarte puțin, deoarece arborele R* încearcă să minimizeze paginile suprapuse, iar reinserarea optimizează și mai mult arborele. Nici strategia de partiționare nu favorizează benzile, așa că paginile rezultate sunt mai potrivite pentru aplicațiile de cartografiere.
Interogările în cel mai rău caz și complexitatea eliminării sunt identice cu cele dintr-un arbore R. Strategia de inserare a arborelui R* are complexitate și este mai complexă decât strategia de împărțire liniară ( ) a arborelui R, dar este mai puțin complexă decât strategia de împărțire în pătrat ( ) pentru dimensiunea paginii obiectelor și are o contribuție mică la complexitatea generală. Complexitatea generală a inserției rămâne comparabilă cu cea a unui arbore R: o reinserție afectează cel mult o ramură a arborelui și, prin urmare, oferă inserții repetate, care sunt comparabile ca performanță cu un arbore R obișnuit. Deci complexitatea generală a unui arbore R* este aceeași cu cea a unui arbore R normal.
Implementarea algoritmului complet trebuie să gestioneze multe cazuri de colț și situații dependente, care nu sunt discutate aici.
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 |
Structuri de date | |
---|---|
Liste | |
Copaci | |
Contează | |
Alte |