R*-copac

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 12 decembrie 2019; verificarea necesită 1 editare .
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
In medie În cel mai rău caz
Consumul de memorie O( n ) O( n )
Căutare O( login )
Introduce O( login )
 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] .

Diferența dintre arbori R* și arbori R

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ă.

Performanță

Algoritm și complexitate

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.

Note

  1. 1 2 Beckmann, Kriegel, Schneider, Seeger, 1990 , p. 322.
  2. Guttman, 1984 , p. 47.
  3. Ang, Tan, 1997 , p. 337–349.

Literatură