Algoritmit 1. Luento 6 Ke Timo Männikkö

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

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 4 Ke Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

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

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

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

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 2. Luento 3 Ti Timo Männikkö

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

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

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

Algoritmit 1. Luento 9 Ti Timo Männikkö

Muita linkattuja rakenteita

Algoritmit 1. Luento 14 Ke Timo Männikkö

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

Algoritmit 1. Luento 10 Ke Timo Männikkö

Tieto- ja tallennusrakenteet

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

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

Tietorakenteet ja algoritmit - syksy

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

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

Binäärihaun vertailujärjestys

Algoritmit 1. Demot Timo Männikkö

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

4. Joukkojen käsittely

Rakenteiset tietotyypit Moniulotteiset taulukot

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Algoritmit 2. Luento 9 Ti Timo Männikkö

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

Algoritmit 1. Demot Timo Männikkö

Tietorakenteet ja algoritmit

18. Abstraktit tietotyypit 18.1

Tietorakenteet, laskuharjoitus 6,

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero

Algoritmit 1. Luento 12 Ke Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

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

Tietorakenteet, laskuharjoitus 7, ratkaisuja

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

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

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

CS-A1140 Tietorakenteet ja algoritmit

Algoritmit 2. Demot Timo Männikkö

Kierros 4: Binäärihakupuut

Algoritmit 1. Luento 10 Ke Timo Männikkö

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

Sekvenssi: kokoelma peräkkäisiä alkioita (lineaarinen

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

Tarkennamme geneeristä painamiskorotusalgoritmia

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

Algoritmit 1. Luento 12 Ti Timo Männikkö

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 1, , vastauksia

Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

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

1.1 Tavallinen binäärihakupuu

Tietorakenteita 163. Yhteen suuntaan linkitetyn listan rakenne on siis seuraavan kuvan kaltainen:

B-puu. 3.3 Dynaamiset hakemistorakenteet

Kysymyksiä koko kurssista?

Algoritmit 1. Luento 3 Ti Timo Männikkö

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

Algoritmit 1. Luento 1 Ti Timo Männikkö

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

Tietorakenteet ja algoritmit

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin perusteet Y Python

Tietorakenteet ja algoritmit

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

Lyhyt kertaus osoittimista

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

14 Tasapainotetut puurakenteet

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet )

2. Perustietorakenteet

Anna Kuikka Pyöräkatu 9 B Kuopio GSM: Opiskelijanro: 60219K. Prioriteettijonot

TIETORAKENTEET JA ALGORITMIT

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

Algoritmit 2. Luento 11 Ti Timo Männikkö

9.3 Algoritmin valinta

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

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

Hakemistotyypeistä. Hakemistorakenteet. Hakemiston toteutuksesta. Hakemiston toteutuksesta

Algoritmit 2. Luento 10 To Timo Männikkö

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, , vastauksia

Tietorakenteet ja algoritmit Hakurakenteet Ari Korhonen

Transkriptio:

Algoritmit 1 Luento 6 Ke 25.1.2017 Timo Männikkö

Luento 6 Järjestetty lista Listan toteutus dynaamisesti Linkitetyn listan operaatiot Vaihtoehtoisia listarakenteita Puurakenteet Binääripuu Järjestetty binääripuu Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 2/29

Lista Lista l koostuu joukosta samantyyppisiä alkioita (tietueita) Epätyhjässä listassa on ensimmäinen alkio first(l) ja viimeinen alkio last(l) Ensimmäinen ja mahdollisesti viimeinen alkio ovat välittömästi käytettävissä Jokaisella alkiolla a, paitsi viimeisellä, on välitön seuraaja succ(a) Jokaisella alkiolla a, paitsi ensimmäisellä, on välitön edeltäjä pred(a) Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 3/29

Järjestetty lista Määritellään listan alkioille järjestysrelaatio Järjestysavaimena alkion jonkin kentän (tai kenttien) tietosisältö Olkoot a ja b listan alkioita siten, että b = succ(a) Jos aina a b, niin lista on järjestetty kasvavaan (nousevaan) järjestykseen Jos aina a b, niin lista on järjestetty vähenevään (laskevaan) järjestykseen Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 4/29

Listan toteutus dynaamisesti Listan alkiot dynaamisessa muistissa, eivät välttämättä fyysisesti vierekkäin Muistitilaa varataan ja vapautetaan dynaamisesti Listan kokoa rajoittaa vain muistin koko Alkioita lisättäessä ja poistettaessa ei siirrellä alkioita, vaan muutetaan linkkejä Vertaa toteutus taulukolla: Maksimikoko määriteltävä aluksi Alkioita joudutaan siirtelemään Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 5/29

Listan toteutus dynaamisesti Jokaisessa alkiossa osoitin (linkki, viite) seuraavaan alkioon listassa, esimerkiksi next Viimeisellä alkiolla ei seuraajaa, osoittimella erityinen vakioarvo null Ensimmäiseen alkioon osoittaa listaosoitin (listanpää), esimerkiksi plista Tyhjän listan listaosoittimella arvo null Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 6/29

Listan läpikäynti plista pj for (pj = plista; pj!= null; pj = pj.next) { // Tehdään jotain pj:n osoittamalle // alkiolle, esimerkiksi: tulosta(pj.nimi, pj.syntvuosi); } Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 7/29

Lisäys linkitettyyn listaan Varataan uudelle alkiolle tila dynaamisesta muistista Osoitin uuteen alkioon: uusi Tallennetaan tietosisältö alkion kenttiin Lisäyksen paikka haetaan (alkion edeltäjä) Päivitetään listan seuraajaosoittimet Jos listalla muita osoittimia (esim. pviim), päivitetään myös ne Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 8/29

Lisäys listan alkuun plista uusi x uusi.next = plista; plista = uusi; uusi plista x Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 9/29

Lisäys listan keskelle plista pj uusi x uusi.next = pj.next; pj.next = uusi; plista pj uusi x Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 10/29

Lisäys listan loppuun plista pviim uusi x pviim.next = uusi; uusi.next = null; pviim = uusi; plista pviim uusi x Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 11/29

Poistaminen linkitetystä listasta Poistettava alkio ja sen edeltäjä haetaan Jos poistettava on ensimmäinen alkio, edeltäjää ei ole Osoitin poistettavaan alkioon: pois Päivitetään listan seuraajaosoittimet Jos listalla muita osoittimia, päivitetään myös ne Vapautetaan poistettavan alkion muistitila Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 12/29

Poisto listan alusta pois plista x plista = pois.next; pois x plista Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 13/29

Poisto listan keskeltä pj pois plista x pj.next = pois.next; pj pois plista x Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 14/29

Alkutietueen käyttö Alkutietue: Listan alussa oleva alkio, joka ei ole listan varsinainen alkio Samaa tyyppiä kuin listan muut alkiot Voi sisältää listan alkioiden yhteistä tietoa Tyhjässä listassa vain alkutietue Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 15/29

Alkutietueen käyttö Alkutietue: Yksinkertaistaa joitain listaoperaatioita Ensimmäisen alkion käsittely ei eroa muiden alkioiden käsittelystä Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 16/29

Alkutietue: Poisto listan alusta Samalla tavalla kuin muidenkin alkioiden poisto: pj pois plista x pj.next = pois.next; pj pois plista x Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 17/29

Rengaslista Rengaslista: Viimeisen alkion seuraajaosoitin osoittaa listan ensimmäiseen alkioon Rengas on käyty läpi, kun tullaan takaisin samaan alkioon kuin mistä lähdettiin (ei null-osoitinta lopussa) Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 18/29

Rengaslista Listaosoitin voi olla myös osoitin viimeiseen alkioon: Lisäys sekä alkuun että loppuun olisi helppoa (ei tarvita koko listan läpikäyntiä) Ensimmäisen alkion poistaminen olisi helppoa Sen sijaan viimeisen alkion poistaminen vaatisi edelleen koko listan läpikäynnin Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 19/29

Kaksoislinkitetty lista Seuraajan lisäksi jokaisessa alkiossa osoitin edeltävään alkioon listassa, esimerkiksi prev Ensimmäisellä alkiolla ei edeltäjää, osoittimella vakioarvo null Lisäys ja poisto mielivaltaiseen paikkaan voidaan tehdä ilman että täytyy erikseen hakea naapurialkioita Listan päät kuitenkin käsiteltävä erikoistapauksina Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 20/29

Lisäys kaksoislinkitettyyn listaan uusi seur uusi.prev = seur.prev; uusi.next = seur; seur.prev.next = uusi; seur.prev = uusi; uusi seur Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 21/29

Kaksoislinkitetty rengas alkutietueella Listan päät eivät erikoistapauksia Tyhjä lista: Alkutietue, osoittimet itseensä Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 22/29

Puurakenteet Hierarkkinen tieto: edeltäjä seuraaja, vanhempi jälkeläinen, johtaja alainen, ylempi alempi, kokonainen osa Voidaan esittää puumuotoisella tietorakenteella Kaikkien alkioiden välillä yksikäsitteinen suhde Rakenteessa ei silmukoita Puu, jossa alkiolla korkeintaan kaksi alialkiota Binääripuu Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 23/29

Binääripuu Binääripuu muodostuu äärellisestä joukosta solmuja Binääripuu voi olla tyhjä Epätyhjässä binääripuussa on juurisolmu, vasen alipuu ja oikea alipuu Alipuut ovat myös binääripuita Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 24/29

Binääripuu vasemman alipuun juurisolmu puun juurisolmu oikean alipuun juurisolmu 7 7 Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 25/29

Rakenteellinen järjestys Solmujen järjestys rakenteen perusteella: Käytetään merkintää Jos solmu a on solmun b vasemmassa alipuussa, niin a b Jos solmu a on solmun b oikeassa alipuussa, niin b a Jos a on solmun c vasemmassa alipuussa ja b on solmun c oikeassa alipuussa eli a c b niin a b Aina joko a b tai b a, ei yhtäsuuruutta Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 26/29

Järjestetty binääripuu 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 Binääripuu järjestetty, jos kaikilla solmupareilla a ja b on voimassa a b a b Binäärinen etsintäpuu, binäärinen hakupuu Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 27/29

Järjestetty binääripuu Solmun c epätyhjässä vasemmassa alipuussa olevat solmut alipuun juurisolmu c Solmun c epätyhjässä oikeassa alipuussa olevat solmut alipuun juurisolmu c Solmun c vasemmassa alipuussa olevat solmut solmun c oikeassa alipuussa olevat solmut Yhtäsuurien solmujen keskinäinen rakenteellinen järjestys ei yksikäsitteinen Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 28/29

Järjestetty binääripuu f b g 7 7 a d c e i h Jatkossa kaikki binääripuut järjestettyjä (ellei toisin mainita) Algoritmit 1 Kevät 2017 Luento 6 Ke 25.1.2017 29/29