R+ tree
Főnév
- (informatika) Az R+ fa (R+ tree) egy térbeli adattároló adatstruktúra, amelyet térbeli objektumok (pl. pontok, vonalak, téglalapok, poligonok, stb.) hatékony keresésére használnak, főleg adatbázisokban, GIS rendszerekben (földrajzi információs rendszerek), CAD alkalmazásokban, stb.
A R+ tree az R-tree egyik módosított változata, célja a keresési hatékonyság növelése, bizonyos kompromisszumokkal.
- R-tree: egy hierarchikus fa szerkezet, amelyben a belső csomópontok téglalap alakú tartományokat (MBR – minimum bounding rectangle) reprezentálnak, és a levelek tartalmazzák az adatobjektumokat.
- R+ tree: hasonló szerkezet, de az átfedések elkerülésére törekszik → egy objektum több részre is felosztható, és több levélcsomópontban is tárolható.
Kulcs különbség R-tree vs. R+ tree
| R-tree | R+ tree |
|---|---|
| Egy objektum 1 levélben van | Objektum több levélben is lehet |
| MBR-k átfedhetik egymást | Belső csomópontok MBR-jai nem fedhetik egymást |
| Keresés során sok ág követhető | Keresés során egyetlen ágat követünk |
| Egyszerűbb beszúrás/törlés | Bonyolultabb beszúrás/törlés |
| Lassabb keresés | Gyorsabb keresés (kevesebb átlapolás miatt) |
Motiváció
Az R-tree egyik hátránya, hogy a belső csomópontok átfedhetik egymást → keresésnél gyakran több ágon is végig kell menni.
→ Az R+ tree megoldja ezt úgy, hogy:
- Belső csomópontok tartományai nem fedhetik egymást
- Ha egy objektum több tartományba esik → szétvágjuk → több helyen tároljuk
→ Ez drágább beszúrás/törlés esetén, de sokkal gyorsabb keresést eredményez.
Felépítés
Csúcstípusok
- Belső csomópont (internal node):
- Gyermekekre mutató pointereket és hozzájuk tartozó MBR-eket tartalmaz
- Belső csomópontok MBR-jei nem fedhetik egymást!
- Levélcsomópont (leaf node):
- Objektumokra mutató pointereket tartalmaz
- Egy objektum több levélben is tárolható → ha az MBR-jének több belső csomóponthoz is kell tartoznia
Műveletek
1. Keresés (Search)
- Előny az R-tree-hez képest → mivel nincs átfedés → csak 1 út járható végig a fában.
- Ha egy keresett téglalap egy belső csomópont több MBR-jébe is esne → az R+ tree szerkezete miatt az objektum minden releváns ágba be van másolva.
Algoritmus:
- Kezdjük a gyökérnél.
- Minden csomópontban kiválasztjuk azokat a gyermekeket, amelyek MBR-jébe beleesik a keresett téglalap.
- Mivel nincs átfedés → determinisztikus → egy útvonal követhető le.
- Leveleknél megnézzük az objektumokat.
2. Beszúrás (Insertion)
- Hasonló az R-tree-hez, de átfedés nem megengedett:
- Ha az objektum egy MBR-be nem fér be, akkor:
- Objektumot daraboljuk (splitting) → minden érintett ágba beszúrjuk a megfelelő részét.
- Ha az objektum egy MBR-be nem fér be, akkor:
- Ha egy csomópont megtelik, felbontjuk (split).
→ Beszúrás bonyolultabb, mint az R-tree-ben.
3. Törlés (Deletion)
- Objektumot az összes levélcsomópontból ki kell törölni, ahol jelen van.
- Ha a törlés után egy csomópont alultöltött → lehet hogy újraépítés vagy egyesítés (merge) szükséges.
Példa
Tegyük fel, hogy ilyen objektumokat akarunk tárolni:
- Téglalapok a síkon.
Ha a következő objektumokat tároljuk:
- Téglalap A
- Téglalap B
- Téglalap C
→ Ha az A téglalap átfedné a belső csomópontok MBR-jének határát, akkor R-tree-ben egy helyre kerülne (és a belső MBR-k is átfednének). → Az R+ tree-ben → az A objektumot felbontjuk és több levélbe másoljuk be.
Előnyök
✅ Gyors keresés:
- Egyértelmű útvonal a fában (nincs backtracking)
✅ Jó teljesítmény pont- és területkereséseknél
✅ Kisebb keresési idő mint R-tree-ben → konstans faktorral gyorsabb lehet.
Hátrányok
❌ Objektumok több példányban is szerepelhetnek → helyigény nőhet.
❌ Beszúrás és törlés bonyolultabb:
- Objektumok darabolása
- Többszörös beszúrás
- Többszörös törlés
Mikor használjuk?
- GIS rendszerekben, ahol gyors térbeli keresés kell
- CAD alkalmazásokban
- 3D-s játékokban → gyors láthatósági/ütközés tesztelés
- Térbeli adatbázisok (pl. PostGIS, Oracle Spatial)
→ Ha sok olvasás, kevés írás van → R+ tree jó választás.
→ Ha sok beszúrás/törlés → R-tree vagy más alternatíva lehet jobb.
Összehasonlítás más struktúrákkal
| Adatstruktúra | Fő tulajdonság |
|---|---|
| QuadTree | Rekurzív térbeli négy részre bontás |
| KD-Tree | Axis-aligned partíciók, pontokra jó |
| R-Tree | Általános térbeli objektumokra jó |
| R+ Tree | Gyors keresés, átfedés nélküli MBR-k |
| R* Tree | Optimalizált R-tree (jobb eloszlás) |
Összefoglalás
- R+ tree egy R-tree variáns → fő célja a keresés gyorsítása.
- Az átfedés megszüntetése érdekében objektumokat többször is tárolhat.
- Beszúrás/törlés bonyolultabb, keresés viszont sokkal hatékonyabb.
- Használati eset: ahol gyors olvasási teljesítmény kritikus.
Egyszerű ábra (vizuális szemléltetés):
R-Tree: R+ Tree:
[A] [A1][A2]
/ \ | |
[B] [C] [B] [C]
| | | |
obj1 obj2 obj1 obj2
A1 A2 (két példány)