Algoritmit 1. Luento 7 Ti Timo Männikkö

Samankaltaiset tiedostot
Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit 1. Luento 5 Ti 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 3 Ti Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

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

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö

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

A TIETORAKENTEET JA ALGORITMIT

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

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

Datatähti 2019 loppu

Binäärihaun vertailujärjestys

Algoritmit 1. Luento 12 Ke Timo Männikkö

Luku 8. Aluekyselyt. 8.1 Summataulukko

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

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

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 2. Luento 11 Ti Timo Männikkö

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

B + -puut. Kerttu Pollari-Malmi

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Algoritmit 1. Demot 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.

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

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

Algoritmit 2. Demot Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

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

Algoritmit 1. Luento 4 Ke Timo Männikkö

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

1.1 Tavallinen binäärihakupuu

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Algoritmit 1. Luento 14 Ke Timo Männikkö

Kysymyksiä koko kurssista?

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

7. Tasapainoitetut hakupuut

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

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

CS-A1140 Tietorakenteet ja algoritmit

Kierros 4: Binäärihakupuut

Algoritmit 2. Luento 14 Ke Timo Männikkö

14 Tasapainotetut puurakenteet

Algoritmit 1. Demot Timo Männikkö

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

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

Tietorakenteet, laskuharjoitus 6,

Algoritmit 2. Demot Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö

Muita linkattuja rakenteita

Algoritmit 1. Luento 3 Ti Timo Männikkö

Paikkatiedon käsittely 6. Kyselyn käsittely

B-puu. 3.3 Dynaamiset hakemistorakenteet

Datatähti 2000: alkukilpailun ohjelmointitehtävä

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

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

Algoritmit 2. Luento 13 Ti Timo Männikkö

Käsitellyt hakemistot (hajautus, ISAM): hakemisto-osa on staattinen eli ei muutu muuten kuin uudelleenorganisoinnissa.

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

Tietorakenteet ja algoritmit Hakurakenteet Ari Korhonen

Algoritmit 2. Luento 13 Ti Timo Männikkö

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

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

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Algoritmit 2. Luento 12 To Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 1. Demot Timo Männikkö

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

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

Paikkatiedon hallinta ja analyysi 4. Paikkatiedon indeksointi

Algoritmit 2. Luento 11 Ti Timo Männikkö

Tarkennamme geneeristä painamiskorotusalgoritmia

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

Jäsennysaiheesta lisää Täydentäviä muistiinpanoja TIEA241 Automaatit ja kieliopit, syksy 2016

Tieto- ja tallennusrakenteet

v 8 v 9 v 5 C v 3 v 4

Algoritmi on periaatteellisella tasolla seuraava:

Algoritmit 2. Luento 8 To Timo Männikkö

Ei-yhteydettömät kielet [Sipser luku 2.3]

Algoritmit 2. Luento 10 To Timo Männikkö

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

13 Lyhimmät painotetut polut

Transkriptio:

Algoritmit 1 Luento 7 Ti 31.1.2017 Timo Männikkö

Luento 7 Järjestetty binääripuu Binääripuiden termejä Binääripuiden operaatiot Solmun haku, lisäys, poisto Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 2/30

Binääripuu vasemman alipuun juurisolmu puun juurisolmu oikean alipuun juurisolmu 7 7 Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 3/30

Binääripuu Solmujen järjestys rakenteen perusteella: Jos solmu a on solmun b vasemmassa alipuussa, niin a b Jos solmu a on solmun b oikeassa alipuussa, niin b a Solmujen järjestys tietosisällön perusteella: Määritellään järjestys solmujen jonkin kentän (tai kenttien) mukaan Voi olla a < b, a > b tai a = b Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 4/30

Järjestetty binääripuu f b g 7 7 a d c e i h Binääripuu järjestetty, jos kaikilla a ja b on voimassa a b a b Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 5/30

Binääripuihin liittyviä termejä Solmun vasemman alipuun juurisolmu on solmun vasen lapsi Solmun oikean alipuun juurisolmu on solmun oikea lapsi Solmu on lastensa vanhempi Saman solmun kaksi lasta ovat sisaruksia Solmun edeltäjiä ovat solmun vanhempi, tämän vanhempi jne. Solmun seuraajia ovat solmun lapset, näiden lapset jne. Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 6/30

Binääripuihin liittyviä termejä Lapseton solmu on lehtisolmu Muut kuin lehtisolmut ovat sisäsolmuja Solmuja yhdistävä viiva on haara, kaari tai oksa Polku solmusta a solmuun b on joukko solmuja v 1 = a, v 2,..., v k 1, v k = b siten, että v i 1 on aina solmun v i vanhempi (tai lapsi) Polun pituus on polulla olevien haarojen lukumäärä Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 7/30

Binääripuihin liittyviä termejä Solmun syvyys on kyseisestä solmusta juurisolmuun vievän polun pituus Juurisolmun syvyys on 0, sen lapsien syvyys on 1 jne. Solmun taso on juurisolmusta kyseiseen solmuun vievän polun pituus Juurisolmun taso on 0, sen lapsien taso on 1 jne. Solmun korkeus on pisimmän siitä lehtisolmuun vievän polun pituus Puun korkeus on juurisolmun korkeus Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 8/30

Binääripuun toteutus Taulukolla: Taulukon indeksit toimivat osoittimina solmuihin Tarvitaan tarkat säännöt, jotka kertovat mistä indekseistä lapset ja/tai vanhemmat löytyvät Käyttökelpoinen yleensä vain, jos puurakenne pysyy koko ajan (melkein) samanlaisena (Ei käsitellä) Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 9/30

Binääripuun toteutus Dynaamisesti: Solmussa osoittimet (linkit, viitteet) molempiin alipuihin, esimerkiksi left ja right Joskus kolmaskin osoitin solmun vanhempaan, jolloin voidaan kulkea helposti myös ylöspäin Osoitin juurisolmuun (vertaa listojen listaosoitin) Esitetään perusoperaatioiden toteutus yleisellä tasolla Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 10/30

Solmun haku binääripuusta Haetaan solmu, jonka avain on sama kuin annettu hakuavain Tai todetaan, että puussa ei ole sellaista solmua Aloitetaan juurisolmusta Jos hakuavain solmun avain, mennään vasempaan alipuuhun Jos hakuavain > solmun avain, mennään oikeaan alipuuhun Kun vastaan tulee tyhjä alipuu, lopetetaan Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 11/30

Solmun haku binääripuusta Hakutietue h, osoitin p, ehdokassolmu c 1. Asetetaan p = puun juurisolmu ja c = null 2. Toistetaan kunnes p = null: Jos h.key p.key, asetetaan c = p ja p = p.left Jos h.key > p.key, asetetaan p = p.right 3. Jos c null ja c.key = h.key, niin c on haettu solmu, muuten haettua solmua ei ole puussa Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 12/30

Solmun haku binääripuusta Algoritmi löytää aina haettavan solmun, jos puussa on sellainen Jos puussa useita solmuja, joilla sama avain kuin hakutietueella, algoritmi löytää niistä rakenteellisessa järjestyksessä ensimmäisen Kuljettujen solmujen jono muodostaa hakupolun Hakupolku päättyy haetun solmun vasemman alipuun rakenteellisessa järjestyksessä viimeiseen solmuun Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 13/30

Solmun lisääminen binääripuuhun Lisätään solmu avaimen mukaan oikeaan paikkaan Puu pysyy järjestettynä Jos puussa ennestään solmuja, joilla sama avain, uusi solmu lisätään niistä rakenteellisessa järjestyksessä viimeiseksi Järjestys on stabiili Edellinen hakualgoritmi: Löytää rakenteellisessa järjestyksessä ensimmäisen solmun c, jonka avain hakuavain Nyt halutaan: Haetaan rakenteellisessa järjestyksessä viimeinen solmu c, jonka avain hakuavain Edellinen hakualgoritmi peilikuvakseen Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 14/30

Solmun lisääminen binääripuuhun Uusi solmu u, osoitin p, ehdokassolmu c 1. Alustus: Asetetaan u.left = null ja u.right = null Jos puu on tyhjä, asetetaan u puun juurisolmuksi ja lopetetaan Muuten asetetaan p = puun juurisolmu ja c = null (Algoritmi jatkuu) Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 15/30

Solmun lisääminen binääripuuhun 2. Toistetaan: Jos u.key < p.key: Jos p.left = null, jatketaan kohdasta 3 Muuten asetetaan p = p.left Jos u.key p.key: Asetetaan c = p Jos p.right = null, jatketaan kohdasta 3 Muuten asetetaan p = p.right (Algoritmi jatkuu) Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 16/30

Solmun lisääminen binääripuuhun 3. Lopetus: Huom: (Jos puussa ei saa esiintyä yhtäsuuria solmuja ja c null ja c.key = u.key, niin lopetetaan) Jos c = p, asetetaan p.right = u Jos c p, asetetaan p.left = u Jos c = p, silloin myös p.right = null Jos c p, silloin myös p.left = null Molemmissa tapauksissa u tulee rakenteellisessa järjestyksessä c:tä seuraavaksi solmuksi Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 17/30

Solmun poistaminen binääripuusta Lisääminen tehtiin aina lehtisolmuksi Riittää etsiä lisättävälle solmulle oikea paikka Poistettava solmu voi olla myös sisäsolmu Pitää huolehtia, että poistettavan solmun alipuut pysyvät kiinni puussa Ennen yleisen solmun poistamista pari erikoistapausta Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 18/30

Ensimmäisen solmun poistaminen Rakenteellisessa järjestyksessä ensimmäinen solmu Poisto yksinkertaisempi kuin yleisen solmun poistaminen Aloitetaan juurisolmusta Kuljetaan jatkuvasti vasemmalle, kunnes tullaan solmuun, jonka vasen alipuu on tyhjä Poistettavan solmun oikea alipuu liitetään poistettavan solmun tilalle Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 19/30

Ensimmäisen solmun poistaminen Osoitin p ja sen edeltäjä q 1. Alustus: Jos puu ei ole tyhjä, asetetaan p = puun juurisolmu ja q = null 2. Toistetaan: Jos p.left = null, jatketaan kohdasta 3 Muuten asetetaan q = p ja p = p.left 3. Nyt p on puun ensimmäinen solmu, poistetaan p: Jos q = null, on p puun juuri, jolloin asetetaan uudeksi juurisolmuksi p.right Muuten asetetaan q.left = p.right Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 20/30

Viimeisen solmun poistaminen Vastaavasti, mutta peilikuvana 1. Alustus: Jos puu ei ole tyhjä, asetetaan p = puun juurisolmu ja q = null 2. Toistetaan: Jos p.right = null, jatketaan kohdasta 3 Muuten asetetaan q = p ja p = p.right 3. Nyt p on puun viimeinen solmu, poistetaan p: Jos q = null, on p puun juuri, jolloin asetetaan uudeksi juurisolmuksi p.left Muuten asetetaan q.right = p.left Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 21/30

Yleisen solmun poistaminen Poistetaan solmu, jonka avain on sama kuin annettu hakuavain Tai todetaan, että puussa ei ole sellaista solmua Jos puussa useita solmuja, joilla sama avain, poistetaan rakenteellisessa järjestyksessä ensimmäinen Järjestys stabiili Periaate: Poistettava solmun tilalle siirretään sen vasemman alipuun viimeinen solmu Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 22/30

Yleisen solmun poistaminen Edellinen hakualgoritmi: Jos puussa useita solmuja, joilla sama avain kuin hakutietueella, algoritmi löytää niistä rakenteellisessa järjestyksessä ensimmäisen Osoitin c löytää solmun, joka halutaan poistaa (jos sellainen on olemassa) Hakupolku päättyy haetun solmun vasemman alipuun rakenteellisessa järjestyksessä viimeiseen solmuun Osoitin p löytää solmun, joka halutaan siirtää poistettavan solmun tilalle Edellinen hakualgoritmi (ei peilikuvana) Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 23/30

Yleisen solmun poistaminen Hakutietue h, osoitin p ja sen edeltäjä q, kandidaattisolmu c ja sen edeltäjä c p 1. Alustus: Jos puu ei ole tyhjä, asetetaan p = puun juurisolmu, q = null, c = null ja c p = null (Algoritmi jatkuu) Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 24/30

Yleisen solmun poistaminen 2. Toistetaan: Jos h.key p.key: Asetetaan c = p ja c p = q Jos p.left = null, jatketaan kohdasta 3 Muuten asetetaan q = p ja p = p.left Jos h.key > p.key: Jos p.right = null, jatketaan kohdasta 3 Muuten asetetaan q = p ja p = p.right (Algoritmi jatkuu) Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 25/30

Yleisen solmun poistaminen 3. Jos c = null tai c null ja c.key h.key, lopetetaan (solmua ei ole puussa) 4. Poistetaan solmu c: Jos c.left = null, asetetaan p = c.right Muuten: Asetetaan p.right = c.right Jos p c.left (ts. jos q c), asetetaan q.right = p.left ja p.left = c.left (Algoritmi jatkuu) Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 26/30

Yleisen solmun poistaminen 4. Jatkuu: Kytketään solmu p solmun c tilalle: Jos c on puun juurisolmu, asetetaan uudeksi juurisolmuksi p Muuten asetetaan joko c p.left = p tai c p.right = p, riippuen siitä kumpaan alipuuhun c kuului Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 27/30

Solmun poistaminen, esimerkki Tapaus: Solmun c vasen alipuu on tyhjä c,p % & p % & Askel 4: p = c.right c p.left=p tai c p.right = p Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 28/30

Solmun poistaminen, esimerkki Tapaus: Haun jälkeen p on c:n vasen lapsi c p % & p % & Askel 4: p.right = c.right c p.left = p tai c p.right = p Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 29/30

Solmun poistaminen, esimerkki Tapaus: Haun jälkeen p ei ole c:n vasen lapsi c q & % p # p q & % # Askel 4: p.right = c.right c p.left = p q.right = p.left tai p.left = c.left c p.right = p Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017 30/30