Algoritmit 1. Luento 4 Ke Timo Männikkö

Samankaltaiset tiedostot
Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Algoritmit 1. Demot Timo Männikkö

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

Tieto- ja tallennusrakenteet

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit ja tietorakenteet / HL Copyright Hannu Laine

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 14 Ke Timo Männikkö

2. Perustietorakenteet

TIETORAKENTEET JA ALGORITMIT

Algoritmit 1. Luento 10 Ke Timo Männikkö

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

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö

Tietorakenteet, laskuharjoitus 3, ratkaisuja

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

Tietorakenteet ja algoritmit

18. Abstraktit tietotyypit 18.1

Algoritmit 1. Luento 7 Ti Timo Männikkö

Tietorakenteet ja algoritmit

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

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

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

Algoritmit 1. Luento 12 Ke Timo Männikkö

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

Rakenteiset tietotyypit Moniulotteiset taulukot

Algoritmit 1. Luento 12 Ti Timo Männikkö

Tarkennamme geneeristä painamiskorotusalgoritmia

Aikavaativuuden perussäännöt

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

(p j b (i, j) + p i b (j, i)) (p j b (i, j) + p i (1 b (i, j)) p i. tähän. Palaamme sanakirjaongelmaan vielä tasoitetun analyysin yhteydessä.

Ohjelmoinnin perusteet Y Python

Abstraktit tietotyypit. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Algoritmit 1 Syksy 2008

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

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

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

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

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

Algoritmit 2. Luento 10 To Timo Männikkö

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

Algoritmit 2. Luento 9 Ti Timo Männikkö

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin

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

Ohjelmoinnin peruskurssien laaja oppimäärä

4. Perustietorakenteet: pino, jono ja lista

Algoritmit 2. Luento 13 Ti Timo Männikkö

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

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Algoritmit 1. Luento 1 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

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

Algoritmit 2. Luento 8 To Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Luento 5: YKSINKERTAINEN SEGMENTOINTI JA SIVUTUS

Algoritmit 1. Luento 11 Ti Timo Männikkö

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit 1. Luento 2 Ke Timo Männikkö

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Algoritmit 1. Luento 13 Ti Timo Männikkö

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

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

Algoritmit 1. Luento 13 Ma Timo Männikkö

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

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

STL:n uudistukset. Seppo Koivisto TTY Ohjelmistotekniikka

4. Joukkojen käsittely

Ohjelmoinnin perusteet Y Python

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

Algoritmit 2. Luento 9 Ti Timo Männikkö

ltöä (Luennot 5&6) Luento 5: YKSINKERTAINEN SEGMENTOINTI JA SIVUTUS Pikakertaus: : a) b) c) Dyn.. part.: sijoitus Kuva Buddy System: esimerkki

Numeeriset menetelmät

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 - syksy

Harjoitustyö: virtuaalikone

Algoritmit 2. Demot Timo Männikkö

Ohjelmoinnin peruskurssien laaja oppimäärä

13. Loogiset operaatiot 13.1

Lyhyt kertaus osoittimista

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten

Ohjelmoinnin perusteet Y Python

4.3. Matemaattinen induktio

Transkriptio:

Algoritmit 1 Luento 4 Ke 18.1.2017 Timo Männikkö

Luento 4 Tietorakenteet Pino Pinon toteutus Jono Jonon toteutus Lista Listaoperaatiot Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 2/29

Pino Pino, stack, Last-In-First-Out, LIFO Perusoperaatiot: push: Alkion lisäys pinon päällimmäiseksi pop: Alkion palautus ja poisto pinon päältä Muita mahdollisia operaatioita: isempty: Testaa onko pino tyhjä size: Palauttaa pinon alkioiden lukumäärän top: Palauttaa pinon päällimmäisen alkion ilman että se poistetaan pinosta Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 3/29

Pinon toteutus Useissa ohjelmointikielissä valmis pinotallennusrakenne Suhteellisen helppo toteuttaa itse: Taulukko Dynaaminen muisti (linkitetty lista) Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 4/29

Pinon toteutus taulukolla 0 1 2... n-1... PMAX-1 x x x x x Taulukko p, jonka koko PMAX Pinon alkioiden lukumäärä n Pinon päällimmäinen alkio p[n-1] Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 5/29

Pinon toteutus taulukolla push: pop: Varmistetaan, että n < PMAX p[n] = alkio n = n+1 Varmistetaan, että n > 0 n = n-1 alkio = p[n] Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 6/29

Pinon toteutus taulukolla + Yksinkertainen Pinon maksimikoko tiedettävä etukäteen Joko varataan tilaa reilusti Tai taulukon täytyttyä kopioidaan isompaan taulukkoon Kaksi pinoa voidaan tallentaa samaan taulukkoon: Pinot alusta loppuun ja lopusta alkuun Vapaa tila taulukon keskellä Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 7/29

Pinon toteutus dynaamisesti Linkitettynä listana: x x x x Linkitys pinon huipulta kohti pohjaa Osoitin pinon päällimmäiseen alkioon Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 8/29

Pinon toteutus Molemmat toteutustavat tehokkaita Pino-operaatiot aikavaativuudeltaan O(1) Paitsi: Jos kaikki alkiot joudutaan kopioimaan Silloin aikavaativuus on O(n) Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 9/29

Esimerkki Aritmeettiset lausekkeet: Vakioita, muuttujasymboleja Binäärisiä operaattoreita +, -, *, / Infix-merkintätapa: Operaattori operandien välissä (a + b)*c + d Tarvitaan säännöt laskujärjestykselle Tarvitaan sulkuja Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 10/29

Esimerkki jatkuu Prefix-merkintätapa: Ensin operaattori, sitten operandit + * + a b c d Ei tarvita sulkuja Postfix-merkintätapa: Ensin operandit, sitten operaattori a b + c * d + Ei tarvita sulkuja Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 11/29

Esimerkki jatkuu Postfix-merkintätavalla esitetyn aritmeettisen lausekkeen arvon laskeminen Operaatiota suoritettaessa tarvitaan kaksi edeltävää operandia Pino sopii hyvin Oletetaan, että lauseke on oikeaa muotoa Käsiteltävä alkio operandi Laitetaan se pinoon Käsiteltävä alkio operaattori Poistetaan pinosta kaksi päällimmäistä alkiota, suoritetaan operaatio, laitetaan tulos pinoon Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 12/29

Esimerkki jatkuu alustetaan pino tyhjäksi while (alkioita lausekkeessa jäljellä) { alkio = seuraava alkio lausekkeesta if (alkio on operandi) push(pino, alkio) else { // alkio on operaattori b = pop(pino) a = pop(pino) push(pino, a alkio b) // tulos pinoon } } tulosta pop(pino) // lopputulos pinon päältä Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 13/29

Esimerkki jatkuu Lausekkeessa n alkiota Lauseke käydään läpi alkio kerrallaan Pinon operaatiot vakioaikaisia Jokaisen alkion kohdalla suoritetaan vakiomäärä vakioaikaisia toimenpiteitä Aikavaativuus O(n) Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 14/29

Jono Jono, queue, First-In-First-Out, FIFO Perusoperaatiot: enqueue: Alkion lisäys viimeiseksi dequeue: Alkion palautus ja poisto alusta Muita mahdollisia operaatioita: isempty: Testaa onko jono tyhjä size: Palauttaa jonon alkioiden lukumäärän front: Palauttaa jonon ensimmäisen alkion ilman että se poistetaan jonosta Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 15/29

Esimerkki A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 16/29

Jonon käyttökohteita Vuoroaan odottavien tehtävien jono moniajokäyttöjärjestelmissä I/O-komentojen jono käyttöjärjestelmän levypalvelimessa Tapahtumajonot (hiiren ja näppäimistön painallukset) graafisten käyttöliittymien ohjausohjelmistoissa Todellisten jonojen mallintaminen simulointiohjelmistoissa Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 17/29

Jonon toteutus Useissa ohjelmointikielissä valmis jonotallennusrakenne Suhteellisen helppo toteuttaa itse: Taulukko Dynaaminen muisti (linkitetty lista) Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 18/29

Jonon toteutus taulukolla 0 1 2... n-1... QMAX-1 x x x x x Taulukko q, jonka koko QMAX Jonon alkioiden lukumäärä n Jonon ensimmäinen alkio q[0] Jonon viimeinen alkio q[n-1] Mutta: Alkion poisto vaatisi kaikkien alkioiden siirtämistä kohti taulukon alkupäätä Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 19/29

Jonon toteutus taulukolla b f x x x x x Parempi toteutus: Kiertävä taulukko Ensimmäisen alkion indeksi f Viimeistä alkiota seuraavan paikan indeksi b Jonossa enintään QMAX-1 alkiota Kun paikka QMAX-1 täyttynyt, seuraava alkio paikkaan 0 Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 20/29

Jonon toteutus taulukolla Jono tyhjä, kun f = b Jono täysi, kun joko f = 0 ja b = QMAX-1 : f b x x x x x x tai kun f > 0 ja f-b = 1 : b f x x x x x x Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 21/29

Jonon toteutus taulukolla enqueue: Varmistetaan, että jono ei ole täysi q[b] = alkio Jos b < QMAX-1, niin b = b+1, muuten b = 0 dequeue: Varmistetaan, että jono ei ole tyhjä alkio = q[f] Jos f < QMAX-1, niin f = f+1, muuten f = 0 Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 22/29

Jonon toteutus Taulukkona: Jonon maksimikoko tiedettävä etukäteen Dynaamisesti linkitettynä listana: Linkitys jonon ensimmäisestä alkiosta kohti viimeistä alkiota Osoittimet jonon ensimmäiseen ja viimeiseen alkioon Molemmissa toteutustavoissa jono-operaatiot aikavaativuudeltaan O(1) Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 23/29

Lista Lista l koostuu joukosta samantyyppisiä alkioita (tietueita) Tyhjässä listassa ei ole yhtään alkiota Epätyhjässä listassa on ensimmäinen alkio first(l) ja viimeinen alkio last(l) Jos listassa on vain yksi alkio, niin first(l)=last(l) Ensimmäinen ja mahdollisesti viimeinen alkio ovat välittömästi käytettävissä Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 24/29

Lista jatkuu Listan alkiot muodostavat täydellisesti järjestetyn joukon: 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) Jokaiselle alkiolle voidaan antaa järjestysnumero: Alkion first(l) järjestysnumero 0 (tai 1) Jos alkion a järjestysnumero on i, niin alkiolla succ(a) se on i+1 ja alkiolla pred(a) se on i-1 (jos alkiot olemassa) Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 25/29

Listaoperaatiot Listan kulku eteenpäin: Siirrytään alkiosta a alkioon succ(a) (paitsi jos a viimeinen) Listan kulku taaksepäin: Siirrytään alkiosta a alkioon pred(a) (paitsi jos a ensimmäinen) Alkion lisäys listaan: Lisäys ensimmäiseksi tai viimeiseksi yleensä erikoistapauksena Alkion poisto listasta: Ensimmäisen tai viimeisen poisto yleensä erikoistapauksena Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 26/29

Listaoperaatiot jatkuu Alkion käyttö (saanti, access): Alkion tietoja käytetään tai muutetaan Alkio löytyy kulkemalla listaa eteenpäin tai taaksepäin Alkiota ei poisteta listasta Ensimmäisen ja viimeisen alkion saannit erikoistapauksina Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 27/29

Listaoperaatiot jatkuu Listan läpikäynti etenevästi: Suoritetaan jotkin toimenpiteet alkioille järjestyksessä alusta loppuun Alkion a = first(l) saanti Suoritetaan toimenpiteet alkiolle a Seuraavan alkion succ(a) saanti Suoritetaan toimenpiteet alkiolle a Näin jatketaan kunnes viimeinenkin alkio last(l) käsitelty Listan läpikäynti takenevasti: Vastaavasti, lopusta alkuun Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 28/29

Listaoperaatiot jatkuu Listojen yhdistäminen: Listojen l 1 ja l 2 alkiot viedään listaan l 3 Listojen katenointi: Lista l 2 liitetään listan l 1 perään (erikoistapaus yhdistämisestä) Muita operaatioita: Listan perustaminen ja alustaminen tyhjäksi, listan tyhjennys, muistitilan varaaminen listalle, muistitilan vapauttaminen Huom: Pino ja jono erikoistapauksia listasta Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 29/29