R* træ | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Type | datastruktur | ||||||||||||
Opfindelsens år | 1990 | ||||||||||||
Forfatter | Norbert Beckmann, Hans-Peter Kriegel, Ralf Schneider og Bernhard Seeger | ||||||||||||
Kompleksitet i O-symboler | |||||||||||||
|
|||||||||||||
Mediefiler på Wikimedia Commons |
R*-træer er en variant af R-træer, der bruges til at indeksere rumlig information. R*-træer har lidt højere omkostninger at oprette end standard R-træer, da dataene muligvis skal omarrangeres (slet + indsæt), men det resulterende træ har normalt bedre forespørgselsydeevne. Som et standard R-træ kan det lagre både punkter og rumlige data. Træet blev foreslået af Norbert Beckmann, Hans-Peter Kriegel, Ralf Schneider og Bernhard Seeger i 1990 [1] .
Det er vigtigt at minimere både dækning og overlapning for R-træers ydeevne. Overlap betyder, at når du forespørger data eller indsætter, skal mere end én gren af træet udvides (på grund af metoden til at opdele data i områder, der kan overlappe). Minimeret dækning forbedrer sletning ved at tillade, at hele sider udelukkes fra søgninger oftere, især for forespørgsler med negative intervaller. R*-træet forsøger at reducere begge værdier ved at bruge en kombination af den scannede nodeopdelingsalgoritme og konceptet med tvungen geninstallation ved nodeoverløb. Fremgangsmåden er baseret på den observation, at R-træstrukturer er meget følsomme over for rækkefølgen, hvori træelementer blev indsat, så indsættelsesbaserede (i stedet for bulk-belastning) strukturer er mere tilbøjelige til at være suboptimale. Sletning og genindsættelse af træelementer giver dem mulighed for at "finde" et sted i træet, der er mere egnet end deres oprindelige placering.
Når en node løber over, fjernes nogle af dens elementer fra noden og geninstalleres i træet. (For at undgå en endeløs kaskade-nulstilling forårsaget af en anden knude, der flyder over på denne operation, kan nulstillingsproceduren kun kaldes én gang på hvert niveau i træet, når et nyt element indsættes). Dette resulterer i mere velklyngede grupper af elementer ved noder, hvilket reducerer nodedækningen. Desuden er opdelingen af noden ofte forsinket, hvilket fører til en stigning i den gennemsnitlige fyldning af noden. Genindsættelse kan opfattes som en teknik til at optimere et voksende træ, når en knude løber over.
R-træ med firkantet Gutman skillevæg [2] .
Der er mange sider, der spredes fra venstre mod højre over hele Tyskland, og siderne overlapper hinanden meget. Dette er ikke en særlig gunstig egenskab for de fleste applikationer, som ofte kun har brug for små rektangulære områder, der krydser mange striber.
R-træ med lineær Anga-Tan partition [3] .
Selvom rektanglerne ikke er så lange som i Gutmanns flisebelægning, påvirker båndproblemet næsten alle ark på siden. Arksider overlapper lidt, men man-sider overlapper meget.
Topologisk partition R* af et træ [1] .
Siderne overlapper meget lidt, fordi R*-træet forsøger at minimere overlappende sider, og genindsættelse optimerer træet yderligere. Partitioneringsstrategien favoriserer heller ikke bånd, så de resulterende sider er mere velegnede til kortlægningsapplikationer.
Worst-case-forespørgsler og fjernelseskompleksitet er identiske med dem i et R-træ. R*-træindsættelsesstrategien har kompleksitet og er mere kompleks end R-træets lineære opdelingsstrategi ( ), men er mindre kompleks end kvadratisk opdelingsstrategien ( ) for objekters sidestørrelse og har et lille bidrag til den overordnede kompleksitet. Den overordnede indsættelseskompleksitet forbliver sammenlignelig med et R-træ: en genindsættelse påvirker højst én gren af træet og giver derfor gentagne indsættelser, som i ydeevne er sammenlignelig med et almindeligt R-træ. Så den samlede kompleksitet af et R*-træ er den samme som for et normalt R-træ.
Implementeringen af den komplette algoritme skal håndtere mange hjørnesager og afhængige situationer, som ikke diskuteres her.
Træ (datastruktur) | |
---|---|
Binære træer | |
Selvbalancerende binære træer |
|
B-træer | |
præfiks træer |
|
Binær opdeling af rummet | |
Ikke-binære træer |
|
At bryde rummet op |
|
Andre træer |
|
Algoritmer |
|
Datastrukturer | |
---|---|
Lister | |
Træer | |
Tæller | |
Andet |