Paikkatiedon hallinta ja analyysi 4. Paikkatiedon indeksointi

Samankaltaiset tiedostot
Paikkatiedon käsittely 5. Paikkatiedon indeksointi

Paikkatiedon hallinta ja analyysi 4. Paikkatiedon indeksointi (jatkoa)

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Paikkatiedon käsittely 6. Kyselyn käsittely

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

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

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

Algoritmit 1. Luento 5 Ti Timo Männikkö

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit 2. Luento 5 Ti Timo Männikkö

Paikkatiedon hallinta ja analyysi 5. Kyselyn käsittely

Algoritmit 2. Luento 7 Ti Timo Männikkö

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Binäärihaun vertailujärjestys

Algoritmit 1. Luento 8 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.

Paikkatiedon käsittely 12. Yhteenveto

Datatähti 2019 loppu

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Algoritmit 2. Luento 4 To Timo Männikkö

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

Numeeriset menetelmät

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

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

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

Luku 8. Aluekyselyt. 8.1 Summataulukko

Algoritmit 2. Luento 4 Ke Timo Männikkö

Paikkatiedon käsittely 4. Diskreettiä geometriaa

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

1.1 Tavallinen binäärihakupuu

A TIETORAKENTEET JA ALGORITMIT

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Ohjelmoinnin perusteet Y Python

Algoritmit 1. Luento 6 Ke Timo Männikkö

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

Algoritmit 1. Luento 12 Ti Timo Männikkö

Ohjelmoinnin peruskurssi Y1

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

Algoritmi on periaatteellisella tasolla seuraava:

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

Injektio. Funktiota sanotaan injektioksi, mikäli lähtöjoukon eri alkiot kuvautuvat maalijoukon eri alkioille. Esim.

14 Tasapainotetut puurakenteet

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

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

1 Puu, Keko ja Prioriteettijono

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

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

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

Algoritmit 1. Luento 12 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

Algoritmit 2. Luento 9 Ti Timo Männikkö

13 Lyhimmät painotetut polut

Liitosesimerkki. Esim R1 R2 yhteinen attribuutti C. Vaihtoehdot

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

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

Hakemistotyypeistä. Hakemistorakenteet. Hakemiston toteutuksesta. Hakemiston toteutuksesta

B + -puut. Kerttu Pollari-Malmi

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

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

Algoritmit 2. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Kysymyksiä koko kurssista?

D B. Harvat hakemistot. Harvat hakemistot

Paikkatiedon hallinta ja analyysi 2. Diskreettiä geometriaa

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

Abstraktiot ja analyysi algoritmit ja informaation esitykset

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

oheishakemistoja voi tiedostoon liittyä useita eri perustein muodostettuja

Algoritmit 2. Luento 10 To Timo Männikkö

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 9. marraskuuta 2009

Kimppu-suodatus-menetelmä

Lisää segmenttipuusta

Ohjelmoinnin perusteet Y Python

Tekijä MAA2 Polynomifunktiot ja -yhtälöt = Vastaus a)

TIE Tietorakenteet ja algoritmit 25

Johdatus graafiteoriaan

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 12 To Timo Männikkö

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

Stabiloivat synkronoijat ja nimeäminen

Lisätään avainarvo 6, joka mahtuu lehtitasolle:

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 12 Ke 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.

Tietorakenteet ja algoritmit Hakurakenteet Ari Korhonen

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Jokaisella tiedostolla on otsake (header), joka sisältää tiedostoon liittyvää hallintatietoa

Mitä murteita Suomessa onkaan?

4 Tehokkuus ja algoritmien suunnittelu

Algoritmit 2. Luento 10 To Timo Männikkö

Algoritmit 2. Luento 11 Ti Timo Männikkö

TAMPEREEN TEKNILLINEN YLIOPISTO

Algoritmit 2. Luento 13 Ti Timo Männikkö

Transkriptio:

HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Paikkatiedon hallinta ja analyysi 4. Paikkatiedon indeksointi Antti Leino <antti.leino@cs.helsinki.fi> 29. maaliskuuta 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

Lähtökohta Perinteisessä tietokannassa indeksointi perustuu hakuavaimeen Avainkentässä oltava arvo Eri tietueilla eri avaimet Muillekin kentille voi tehdä indeksejä Arvo voi olla tyhjä Indeksi antaa viitteen osumatietueiden hakuavaimiin Hakuehtona tyypillisesti yhtäsuuruus tai 1-ulotteinen väli

Järjestys Tavanomaisten relaatiotietokannan tietotyyppien arvoalue on täysin järjestetty On olemassa relaatio a, b : (a b) (b a) a, b, c : (a b) (b c) a c a, b : (a b) (b a) a = b Tällaiset ehdot täyttäville tietotyypeille indeksin rakentaminen on ollut tunnettu tehtävä jo pitkään Perinteinen ratkaisu B-puu

B-puu Kohteen löytämiseen riittää tasan yhden polun kulkeminen Kaikki polut juuresta lehtiin yhtä pitkiä Jokainen sivu (juurta lukuunottamatta) aina vähintään puolillaan tietueita Puun koko O(n) Kohteen haku, lisäys ja poisto vievät O(log n) ajan

Ongelma B-puu sopii mainiosti täysin järjestetyn datan indeksointiin Entäpä paikkatieto? Kaksi vaihtoehtoa Laaditaan 2-ulotteiselle tiedolle 1-ulotteinen järjestys Yleistetään B-puu sellaisen aineiston indeksointiin, joka ei ole tällä tapaa järjestetty

Ratkaisu 1: tilan täyttävät käyrät Käyrä, jonka fraktaalidimensio = 2 Jatkuva käyrä, joka täyttää koko (rasteri)avaruuden Ensimmäisenä esitteli Giuseppe Peano (1890) Yleisesti käytössä David Hilbertin (1891) esittämä Verraten yleinen myös Z-käyrä

Miksi tilan täyttävä käyrä? Perusajatus: se linearisoi moniulotteisen avaruuden Tämän jälkeen indeksointi helppoa Toivottavia ominaisuuksia: Lähekkäisyyden säilyminen Helppo muunnos 2- ja 1-ulotteisten koordinaattien välillä Nämä ominaisuudet ikävä kyllä ristiriitaisia Hilbertin käyrä säilyttää lähekkäisyyden melko hyvin Z-käyrällä pisteen sijainti on helposti laskettavissa koordinaateista

Z-järjestys Rasteripisteen järjestysnumero helposti laskettavissa Bittilimitys: otetaan bittejä vuorotellen (binäärimuotoisesta) x- ja y-koordinaatista Esimerkiksi (2 10,1 10 ) = (10 2,01 2 ) 1001 2 = 9 10

Indeksointi z-järjestyksen avulla Indeksointiavaimena näppärä käytää alkupään bittejä Tyhjä jono: koko avaruus Parillinen määrä bittejä = neliö Pariton määrä bittejä = kaksi päällekkäistä neliötä Kaikkia suorakulmioita ei voi esittää

Kohteen approksimointi Aluekohde approksimoidaan niiden Z-arvojen joukkona, jotka yhdessä kattavat kohteen Tässä siis {0011, 001, 0110, 100, 110000} Approksimaation rakeisuus on suoraan sen pisimmän z-arvon pituus

Z-approksimoinin ominaisuuksia Alue, jonka z-arvo on z a sisältyy alueeseen, jonka z-arvo on z b täsmälleen silloin, kun z b on z a :n alkuosa Z-arvojen aakkosjärjestys = niiden osoittamien alueiden järjestys z-käyrällä Peräkkäisten Z-arvojen osoittamat alueet välillä kaukana toisistaan

Kysely z-approksimoidusta indeksistä Tehtävä: haetaan kohteet, jotka ovat hakuehtonelikulmion kattamalla alueella Haetaan indeksisolmut, jotka kattavat hakuehdon pag es ; mat ch next_match(0); while mat ch do pag e {p mat ch p}; pag es pag es {pag e}; mat ch next_match(start(pag e + 1));

Z-alueiden haku Hakuehto: (2 x 5) (1 y 5) Haetaan piste 001001 Haetaan vuorotellen ensimmäinen kulloisenkin indeksiruudun jälkeinen piste, joka on hakualueella Nämä määrittävät indeksiruudut, joita hakualue leikkaa: {0010, 0011, 0110, 10000, 100011, 1001, 1100}

Seuraavan osuman etsintä Z-järjestetyn indeksin algoritmi next_match if ollaan hakualueen ulkopuolella then Etsi merkitsevin muutettava bitti; if tämä bitti on nollattava then (ollaan tässä suunnassa hakualueen yläpuolella) Valitse muista koordinaateista vähiten merkitsevä äskeistä merkitsevämpi bitti, jota voidaan kasvattaa ja silti pysyä hakualueen sisällä; else (ollaan tässä suunnassa hakualueen alapuolella) Valitse tämä bitti; Aseta valittu bitti 1:ksi; Nollaa kaikki vähemmän merkitsevät bitit; Kasvata kunkin koordinaatin tuottamia bittejä, kunnes piste on hakualueella;

next_match-esimerkki (000,000) (010,000) (010, 001) = 001001 (010, 010) = 001100 hakualueella (000,100) (010,100) = 011000 (010,110) (100,000) (100, 001) = 100001 (101,000) (101,001) = 100011 (100, 010) = 100100 hakualueella (110,000) (100,100) = 110000

Hilbertin käyrä Vierekkäiset käyrän pisteet ovat vierekkäisiä myös lähtöavaruudessa Mahdollistaa hiukan monipuolisemman lohkojaon Toisaalta pisteen sijainnin laskeminen monimutkaista Perusalgoritmi puurakenteen avulla

Sijainti Hilbertin käyrällä Laskettavissa puun avulla Puurakenteen käyttö algoritmin osana hankalaa Tasojen määrän lisääminen kasvattaa puun kokoa

Sijaintipuu tilakoneena Sijaintia Hilbertin käyrällä osoittava puu esitettävissä myös tilakoneena Melko pian tilakoneen koko jää puun kokoa pienemmäksi

Sijainti Hilbertin käyrällä current_level 1; current_node root; D 2 ; repeat p x current_level. y current_level; d bits current_node(p); D D.d; if current_level < lea f _level then current_node (p, d); current_level current_level + 1; until current_level > lea f _level;

Esimerkki pisteen sijainnin laskennasta Koordinaattien 1. bitit (1, 0), so. oikea alaneljännes Juurisolmusta saadaan avaimen biteiksi 11 Siirrytään puussa 2. tasolle (1,0):n osoittamaa haaraa Koordinattien 2. bitit (1, 1), so. oikea yläneljännes Tästä solmusta saadaan avaimen biteiksi 00 Ollaan lehtisolmussa, avain 1100 2 = 12 10

Kysely Hilbertin käyrään perustuvasta indeksistä Hakemiston sivut eivät välttämättä nelikulmioita Tehtävänä etsiä ne hakemistosivut, jotka hakualue leikkaa Perusalgoritmi kuten z-käyrän tapauksessa pag es ; mat ch next_match(0); while mat ch do pag e {p mat ch p}; pag es pag es {pag e}; mat ch next_match(start(pag e + 1));

Seuraavan osuman etsintä Hiukan hankalahkoa, koska käyrä erisuuntainen eri puolilla Joka iteraatiokierroksella rajoitutaan pienempään alipuuhun Rajoitetaan etsintä niihin alipuihin, jotka leikkaavat hakualueen Jokaisen iteraatiokierroksen lopussa katsotaan, oliko löydetty osuma aiemmin käyrällä kuin edellisillä kierroksilla löydetty Jos osumia ei löytynyt, kiivetään puussa ylöspäin, kunnes löytyy Jos tämäkään ei auta, seuraavaa osumaa ei ole

next_match Hilbertin käyrälle c_level 1; c_search_space root; repeat X derived_key(c_sear c h_spac e, c_pag e_ke y); * Y min(der i ved_ke y(r)) R = quadrant(c_search_space,?) R c_quer y_reg i on Y X; c_search_space quadrant(c_search_space,y ); c_quer y_reg i on c_quer y_reg i on c_search_space; next_mat ch next_mat ch.y ; if X = Y then if c_quer y_reg i on = c_search_space then return c_pag e_ke y; else if c_quer y_reg i on = c_search_space then return(next_mat c h täytettynä nollilla); else return(min(derived_key(p c_quer y_reg i on))); c_level c_level + 1; until c_level > lea f _level;

next_match: jatkoa Edellisen sivun algoritmissa monimutkainen osa Y min(d er i ved_ke y(r)) R = quadrant(c_sear ch_spac e,?) R c_quer y_reg i on Tähän sisältyy Y X ; c_sear ch_spac e:en kohdistuva binäärihaku Sen niiden osien muistiinmerkitseminen, joihin voi jatkossa palata Tarvittaessa ja mahdollisuuksien mukaan palaaminen ylemmälle tasolle return( ), jos palaamiseen olisi tarvetta muttei mahdollisuuksia

next_match: esimerkki Ensimmäinen osuma: Löydetään vasen alaneljännes: Y = 00 Sen oikea yläneljännes: Y = 10, next_mat ch = 0010 Tämä sisältyy kokonaan hakualueeseen: next_mat ch = 001000 2 = 8 10 Osuma sisältyy sivuun 1, joka käsittää Hilbertin käyrän pisteet 017