![Page 1: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/1.jpg)
Vyhľadávanie najbližších objektov nad viacrozmernými
indexmi
![Page 2: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/2.jpg)
Vyhľadávanie najbližších objektov nad viacrozmernými
indexmi
Z knihy Multidimensional and Metric Data Structures
.
![Page 3: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/3.jpg)
Obsah
• Viacrozmerné indexy
• Best-First k nearest neighbour approach
• DFS k nearest neighbour approach
• Pruning Rules
• Záver
![Page 4: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/4.jpg)
Viacrozmerné Indexy
• Hierarchické stromové štruktúry na indexovanie viacrozmerných dát
• Minimum bounding containers
• MBC objektov sú uložené v listoch
![Page 5: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/5.jpg)
Viacrozmerné Indexy – Objekty a MBC
![Page 6: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/6.jpg)
R Strom
![Page 7: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/7.jpg)
Obsah
• Viacrozmerné indexy
• Best-First k nearest neighbour approach
• DFS k nearest neighbour approach
• Pruning Rules
• Záver
![Page 8: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/8.jpg)
kNN Dopyt
Vstupom je bod A, číslo k.
Výstupom je k najbližších objektov k tomuto bodu A.
![Page 9: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/9.jpg)
Best First Approach knn(Bod pt, PrioritnyRad queue, int k) {
foreach (p in potomok) {
queue.add(p);
}
Object o = queue.poll();
if (o je datovy objekt)
vysledok.add(o)
else o.knn(pt, queue);
if (vysledok.size() == k) return vysledok;
![Page 10: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/10.jpg)
Best First Approach knn(Bod pt, PrioritnyRad queue, int k) {
foreach (p in potomok) {
queue.add(p);
}
Object o = queue.poll();
if (o je datovy objekt)
vysledok.add(o)
else o.knn(pt, queue);
if (vysledok.size() == k) return vysledok;
![Page 11: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/11.jpg)
Best First Approach knn(Bod pt, PrioritnyRad queue, int k) {
foreach (p in potomok) {
queue.add(p);
}
Object o = queue.poll();
if (o je datovy objekt)
vysledok.add(o)
else o.knn(pt, queue);
if (vysledok.size() == k) return vysledok;
![Page 12: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/12.jpg)
Best First Approach knn(Bod pt, PrioritnyRad queue, int k) {
foreach (p in potomok) {
queue.add(p);
}
Object o = queue.poll();
if (o je datovy objekt)
vysledok.add(o)
else o.knn(pt, queue);
if (vysledok.size() == k) return vysledok;
![Page 13: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/13.jpg)
Best First Approach knn(Bod pt, PrioritnyRad queue, int k) {
foreach (p in potomok) {
queue.add(p);
}
Object o = queue.poll();
if (o je datovy objekt)
vysledok.add(o)
else o.knn(pt, queue);
if (vysledok.size() == k) return vysledok;
![Page 14: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/14.jpg)
Best First Approach knn(Bod pt, PrioritnyRad queue, int k) {
foreach (p in potomok) {
queue.add(p);
}
Object o = queue.poll();
if (o je datovy objekt)
vysledok.add(o)
else o.knn(pt, queue);
if (vysledok.size() == k) return vysledok;
![Page 15: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/15.jpg)
Best First Approach knn(Bod pt, PrioritnyRad queue, int k) {
foreach (p in potomok) {
queue.add(p);
}
Object o = queue.poll();
if (o je datovy objekt)
vysledok.add(o)
else o.knn(pt, queue);
if (vysledok.size() == k) return vysledok;
![Page 16: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/16.jpg)
Best First Approach knn(Bod pt, PrioritnyRad queue, int k) {
foreach (p in potomok) {
queue.add(p);
}
Object o = queue.poll();
if (o je datovy objekt)
vysledok.add(o)
else o.knn(pt, queue);
if (vysledok.size() == k) return vysledok;
![Page 17: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/17.jpg)
Best First Approach - Worst Case
![Page 18: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/18.jpg)
Best First Incremental Approach - R-Optimalita
• Vlastnosť zaručujúca, že pre všetky elementy e navštívené počas behu algoritmu platí
d(q,e) ≤ d(q,ok )
• Ako funkciu vzdialenosti bola zatiaľ použitá metrika MIN_DIST.
![Page 19: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/19.jpg)
Obsah
• Viacrozmerné indexy
• Best-First k nearest neighbour approach
• DFS k nearest neighbour approach
• Pruning Rules
• Záver
![Page 20: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/20.jpg)
Depth First Approach DFS(Bod q, PrioritnyRad queue, element e, int k, reference integer Dk) {
if (e je list) {
foreach (p in potomok(e)) {
if (d(q,o) < Dk) {
enqueue(p, d(q,o));
if (size(queue) > k) Dk = queue.elementAt(k);
}
else {
foreach (p in potomok(e)) {
DFS(pt, queue, p, k, Dk);
}
![Page 21: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/21.jpg)
Depth First Approach DFS(Bod q, PrioritnyRad queue, element e, int k, reference integer Dk) {
if (e je list) {
foreach (p in potomok(e)) {
if (d(q,o) < Dk) {
enqueue(p, d(q,o));
if (size(queue) > k) Dk = queue.elementAt(k);
}
else {
foreach (p in potomok(e)) {
if (d(q,p) < Dk) {
DFS(pt, queue, p, k, Dk); // nemusim prechádzať uzly, ktoré sú vzdialenejšie ako Dk
}
}
![Page 22: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/22.jpg)
Depth First Approach DFS(Bod q, PrioritnyRad queue, element e, int k, reference integer Dk) {
if (e je list) {
foreach (p in potomok(e)) {
if (d(q,o) < Dk) {
enqueue(p, d(q,o));
if (size(queue) > k) Dk = queue.elementAt(k);
}
else {
foreach (p in potomok(e)) { // nech su potomkovia zoradení podľa rastúceho d(p,q)
if (d(q,p) < Dk) {
DFS(pt, queue, p, k, Dk);
} else {
break foreach loop; // ak nájdem jedného s väčším d(p,q), nemusím pokračovať
}
}
![Page 23: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/23.jpg)
Obsah
• Viacrozmerné indexy
• Best-First k nearest neighbour approach
• DFS k nearest neighbour approach
• Pruning Rules
• Záver
![Page 24: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/24.jpg)
Pruning Rules - Motivácia
• Minimalizácia elementov skúmaných DFS prístupom
![Page 25: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/25.jpg)
Pruning Rules - Motivácia
• Minimalizácia elementov skúmaných DFS prístupom
• So stúpajúcou dimenziou stúpa náročnosť výpočtu MIN_DIST (Curse of Dimensionality...)
![Page 26: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/26.jpg)
• Každý uzol v indexe má tieto informácie o potomkoch :
• MBC(p)• Pointer(p)• Pivot(p)• Rmax(p)
Pruning Rules – Dodatočné informácie o potomkoch
![Page 27: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/27.jpg)
Pruning Rules – MIN_DIST vs PIVOT_DIST
![Page 28: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/28.jpg)
Pruning Rules – Rmax(p)
![Page 29: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/29.jpg)
Pruning Rule 1 (Fukunaga and Narendra)
DFS(Bod q, PrioritnyRad queue, element e, int k, reference integer Dk) {
if (e je list) {
foreach (p in potomok(e)) {
compute(d(q,o));
if (d(q,o) < Dk) {
enqueue(p, d(q,o));
if (size(queue) > k) Dk = queue.elementAt(k);
}
else {
foreach (p in potomok(e)) {
DFS(pt, queue, p, k, Dk);
}
![Page 30: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/30.jpg)
Pruning Rule 1 (Fukunaga and Narendra)
DFS(Bod q, PrioritnyRad queue, element e, int k, reference integer Dk) {
if (e je list) {
foreach (p in potomok(e)) {
compute(d(q,o));
if (d(q,o) < Dk) {
enqueue(p, d(q,o));
if (size(queue) > k) Dk = queue.elementAt(k);
}
else {
foreach (p in potomok(e)) {
if ( d(q, Pivot(p)) – Rmax(p) > Dk ) then ignore p;
DFS(pt, queue, p, k, Dk);
}
![Page 31: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/31.jpg)
Pruning Rule 1 (Fukunaga and Narendra)
Rule 1 : Dk + Rmax(p) < PIVOT_DIST(p,q)
![Page 32: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/32.jpg)
Pruning Rule 2 (Fukunaga and Narendra)
DFS(Bod q, PrioritnyRad queue, element e, int k, reference integer Dk) {
if (e je list) {
foreach (p in potomok(e)) {
if ( d(q, Pivot(e)) – d(p, pivot(e)) > Dk ) then ignore p;
compute(d(q,p));
if (d(q,o) < Dk) {
enqueue(p, d(q,o));
if (size(queue) > k) Dk = queue.elementAt(k);
}
else {
foreach (p in potomok(e)) {
if ( d(q, Pivot(p)) – Rmax(p) > Dk ) then ignore p;
DFS(pt, queue, p, k, Dk);
}
![Page 33: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/33.jpg)
Pruning Rule 2 (Fukunaga and Narendra)
Rule 2 : Dk + PIVOT_DIST(o, p) < PIVOT_DIST(p,q)
![Page 34: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/34.jpg)
Pruning Rule 2 (Fukunaga and Narendra)
Rule 2 : Dk + PIVOT_DIST(o, p) < PIVOT_DIST(p,q)
![Page 35: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/35.jpg)
Pruning Rule 3 (Kamgar-Parsi, Kanal)
DFS(Bod q, PrioritnyRad queue, element e, int k, reference integer Dk) {
if (e je list) {
foreach (p in potomok(e))
if ( d(q, Pivot(e)) – d(p, pivot(e)) > Dk ) then ignore p;
compute(d(q,p));
if (d(q,o) < Dk) {
enqueue(p, d(q,o));
if (size(queue) > k) Dk = queue.elementAt(k);
}
else {
foreach (p in potomok(e)) {
if ( d(q, Pivot(p)) – Rmax(p) > Dk ) then ignore p;
if ( Rmin(p) - d(q, Pivot(p)) > Dk ) then ignore p;
DFS(pt, queue, p, k, Dk);
}
![Page 36: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/36.jpg)
Pruning Rule 3 (Kamgar-Parsi, Kanal)
DFS(Bod q, PrioritnyRad queue, element e, int k, reference integer Dk) {
if (e je list) {
foreach (p in potomok(e)) {
if ( d(q, Pivot(e)) – d(p, pivot(e)) > Dk ) then ignore p;
compute(d(q,p));
if (d(q,o) < Dk) {
enqueue(p, d(q,o));
if (size(queue) > k) Dk = queue.elementAt(k);
}
else {
foreach (p in potomok(e)) {
if ( d(q, Pivot(p)) – Rmax(p) > Dk ) then ignore p;
if ( Rmin(p)Rmin(p) - d(q, Pivot(p)) > Dk ) then ignore p;
DFS(pt, queue, p, k, Dk);
}
![Page 37: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/37.jpg)
Pruning Rule 3 (Kamgar-Parsi, Kanal) - Rmin
![Page 38: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/38.jpg)
Pruning Rule 3 (Kamgar-Parsi, Kanal)
Rule 3 : Dk + PIVOT_DIST(q, p) < Rmin(p)
![Page 39: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/39.jpg)
Pruning Rule 3 (Kamgar-Parsi, Kanal)
ANALÓGIA K PRAVIDLU 2, AVŠAK NA NELISTOVEJ VRSTVE
![Page 40: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/40.jpg)
Pruning Rule 4 (Kamgar-Parsi, Kanal)
DFS(Bod q, PrioritnyRad queue, element e, int k, reference integer Dk) {
if (e je list) {
foreach (p in potomok(e)) {
if ( d(q, Pivot(e)) – d(p, pivot(e)) > Dk ) then ignore p;
if ( d(p, Pivot(e)) – d(q, pivot(e)) > Dk ) then ignore p;
compute(d(q,p));
if (d(q,o) < Dk) {
enqueue(p, d(q,o));
if (size(queue) > k) Dk = queue.elementAt(k);
}
else {
foreach (p in potomok(e)) {
if ( d(q, Pivot(p)) – Rmax(p) > Dk ) then ignore p;
if ( Rmin(p) - d(q, Pivot(p)) > Dk ) then ignore p;
DFS(pt, queue, p, k, Dk);
}
![Page 41: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/41.jpg)
Pruning Rule 4 (Kamgar-Parsi, Kanal)
Rule 4 : Dk + PIVOT_DIST(q, p) < PIVOT_DIST(p,o)
![Page 42: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/42.jpg)
Pruning Rule 4 (Kamgar-Parsi, Kanal)
Rule 4 : Dk + PIVOT_DIST(q, p) < PIVOT_DIST(p,o)
Rozšírenie rule 2, ktoré by to pustilo
![Page 43: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/43.jpg)
Pruning Rule 5 (Fukunaga and Narendra), k = 1
DFS(Bod q, PrioritnyRad queue, element e, int k, reference integer Dk) {
if (e je list) {
...
else {
potomok(e) nech vygeneruje zoznam utriedených prvkov podľa PIVOT_DIST(q,p), pre každé p potomok e, nech sú spracovávané v tomto poradí.
If (k = 1) {
foreach(p in potomok(e)) {
if (PIVOT_DIST(q,p) >D1) exit foreach loop;
if (PIVOT_DIST(q,p) + Rmax(p) < D1) D1 = PIVOT_DIST(q,p) + Rmax(p);
}
}
foreach (p in potomok(e)) {
if ( d(q, Pivot(p)) – Rmax(p) > Dk ) then ignore p;
if ( Rmin(p) - d(q, Pivot(p)) > Dk ) then ignore p;
DFS(pt, queue, p, k, Dk);
}
![Page 44: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/44.jpg)
Pruning Rule 5 (Fukunaga and Narendra), k = 1
PIVOT_DIST(q,p) + Rmax(p) = MAX_DIST(p,q)
• Odhad vzdialenosti medzi najvzdialenejším potomkom uzla e a dopytovým bodom q.
![Page 45: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/45.jpg)
Pruning Rule 5 (Larsen and Kanal), k = 1
PIVOT_DIST(q,p) + Rmax(p) = MAX_DIST(p,q)
– Odhad vzdialenosti medzi najvzdialenejším potomkom uzla e a dopytovým bodom q.
PIVOT_DIST(q,p) + Rmin(p) = MAXNEAREST_DIST(p,q)
– Odhad vzdialenosti medzi najbližším potomkom uzla e a dopytovým bodom q.
![Page 46: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/46.jpg)
MAXNEAREST_DIST
• MAXNEAREST_DIST sa dá určiť aj za situácie, kedy Rmin nepoznáme.
• Pre indexy používajúce Minimum Bounding Sphere platí (V Euclidovskom priestore) :
MAXNEAREST_DIST(p,q) = Odmocnina(PIVOT_DIST(q,p)^2 + Rmax(p)^2)
![Page 47: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/47.jpg)
MAXNEAREST_DIST
MAXNEAREST_DIST(p,q) = Odmocnina(PIVOT_DIST(q,p)^2 + Rmax(p)^2)
![Page 48: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/48.jpg)
MAXNEAREST_DIST
Cena O(d^2), kde d je dimenzia
![Page 49: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/49.jpg)
Pruning Rule 5 (Fukunaga and Narendra), k = 1
DFS(Bod q, PrioritnyRad queue, element e, int k, reference integer Dk) {
if (e je list) {
...
else {
potomok(e) nech vygeneruje zoznam utriedených prvkov podľa PIVOT_DIST(q,p), pre každé p potomok e, nech sú spracovávané v tomto poradí.
If (k = 1) {
foreach(p in potomok(e)) {
if (PIVOT_DIST(q,p) >D1) exit foreach loop;
if (PIVOT_DIST(q,p) + Rmax(p) < D1) D1 = PIVOT_DIST(q,p) + Rmax(p);
}
}
foreach (p in potomok(e)) {
if ( d(q, Pivot(p)) – Rmax(p) > Dk ) then ignore p;
if ( Rmin(p) - d(q, Pivot(p)) > Dk ) then ignore p;
DFS(pt, queue, p, k, Dk);
}
![Page 50: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/50.jpg)
Pruning Rule 5 (Larsen and Kanal), k = 1
DFS(Bod q, PrioritnyRad queue, element e, int k, reference integer Dk) {
if (e je list) {
...
else {
potomok(e) nech vygeneruje zoznam utriedených prvkov podľa PIVOT_DIST(q,p), pre každé p potomok e, nech sú spracovávané v tomto poradí.
If (k = 1) {
foreach(p in potomok(e)) {
if (PIVOT_DIST(q,p) >D1) exit foreach loop;
if (PIVOT_DIST(q,p) + Rmin(p) < D1) D1 = PIVOT_DIST(q,p) + Rmin(p);
}
}
foreach (p in potomok(e)) {
if ( d(q, Pivot(p)) – Rmax(p) > Dk ) then ignore p;
if ( Rmin(p) - d(q, Pivot(p)) > Dk ) then ignore p;
DFS(pt, queue, p, k, Dk);
}
![Page 51: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/51.jpg)
Pruning Rule 5, k = 1DFS(Bod q, PrioritnyRad queue, element e, int k, reference integer Dk) {
if (e je list) {
...
else {
potomok(e) nech vygeneruje zoznam utriedených prvkov podľa PIVOT_DIST(q,p), pre každé p potomok e, nech sú spracovávané v tomto poradí.
If (k = 1) {
foreach(p in potomok(e)) {
if (PIVOT_DIST(q,p) >D1) exit foreach loop;
if (MAXNEAREST_DIST(p,q) < D1) D1 = MAXNEAREST_DIST(p,q);
}
}
foreach (p in potomok(e)) {
if ( d(q, Pivot(p)) – Rmax(p) > Dk ) then ignore p;
if ( Rmin(p) - d(q, Pivot(p)) > Dk ) then ignore p;
DFS(pt, queue, p, k, Dk);
}
![Page 52: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/52.jpg)
Pruning Rule 5, Diskusia
• Zoznam potomkov e je lepšie triediť pomocou MIN_DIST ako hlavného kľúča a MAXNEAREST_DIST ako sekundárneho, namiesto triedenia pomocou PIVOT_DIST
• MIN_DIST, MAXNEAREST_DIST možno vypočítať z Rmax, Rmin a PIVOT_DIST.
![Page 53: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/53.jpg)
Obsah
• Viacrozmerné indexy
• Best-First k nearest neighbour approach
• DFS k nearest neighbour approach
• Pruning Rules
• Záver
![Page 54: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/54.jpg)
Záver
• DFS algoritmus síce možno vylepšiť pomocou orezávacích pravidiel, ale nie je šanca dosiahnuť R – optimalitu ako u Best-First algoritmu.
• DFS algoritmus má teoreticky lepšiu pamäťovú zložitosť.
• Na základe prezentovaných pravidiel možno upraviť aj Best-First algoritmus.
![Page 55: Vyhľadávanie najbližších objektov nad viacrozmernými indexmi](https://reader031.vdocuments.pub/reader031/viewer/2022013004/568134ff550346895d9c4b19/html5/thumbnails/55.jpg)
Otázky