600 likes | 696 Views
Vyhľadávanie najbližších a najlepších objektov nad paralelnými viacrozmernými indexmi. Vedúci práce : RNDr. Peter Gurský, PhD. . Ciele Práce. Popísať známe vyhľadávacie algoritmy pre vyhľadávanie najbližších a najlepších objektov nad lokálnymi aj distribuovanými viacrozmernými indexmi
E N D
Vyhľadávanie najbližších a najlepších objektov nad paralelnými viacrozmernými indexmi Vedúci práce : RNDr. Peter Gurský, PhD.
Ciele Práce • Popísať známe vyhľadávacie algoritmy pre vyhľadávanie najbližších a najlepších objektov nad lokálnymi aj distribuovanými viacrozmernými indexmi • Analyzovať vhodnosť použitia jednotlivých viacrozmerných indexov pre tento typ vyhľadávaní • Navrhnúť vlastný algoritmus vyhľadávania najlepších objektov nad vybranými typmi viacrozmerných indexov • Implementovať vybrané indexy a algoritmy vyhľadávania • Porovnať rýchlosť vyhľadávania najbližších a najlepších objekov nad naimplementovanými indexmi.
Obsah • R Strom • MC R Strom • Knn Dopyty • Top k Dopyty • Záver
R Strom je stromová štruktúra na indexovanie viacrozmerných dát na základe ich priestorovej pozície. Pod k-rozmerným dátovým súborom si môžeme predstaviť ľubovoľný objekt z k-rozmerného priestoru s atribútmi. My však budeme pracovať len s obdĺžnikmi a ich viacrozmernými variantmi.
MC R strom „Master“ Strom – Obsahuje nelistové uzly globálneho R stromu, indexuje objekty <MBR, IdServeru> „Storage“ Strom – Obsahuje časť listových uzlov globálneho R stromu, spolu s príslušnými objektami indexovanými v týchto uzloch.
MC R Strom, STR algoritmus Majme k-dimenziálnu postupnosť n (hyper) obdĺžnikov. Nech M je kapacita listu. Túto postupnosť utriedime podľa prvej súradnice ich stredu. NechP=n/M , zaokrúhlené nahor. Postupnosť rozdelíme na S = P1/kúsekov. Rekurzívne usporiadame každý z úsekov podľa zvyšných k-1 súradníc. Pozn. delenie postupnosti je len ilustračné
MC R Strom, STR algoritmus Majme k-dimenziálnu postupnosť n (hyper) obdĺžnikov. Nech M je kapacita listu. Túto postupnosť utriedime podľa prvej súradnice ich stredu. NechP=n/M , zaokrúhlené nahor. Postupnosť rozdelíme na S = P1/kúsekov. Rekurzívne usporiadame každý z úsekov podľa zvyšných k-1 súradníc. Pozn. delenie postupnosti je len ilustračné
MC R Strom, STR algoritmus Majme k-dimenziálnu postupnosť n (hyper) obdĺžnikov. Nech M je kapacita listu. Túto postupnosť utriedime podľa prvej súradnice ich stredu. NechP=n/M , zaokrúhlené nahor. Postupnosť rozdelíme na S = P1/kúsekov. Rekurzívne usporiadame každý z úsekov podľa zvyšných k-1 súradníc. Delenie postupnosti na S úsekov Pozn. delenie postupnosti je len ilustračné
MC R Strom, STR algoritmus Majme k-dimenziálnu postupnosť n (hyper) obdĺžnikov. Nech M je kapacita listu. Túto postupnosť utriedime podľa prvej súradnice ich stredu. NechP=n/M , zaokrúhlené nahor. Postupnosť rozdelíme na S = P1/kúsekov. Rekurzívne usporiadame každý z úsekov podľa zvyšných k-1 súradníc. Utriedenie podpostupností podľa ďalšej (druhej )súradnice Pozn. delenie postupnosti je len ilustračné
MC R Strom, STR algoritmus Majme k-dimenziálnu postupnosť n (hyper) obdĺžnikov. Nech M je kapacita listu. Túto postupnosť utriedime podľa prvej súradnice ich stredu. NechP=n/M , zaokrúhlené nahor. Postupnosť rozdelíme na S = P1/kúsekov. Rekurzívne usporiadame každý z úsekov podľa zvyšných k-1 súradníc. Triedenie podľa druhej súradnice hotové, každá podpostupnosť sa opäť rozdelí a utriedi podľa tretej súradnice... Pozn. delenie postupnosti je len ilustračné
MC R Strom, STR Packing algoritmus Majme utriedenú postupnosť vstupných objektov. Túto postupnosť delíme na m úsekov dĺžky N kde N je kapacita listového uzlu. Pre každý úsek vytvárame nový uzol - rodiča, ktorého MBR ohraničuje obdĺžniky všetkých objektov úseku. Rekurzívne opakujeme nad zoznamom rodičov, kým dĺžka výsledného zoznamu nie je 1.
MC R Strom, STR Packing algoritmus Majme utriedenú postupnosť vstupných objektov. Túto postupnosť delíme na m úsekov dĺžky M kde M je kapacita listového uzlu. Pre každý úsek vytvárame nový uzol - rodiča, ktorého MBR ohraničuje obdĺžniky všetkých objektov úseku. Rekurzívne opakujeme nad zoznamom rodičov, kým dĺžka výsledného zoznamu nie je 1.
MC R Strom, STR Packing algoritmus Majme utriedenú postupnosť vstupných objektov. Túto postupnosť delíme na m úsekov dĺžky M kde M je kapacita listového uzlu. Pre každý úsek vytvárame nový uzol - rodiča, ktorého MBR ohraničuje obdĺžniky všetkých objektov úseku. Rekurzívne opakujeme nad zoznamom rodičov, kým dĺžka výsledného zoznamu nie je 1.
MC R Strom, Proces Vytvorenia Postupnosť vstupných objektov je utriedená pomocou STR Utriedená postupnosť je rozdelená na m úsekov o dĺžke kapacity listu, pre každý úsek vytvorený ukazovateľ. Úseky rozdistribuované po sieti. Na master serveri vytvárame lokálny strom pomocou STR packing, pričom začíname od najnižšej vrstvy, ktorou sú ukazovatele na jednotlivé stanice Na úložných serveroch vytvárame lokálne stromy už priamo z pridelených dát cez STR packing
Komunikačná Sieť, vytvorenie S1 pošle Mastrovi žiadosť o pripojenie
Komunikačná Sieť, vytvorenie Master pošle S1 parametre pre vytvorenie prázdneho stromu
Komunikačná Sieť, vytvorenie S1 čaká, kým mu budú pridelené dáta
Komunikačná Sieť, vytvorenie Koordinátor pošle čakajúcemu serveru I prislúchajúcu porciu objektov. Koordinátor pošle čakajúcemu serveru I kópiu celého zoznamu ukazovateľov. Koordinátor pošle čakajúcemu serveru I mapu <IdServer,IpAdresa:Port> všetkých serverov v sieti.
Komunikačná Sieť, vytvorenie Vzájomné prepojenia medzi servermi sa vytvoria nasledovne : Pre každé id zo (zoznamIdentifikátorov – {idKoordinátora}): Ak id > mojeId, vytvor klientský soket a požiadaj o pripojenie ku korešpondujúcemu serveru správou INIT_RQS. Ak id < mojeId, prijmi žiadosť o naviazanie komunikácie zo svojho server soketu. Táto správa nemusí nutne pochádzať od serveru s identifikátorom id.
Knn dopyt Vstupom je bod A, číslo k. Výstupom je k najbližších objektov k tomuto bodu A.
Sekvenčný iNN algoritmus 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;
Sekvenčný iNN algoritmus 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;
Sekvenčný iNN algoritmus 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;
Sekvenčný Inn algoritmus 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;
Sekvenčný Inn algoritmus 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;
Sekvenčný Inn algoritmus 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;
Sekvenčný Inn algoritmus 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;
Sekvenčný Inn algoritmus 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;
Top k dopyt Vstupom je číslo k, kombinačná funkcia C a n preferenčných fuzzy funkcií fi Výstupom je k najlepších objektov
Top k dopyt Queue : Root Výsledok :
Top k dopyt Queue : B, A, C Výsledok :
Top k dopyt Queue : A, C, 2, 1 Výsledok :
Top k dopyt Queue : C, 6, 2, 1, 7 Výsledok :
Top k dopyt Queue : 3, 6, 2, 1, 7, 4, 5 Výsledok :
Top k dopyt Queue : 6, 2, 1, 7, 4, 5 Výsledok : 3
Top k dopyt Queue : 2, 1, 7, 4, 5 Výsledok : 3, 6