Paikkatiedon hallinta ja analyysi 4. Paikkatiedon indeksointi (jatkoa)

Samankaltaiset tiedostot
Paikkatiedon käsittely 5. Paikkatiedon indeksointi

Paikkatiedon hallinta ja analyysi 4. Paikkatiedon indeksointi

Paikkatiedon hallinta ja analyysi 5. Kyselyn käsittely

Paikkatiedon käsittely 6. Kyselyn käsittely

Algoritmit 2. Luento 6 Ke Timo Männikkö

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.

Algoritmit 2. Luento 6 To Timo Männikkö

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

Algoritmit 2. Luento 2 Ke Timo Männikkö

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

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

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

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Binäärihaun vertailujärjestys

Algoritmit 2. Luento 5 Ti Timo Männikkö

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

A TIETORAKENTEET JA ALGORITMIT

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

Tietorakenteet, laskuharjoitus 7, ratkaisuja

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

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

Luku 8. Aluekyselyt. 8.1 Summataulukko

Paikkatiedon käsittely 12. Yhteenveto

Algoritmit 2. Luento 7 Ti Timo Männikkö

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

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

B + -puut. Kerttu Pollari-Malmi

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

Algoritmit 1. Luento 8 Ke Timo Männikkö

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

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

1.1 Tavallinen binäärihakupuu

Algoritmit 1. Luento 7 Ti Timo Männikkö

7. Tasapainoitetut hakupuut

Algoritmit 1. Luento 12 Ke Timo Männikkö

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

4 Tehokkuus ja algoritmien suunnittelu

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Algoritmit 1. Luento 12 Ti Timo Männikkö

4. Joukkojen käsittely

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

Kierros 4: Binäärihakupuut

Algoritmi on periaatteellisella tasolla seuraava:

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe ratkaisuja (Jyrki Kivinen)

Algoritmit 2. Luento 9 Ti Timo Männikkö

Tietorakenteet, laskuharjoitus 6,

Algoritmit 1. Luento 6 Ke Timo Männikkö

14 Tasapainotetut puurakenteet

3. Binääripuu, Java-toteutus

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

CS-A1140 Tietorakenteet ja algoritmit

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Algoritmit 1. Luento 13 Ti Timo Männikkö

Koe ma 1.3 klo salissa A111, koeaika kuten tavallista 2h 30min

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

5. Keko. Tietorakenne keko eli kasa (heap) on tehokas toteutus abstraktille tietotyypille prioriteettijono, jonka operaatiot ovat seuraavat:

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

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

Stabiloivat synkronoijat ja nimeäminen

V. V. Vazirani: Approximation Algorithms, luvut 3-4 Matti Kääriäinen

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

811312A Tietorakenteet ja algoritmit V Hash-taulukot ja binääriset etsintäpuut

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

Algoritmit 2. Luento 10 To Timo Männikkö

Mukautuvat järjestämisalgoritmit

6.5. Renderöintijärjestys

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 2. helmikuuta 2012

Luku 4. Tietorakenteet funktio-ohjelmoinnissa. 4.1 Äärelliset kuvaukset

Ohjelmoinnin peruskurssi Y1

Tarkennamme geneeristä painamiskorotusalgoritmia

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

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

10. Painotetut graafit

1 Puu, Keko ja Prioriteettijono

Algoritmit 2. Luento 4 To Timo Männikkö

9.3 Algoritmin valinta

Kysymyksiä koko kurssista?

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

Lisää segmenttipuusta

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

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

A TIETORAKENTEET JA ALGORITMIT KORVAAVAT HARJOITUSTEHTÄVÄT 3, DEADLINE KLO 12:00

Algoritmit 2. Demot Timo Männikkö

Hakemistorakenteet. R & G Chapter Tietokannan hallinta, kevät 2006, Jan 1

Pikalajittelu: valitaan ns. pivot-alkio esim. pivot = oikeanpuoleisin

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

Tietorakenteet ja algoritmit Hakurakenteet Ari Korhonen

Tällaisessa tapauksessa on usein luontevaa samaistaa (u,v)-taso (x,y)-tason kanssa, jolloin tason parametriesitys on *** VEKTORIANALYYSI.

MAA7 Kurssikoe Jussi Tyni Tee B-osion konseptiin pisteytysruudukko! Kaikkiin tehtäviin välivaiheet näkyviin! Laske huolellisesti!

Algoritmit 1. Luento 13 Ma Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

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

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko,

Algoritmit 2. Luento 3 Ti Timo Männikkö

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

Algoritmit 2. Luento 11 Ti Timo Männikkö

Mitä murteita Suomessa onkaan?

Transkriptio:

HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Paikkatiedon hallinta ja analyysi 4. Paikkatiedon indeksointi (jatkoa) Antti Leino <antti.leino@cs.helsinki.fi> 4. huhtikuuta 2005 Tietojenkäsittelytieteen laitos

Sisältö Tilan täyttävät käyrät ja niihin perustuvat approksimaatiot R-puu johdannaisineen ja suorakulmioapproksimointi Lawder King 2000: Using Space-lling Curves for Multi-Dimensional Indexing Manolopoulos Nanopoulos Papadopoulos 2003: R-trees Have Grown Everywhere Hellerstein Naughton Pfeffer 1995: Generalized Search Trees for Database Systems

Ratkaisu 2: R-puut Peruslähtökohta: modioidaan B-puuta Tavoitteena indeksirakenne, joka toimii n-ulotteisella datalla, missä n > 1 Kutakin kohdetta approksimoidaan sen minimisuorakulmiolla (minimum bounding rectangle, MBR) Koordinaattiakselien suuntainen Helppo muodostaa: kohteen nurkkapisteiden kustakin koordinaatista pienin ja suurin Minimisuorakulmioiden keskinäiset suhteet helppo laskea

R-puu Alkuperäinen suorakulmiopuu (rectangle tree) Tasapainoinen puu Lehtisivuissa (MBR, oi d), missä oi d on kohteen tunniste ja MBR sen minimisuorakulmio Muissa solmuissa (DR, p), missä p on lapsisivu ja DR suorakulmio, joka peittää kaikki p:stä alkavan alipuun kohteet Suorakulmiot voivat mennä osittain päällekkäin

R-puu

R-puun ominaisuuksia Kaikki polut juurista lehtiin yhtä pitkiä Juurta lukuunottamatta kussakin solmussa enintään M ja vähintään m tietuetta, missä m M/2 Jos juuri ei ole samalla lehti, siinä on vähintään kaksi tietuetta Kaikki lehdet ovat samalla tasolla Puun korkeus enintään log m N + 1

Haku R-puusta search(t ree, S) mat ches ; if leaf(t ree) then foreach Record Tree do if intersects(record mbr,s) then mat ches mat ches Record pt r ; else foreach Record Tree do if intersects(record mbr,s) then mat ches mat ches search(record pt r ); return(mat ches);

Esimerkkihaku R-puusta Juuren lapsista a, b ja d leikkaavat hakualueen a:n lapsista kohteet 7, 11 ja 16 leikkaavat b:n lapsista kohde 2 leikkaa d:n lapsista kohde 10 leikkaa Kohteet 2, 7, 10, 11 ja 16 leikkaavat hakualueen

Kohteen lisäys R-puuhun insert(tree, ent r y) node Tree; while leaf(node) do nod e choose_subtree(nod e, ent r y); if node < M then node node {ent r y}; else split(tree, n, ent r y); adjust_keys(t ree, n);

Alipuun valinta chose_subtree(nod e, ent r y) if leaf(nod e) then return(nod e); else mi ni mals {c children(node) c children(node) : area(mbr(c {ent r y})) area(c) area(mbr(c {ent r y})) area(c )}; if mi ni mals = 1 then return(c mi ni mals); else return(c c mi ni mals area(c) = min(area(c mi ni mals));

Puun uudelleenjärjestäminen adjust_keys(t ree, nod e) if root(nod e) then return; else parent parent(nod e); foreach e parent : e pt r = &node do e MBR mbr(node); adjust_keys(t ree, parent);

Solmun halkaiseminen spli t(tree, node, ent r y) (node, node ) pick_split(node); parent parent(nod e); E (mbr(node ),&node ); if parent < M then parent parent {E}; else split(t ree, parent, E); foreach e parent : e pt r = &node do e MBR mbr(node);

Solmun halkaisutavan valinta Perustavoite: minimiotava todennäköisyys, että pitäisi tutkia sekä node että node Tämä riippuu siitä, leikkaako solmun minimisuorakulmio hakualuetta Siispä minimoitava sekä node MBR + node MBR että (node node ) MBR Nämä vaatimukset joskus keskenään ristiriitaiset

Solmun halkaisu pick_split(nod e) tai quadratic_split foreach e, e node do J = mbb({e, e }); d e,e area(j) (area(e) + area(e )); (E 1,E 2 ) ({e},{e }) : d e,e = min({d}); node node {e, e }; while node do if E i m node then E i E i node; node ; else foreach e node do d e,1 (area(e 1 {e}) area(e 1 )); d e,2 (area(e 2 {e}) area(e 2 )); next e : d e,1 d e,2 = max({ d,1 d,2 }); (jatkuu seuraavalla sivulla)

pick_split(nod e) jatkuu while node do else (jatkoa edelliseltä sivulta) return(e 1,E 2 ); if d next,1 d next,2 then E i E i {next} : d next,i < d next,(i+1mod2) ; else if area(e 1 ) area(e 2 ) then E i E i {next} : area(e i ) < area(e i+1mod2 ); else E i E i {next} : E i < E i+1mod2 ; node node {next}; Algoritmin aikavaativuus on O(N 2 ) On myös lineaarisessa ajassa toimiva algoritmi linear_split; sen tuottama jako ei ole yhtä hyvä

Kohteen poistaminen R-puusta Kohdetta poistettaessa on pidettävä huoli siitä, että puu pysyy tasapainossa Jos kohteen sisältävä solmu kutistuisi liiaksi, puu on järjestettävä uudelleen delete(t ree, e) L find_leaf(tree, e); L L {e}; adjust_keys(t ree, L); condense_tree(t ree, L);

Lehden etsiminen find_leaf(t ree, e) if leaf(tree root ) then else if e Tree root then return(tree root ); foreach node Tree root do if e MBR node MBR then T find_leaf(t, e); if T then return(t );

Puun tiivistys kohteen poiston jälkeen condense_tree(t ree, l ea f orphans reorganise(tree, lea f ); reinsert(t ree, or phans); reorganise(t ree, nod e) Q ; if node Tree root then if node < m then Q Q {node}; return(q); parent parent(nod e); parent parent {nod e}; adjust_keys(t ree, parent); Q Q reorganise(tree, parent)

Kohteiden lisäysjärjestys R-puun avulla toteutetun hakemiston tehokkuus riippuu kohteiden lisäysjärjestyksestä Väärässä järjestyksessä lisätyt kohteet tuottavat huonon hakemiston Vastaus ongelmaan: R*-puu

R*-puu R-puun muunnelma, jossa hiukan erilainen algoritmi solmun halkaisuun Tavoitteena minimoida Solmujen päällekkäisyys Solmun peittämä pinta-ala Solmun kattaman suorakulmion reuna Myös tilankäyttö Tietorakenteet ja hakualgoritmit samat kuin R-puussa

Solmun halkaisu R*-puussa R-puu lähtee rakentamaan uusia solmuja kahden toisistaan kauimpana olevan alkion ympärille R*-puu jakaa alkiojoukon koordinaattiakselin suuntaisesti Joukko jaetaan kunkin akselin suuntaisesti kahtia (kummankin puoliskon koko m) Näistä valitaan paras Jaettavat kohteet R-puu R*-puu

Kohteen lisäys R*-puuhun Halkaisualgoritmin lisäksi toinen parannus Ennen halkaisua sijoitetaan sen huonoimmat alkiot uudelleen Lasketaan kunkin alkion keskipiste Lasketaan sen etäisyys solmun minimisuorakulmion keskipisteestä Poistetaan puusta ne 30 % solmuista, joilla tämä etäisyys on pisin Lisätään ne uudelleen Jos sama solmu vuotaa yli toisen kerran saman kohteenlisäysoperaation aikana, se halkaistaan

Pakotettu uudelleenlisäys Uudelleenlisäys paikkaa väärän lisäysjärjestyksen ongelmia Lähtötilanne Ylivuoto R-puu R*-puu

R+-puu Saman tason solmujen suorakulmiot erillisiä Haarautumasolmun minimisuorakulmio kattaa sen lapsisolmujen minimisuorakulmiot Lehtisolmun suorakulmio joko sisältää kohteen minimisuorakulmion tai leikkaa sitä Kukin avaruuden piste yhden polun kautta Aluekyselyissä etu ei välttämättä aivan selvä Puun koko suurempi kuin R- ja R*-puissa Hakutuloksen jälkikäsittelyssä varmistettava, että kukin kohde mukana korkeintaan kerran

GiST: yleistetty hakupuu Tavoitteena yleiskäyttöinen hakupuu: sama toiminnallisuus kuin B- ja R-puilla, sekä muuta Ominaisuuksia 1. Juurta lukuunottamatta solmussa aina [km, M] alkiota, missä k [ 2 M, 1 2 ] (eli m = km [2, M 2 ]) 2. Lehtisolmun alkiossa (p, pt r) ehto p pätee pt r:n osoittamaan tietokantamonikkoon 3. Haarautumasolmun alkiossa (p, pt r) ehto p pätee kaikkiin alipuusta saavutettaviin monikkoihin mutta alemman tason solmun alkiossa (p, pt r ) ei välttämättä p p 4. Juurisolmussa on vähintään kaksi alkiota, paitsi jos se on myös lehti 5. Kaikki lehdet ovat samalla tasolla

Jotain vanhaa, jotain uutta Edellisen kalvon ehdot 1, 4 ja 5 jo B-puussa Ehto 2 olennaisesti sama kuin aiemmissa puissa Lehtisolmun alkio spesioi sen kautta tavoitettavan tietokanta-alkion Sen sijaan ehto 3 muotoiltu uudelleen Riittää, että ehto erottaa samasta solmusta alkavat alipuut toisistaan Ylemmillä tasoilla käytetyt ehdot pätevät alipuuhun, joten niitä ei tarvitse enää toistaa

Olioita ja metodeita Puussa esitettävältä olioluokalta edellytetään kuutta metodia Consistent(E, q),e = (p, pt r): epätosi, jos p q ei voi päteä Union(P),P = {(p 1, pt r 1 ),...,(p n, pt r n )}: palauttaa predikaatin r, joka pätee kaikille alipuille pt r i esimerkiksi p 1... p n r Compress(E), E = (p, pt r): palauttaa alkion E = (π, pt r), missä π on jollakin tapaa pakattu p:n esitys Decompress(E), E = (π, pt r),π on p:n pakattu esitys: palauttaa alkion E = (r, pt r), missä p r

Lisää metodeita Penalty(E 1,E 2 ): palauttaa kustannuksen E 1 :n lisäämisestä E 2 :sta lähtevään alipuuhun Käytetään alkion lisäyskohdan ja solmun halkaisusuunnan määrittämiseen Esim. R-puussa Penalty(E 1,E 2 ) = area(mbr(e 1 E 2 )) area(mbr(e 1 )) PickSplit(P),P = {p 1,..., p n }, P = M + 1: jakaa alkiojoukon kahteen vähintään km alkiota sisältävään osaan Jakokriteeri usein sukua Penalty:lle Ei kuitenkaan välttämättä

GiST-puun käyttö Search(R, q) mat ches ; if leaf(r) then foreach entry E R do if Consistent(E, R) then mat ches mat ches Search(E pt r, q); else foreach entry E R do if Consistent(E, R) then mat ches mat ches E pt r Lineaariselle datalle tehokkaampi B-puumainen haku Kohteen lisäys ja solmun halkaisu vastaavilla algoritmeilla kuin R-puussa