Paikkatiedon hallinta ja analyysi 5. Kyselyn käsittely

Samankaltaiset tiedostot
Paikkatiedon käsittely 6. Kyselyn käsittely

Paikkatiedon hallinta ja analyysi 4. Paikkatiedon indeksointi (jatkoa)

Paikkatiedon hallinta ja analyysi 4. Paikkatiedon indeksointi

Paikkatiedon käsittely 12. Yhteenveto

Algoritmit 2. Luento 6 Ke Timo Männikkö

Paikkatiedon käsittely 5. Paikkatiedon indeksointi

Algoritmit 2. Luento 6 To Timo Männikkö

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia

Miten käydä läpi puun alkiot (traversal)?

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö

Luku 8. Aluekyselyt. 8.1 Summataulukko

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

Liitosesimerkki Tietokannan hallinta, kevät 2006, J.Li 1

Algoritmit 2. Luento 7 Ti Timo Männikkö

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 2. Luento 4 To Timo Männikkö

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Algoritmit 2. Luento 4 Ke Timo Männikkö

Liitosesimerkki. Esim R1 R2 yhteinen attribuutti C. Vaihtoehdot

Algoritmit 2. Luento 5 Ti Timo Männikkö

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit 1. Luento 10 Ke Timo Männikkö

1 Puu, Keko ja Prioriteettijono

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

Algoritmit 1. Luento 13 Ti Timo Männikkö

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

Paikkatiedon käsittely 4. Diskreettiä geometriaa

3. Hakupuut. B-puu on hakupuun laji, joka sopii mm. tietokantasovelluksiin, joissa rakenne on talletettu kiintolevylle eikä keskusmuistiin.

Algoritmit 2. Luento 5 Ti Timo Männikkö

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Helsingin yliopisto/tktl Kyselykielet, s 2006 Optimointi Harri Laine 1. Kyselyn optimointi. Kyselyn optimointi

811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

v 1 v 2 v 3 v 4 d lapsisolmua d 1 avainta lapsen v i alipuun avaimet k i 1 ja k i k 0 =, k d = Sisäsolmuissa vähint. yksi avain vähint.

Ohjelmoinnin peruskurssi Y1

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

D B. Tietokannan hallinta kertaus

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Algoritmit 1. Luento 4 Ke Timo Männikkö

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia

Algoritmit 1. Luento 8 Ke Timo Männikkö

AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Ohjelmoinnin perusteet Y Python

Tietorakenteet, laskuharjoitus 10, ratkaisuja. 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Malliratkaisut Demot

811120P Diskreetit rakenteet

Algoritmit 2. Luento 9 Ti Timo Männikkö

Konsensusongelma hajautetuissa järjestelmissä. Niko Välimäki Hajautetut algoritmit -seminaari

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 13 Ma Timo Männikkö

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

1. a) Laadi suoraviivaisesti kyselyä vastaava optimoimaton kyselypuu.

Algoritmi on periaatteellisella tasolla seuraava:

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

Johdatus graafiteoriaan

10. Painotetut graafit

TIE Tietorakenteet ja algoritmit 261

Algoritmit 2. Demot Timo Männikkö

Paikkatiedon hallinta ja analyysi 2. Diskreettiä geometriaa

Datatähti 2019 loppu

Stabiloivat synkronoijat ja nimeäminen

13 Lyhimmät painotetut polut

Tarkennamme geneeristä painamiskorotusalgoritmia

7.4 Sormenjälkitekniikka

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmit 2. Luento 11 Ti Timo Männikkö

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun:

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 12 Ke Timo Männikkö

B + -puut. Kerttu Pollari-Malmi

Cantorin joukon suoristuvuus tasossa

4 Tehokkuus ja algoritmien suunnittelu

Johdatus verkkoteoriaan 4. luento

Paikkatiedon hallinta ja analyysi

58131 Tietorakenteet (kevät 2009) Harjoitus 6, ratkaisuja (Antti Laaksonen)

811120P Diskreetit rakenteet

Kombinatorinen optimointi

Algoritmit 2. Luento 12 To Timo Männikkö

lähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa

58131 Tietorakenteet (kevät 2009) Harjoitus 11, ratkaisuja (Topi Musto)

private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla;

Harjoitus 6 ( )

PN-puu. Helsinki Seminaari: Tietokannat nyt HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

58131 Tietorakenteet (kevät 2008) 1. kurssikoe, ratkaisuja

Oikeasta tosi-epätosi -väittämästä saa pisteen, ja hyvästä perustelusta toisen.

Binäärihaun vertailujärjestys

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

1.1 Tavallinen binäärihakupuu

Paikkatiedon käsittely 10. Aluekohteiden yhteisesiintymät

58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen)

Transkriptio:

HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Paikkatiedon hallinta ja analyysi 5. Kyselyn käsittely Antti Leino <antti.leino@cs.helsinki.fi> 7. huhtikuuta 2005 Tietojenkäsittelytieteen laitos

Sisältö Kyselyt R-puun avulla Paikkaliitokset Yannis Manolopoulos Alexandros Nanopoulos Apostolos N. Papadopoulos 2003: R-trees Have Grown Everywhere Philippe Rigaux Michel Scholl Agnès Voisard 2002: Spatial Databases, luku 7

Kysely indeksin avulla Sijaintitieto indeksissä approksimoituna Haku tyypillisesti kaksiosainen 1. Etsitään indeksistä minimisuorakulmion perusteella 2. Tarkistetaan osumista, täyttävätkö hakuehdon Vrt. GiST-puun Consistent: osumat epävarmoja, hylkäykset varmoja Joissakin tapauksissa lopullinen tieto jo indeksistä Esim. sisältyykö kohde suorakulmioon?

Topologiset kyselyt R-puun yhteydessä oli jo algoritmi aluekyselyä varten Mitkä kohteet leikkaavat suorakulmion x 1 x x 2, y 1 y y 2? Sama algoritmi käytettävissä muihinkin topologisiin suhteisiin R-puussa kohteen suorakulmioapproksimaatio Tarkat suhteet joka tapauksessa selvitettävä erikseen Puusta haettaessa mahdollisesti käytössä puskuri Mitkä kohteet leikkaavat suorakulmion (x 1 ε) x (x 2 + ε),(y 1 ε) y (y 2 + ε)? Näin saadaan varmasti mukaan vierekkäiset kohteet

Suuntakyselyt Myös suuntasuhteisiin perustuvat kyselyt mahdollisia R-puussa Suuntasuhteet neljään pää- ja neljään väli-ilmansuuntaan suorakulmion nurkkapisteiden perusteella Kaksiosainen haku 1. Haetaan jo(ide)nkin suuntasuhte(id)en mukaan 2. Haetaan tuloksesta uudelleen eri suhte(id)en mukaan Esim. vahvasti koilliseen 1. north (p s, q s ) east (p s, q s ) 2. north (p f, q s ) east (p f, q s )

Naapuruuskyselyt Tehtävä: etsitään kohteen k lähintä naapuria Hyödyllisiä mittoja: Piste P, kohde O ja sen minimisuorakulmio R MINDIST (P, R): lyhin etäisyys P:stä R:ään MINMAXDIST (P, R): etäisyys P:stä lähimpään sellaiseen R:n nurkkapisteeseen, joka on samalla sivulla kuin kauimmainen R:n nurkkapiste P:n ja O:n kauimmaisen pisteen etäisyys vähintään MINMAXDIST (P, R)

Minimietäisyyksien hyötykäyttöä Kyselypiste P, kohteet O,O ja niiden minimisuorakulmiot R,R Jos MINDIST (P,R) > MINMAXDIST (P,R ), R voidaan hylätä Jos distance (P,O) > MINMAXDIST (P,R ), O voidaan hylätä Jos MINDIST (P, R) > distance (P,O), R voidaan hylätä Näitä havaintoja voi käyttää apuna algoritmin naapurien etsinnässä

Lähimmän naapurin etsintä NN_search(node, poi nt,nearest) if leaf (nod e) then foreach e node do di st distance (poi nt,e MBR ); if di st < nearest di st then nearest di st di st; nearest ent r y e; else branch_li st sort_branch_list(node); last prune_list(poi nt,nearest,branch_li st); foreach new_node {branch_li st i }, i [1, last] do NN_search(new_nod e, poi nt, nearest); last prune_list(poi nt,nearest,branch_li st);

Kohteiden järjestäminen etäisyyden mukaan NN_sear ch on helpohko muuttaa etsimään k lähintä naapuria Pidetään kirjaa k naapurista Hylätään joka kierroksella kaukaisin Joskus tarpeen kohteiden järjestäminen etäisyysjärjestykseen Oliot jonona, joka on järjestetty etäisyyden mukaan Haarautumasolmun lapset sijoitetaan jonoon MINDIST :n mukaan

Yleinen järjestysalgoritmi inc_nearest(quer y_ob j ect,i ndex) queue ; enqueue(queue, i ndex root,0); while queue do el ement dequeue(queue); if object (el ement) then while element = first (queue) do delete_first(queue); output(el ement); else if leaf (element) then foreach ob j ect element do if distance (quer y_ob j ect,ob j ect) distance (quer y_ob j ect,element) then enqueue(queue, ob j ect, distance (quer y_ob j ect,ob j ect)); else foreach chi ld element do enqueue(queue, chi ld, distance (quer y_ob j ect,chi ld));

Järjestäminen R-puun avulla inc_nearest(quer y_ob j ect,tree) queue ; enqueue(queue, t ree root,0); while queue do el ement dequeue(queue); if object (element) object_mbr (element) then if object_mbr (element) queue distance (quer y_ob j ect,ob j ect) > first (queue) ke y then enqueue(queue, ob j ect, distance (quer y_ob j ect,ob j ect)); else output( object (el ement)); else if leaf (element) then foreach ob j ect element do enqueue(queue, ob j ect MBR, distance (quer y_ob j ect,ob j ect MBR )); else foreach chi ld element do enqueue(queue, chi ld, distance (quer y_ob j ect,chi ld MBR ));

Käänteiset naapuruussuhteet Sama toisin päin: Etsi ne kohteet, joiden lähin naapuri tämä on Tason pisteellä näitä on korkeintaan kuusi Jaetaan siis tutkittava alue kuuteen sektoriin Haettavat kohteet löytyvät kunkin sektorin lähimpien kohteiden joukosta

Käänteisten naapuruussuhteiden etsintä RNN_search(q) r nn_result ; nearest cond_nn_search(q); cand i d at es eliminate_duplicates(nearest); foreach p candi dat es do r NN_search(p); if distance (q, p) = distance (r, p) then r nn_result r nn_result {p}; return r nn_resul t

Paikkaliitokset Relaatioalgebran liitosoperaatio, jossa ehto liittyy sijaintitietoon Tyypillisesti leikkausehto R Rsi j ai nt i S si j ai nt i S Muut suhteet toki myös Tavanomaisiin liitoksiin käytetyt algoritmit huonoja paikkaliitoksille Pohjimmainen ongelma: geometrisen leikkauksen epätyhjyys on vaikeampi testata kuin atomisten arvojen yhtäsuuruus

Paikkaliitoksen toteutus Kaksiosainen operaatio Suodatus minimisuorakulmioiden perusteella Lopullinen valinta todellisen sijaintitiedon perusteella Tässä R-puuhun perustuva ratkaisu Yhtä lailla mahdollista käyttää myös tilan täyttävään käyrään perustuvaa hakemistoa

Paikkaliitoksen suodatusaskel r_join(r, S) mat ches ; foreach E S S do foreach E R R E RMBR E SMBR do if leaf (R) then mat ches mat ches {(E Rpt r,e Spt r )}; else mat ches mat ches r_join(e R,E S ) return mat ches; Tässä oletetaan, että puut R ja S yhtä korkeita Jos erikorkuisia, viimeisillä rekursiotasoilla verrataan toisen alipuuta toisen lehtisolmun alkioon

Suodatusalgoritmin tehokkuus Levynkäsittely suhteellisen tehokasta Sen sijaan prosessoriaikaa kuluu Mitä suurempi sivukoko sitä vallitsevammaksi prosessoriajan kulutus käy Algoritmi tehostuu, jos silmukoihin otetaan vain ne solmun alkiot, joissa osumia voi olla: S {e S e MBR R }; R {e R e MBR S };

Tasonpyyhkäisy Leikkauksen E R E S epätyhjyyden testausta voi vielä optimoida tasonpyyhkäisymenetelmällä (plane sweep) Lähdetään liikkeelle R S:n vasemmasta reunasta Edetään, kunnes tulee vastaan ensimmäinen suorakulmio Käydään läpi kaikki ne toisenväriset suorakulmiot, joiden vasen reuna on tarkasteltavan suorakulmion oikean reunan vasemmalla puolella Jos suorakulmiot leikkaavat myös pystysuunnassa, ne leikkaavat Merkitään suorakulmio käsitellyksi Siirretään tarkastelukohtaa, kunnes tulee vastaan seuraava suorakulmio ja käydään läpi sen alueella olevat vielä käsittelemättömät suorakulmiot

Lisää optimointia Tasonpyyhkäisykin riittää vasta paikalliseen optimointiin: läpikäytävien solmujen määrän globaaliin minimointiin se ei riitä. Ratkaisu: käydään puut läpi koko taso kerrallaan Kullakin tasolla kerätään keskenään leikkaavien solmujen parit tilapäisindeksiksi I JI i = {(E Ri,E Si ) R S E RiMBR E SiMBR } Kun taso on käyty läpi, siirrytään seuraavalle Nyt kunkin tason kaikki tarvittavat solmut tiedetään jo ennalta

Tasottainen paikkaliitosalgoritmi breadth_first_r_join(r, S) I JI 0 {(E R,E S ) R S E RMBR E SMBR }; for i 0 to height (R) 1 do foreach (E R,E s ) I JI i do I JI i+1 I JI i+1 {(e ER, e ES ) E R E S e ERMBR e ESMBR }; return I JI height (R) 1 ;

Usean taulun paikkaliitokset Edellä käsitelty kahden tietokantataulun / R-puun liitoksia Useamman taulun liitokset yleistettävissä näistä Erilaisia toimintastrategioita 1. Ensin kahden taulun liitos, jonka tulos (indeksoimatta) liitetään kolmanteen 2. Ensin kahden taulun liitos, jonka tulos laaditaan jo valmiiksi sopimaan yhteen kolmannen R-puun kanssa 3. Suoraan kolmen taulun liitos

Liitos etäisyyden perusteella Liitosehtona eri tauluissa olevien kohteiden välinen etäisyys R d1 distance (R,S) d 2 S Ratkaisu perustuu aiemmin nähtyyn järjestysalgoritmiin inc_nearest Parit (E R,E S ) järjestetään etäisyyden mukaan Näistä käsitellään ne, joissa etäisyys osuu liitosehdon määräämälle välille

Etäisyysliitosalgoritmi inc_dist_join(r, S) queue ; enqueue(queue,0,r root,s root ); while queue do el ement dequeue(queue); if object (element R ) object (element S ) then output(el ement); else if is_mbr (element R ) is_mbr (element S ) then D distance (element Rob j ect, element Sob j ect ); if Q = D Q 1di st then output(el ement); else enqueue(queue,d, element Rob j ect, element Sob j ect ); else if is_node (element R ) then process_node(q, el ement, 1); else process_node(q, el ement, 2);

Haarautumasolmujen purkaminen process_node(q, el ement, ord er) if order = 1 then node element R ; i t em element S ; else node element S ; i t em element R ; if leaf (nod e) then else foreach ent r y node do enqueue(q, distance (ent r y, i t em), ent r y, i t em); foreach chi ld node do enqueue(q, distance (chi ld, i t em), chi ld, i t em);

Yksi vai kaksi haaraa kerrallaan? Algoritmissa inc_dist_join puretaan kerrallaan vain yksi haarautumasolmu Ei ole selvää, että olisi tehokkaampaa purkaa molemmat haarautumat samalla kertaa Esitetyssä muodossa se kulkee ensin puuta R lehtiin saakka ja vasta sitten puuta S Parempi ratkaisu olisi kulkea puita alas tasaisesti, esimerkiksi valitsemalla purettavaksi se puu, jossa on jäljellä enemmän tasoja Etäisyysliitosta tehostaa, jos algoritmissa process_node tarkistetaan, että solmujen välinen minimi- / maksimietäisyys sopii liitosehdon rajoihin