Algoritmit ja tietorakenteet / HL Copyright Hannu Laine
|
|
- Mari Hovinen
- 7 vuotta sitten
- Katselukertoja:
Transkriptio
1 1 Pino ja jono Yleistä Pino Pino ja jono ovat abstrakteja tietotyyppejä, joilla on yleistä käyttöä. Pino ja jono ovat listan erikoistapauksia. Kummassakin tapauksessa erona on se, että tietotyypin operaatiofunktioita on rajoitettu. Pino ja jono ovat lineaarisen listan erikoistapauksia, joissa vain osa listan operaatioista on sallittuja. Määritelmä. Pino on järjestettyjen alkioiden kokoelma, jossa lisäykset tapahtuvat aina loppuun ja samoin alkion otto on mahdollista vain lopusta. Tässä tapauksessa loppua kutsutaan pinon huipuksi (top). Pinon tapauksessa alkioiden järjestyksen määrää syöttöjärjestys. Pinon operaatiot ovat: initialize (alustaa pinon) push (vie alkion pinon päälle) pop (ottaa alkion pinon päältä) is_empty (testaa, onko pino tyhjä) Pinon sovelluksia. Pinoa voidaan käyttää mitä erilaisimpien probleemoiden ratkaisuissa. Periaatteessa pino on tietoalkioiden säiliö, josta saadaan tiedot ulos käännetyssä järjestyksessä siihen nähden kuin ne on säiliöön viety. Voidaan myös sanoa, että pinoon viimeksi viety alkio saadaan ulos ensimmäiseksi. Siksi pinoa kutsutaan LIFO:ksi (Last In First Out list). Yhtä hyvin voidaan sanoa, että pinoon ensiksi viety alkio saadaan ulos viimeiseksi (First In Last Out : FILO). Yksinkertaisimmillaan pinoa voidaan käyttää tiedon järjestyksen kääntämiseen. Jos esimerkiksi pitää kääntää merkkijonon merkit päinvastaiseen järjestykseen, se voidaan tehdä siten, että viedään kaikki merkkijonon merkit ensimmäisestä alkaen ensin merkkien pinoon. Sen jälkeen ne otetaan pois pinosta ja viedään takaisin alkuperäiseen merkkijonoon taas ensimmäisestä alkaen. Jos olisi kirjoitettava ohjelma, joka selvittää, onko syötetty merkkijono palindromi vai ei, se voitaisiin tehdä siististi käyttämällä kolmea merkkipinoa. Tutkittavan merkkijonon merkit vietäisiin ensin kahteen merkkipinoon, merkkipinoon 1 ja 2. Sen jälkeen siirrettäisiin kaikki merkit pinosta 2 pinoon 3. Alkuperäinen merkkijono on palindromi, jos pinosta 1 ja pinosta 3 tasatahtiin otettavat merkit ovat loppuun saakka (kunnes pinot tyhjenevät) samoja. Kun monista osista rakentuva laite puretaan, saattaa olla vaikeuksia koota laite uudelleen. Asiaa helpottaa, jos laaditaan ohjelma, joka käyttää pinoa. Kun laite puretaan, syötetään ohjelmalle aina irrotettavan osan tunnus, nimi tai koodi. Ohjelma vie osan tiedot pinoon. Kun laitetta kootaan, ohjelmalta kysytään, mikä osa asennetaan seuraavaksi. Ohjelma ottaa osan koodin pinosta. Näin tulee varmistettua, että osat kootaan päinvastaisessa järjestyksessä kuin ne on purettu. Postfix-muodossa olevan laskulausekkeen laskemisessa käytetään hyväksi pinoa. RPNlaskimissa käytetään tällaista merkintätapaa. Silloin esimerkiksi laskulauseke (2+3)/5 merkitään /. Postix-muodossa olevan lausekkeen tulkinta on koneellisesti paljon helpompi kuin infix-muodossa olevan lausekkeen tulkinta. Kysymys on siitä, että postfixmerkintäisen lausekkeen laskennassa voidaan aina edetä selkeästi vasemmalta oikealle ja
2 2 päätös tehtävästä toimenpiteestä voidaan tehdä välittömästi sen perusteella, mitä lausekkeesta on juuri löytynyt. Lausekkeen laskenta perustuu seuraaviin yksinkertaisiin sääntöihin: 1. Jos lausekkeesta löytyy operandi, se viedään pinoon. 2. Jos lausekkeesta löytyy operaattori, pinosta otetaan kaksi operandia, niille tehdään operaattorin mukainen operaatio ja tulos viedään pinoon. Kun koko lauseke on käyty läpi, pinossa on lausekkeen lopputulos. Sellaisen ohjelman kirjoittaminen, joka laskee infix-muotoisen aritmeettisen lausekkeen, joka voi sisältää myös ennalta määräämättömän määrän sulkumerkkejä, ei ole aivan yksinkertainen juttu. Näin siinä tapauksessa, jos ei ole tietoa pinon soveltamismahdollisuudesta (eikä rekursiosta). Edellä todettiin, että postix-merkintäisen lausekkeen laskenta puolestaan on hyvin suoraviivaista. Siksi yksinkertaisin menettely infix-merkintäisen lausekkeen laskemiseksi onkin kaksivaiheinen: 1. Muunnetaan infix-merkintäinen lauseke ensin postfix-merkintäiseksi. 2. Lasketaan sitten saatu postfix-merkintäinen lauseke. Edellä todettiin, että postfix-merkintäisen lausekkeen laskemisessa tarvittiin operandien pinoa. Infix-merkintäisen lausekkeen muuntamisessa postfix-merkintäiseksi tarvitaan puolestaan operaattorien pinoa. Tässä prosessissa käydään infix-merkintäistä lauseketta läpi vasemmalta oikealle seuraavan logiikan mukaan: 1. Jos infix-lausekkeesta löytyy operandi, se viedään suoraan posfixlausekkeen perään. 2. Jos infix-lausekkeesta löytyy operaattori, se viedään operaattorien pinoon. Sitä ennen kuitenkin pinosta otetaan pois kaikki sellaiset operaattorit, jotka ovat vahvempia tai yhtä vahvoja kuin tämä infix-lausekkeesta nyt löytynyt. Kaikki pinosta otetut operaattorit viedään postfix-lausekkeen loppuun. 3. Lopuksi pinosta otetaan pois kaikki operaattorit ja ne viedään postfixlausekkeen loppuun. Huomautus. Myös sulkumerkkejä voidaan pitää operaattoreina ja niille voidaan antaa asianmukaiset vahvuudet. Pinorakennetta käytetään tietokoneissa hyväksi esimerkiksi parametrien ja paikallisten muuttujien tilanvarauksessa funktioiden yhteydessä. Tällä saavutetaan etu, että funktio voi kutsua edelleen seuraavaa funktiota ja se taas seuraavaa jne. Kun funktiokutsusta palataan, kutsunut funktio saa taas käyttöönsä oman data-alueensa pinossa, sillä kutsutun funktion dataalue poistetaan pinon päältä. Parametrien ja paikallisten muuttujien varaaminen pinosta tekee mahdolliseksi myös rekursiivisten funktioiden laatimisen (näihin palataan myöhemmin). Pinon avulla on helposti toteutettavissa myös yksinkertainen rivieditori, jossa rivin lopusta voidaan poistaa merkkejä Backspace-painikkeella. Merkin syöttö tarkoittaa push-operaatiota, ja Backspace-painikkeen painallus pop-operaatiota. Myös ikkunoitu valikkojärjestelmä, jossa valikosta voidaan valita alavalikko, siitä edelleen alavalikon alavalikko jne, voidaan toteuttaa valikoiden pinona. Tällöin valikoista päästään kätevästi takaisin samaa reittiä alkuvalikkoon. Pinon taulukkototeutus 1: Listan taulukkototeutuksen yhteydessä mainittiin eräänä haittapuolena, että alkioiden lisäys ja poisto edellytti tietojen siirtoa taulukossa. Kun pinon tapauksessa alkioiden järjestys määräytyy aina syöttöjärjestyksestä, ja kun otto voi tapahtua vain lopusta, ei tällaista haittatekijää ole. Siksi taulukkototeutus pinolle on erittäin kätevä varsinkin silloin, kun pinon maksimikoko on etukäteen tiedossa.
3 3 Liitteenä on C-kielinen toteutus pinosta. Siinä pääohjelma, jolla pinoa voidaan testata, on sellainen, että se lukee näppäimistöltä merkin. Jos merkki on kirjain, ohjelma vien merkin pinoon. Jos syötetty merkki on 1, niin ohjelma ottaa merkin pinosta ja tulostaa sen näyttöön. Testauksen ja kokeilun selkiyttämiseksi pinolle on tehty myös ylimääräinen operaatio print, joka tulostaa ruutuun koko pinon sisällön. Vaikka esimerkkitoteutus on merkkipino, on huomattava, että toteutus on täysin riippumaton pinottavien alkioiden tyypistä. Muutos saadaan aikaan määrittelemällä tietotyyppi Titem uudelleen (poikkeuksena on print-funktio, jossa oletetaan, että alkion tyyppi on merkki). Myös pääohjelma olisi mahdollista saada riippumattomaksi pinottavien alkioiden tyypistä, jos siinä sovellettaisiin abstraktiota pinottaviin alkioihin. Tämä tarkoittaisi että, pinottavat alkiot tulisi toteuttaa abstrakteina tietotyyppeinä, joilla on omat operaatiofunktiot lue_alkio ja tulosta_alkio. Taulukkototeutuksen ideana on, että pinoon vietävät alkiot talletetaan taulukkoon. Pinon huippu (kenttä top) ilmoittaa aina sen paikan taulukossa, jossa sijaitsee viimeksi pinoon viety alkio. Huipun arvo -1 merkitsee tyhjää pinoa. Pinon tallennusrakenne on silloin seuraavan kuvan mukainen. Tstack array top Abstraktin tietotyypin käyttö on toteutuksesta riippumaton Seuraavassa demonstroidaan, että abstraktin tietotyypin käyttö on riippumaton abstraktin tietotyypin sisäisestä toteutuksesta niin kauan, kuin tietotyypin liityntärajapinta (tietotyypin nimi ja operaatiofunktioiden prototyypit) pysyvät muuttumattomina. Liitteenä on myös pinon taulukkototeutus 2. Siinä taulukon alkioihin viitataan osoittimilla, eikä indeksillä niin kuin taulukkototeutuksessa 1 tehtiin. Listauksesta nähdään, että tietotyypin Tstack määrittely on nyt erilainen ja tämän seurauksena myös operaatiofunktioiden toteutukset ovat erilaisia kuin taulukkototeutuksessa 1. Siitä huolimatta sovellus (pääohjelma) on täsmälleen sama kuin taulukkototeutuksessa 1. Sovellukseen on siis vaihdettu uusi komponentti (pino) siten, että sovelluksessa ei ole tarvinnut tehdä mitään muutosta. Sovellus on vain käännetty uudelleen ja siihen on linkattu uusi pino. Tässä ratkaisussa käytetty pinon tietojen tallennusrakenne on seuraavan kuvan mukainen. Ajatuksena on, että osoitin top sisältää pinon päällimmäisen alkion osoitteen taulukossa (NULL edustaa tyhjää pinoa). Osoitin minpointer osoittaa aina taulukon ensimmäistä alkiota ja maxpointer sen viimeistä alkiota. Näitä käytetään taulukon ylivuodon estämiseen ja sen tilanteen tunnistamiseen, kun pinosta otettiin viimeinen alkio.
4 4 Tstack array top maxpointer minpointer Taulukkototeutus 2 on tehokkaampi kuin taulukkototeutus 1, koska nyt tietojen hakemiseen ja viemiseen taulukkoon ei käytetä indeksointia, joka käännetyssä koodissa merkitsee kertolaskun suoritusta. Taulukkototeutuksessa 2 lisäyksessä ja poistossa on vain osoittimen kasvatus tai vähennys alkion koolla eli niissä ei tarvita kertolaskua. Näissä molemmissa taulukkototeutuksissa on ongelmana taulukon kiinteä koko. Taulukon koko määräytyy jo käännösaikana ja sitä ei voida kasvattaa ajon aikana. Tämä ongelma voidaan korjata siirtymällä dynaamisen taulukon käyttöön. Yksinkertaisimmillaan asia voitaisiin toteuttaa siten, että funktiossa initialize_stack annettaisiin parametrina alkioiden maksimimäärä ja samassa funktiossa varattaisiin taulukko, johon mahtuu tämä määrä alkioita. Tällaisessa ratkaisussa pinotietueessa tulee säilyttää myös taulukon koko, jotta pushoperaatiossa voidaan testata, vieläkö pinoon mahtuu alkioita. Tämä olisi kuitenkin vain pieni askel parempaan. Siitä seuraisi myös, etä pinon interface olisi nyt erilainen alustusoperaation kohdalla. Tässä ratkaisussa alustusoperaatiolla olisi int-tyyppinen parametri, kun sillä aikaisemmin ei ollut parametriä. Tämän takia pinoa käyttävien sovellusten alustusfunktion kutsu olisi muutettava uuteen muotoon C-kieltä käytettäessä. Tämä on vakava puute, jos puhutaan komponenttiajattelusta ja komponenttien vaihtokelpoisuudesta. C++-kieltä käytettäessä ei tässä tapauksessa tarvitsisi muuttaa pinoa käyttäviä sovelluksia. Tämä johtuu funktioiden ylikuormitusmahdollisuudesta. Uudessa pinon toteutuksessa voitaisiin säilyttää myös vanha operaatiofunktio alustukseen, jossa parametriä ei ole. Tämän funktion sisällä käytettäisiin taulukon kokona sopivaa oletusarvoa. Huomautus 1. Myös C++:n mahdollisuus antaa parametreille oletusarvo, tarjoaisi saman mahdollisuuden. Dynaamisen taulukon avulla voidaan toteuttaa myös automaattisesti tarvittaessa kasvava pino. Silloin ei kannata antaa alkukokoa parametrina, vaan varataan joku kiinteä koko aluksi. Kun tämä tila on käytetty voidaan varata uusi isompi taulukko. Kaikki jo tallennetut tiedot siirretään silloin vanhasta taulukosta uuteen ja alkuperäinen taulukko vapautetaan. Näin saadaan taas uuden alkion lisääminen onnistumaan. Kaikki tämä logiikka voidaan tehdä pushoperaatiossa, jolloin käyttäjän ei tarvitse huolehtia siitä. Käyttäjän kannalta uusi piirre näkyy vain siinä, että push-operaatio onnistuu aina, koska tila ei lopu kesken. Perusideana on silloin,
5 5 että jos push-operaatiossa todetaan, että taulukossa ei ole enää tilaa uudelle alkiolle, tehdään seuraavat asiat: 1. Varataan uusi suurempi taulukko 2. Siirretään tiedot vanhasta taulukosta uuteen 3. Vapautetaan vanha taulukko 4. Päivitetään pinotietueen kentät siten, että ne vastaavat uutta tilannetta Dynaamista taulukkoa käytettäessä pinon rakenne näyttää seuraavalta: Tstack array top size Tämä vastaa taulukkototeutusta 1 dynaamisella taulukolla. Voitaisiin myös nyt käyttää vain osoittimia taulukkoon alkioita vietäessä ja sieltä haettaessa, jolloin saataisiin dynaamisella taulukolla toteutettu vastine taulukkototeutukselle 2. Molemmissa näissä ratkaisumalleissa siis alkioiden määrällä ei ole periaatteessa ylärajaa, koska dynaamisesta muistista voidaan varata suurempi taulukko aina tarvittaessa niin kauan kuin koneessa riittää muistia. Hintana sille, että alkioiden määrälle ei ole ylärajaa on se, että tietoja joudutaan siirtämään paikasta toiseen tilan kasvatuksen yhteydessä.. Tämän takia kannattaakin yleensä tilan lisäyksen yhteydessä varata sitä, enemmän kuin yhdelle alkiolle kerrallaan. Myöhemmin palaamme vielä yhteen ratkaisumalliin, jossa tästä tietojen siirtohinnasta päästään eroon. Sellainen ratkaisu saadaan aikaan käyttämällä dynaamisesti linkattua dynaamisesti varattu listaa tallennusrakenteena. Jono Määritelmä. Jono on järjestettyjen alkioiden kokoelma, jossa lisäykset tapahtuvat aina loppuun ja jossa alkio voidaan ottaa vain listan alusta. Lisäksi jonossa alkioiden järjestyksen määrää syöttöjärjestys. Jonon operaatiot ovat: initialize (alustaa jonon) enqueue (vie alkion jonon loppuun) dequeue (ottaa alkion jonon alusta) is_empty (testaa, onko jono tyhjä) Jonon sovelluksia. Myös jonoa voidaan käyttää monien erilaisten probleemoiden ratkaisuissa. Jono on tietoalkioiden säiliö, josta tiedot saadaan ulos siinä järjestyksessä kuin ne on sinne viety. Jono siis ikään kuin säilyttää alkioiden järjestyksen. Voidaan myös sanoa, että jonoon ensiksi viety alkio saadaan ulos ensimmäisenä. Siksi jono kutsutaan myös
6 6 FIFOksi (First In First Out: FIFO). Yhtä hyvin voidaan sanoa, että jonoon viimeksi viety alkio saadaan jonosta viimeisenä (LILO Last In Last Out). Yksinkertaisimmillaan jonoa voidaan käyttää tiedon säilyttämiseen siten, että ne pääsevät myöhemmin käsittelyyn siinä järjestyksessä kun ovat tulleet sisään. Pinon sovelluksena mainittiin, että palindromi-probleema voidaan ratkaista käyttämällä kolme pinoa. Palindromi-probleema voidaan ratkaista kätevästi myös käyttämällä yhtä pinoa ja yhtä jonoa. Tutkittavan merkkijonon merkit viedään pinoon ja jonoon. Sitten ruvetaan ottamaan merkkejä rinnakkain molemmista. Jos molemmista tulee loppuun saakka samoja merkkejä, alkuperäinen merkkijono on palindromi, koska pinosta merkit tulevat käänteisessä järjestyksessä ja jonosta alkuperäisessä järjestyksessä Abstraktia tietotyyppiä jono voidaan käyttää myös erilaisten odotusjonojen simulointiohjelmissa (esimerkiksi pankin palvelupisteiden odotusjonojen simulointi). Usean käyttäjän tietokoneiden käyttöjärjestelmissä käytetään jonoja kaikille yhteisten palvelujen tarjoamisessa (tulostusjonot, suoritusvuoroa odottavat taskit, i/o-pyynnöt levylle jne.). Myös puskureiksi kutsutut tietorakenteet ovat oikeastaan jonoja. Esimerkiksi BIOSnäppäimistöpuskuri on selkeästi jonorakenne, joka on toteutettu samantapaisella periaatteella kuin seuraavassa kuvattava jonon taulukkototeutus. Jonon taulukkototeutus 1: Taulukkototeutus sopii melko hyvin myös jonolle, koska siinäkin lisäykset tehdään aina listan loppuun. Se, että ottaminen tapahtuu aina listan alusta, johtaa kyllä tietojen siirtotarpeeseen, jos halutaan, että jonon ensimmäinen alkio on aina taulukon ensimmäisessä alkiossa. Tällöin jonoon jäljelle jääviä tietoja joudutaan siirtämään aina askel eteenpäin taulukossa. Tämä on kylläkin havainnollista, koska se vastaa esimerkiksi oikeaa henkilöiden jonoa, jossa ihmiset siirtyvät askeleen eteenpäin, kun yhtä asiakasta on palveltu jonon alusta. Yksinkertaisimmillaan tällainen ratkaisu saadaan aikaan määrittelemällä tietotyyppi Tqueue seuraavalla tavalla #define SIZE 100 typedef struct { Titem array[size]; int n; // alkioiden määrä jonossa }; Tästä voitaisiin kehittää dynaamista taulukkoa käyttävä versio, jossa alkioiden lukumäärällä ei olisi ylärajaa. Silloin tietueen määritelmä olisi kuten alla: typedef struct { Titem *array;; int n; // alkioiden määrä jonossa int size; // taulukon tämänhetkinen koko }; Tässä versiossa tietoa siirrettäisiin paikasta toiseen, jokaisessa otto-operaatiossa ja silloin kun tilaa kasvatettaisiin. Jonon taulukkototeutus 2: Yllämainituissa toteutuksissa tietoa siis siirretään aina jonosta otettaessa. Tästä päästään eroon, kun sallitaan, että jonon alku voi olla missä kohtaa taulukkoa tahansa, ja että jono voi jatkua taulukon lopusta taulukon alkuun. Tällaista jonon toteutusta sanotaan renkaaksi. Siinä pidetään kirjaa missä kohtaa taulukossa on jonon alku ja
7 7 missä kohtaa loppu. Ratkaisu yksinkertaistuu, jos pidetään erikseen kirjaa myös jonossa kulloinkin olevien alkioiden määrästä. Liitteenä on C-kielinen toteutus jonosta. Siinä pääohjelma, jolla jonoa voidaan testata, on samantapainen kuin pinon testausohjelma. Se siis lukee näppäimistöltä merkin. Jos merkki on kirjain, ohjelma vie merkin jonoon. Jos syötetty merkki on 1, niin ohjelma ottaa merkin jonosta ja tulostaa sen näyttöön. Testauksen ja kokeilun selkiyttämiseksi myös jonolle on tehty ylimääräinen operaatio print, joka tulostaa ruutuun koko jonon sisällön. Taulukkototeutuksen ideana on se, että jonoon vietävät alkiot talletetaan taulukkoon. Jonon tietokenttä last ilmoittaa aina sen paikan taulukossa, jossa sijaitsee viimeksi jonoon viety alkio. Arvo -1 merkitsee tyhjää jonoa. Tietokenttä first ilmoittaa jonon ensimmäisen alkion paikan taulukossa. Jonoon viemisen yhteydessä viedään aina kentän last ilmoittamaa paikkaa seuraavaan paikkaan. Jonosta otettaessa otetaan aina kentän first ilmoittamasta paikasta. Mikäli first tai last arvoa kasvatettaessa joudutaan taulukon ulkopuolelle, arvo asetetaan taulukon alkuun. Kenttä number_of_items ilmoittaa jonossa olevien alkioiden lukumäärän. Tqueue array first last number_of_items Myös tästä versiosta voidaan tehdä toteutus dynaamisella taulukolla, jossa siis ei ole ylärajaa alkioiden ylärajalle ja jossa tietoa ei siirretä otettaessa. Tietoa on kuitenkin edelleen siirrettävä taulukon tilaa kasvatettaessa. Myös jonosta tullaa vielä näkemään uusi versio, jossa tästäkin siirrosta päästään eroon dynaamisesti linkatulla aja varatulla listatoteutuksella. Abstrakti tietotyyppi toisen komponenttina Uusia abstrakteja tietotyyppejä voidaan rakentaa käyttäen hyväksi jo olemassa olevia tietotyyppejä. Esimerkkinä käsitellään prioriteettijono. Prioriteettijono on jono, jossa alkioihin liittyy prioriteetti. Kun alkio viedään jonoon, se viedään jonon loppuun, jos jonossa olevilla alkioilla on kaikilla sama tai korkeampi prioriteetti kuin uudella alkiolla. Uusi alkio viedään jonon alkuun, jos jonossa ei ole yhtään alkiota, jolla on korkeampi tai sama prioriteetti. Sääntönä on, että uusi alkio ohittaa jonossa kaikki sellaiset alkiot, joilla on matalampi prioriteetti kuin uudella. Prioriteettijono voidaan toteuttaa usealla eri tavalla. Tässä käsitellään toteutusta, jossa prioriteettijono rakennetaan erillisistä tavallista jonoista.
8 8 Esimerkissä prioriteetteja voi olla kolme (1, 2 ja 3). Toteutuksen ohjelmalistaus on liitteenä. Siinä käytetyn tietotyypin Tpriqueue rakenne selviää seuraavista määrittelyistä. typedef struct { Tqueue queue1; Tqueue queue2; Tqueue queue3; } Tpriqueue;
Tietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Pino Pinon määritelmä Pinon sovelluksia Järjestyksen kääntäminen Palindromiprobleema Postfix-lausekkeen laskenta Infix-lausekkeen muunto postfix-lausekkeeksi Sisäkkäiset funktiokutsut
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Merkintöjen tulkintoja *++Pstack->top = item *Pstack->top++ = item (*Pstack->top)++ *(Pstack++)->top = item *(++Pstack)->top = item Lisää pinon toteutuksia Dynaaminen taulukko
LisätiedotAlgoritmit 1. Luento 4 Ke Timo Männikkö
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,
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin
LisätiedotAlgoritmit 1. Luento 3 Ti Timo Männikkö
Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien
LisätiedotA274101 TIETORAKENTEET JA ALGORITMIT
A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Elegantti toteutus funktiolle insert_to_list_end Alkion lisäys sisällön mukaan järjestettyyn listaan (insert_to_list) Linkatun listan yleisyys alkiotyypin suhteen source-tasolla
LisätiedotPino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:
Pino (stack) Pino: viimeisenä sisään, ensimmäisenä ulos (LIFO, Last In, First Out) -tietorakenne kaksi perusoperaatiota: alkion lisäys pinon päälle (push), ja päällimmäisen alkion poisto (pop) Push(alkio)
LisätiedotTieto- ja tallennusrakenteet
Tieto- ja tallennusrakenteet Sisältö Tyyppi, abstrakti tietotyyppi, abstraktin tietotyypin toteutus Tallennusrakenteet Taulukko Linkitetty rakenne Abstraktit tietotyypit Lista (Puu) (Viimeisellä viikolla)
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Muuttujat eri muisteissa Ohjelman muistialueen layout Paikallisen ja globaalin muuttujan ominaisuudet Dynaamisen muistinkäytön edut Paikallisten muuttujien dynaamisuus ADT
LisätiedotAlgoritmit 2. Luento 2 To Timo Männikkö
Algoritmit 2 Luento 2 To 14.3.2019 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2019 Luento
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Kurssin sisältö pääpiirteittäin Tarvittavat pohjatiedot Avainsanat Abstraktio Esimerkkiohjelman tehtäväkuvaus Abstraktion käyttö tehtävässä Abstrakti tietotyyppi Hyötyjä ADT:n
LisätiedotAlgoritmit ja tietorakenteet / HL 1 Copyright Hannu Laine. Lista. Yleistä
Algoritmit ja tietorakenteet / HL 1 Lista Yleistä Lista, pino ja jono ovat abstrakteja tietotyyppejä, joilla on yleistä käyttöä. Niitä voidaan hyödyntää mitä erilaisimmissa probleemoissa ja sovelluksissa.
LisätiedotAlgoritmit 2. Luento 2 Ke Timo Männikkö
Algoritmit 2 Luento 2 Ke 15.3.2017 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2017 Luento
LisätiedotAlgoritmit 1. Demot Timo Männikkö
Algoritmit 1 Demot 2 1.-2.2.2017 Timo Männikkö Tehtävä 1 (a) Ei-rekursiivinen algoritmi: laskesumma(t, n) sum = t[0]; for (i = 1; i < n; i++) sum = sum + t[i]; return sum; Silmukka suoritetaan n 1 kertaa
LisätiedotRakenteiset tietotyypit Moniulotteiset taulukot
C! Rakenteiset tietotyypit Moniulotteiset taulukot 22.2.2018 Agenda Rakenteiset tietotyypit Vilkaisu 6. kierroksen tehtäviin Moniulotteiset taulukot Esimerkki Seuraava luento to 8.3. Ilmoittautuminen ohjelmointikokeeseen
Lisätiedot811312A Tietorakenteet ja algoritmit II Perustietorakenteet
811312A Tietorakenteet ja algoritmit 2017-2018 II Perustietorakenteet Sisältö 1. Johdanto 2. Pino 3. Jono 4. Lista 811312A TRA, Perustietorakenteet 2 II.1. Johdanto Tietorakenne on tapa, jolla algoritmi
LisätiedotTIETORAKENTEET JA ALGORITMIT
TIETORAKENTEET JA ALGORITMIT Timo Harju 1999-2004 1 typedef link List; /* Vaihtoehtoisia nimiä */ typedef link Stack; /* nodepointterille */ typedef link Queue typedef struct node Node; /* itse nodelle
LisätiedotAlgoritmit 2. Luento 3 Ti Timo Männikkö
Algoritmit 2 Luento 3 Ti 20.3.2018 Timo Männikkö Luento 3 Järjestäminen eli lajittelu Kekorakenne Kekolajittelu Hajautus Yhteentörmäysten käsittely Ketjutus Algoritmit 2 Kevät 2018 Luento 3 Ti 20.3.2018
Lisätiedot18. Abstraktit tietotyypit 18.1
18. Abstraktit tietotyypit 18.1 Sisällys Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:
Lisätiedot815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset
815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 6 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/
LisätiedotAlgoritmit 2. Luento 3 Ti Timo Männikkö
Algoritmit 2 Luento 3 Ti 21.3.2017 Timo Männikkö Luento 3 Järjestäminen eli lajittelu Kekorakenne Kekolajittelu Hajautus Yhteentörmäysten käsittely Ketjutus Algoritmit 2 Kevät 2017 Luento 3 Ti 21.3.2017
LisätiedotAlgoritmit 1. Luento 9 Ti Timo Männikkö
Algoritmit 1 Luento 9 Ti 7.2.2017 Timo Männikkö Luento 9 Graafit ja verkot Kaaritaulukko, bittimatriisi, pituusmatriisi Verkon lyhimmät polut Floydin menetelmä Lähtevien ja tulevien kaarien listat Forward
LisätiedotSisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto
Sisällys 18. bstraktit tietotyypit Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.1 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:
LisätiedotKaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen
Viimeksi käsiteltiin pino: lisäys ja poisto lopusta jono: lisäys loppuun, poisto alusta Pinon ja jonon yleistävä tietorakenne: kaksiloppuinen jono alkion lisäys/poisto voidaan kohdistaa jonon alkuun tai
LisätiedotAlgoritmit 1. Demot Timo Männikkö
Algoritmit 1 Demot 2 7.-8.2.2018 Timo Männikkö Tehtävä 1 (a) Ei-rekursiivinen algoritmi: etsipienin(t, n) { pnn = t[0]; for (i = 1; i < n; i++) { pnn = min(pnn, t[i]); return pnn; Silmukka suoritetaan
LisätiedotTietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen
Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:
Lisätiedotuseampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero
Alkioiden avaimet Usein tietoalkioille on mielekästä määrittää yksi tai useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero 80 op
LisätiedotTietueet. Tietueiden määrittely
Tietueet Tietueiden määrittely Tietue on tietorakenne, joka kokoaa yhteen eri tyyppistä tietoa yhdeksi asiakokonaisuudeksi. Tähän kokonaisuuteen voidaan viitata yhteisellä nimellä. Auttaa ohjelmoijaa järjestelemään
Lisätiedottietueet eri tyyppisiä tietoja saman muuttujan arvoiksi
tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi ero taulukkoon taulukossa alkiot samantyyppisiä tietueessa alkiot voivat olla erityyppisiä tiedot kuitenkin yhteen kuuluvia ohjelmoinnin perusteet,
LisätiedotTietorakenteet ja algoritmit - syksy 2015 1
Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Taulukon edut Taulukon haitat Taulukon haittojen välttäminen Dynaamisesti linkattu lista Linkatun listan solmun määrittelytavat Lineaarisen listan toteutus dynaamisesti linkattuna
Lisätiedot815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset
815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,
Lisätiedot815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset
815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.
LisätiedotAlgoritmit 1. Luento 6 Ke Timo Männikkö
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
Lisätiedot2. Perustietorakenteet
2. Perustietorakenteet Tässä osassa käsitellään erilaisia perustietorakenteita, joita algoritmit käyttävät toimintansa perustana. Aluksi käydään läpi tietorakenteen abstrakti määritelmä. Tämän jälkeen
LisätiedotTietorakenteet, laskuharjoitus 3, ratkaisuja
Tietorakenteet, laskuharjoitus 3, ratkaisuja 1. (a) Toistolauseen runko-osassa tehdään yksi laskuoperaatio, runko on siis vakioaikainen. Jos syöte on n, suoritetaan runko n kertaa, eli aikavaativuus kokonaisuudessaan
LisätiedotAlgoritmit 2. Luento 6 To Timo Männikkö
Algoritmit 2 Luento 6 To 28.3.2019 Timo Männikkö Luento 6 B-puun operaatiot Nelipuu Trie-rakenteet Standarditrie Pakattu trie Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 2/30 B-puu 40 60 80 130 90 100
LisätiedotDynaamiset tietorakenteet
1 Dynaamiset tietorakenteet Muuttujien sijaintipaikat ja muut ominaisuudet Kuten tiedetään, muuttujan määrittely tarkoittaa tilan varausta muuttujalle. Tämä tila voidaan varata eri paikoista. Periaatteessa
LisätiedotLuento 4 (verkkoluento 4) Aliohjelmien toteutus
Luento 4 (verkkoluento 4) Aliohjelmien toteutus Tyypit, Parametrit Aktivointitietue (AT) AT-pino, rekursio 1 Aliohjelmatyypit Korkean tason ohjelmointikielen käsitteet aliohjelma, proseduuri Parametrit
LisätiedotMuita linkattuja rakenteita
1 Muita linkattuja rakenteita Johdanto Aikaisemmin on käsitelty listan, jonon ja pinon toteutus dynaamisesti linkattuna rakenteena. Dynaamisella linkkauksella voidaan toteuttaa mitä moninaisimpia rakenteita.
LisätiedotLuento 4 (verkkoluento 4) Aliohjelmien toteutus
Luento 4 (verkkoluento 4) Aliohjelmien toteutus Tyypit, Parametrit Aktivaatiotietue (AT) AT-pino, rekursio 1 Aliohjelmatyypit Korkean tason ohjelmointikielen käsitteet aliohjelma, proseduuri Parametrit
LisätiedotHarjoitustyö: virtuaalikone
Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman
LisätiedotMerkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:
Merkkijonot C-kielessä merkkijono on taulukko, jonka alkiot ovat char -tyyppiä. Taulukon viimeiseksi merkiksi tulee merkki '\0', joka ilmaisee merkkijonon loppumisen. Merkkijono määritellään kuten muutkin
Lisätiedot1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...
1. Tietorakenteet Tietorakenteet organisoivat samankaltaisten olioiden muodostaman tietojoukon. Tämä järjestys voidaan saada aikaan monin tavoin, esim. Keräämällä oliot taulukkoon. Liittämällä olioihin
LisätiedotAliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus
Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Listan määritelmä Listan toteutustapoja Yksinkertainen taulukkototeutus Linkattu taulukko Dynaamisesti linkattu taulukko Listan toteutuksen yleisyysvaatimukset Millä ehdoilla
Lisätiedot3. Muuttujat ja operaatiot 3.1
3. Muuttujat ja operaatiot 3.1 Sisällys Imperatiivinen laskenta. Muuttujat. Nimi ja arvo. Muuttujan nimeäminen. Muuttujan tyyppi. Operaattorit. Operandit. Arvon sijoitus muuttujaan. Aritmeettiset operaattorit.
LisätiedotAlgoritmit 2. Luento 13 Ti Timo Männikkö
Algoritmit 2 Luento 13 Ti 30.4.2019 Timo Männikkö Luento 13 Simuloitu jäähdytys Merkkijonon sovitus Horspoolin algoritmi Ositus ja rekursio Rekursion toteutus Algoritmit 2 Kevät 2019 Luento 13 Ti 30.4.2019
LisätiedotJakso 4 Aliohjelmien toteutus
Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,
LisätiedotLuku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti
Luku 6 Dynaaminen ohjelmointi Dynaamisessa ohjelmoinnissa on ideana jakaa ongelman ratkaisu pienempiin osaongelmiin, jotka voidaan ratkaista toisistaan riippumattomasti. Jokaisen osaongelman ratkaisu tallennetaan
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 11.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 11.2.2009 1 / 33 Kertausta: listat Tyhjä uusi lista luodaan kirjoittamalla esimerkiksi lampotilat = [] (jolloin
LisätiedotLisää pysähtymisaiheisia ongelmia
Lisää pysähtymisaiheisia ongelmia Lause: Pysähtymättömyysongelma H missä H = { w111x w validi koodi, M w ei pysähdy syötteellä x } ei ole rekursiivisesti lueteltava. Todistus: Pysähtymisongelman komplementti
LisätiedotLOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100
Tiedonsiirtokäskyt LOAD LOAD-käsky toimii jälkimmäisestä operandista ensimmäiseen. Ensimmäisen operandin pitää olla rekisteri, toinen voi olla rekisteri, vakio tai muistiosoite (myös muuttujat ovat muistiosoitteita).
LisätiedotSisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit.
3. Muuttujat ja operaatiot Sisällys Imperatiivinen laskenta. Muuttujat. Nimi ja arvo. Muuttujan nimeäminen. Muuttujan tyyppi.. Operandit. Arvon sijoitus muuttujaan. Aritmeettiset operaattorit. Arvojen
LisätiedotKirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.
Tehtävä 63. Kirjoita oma versio funktiosta strcmp(),joka saa parametrinaan kaksi merkkiosoitinta. Tee ohjelma, jossa luetaan kaksi merkkijonoa, joita sitten verrataan ko. funktiolla. Tehtävä 64. Kirjoita
LisätiedotAlgoritmit 1. Luento 5 Ti Timo Männikkö
Algoritmit 1 Luento 5 Ti 24.1.2017 Timo Männikkö Luento 5 Järjestetty lista Järjestetyn listan operaatiot Listan toteutus taulukolla Binäärihaku Binäärihaun vaativuus Algoritmit 1 Kevät 2017 Luento 5 Ti
LisätiedotSisältö. 2. Taulukot. Yleistä. Yleistä
Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä
LisätiedotAbstraktit tietotyypit. TIEA341 Funktio ohjelmointi 1 Syksy 2005
Abstraktit tietotyypit TIEA341 Funktio ohjelmointi 1 Syksy 2005 Data abstraktio Abstraktio on ohjelmoinnin tärkein väline Data abstraktio abstrahoi dataa Abstrakti tietotyyppi Koostuu kolmesta asiasta:
LisätiedotAlgoritmit 2. Luento 4 To Timo Männikkö
Algoritmit 2 Luento 4 To 21.3.2019 Timo Männikkö Luento 4 Hajautus Yhteentörmäysten käsittely Avoin osoitteenmuodostus Hajautusfunktiot Puurakenteet Solmujen läpikäynti Algoritmit 2 Kevät 2019 Luento 4
LisätiedotYleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.
2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä
LisätiedotLyhyt kertaus osoittimista
, syksy 2007 Kertausta Luento 10 12.10.2007 Syksy 2007 1 Lyhyt kertaus osoittimista char *p; /* char, int, jne ilmoittavat, minkä tyyppisiä */ Keskusmuisti int *q; /* olioita sisältäviin muistilohkoihin
LisätiedotOsoitin ja viittaus C++:ssa
Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja
LisätiedotJakso 4 Aliohjelmien toteutus
Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,
LisätiedotLuento 4 Aliohjelmien toteutus
Luento 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,
LisätiedotLuku 3. Listankäsittelyä. 3.1 Listat
Luku 3 Listankäsittelyä Funktio-ohjelmoinnin tärkein yksittäinen tietorakenne on lista. Listankäsittely on paitsi käytännöllisesti oleellinen aihe, se myös valaisee funktio-ohjelmoinnin ideaa. 3.1 Listat
LisätiedotMuistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö C-ohjelmassa
ssa ohjelman käytössä suoritusaikana oleva muisti jakautuu neljään osaan: koodisegmentti datasegmentti pinosegmentti (stack) kasa (heap) ssa ohjelman koodisegmentti sisältää käännetyn ohjelmakoodin sisältö
Lisätiedot815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset
815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 17.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 17.2.2010 1 / 41 Sanakirja Monissa sovelluksissa on tallennettava rakenteeseen avain arvo-pareja. Myöhemmin rakenteesta
LisätiedotSisältö. 22. Taulukot. Yleistä. Yleistä
Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä
LisätiedotMonipuolinen esimerkki
Monipuolinen esimerkki Lopuksi monipuolinen esimerkki, jossa ohjelmisto koostuu pääohjelmasta ja kahdesta aliohjelmasta, joista toinen on proseduuri ja toinen funktio. Funktio Sqrt(int n): int Sqrt(int
LisätiedotAlgoritmit 2. Luento 5 Ti Timo Männikkö
Algoritmit 2 Luento 5 Ti 26.3.2019 Timo Männikkö Luento 5 Puurakenteet B-puu B-puun korkeus B-puun operaatiot B-puun muunnelmia Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 2/34 B-puu B-puut ovat tasapainoisia
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 25.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 25.2.2009 1 / 34 Syötteessä useita lukuja samalla rivillä Seuraavassa esimerkissä käyttäjä antaa useita lukuja samalla
LisätiedotOhjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.
Osoittimet Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Muistilohkon koko riippuu muuttujan tyypistä, eli kuinka suuria arvoja muuttujan
LisätiedotAlgebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005
Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Tällä luennolla Algebralliset tietotyypit Hahmonsovitus (pattern matching) Primitiivirekursio Esimerkkinä binäärinen hakupuu Muistattehan...
LisätiedotTietorakenteet ja algoritmit syksy Laskuharjoitus 1
Tietorakenteet ja algoritmit syksy 2012 Laskuharjoitus 1 1. Tietojenkäsittelijä voi ajatella logaritmia usein seuraavasti: a-kantainen logaritmi log a n kertoo, kuinka monta kertaa luku n pitää jakaa a:lla,
LisätiedotJokaisella tiedostolla on otsake (header), joka sisältää tiedostoon liittyvää hallintatietoa
Tietojen tallennusrakenteet Jokaisella tiedostolla on otsake (header), joka sisältää tiedostoon liittyvää hallintatietoa tiedot tiedostoon kuuluvista lohkoista esim. taulukkona, joka voi muodostua ketjutetuista
LisätiedotOlio-ohjelmointi Syntaksikokoelma
C++-kielen uusia ominaisuuksia Olio-ohjelmointi Syntaksikokoelma 31.10.2008 Bool-tietotyyppi: Totuusarvo true (1), jos ehto on tosi ja false (0) jos ehto epätosi. Dynaaminen muistinvaraus: Yhden muuttuja
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 16.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 16.3.2009 1 / 40 Kertausta: tiedostosta lukeminen Aluksi käsiteltävä tiedosto pitää avata: tiedostomuuttuja = open("teksti.txt","r")
LisätiedotOhjelmointi 1 Taulukot ja merkkijonot
Ohjelmointi 1 Taulukot ja merkkijonot Jussi Pohjolainen TAMK Tieto- ja viestintäteknologia Johdanto taulukkoon Jos ohjelmassa käytössä ainoastaan perinteisiä (yksinkertaisia) muuttujia, ohjelmien teko
LisätiedotALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012
ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012 1.1. (a) Jaettava m, jakaja n. Vähennetään luku n luvusta m niin kauan kuin m pysyy ei-negatiivisena. Jos jäljelle jää nolla, jaettava oli tasan jaollinen. int m,
LisätiedotSe mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.
Tehtävä. Tämä tehtävä on aineistotehtävä, jossa esitetään ensin tehtävän teoria. Sen jälkeen esitetään neljä kysymystä, joissa tätä teoriaa pitää soveltaa. Mitään aikaisempaa tehtävän aihepiirin tuntemusta
LisätiedotUolevin reitti. Kuvaus. Syöte (stdin) Tuloste (stdout) Esimerkki 1. Esimerkki 2
Uolevin reitti Kuvaus Uolevi on ruudukon vasemmassa ylänurkassa ja haluaisi päästä oikeaan alanurkkaan. Uolevi voi liikkua joka askeleella ruudun verran vasemmalle, oikealle, ylöspäin tai alaspäin. Lisäksi
LisätiedotOhjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU
Ohjelmointi 2 Jussi Pohjolainen TAMK» Tieto- ja viestintäteknologia Tietotyypeistä C++ - kielessä useita tietotyyppejä Kirjaimet: char, wchar_t Kokonaisluvut: short, int, long Liukuluvut: float, double
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 9.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 9.2.2009 1 / 35 Listat Esimerkki: halutaan kirjoittaa ohjelma, joka lukee käyttäjältä 30 lämpötilaa. Kun lämpötilat
LisätiedotLuku 8. Aluekyselyt. 8.1 Summataulukko
Luku 8 Aluekyselyt Aluekysely on tiettyä taulukon väliä koskeva kysely. Tyypillisiä aluekyselyitä ovat, mikä on taulukon välin lukujen summa tai pienin luku välillä. Esimerkiksi seuraavassa taulukossa
LisätiedotOhjelmoinnin peruskurssi Y1
Ohjelmoinnin peruskurssi Y1 CSE-A1111 28.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 28.9.2015 1 / 16 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.
LisätiedotTarkennamme geneeristä painamiskorotusalgoritmia
Korotus-eteen-algoritmi (relabel-to-front) Tarkennamme geneeristä painamiskorotusalgoritmia kiinnittämällä tarkasti, missä järjestyksessä Push- ja Raise-operaatioita suoritetaan. Algoritmin peruskomponentiksi
LisätiedotAlgoritmit 2. Luento 6 Ke Timo Männikkö
Algoritmit 2 Luento 6 Ke 29.3.2017 Timo Männikkö Luento 6 B-puun operaatiot B-puun muunnelmia Nelipuu Trie-rakenteet Standarditrie Pakattu trie Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 2/31 B-puu
LisätiedotChapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen
Chapel TIE-20306 Ryhmä 91 Joonas Eloranta Lari Valtonen Johdanto Chapel on Amerikkalaisen Cray Inc. yrityksen kehittämä avoimen lähdekoodin ohjelmointikieli. Chapel on rinnakkainen ohjelmointikieli, joka
Lisätiedot811120P Diskreetit rakenteet
811120P Diskreetit rakenteet 2018-2019 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen
LisätiedotOHJE KILPIEN LISÄÄMISESTÄ ATJN KILPIVARASTOON
OHJE KILPIEN LISÄÄMISESTÄ ATJN KILPIVARASTOON Kilpiä voidaan joutua lisäämään kilpivarastotiedoksi mm. alla mainituissa tilanteissa. Sarjakilpivarastoon: - Tunnus on määräytynyt ajoneuvolle LTJn aikaisessa
LisätiedotSekvenssi: kokoelma peräkkäisiä alkioita (lineaarinen
Sekvenssi Sekvenssi: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Timo Esim. pino, jono ja kaksiloppuinen jono ovat sekvenssin erikoistapauksia sekvenssejä, jotka kohdistavat operaationsa ensimmäiseen/viimeiseen
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 7.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 7.2.2011 1 / 39 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti
LisätiedotTietotekniikan valintakoe
Jyväskylän yliopisto Tietotekniikan laitos Tietotekniikan valintakoe 2..22 Vastaa kahteen seuraavista kolmesta tehtävästä. Kukin tehtävä arvostellaan kokonaislukuasteikolla - 25. Jos vastaat useampaan
Lisätiedot58131 Tietorakenteet ja algoritmit (syksy 2015)
58131 Tietorakenteet ja algoritmit (syksy 2015) Harjoitus 2 (14. 18.9.2015) Huom. Sinun on tehtävä vähintään kaksi tehtävää, jotta voit jatkaa kurssilla. 1. Erään algoritmin suoritus vie 1 ms, kun syötteen
LisätiedotTAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2
TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos TKT-3200 Tietokonetekniikka I Harjoitustyö 4: Cache, osa 2.. 2010 Ryhmä Nimi Op.num. 1 Valmistautuminen Cache-työn toisessa osassa
LisätiedotToinen harjoitustyö. ASCII-grafiikkaa 2017
Toinen harjoitustyö ASCII-grafiikkaa 2017 Yleistä Tehtävä: tee Javalla ASCII-merkkeinä esitettyä grafiikkaa käsittelevä ASCIIArt17-ohjelma omia operaatioita ja taulukoita käyttäen. Työ tehdään pääosin
Lisätiedot(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ä.
Loppu seuraa suoralla laskulla: n n Tave TR = p j (1 + b (i, j)) j=1 = 1 + 1 i
Lisätiedot