MAT Tieto ja laskenta laskuharjoituksia

Koko: px
Aloita esitys sivulta:

Download "MAT-71000 Tieto ja laskenta laskuharjoituksia"

Transkriptio

1 MAT Tieto ja laskenta laskuharjoituksia Antti Valmari Tampereen teknillinen yliopisto Pisteytys Arvosanan 1 raja tulee olemaan välillä 40%... 50% tentin maksimipisteistä. Muiden arvosanojen rajat tulevat olemaan suunnilleen 10 %-yksikön välein. Laskuharjoituspisteet lisätään tenttipisteisiin kuten jäljempänä on kerrottu. Laskuharjoitusten tehtävät on jaettu ryhmiin viikkojen mukaan. Jos opiskelija esittää hyväksytysti ryhmästä yhden ratkaisun, hän saa kolme pistettä. Kahdella ratkaisulla samasta ryhmästä saa viisi ja kolmella kuusi pistettä. Tämän säännön tavoitteena on kannustaa ratkaisemaan tehtäviä useista eri aiheista. Tentin arvostelussa otetaan huomioon korkeintaan 30 laskuharjoituspistettä. Yksi laskuharjoituspiste vastaa 1 3 % tentin maksimipisteistä. Jokaisella opiskelijalla on ensisijaisuusnumero alla olevan taulukon mukaan (Esim. Alan Turing = AT): JC TH IK OK EK AaK TK AnK VL VM MN MP LS CT JTu JTä 8 9 A B C D E F Jos tehtävän numero modulo 16 on sama kuin opiskelijan ensisijaisuusnumero, niin opiskelija saa varmasti mahdollisuuden esittää ratkaisunsa, jos haluaa. Jos tällaista opiskelijaa ei ole, niin seuraavaksi oikeus on heillä, joilla ensisijaisuusnumero eroaa kahdeksalla. Heidän jälkeensä tulevat he, joilla ero on kolme jompaan kumpaan suuntaan. Tällä säännöllä pyritään siihen, että useita eri tehtäviä olisi ratkaistu ja siihen, että opiskelija voisi joidenkin tehtävien kohdalla olla varma siitä, että saa ratkaisustaan pisteen. Kun kaikki tällaiset ratkaisut on esitetty, opettaja voi harkintansa mukaan antaa muillekin tilaisuuden, jos uskoo sen olevan kuulijoille hyödyksi. Ratkaisujen esittämisessä on olennaista perustella ratkaisu. Kokeellisten tehtävien tapauksessa kerro kokeen lopputuloksen lisäksi myös koejärjestely ja miksi uskot, että se mittaa oikeaa asiaa. Ohjelmointitehtävien tapauksessa kerro ohjelman lisäksi miksi uskot, että se laskee luvatun tuloksen. Päättelytehtävien tapauksessa kerro, miksi kukin päättelyaskel pitää paikkansa. Tiedonhakutehtävien tapauksessa kerro, mistä hait tiedon ja miksi juuri sieltä. Muiden tyyppisten tehtävien tapauksessa esitä tehtävän luonteeseen sopiva perustelu.

2 MAT laskuharjoituksia AV Tiedon esittämistavoista 1. Selvitä kirjoittamalla sopivia C++-ohjelmia, voiko tietokoneesi C++-toteutuksen char-luku olla negatiivinen. 2. Selvitä kokeilemalla kaikki neljä tapausta joissa n ja m ovat positiivisia tai negatiivisia, milloin n%m on negatiivinen. Mihin suuntaan n/m pyöristetään kokeilemissasi tapauksissa? 3. Kokeile, ovatko tietokoneesi C++-toteutuksessa kaikki osoittimet (tarkemmin sanoen niiden osoittamien muistipaikkojen osoitteet) neljällä jaollisia. Keksitkö tietotyypin, jolle osoittimet ovat jaollisia suuremmalla luvulla kuin neljä? 4. Kirjoita C++-ohjelma, joka ei käytä sellaisia toimintoja kuin sizeof, MAXINT tai <limits> ja jonka avulla voit selvittää, montako bittiä on unsigned-luvuissa. 5. Mitä laskevat C++:n (a) n&m, (b) n m, (c) nˆm, (d) n ja (e) (n-1)ˆn? Tee ohjelma, joka havainnollistaa jokaisen. 6. Opeta muille läsnäolijoille, mikä on heksadesimaalijärjestelmä ja miten luvun voi muuttaa heksadesimaalijärjestelmästä 10-järjestelmään ilman tehokkaampia apuvälineitä kuin kynä, paperi ja nelilaskin (laskin, jossa on yhteen-, vähennys-, kerto- ja jokalasku). 7. Opeta muille läsnäolijoille, miten luvun voi muuttaa 10-järjestelmästä heksadesimaalijärjestelmään ilman tehokkaampia apuvälineitä kuin kynä, paperi ja nelilaskin (laskin, jossa on yhteen-, vähennys-, kerto- ja jokalasku). 8. Selvitä, kuinka monta tavua tietokoneesi C++-toteutus varaa std::vectorille siihen talletettavalle aineistolle varatun tilan lisäksi. Voit esimerkiksi varata kaksi vektoria ja verrata niiden osoitteita. Kerro, mitkä tavut ilmoittavat vektorin koon, mitkä vektorille varatun tilan ja mitkä vektoriin talletettavan aineiston osoitteen. 9. Tee ohjelma, joka havainnollistaa säiliön std::vector sisällön siirtymistä muistin alueesta toiseen. 10. Esitä perusteluja puolesta ja vastaan sille, että liukuluvuissa on erikseen +0 ja 0. Voit käyttää lähteenä Wikipediaa. 11. Liukuluvuilla laskettaessa tapahtuu pyöristysvirheitä. Siksi kaksi laskutoimitusta, joiden tarkat tulokset ovat samat, saattaa tuottaa eri luvut. Tämä täytyy usein ottaa huomioon liukulukujen yhtäsuuruutta verrattaessa. Yksi keino on laskutoimituksen jälkeen muuntaa lopputulos lähimmäksi luvuksi, jonka kolme vähiten merkitsevää bittiä ovat 100. Tee (mielellään mahdollisimman tehokas) aliohjelma, joka tekee tämän tietokoneesi C++-toteutuksen float-luvuille. Ota huomioon, että aivan kaikkia lukuja ei ole järkevää muuntaa näin. 12. Kerro mikä on Base64 encoding ja miksi sitä tarvitaan. Voit käyttää lähteenä Wikipediaa.

3 MAT laskuharjoituksia AV Kirjoita www-sivu, jossa lukee X : X ξ : ξ X Huolehdi, että X on kursivoitu eli näyttää suunnilleen siltä, kuin tässä. Tuota symbolit käyttäen sopivia character entity. 14. Käyttäen CSS-kielen keinoja, kirjoita www-sivu, jossa yksi tekstikappale on vihreää taustaa vasten mutta teksti on keltaista taustaa vasten kuten tässä. Rivien tulee olla keskitettyjä (siis sekä rivin alussa että lopussa voi olla tyhjää). 15. Mitä erilaisia väliviivoja, tavuviivoja, ajatusviivoja yms. Unicode sisältää? Entä mitä erilaisia välejä ja sen kaltaisia? 16. Suunnittele esitystapa monikulmioille tasossa. Monikulmioita ovat kolmiot, nelikulmiot ja niin edelleen. Tasoa edustaa x y-koordinaatisto. Monikulmion ei tarvitse olla säännöllinen ja sivut voivat mennä ristiin. Esitystapasi on todennäköisesti sellainen, että kaksi eri bittikuviota tuottaa monikulmioiksi piirrettyinä saman kuvan. Kuvaile testi, jolla voi selvittää, esittävätkö kaksi eri bittikuviota samaa monikulmiota. 17. Esitä laskukaava, jolla merkkijonot ja luonnolliset luvut voidaan asettaa 1 1- vastaavuuteen siten, että tyhjää merkkijonoa vastaa luku 0, yhden pituisia merkkijonoja vastaavat luvut 1,..., n missä n on erilaisten merkkien määrä, kahden pituisia merkkijonoja vastaavat luvut n+1,..., n+n 2 ja niin edelleen. 18. Tarkastellaan vaihtoehtoista etumerkin esitystapaa 10-järjestelmän kokonaisluvuille. Olkoot n k 1,...,n 0 numeroita (eli 0, 1,..., 9). Positiiviset luvut ja 0 esitetään tuttuun tapaan. ~n k 1 n 0 esittää luvun (n k 1 n 0 ) 10 k. Esim. ~612 = = 388. (a) Osoita ~n k 1 n 0 = ~9n k 1 n 0. (b) Vanhassa järjestelmässä lasketaan eri tilanteissa eri tavoilla. Esim = 24 lasketaan normaalisti, mutta lasketaan laskemalla = 24 ja vaihtamalla tuloksen etumerkki tuottaen 24. Miten yhteen- ja vähennyslasku lasketaan uudessa järjestelmässä, ja kuinka monta eri tapaa tarvitaan? 19. Tampereen bussien aikataulut on esitetty muodossa, jossa rivin alussa on tunnin numero t ja rivillä on ne minuutit m, joille bussi lähtee kello t:m. Ihan alussa on bussilinjan numero omalla rivillään. Laadi BNF-määritelmä, joka esittää tämän muodon. 20. Joukon A ositus on kokoelma joukkojaa 1,...,A n siten, ettäa 1 A n = A, A i A j = kun 1 i < j n, ja A i kun 1 i n. Ekvivalenssirelaatio joukossa A on A:n alkioita vertaava toiminto a b siten, että jokaiselle A:n alkiolle a, b ja c pätee a a; jos a b niin b a; ja jos a b ja b c niin a c. Osoita, että ositukset ja ekvivalenssirelaatiot ovat kaksi tapaa ilmaista sama asia. Täsmällisemmin, osoita, että jokainen ositus synnyttää ekvivalenssirelaation ja jokainen ekvivalenssirelaatio synnyttää osituksen siten, että jos 1 :n synnyttämä ositus on A 1,..., A n ja sen synnyttämä ekvivalenssi on 2, niin 1 ja 2 ovat sama ekvivalenssi. Mihin tarvitaan oletusta A i?

4 MAT laskuharjoituksia AV Lausekkeet, lauseet ym. 21. Piirrä seuraavien lausekkeiden lausekepuut. Jos sama puu tulee monesti, riittää viitata jo piirrettyyn. (a) 1+2*3+4 (b) (1+2)*3+4 (c) 1+(2*3)+4 (d) 1+2*(3+4) (e) (1+2*3)+4 (f) 1+(2*3+4) (g) (1+2)*(3+4) (h) 1+(2*(3+4)) 22. Piirrä seuraavien lausekkeiden lausekepuut. (a) A[i+1]*p->n (b)!!!0 (c) std::cout<<1 2<<3&&4 (d) p*=*q 23. Piirrä seuraavien lausekkeiden lausekepuut. Jos sama puu tulee monesti, riittää viitata jo piirrettyyn. (a) (i=-j)-=1 (b) i=-(j-=1) (c) i=--j-=1 (d) --i=j Kirjoita lauseke, joka hyödyntää operaattoreiden erilaisia presedenssejä mutta ei erilaisia merkityksiä, ja jonka tuottama arvo muuttuu, jos && korvataan &:lla. Myös kirjoita lauseke, joka hyödyntää operaattoreiden erilaisia merkityksiä mutta ei erilaisia presedenssejä, ja jonka tuottama arvo muuttuu, jos && korvataan &:lla. Vaihtoehtoisesti voit toisessa tai molemmissa kohdissa käyttää operaattoreiden && ja & sijaan ja. 25. Olkoot i ja j C++-ohjelman muuttujia ja α mikä tahansa merkkijono, jossa ei ole muita merkkejä kuin välilyöntiä ja merkkiä -. Mitkä eri toiminnot voi saada aikaan C++-lausekkeilla muotoa iαj? Muutama malliksi: ij ei käänny, i-j laskee vähennyslaskun i j, i -j laskee saman kuin i-j, ja i-- -j sekä laskee vähennyslaskun i j että pienentää i:n arvoa yhdellä. 26. Opeta muille läsnäolijoille, mitä lausekkeiden käänteinen puolalainen esitystapa tarkoittaa ja miten sillä saadaan lausekepuut halutunlaisiksi ilman sulkuja. Kerro, miksi puolalaisella esitystavalla toimiva laskin on erityisen helppo toteuttaa. 27. Ohjelmoi käänteisen puolalaisen esitystavan mukainen laskin, joka laskee liukulukujen yhteen-, vähennys-, kerto- ja jakolaskuja. Ohjelmoinnin helpottamiseksi oleta, että jokaisen luvun edessä on #. 28. Selvitä lausekkeesta (1+2)*(3+4), kumman yhteenlaskun tietokoneesi C++toteutus laskee ensin. Vihje: tee oma lukutyyppi, jolle määrittelet operator+ ja operator*. 29. Kirjoita ohjelma, jossa on tämä rivi siten, että se tulostaa Rivin sisälle ei saa lisätä mitään eikä riviä saa muuttaa. Tehtävän voi ratkaista määrittelemättä omia tietotyyppejä. i=j=123; std::cout<<i; i=321; std::cout<<i; 30. Millä muuttujan i arvoilla silmukan for(int i=32; i--; ){...} vartalo suoritetaan? Entä for(unsigned i=32; i>=0; --i){...}? 31. Taulukko A sisältää luvut 0, 1,..., n 1 jossain järjestyksessä. Kirjoita algoritmi seur, joka muuttaa järjestystä siten, että kun seur toistetaan riittävän monta kertaa, käydään kaikki järjestykset läpi.

5 MAT laskuharjoituksia AV Tässä tehtävässä saat käyttää silmukoina vain perusmuotoisia for-silmukoita. Aliohjelmien, poikkeusten yms. käyttö on kielletty, mutta if on sallittu. Laskutoimituksia varten saat käyttää vain operaattoreita ++ ja-- (siis +,* jne. on kielletty). Sijoitukset, syöttö std::cin >> ja tulostus std::cout << on sallittu. Jokainen ohjelma lukee kaksi lukua n ja m. (a) Käyttäen enintään yhtä silmukkaa, kirjoita ohjelma, joka tulostaa n+m. (b) Käyttäen enintään kahta silmukkaa, kirjoita ohjelma, joka tulostaa nm. (c) Käyttäen enintään kolmea silmukkaa, kirjoita ohjelma, joka tulostaa n m. (d) Tee jonossa seuraava ohjelma (joka siis käyttää neljää silmukkaa) ja perustele, että jos lukualue ei loppuisi kesken, niin varsin lyhyellä ohjelmalla voitaisiin tuottaa valtavan suuri luku. 33. Oletetaan, että ohjelmassa saa olla vain yksi silmukka eikä rekursiivisia aliohjelmia saa käyttää. Tällainen rajoitus tekee ohjelmoinnista kömpelöä, mutta tekeekö se kokonaan mahdottomaksi laskea jotakin, mitä ilman rajoitusta voisi laskea? 34. Kerro, miten silmukat ja if-lauseet saa aikaan ohjelmointikielellä Brainfuck. 35. Yksisuuntaisen rengasmaisen listan viimeinen alkio osoittaa ensimmäiseen ja osoitin listaan osoittaa viimeiseen. Kirjoita seuraavat aliohjelmat. (a) Aliohjelma, joka lisää alkion listan ensimmäiseksi. (b) Aliohjelma, joka lisää alkion listan viimeiseksi. (c) Aliohjelma, joka poistaa listan ensimmäisen alkion. 36. Aja seuraava ohjelma ja kerro, miksi tulostukset ovat ne mitä ne ovat. #include <iostream> #include <vector> std::vector<int> A(4,7); void print(){ for( unsigned i=0; i<a.size(); ++i ){ std::cout << << A[i]; } std::cout << \n ; } int main(){ print(); int &k = A[2]; k=5; print(); A.push_back(9); print(); k=3; print(); } 3 Aliohjelmat ja abstraktiot 37. Kirjoita aliohjelma, joka kääntää yksisuuntaisen linkitetyn listan takaperin. 38. Tässä tehtävässä toteutetaan nimellä Merge-Sort tunnettu järjestämisalgoritmi yksisuuntaisille linkitetyille listoille. Yleisimmät nopeat järjestämisalgoritmit

6 MAT laskuharjoituksia AV Quicksort ja Heapsort edellyttävät kykyä valita mikä tahansa alkio nopeasti indeksoimalla, mikä ei onnistu listoille. Merge-Sort on nopea eikä vaadi tätä kykyä. Se on niin ollen hyvä algoritmi listojen järjestämiseen. (a) Kirjoita aliohjelma, joka yhdistää kaksi yksisuuntaista linkitettyä listaa seuraavasti. Se vertaa, kumman listan ensimmäinen alkio on pienempi. Se poistaa näin valitun alkion listastaan ja lisää sen tuloslistan jatkeeksi. Se toistaa tätä, kunnes jompikumpi lista on tyhjä. Lopuksi se kytkee jäljelle jääneen listan tuloslistan jatkeeksi. Tuloslista on alun perin tyhjä. (b) Tee aliohjelma, joka poimii saamastaan listasta k ensimmäistä ja k niiden jälkeen tulevaa alkiota, ja tekee niille edellisen kohdan toiminnon. Sitten se tekee saman seuraaville k+k alkiolle ja lisää tuloksen tuloslistan jatkeeksi. Se toistaa tätä, kunnes kaikki syötelistan alkiot on siirretty tuloslistaan. Valitse järkevä käyttäytyminen siihen tilanteeseen, että listassa on jäljellä vähemmän kuin 2k alkiota. (c) Tee aliohjelma, joka järjestää listan tekemällä edellisen kohdan toiminnon k:n arvoilla 1, 2, 4, 8,... kunnes lista on järjestyksessä. 39. Selvitä sopivalla koejärjestelyllä, varaako tietokoneesi C++-toteutus muistia (a) muuttujalle (b) aliohjelman parametrille i, joka on tyyppiä int &. Huomaa, että &i ei anna i:n omaa osoitetta (vaikka sellainen olisi olemassa), vaan sen muuttujan tms. osoitteen, johon i viittaa. 40. Lisää alla olevaan aliohjelmaan static-muuttujaa käyttävä kirjanpito siitä, kuinka monesti sitä on kutsuttu. Muuta se sellaiseksi, että kun kutsujen määrä ylittää 1 000, se ei toimi normaalisti vaan tulostaa en jaksa enää. Mikä on pienin n, jolla se antaa periksi? unsigned Fib( unsigned n ){ if( n<2 ){ return n; } else{ return Fib(n-1) + Fib(n-2); } } 41. Aapo kyllästyi taulukoiden ohi-indeksoinnin aiheuttamiin virheisiin ja tietoturvaongelmiin, ja kirjoitti seuraavat aliohjelmat. Mikä toisessa niistä on vikana? void sijoita( std::vector<int> &A, int i, int x ){ if( 0 <= i && i < A.size() ){ A[i] = x; } } int palauta( std::vector<int> A, int i ){ if( 0 <= i && i < A.size() ){ return A[i]; } else{ return 0; } } 42. Kirjoita aliohjelma kopioi(a, i, n, B, j), joka kopioi taulukon A alkiot A[i], A[i+1],..., A[i+n 1] taulukkoon B alkioiksi B[j], B[j+1] jne. Mitä tapahtuu kutsussa kopioi(a,1,5,a,3)? Voiko tältä suojautua, edes jossain määrin?

7 MAT laskuharjoituksia AV Kahden muuttujan sisältö voidaan yleensä mutta ei aina vaihtaa ilman apumuistia seuraavasti. Selitä, miten se toimii, ja anna esimerkki tilanteesta, jossa se ei toimi oikein. void vaihda( int &x, int &y ){ xˆ=y; yˆ=x; xˆ=y; } 44. Tavoitteena on tulostaa taulukossa A[1... n] annettu teksti riveille siten, että lyhyin muu kuin viimeinen rivi on mahdollisimman pitkä. Kahden peräkkäisen sanan välissä on A:ssa yksi välilyönti, eikä A:ssa ole muita välilyöntejä. Myös tulostuksessa kahden samalla rivillä peräkkäin olevan sanan väliin pitää tulostaa yksi välilyönti, eikä muita välilyöntejä saa tulostaa. Rivillä on tilaa l merkille. Osoita esimerkillä, että oikeaa jakoa ei välttämättä saada siten, että A käydään läpi alusta loppuun ja uusi rivi aloitetaan aina kun seuraavana vuorossa oleva sana ei enää mahdu edelliselle riville. 45. Alla on alettu laatia aliohjelmaa toteuttamaan edellisen tehtävän tavoite. Se ei tulosta jakokohtia, mutta kertoo, kuinka pitkä huonoin rivi on. jako(i) N if n i l then return l h := 0 for j := 2 to l+1 do if A[i+j] = then k := jako(i+j) if k > j 1 then k := j 1 if k > h then h := k return h (a) Miten aliohjelmaa pitää kutsua, jotta se laskisi vastauksen koko tekstille? (b) Miten aliohjelmassa on otettu huomioon, että viimeisen rivin pituudella ei ole väliä? (c) Miksi for-silmukka aloittaa muuttujan j arvolla 2, eikä 1 tai 0? (d) Mitä aliohjelma tekee, jos jokin sana on pitempi kuin l? 46. Ohjelmoi edellisen tehtävän aliohjelma tietokoneellesi. Laadi jokin niin iso syöte, että suoritusaika tietokoneessasi on ainakin 10 sekuntia. Sitten muuta aliohjelmaa siten, että aina laskettuaan vastauksen se laittaa sen talteen, ja aina kun siltä kysytään vastausta, se käyttää aikaisemmin laskemaansa, jos se on sellaisen tallettanut. Mittaa suoritusaika uudelleen. Jos havaitset merkittävän eron, selitä, mistä se johtuu. 47. Muunna tehtävässä 45 annettu aliohjelma tarkoitukseen sopivaksi ja laadi sitä hyödyntäen ohjelma, joka tulostaa tekstin jaettuna riveille. Pseudokoodina annettu vastaus riittää.

8 MAT laskuharjoituksia AV Seuraavilla aliohjelmilla Fib(n) N voi laskea Fibonaccin lukuja. Vertaa niiden ajan ja muistin kulutusta toisiinsa olettaen, että lukutyyppi pystyy tallettamaan niin isoja lukuja, että Fib(n) voidaan laskea kun 0 n 100. (Tämä on päättelytehtävä. Ohjelmia ei tarvitse toteuttaa.) Onko muita tekijöitä, jotka tulee ottaa huomioon, kun tehdään valintaa niiden välillä? (Operaattori & laskee bitittäisen ja-operaation kuten C++:ssa.) (a) if n < 2 then return n else return Fib(n 1)+Fib(n 2) (b) A[0] := 0; A[1] := 1 for i := 2 to n do A[i] := A[i 1]+A[i 2] return A[n] (c) if n < 2 then return n j := 0; k := 1 for i := 2 to n do h := k; k := k +j; j := h return k ( (d) return 1 5 ( ) n ( ) n) (e) return (1+ 2 ) n (f) if n < 2 then return n j := 0; k := 1; m := 1 while m n/4 do m := 2m while m > 0 do h := (2j +k)k; j := k 2 +j 2 ; k := h if m&n then h := k; k := k+j; j := h m := m/2 return k 49. Hanoin tornit on tehtävä, jossa on kolme pystysuoraa puikkoa ja n kiekkoa. Kiekoissa on keskellä reikä, niin että niitä voidaan pinota puikkoihin kuten kuvassa. Kiekkojen koot ovat 1, 2,..., n. Kiekkojen tulee olla koko ajan puikoissa, mutta yhden kiekon kerrallaan saa siirtää puikosta toiseen. Isompaa kiekkoa ei saa koskaan laittaa pienemmän päälle. Aluksi kaikki kiekot ovat puikossa 1. Tee ohjelma, joka kertoo, miten kiekkoja pitää siirtää, jotta ne kaikki saadaan puikkoon Olkoon sailio tyyppiä std::vector<int>. Aja alla oleva ohjelmanpätkä siten, että säiliön sisältö on muotoa 0, 0, 1, 1, 2, 2, 3, 3,..., n, n. Valitse niin suuri n, että suoritusaika tietokoneessasi on ainakin 10 sekuntia. Sitten vaihda säiliön tyypiksi std::list<int>. Miten suoritusaika muuttuu? Mistä ero johtuu? s1 = sailio.begin(); while( s1!= sailio.end() ){ s2 = s1; ++s2; if( s2!= sailio.end() && *s1 == *s2 ){ sailio.erase( s2 ); } else{ s1 = s2; } }

9 MAT laskuharjoituksia AV Olkoon edellisen tehtävän koodinpätkän sailio tyyppiä std::deque<int>. Kuinka monta erilaista virhetoimintoa saat havainnollistettua käyttämällä erilaisia säiliön sisältöjä? Ainakin yksi pitää löytää (niitä on enemmän). 4 Asymptoottinen suoritusaika 52. (a) Osoita, että tasan neljä alkiota on pienempiä kuin x ei aina ilmaise sitä, että jos alkiot pannaan suuruusjärjestyksessä jonoon, niin jonon viides on arvoltaan x. (b) Anna samaan ajatukseen perustuva, mutta paremmin toimiva ilmaus. 53. Kirjoita ei-rekursiivinen algoritmi, joka etsii suuruusjärjestyksessä kohtaan k osuvan alkion taulukosta A[1...n] ja toimii keskimäärin ajassa Θ(n). Vihje: tee siitä Quicksortia muistuttava, mutta osituksen jälkeen se hylkää jomman kumman osan. 54. Oletetaan, että Quicksortin toteutuksen keskimääräinen suoritusaika on noin 10nlog 2 n + 2n ja Insertion-sortin noin n 2. Ne voidaan yhdistää siten, että kun osataulukon koko on enintään k, Quicksort jättää sen järjestämättä. Lopuksi ajetaan Insertion-sort koko taulukolle. Tämä toimii isoille taulukoille nopeammin kuin kumpikaan algoritmi yksinään. (a) Miksi lopun Insertion-sort on nopea? (b) Mikä kannattaa valita k:n arvoksi? (Jos et keksi parempaa tapaa löytää vastaus, tee vaikka tietokoneohjelma, joka kokeilee k:n arvoja 1, 2, 3,... kunnes vastaus löytyy.) 55. Toteuta edellisen tehtävän algoritmit C++:lla käyttäen lähtökohtana luentojen pseudokoodeja, ja kokeile mittaamalla, mistä luvun k arvosta alkaen yhdistelmä on nopein. Käytä aineistona lukuja 1, 2,..., n laitettuna satunnaiseen järjestykseen. 56. Oletetaan, että n on niin iso, että todellinen suoritusaika käyttäytyy Θ- merkinnän ennustamalla tavalla. Kun tietokoneen teho kaksinkertaistuu, niin miten kymmenessä sekunnissa ratkeavan tehtävän koko muuttuu, kun suoritusaika on (a) Θ(n) (b) Θ(n 2 ) (c) Θ(n 3 ) (d) Θ(1,41 n )? 57. Ilmaise seuraavien sarjojen summat Θ-merkinnällä. (a) n 2 (b) log 2 1+log log 2 n (c) n (d) sin1 π 4 +sin2 π sinn π 4 (e) n n+1 (f) n

10 MAT laskuharjoituksia AV Keksi kaksi funktiota t(n) ja f(n) siten, että kumpikin tuottaa vain positiivisia arvoja kun n N, ja t(n) ei ole O(f(n)) eikä Ω(f(n)). Vihje: tee toisesta sellainen, että se aaltoilee ylös ja alas. 59. Osoita, että Θ(2 n ) ei ole sama kuin Θ(3 n ), mutta ne molemmat ovat 2 Θ(n). 60. Arvioi seuraavien algoritmien hitaimman ja nopeimman tapauksen suoritusaikaa O-, Ω- ja/tai Θ-merkinnällä. (a) i := 1; while i n A[i] x do i := i+1 (b) h := 0; x := A[1]; i := 1 while h < n do i := i+1; if i > n then i := 1 if x+1 = A[i] then x := A[i]; h := 0 else h := h+1 (c) i := 1; while i < n do i := 2i+1

11 MAT laskuharjoituksia AV Arvioi seuraavien algoritmien hitaimman ja nopeimman tapauksen suoritusaikaa O-, Ω- ja/tai Θ-merkinnällä. (a) s := 0; i := 1; while s < n do s := s+i; i := i+1 (b) for i := 2 to n do p[i] := true for i := 2 to n do if p[i] then print(i); j := 2i while j n do p[j] := false; j := j +i (c) Oletetaan, että A[1] A[2]... A[n]. a := 1; y := n while A[a]+A[y] x a < y do if A[a]+A[y] < x then a := a+1 else y := y Arvioi seuraavien algoritmien hitaimman ja nopeimman tapauksen suoritusaikaa O-, Ω- ja/tai Θ-merkinnällä. (a) m := 0 for i := 0 to n do j := i while j > 0 do if j mod2 = 1 then m := m+1 j := j/2 (b) t := n for i := 1 to n do s := t for j := 1 to s do t := t Suunnittele algoritmi, joka ei käytä monimutkaisia tietorakenteita, ja joka selvittää, esiintyykö mikään luku ainakin kahdesti taulukossa A[1... n]. (Vain ne tietorakenteet on sallittu, joita on jo käsitelty luennoilla tai jotka olet itse keksinyt.) Mikä on algoritmisi asymptoottinen suoritusaika? Saatko suoritusajaksi O(n log n) siten, että keskimääräisen suoritusajan takaava vastaus ei riitä? 64. On n opiskelijaa ja m esitelmäaikaa. S[i, j] = true jos ja vain jos opiskelijalle i sopii pitää esitelmä aikana j. Samana aikana ei voi olla useampaa kuin yksi esitelmä. Seuraava algoritmi yrittää etsiä jokaiselle opiskelijalle esitelmäajan. for j := 1 to m do O[j] := 0 for i := 1 to n do for k := 1 to i do Y[k] := false if yritä(i) then return false return true yritä(i) {false, true} if Y[i] then return false Y[i] := true for j := 1 to m do if S[i,j] then if O[j] = 0 yritä(o[j]) then O[j] := i; return true return false (a) Perustele, että jos yritä(i) palauttaa true, niin jokaisella opiskelijalla 1, 2,..., i on aika. Miten opiskelijalle i varattu aika on ilmaistu taulukoiden sisältöinä?

12 MAT laskuharjoituksia AV (b) Tarkastellaan tilannetta, jossa opiskelijoilla 1, 2,..., i 1 on ajat. Perustele, että jos aikoja siirtämällä on mahdollista varata aika myös opiskelijalle i, niin algoritmi onnistuu tekemään niin. (c) Mikä on taulukon Y tehtävä tai vaikutus algoritmin suoritukseen? (d) Arvioi algoritmin hitaimman tapauksen suoritusaikaa O- tai Θ-merkinnällä. 65. Osoita, että Insertion-sortin keskimääräinen suoritusaika on Θ(n 2 ), jos kaikki alkiot ovat erisuuria. Vihje: tarkastele niiden i ja j määrää, joille 1 i < j n ja A[i] > A[j]. Ajattele, että x on aukon kohdalla. Miten parien määrä muuttuu sijoituksessa A[j] := A[j 1]? Ajattele, että alkuperäinen taulukko luodaan arpomalla luvuille 1, 2,..., n paikat siten, että kun i 1 lukua on saanut paikkansa, i osuu samalla todennäköisyydellä minkä tahansa niistä eteen tai kaikkien perään. 66. Lukujen x 1, x 2,..., x n liukuva mediaani ikkunan koolla 2w+1 tarkoittaa lukujonoa m 1, m 2,..., m n 2w, missä kukin m i on luvuista x i, x i+1,..., x i+2w suuruusjärjestyksessä keskimmäinen. Tarkastellaan algoritmia, joka ottaa ensin vastaan luvut x 1, x 2,..., x 2w. Sitten se ottaa lukuja vastaan yksi kerrallaan ja aina luvun x 2w+i saatuaan palauttaa luvun m i. Oletetaan, että se perustuu vertailemiseen ja käyttää aikaa t(w) lukua kohti. Osoita, että hitaimmillaan t(w) Ω(log w). 5 Tärkeimmät tietorakenteet 67. Näytä, miten jono voidaan rakentaa kahdesta pinosta siten, että yksittäinen toiminto voi olla hidas, mutta tyhjästä jonosta aloittavan n:n mittaisen toimintojonon suoritusaika on silti Θ(n). 68. Oletetaan, että osoitin vie yhden sanan ja samoin kokonaisluku. Pino toteutetaan linkitettynä listana, jonka jokaisessa tietueessa on korkeintaan kolme pinon alkiota ja osoitin seuraavaan tietueeseen. Lisäksi on osoitin listan alkuun sekä muuttuja, joka pitää kirjaa pinossa olevien alkioiden määrästä eli luvusta n. (a) Etsi mahdollisimman pieni vakio a ja sen jälkeen mahdollisimman pieni vakio b siten, että kun pinossa on n alkiota, niin muistin kulutus on enintään an+b sanaa. (b) Vertaa tämän toteutuksen muistin kulutusta suurilla n tavalliseen tapaan linkitettynä listana toteutettuun pinoon. (c) Vertaa tämän toteutuksen muistin kulutusta suurilla n taulukkona toteutettuun pinoon, jossa taulukon koko kaksinkertaistuu aina, kun n ohittaa kahden potenssin. Älä laske taulukkototeutuksen muistin kulutukseen mukaan sitä muistia, jota taulukko ei enää käytä. 69. Etsi esim. Wikipediasta, mikä on hyppylista (skip list) ja kerro se muille läsnäolijoille.

13 MAT laskuharjoituksia AV Oletetaan, että on n alkiota, ja etsintä kohdistuu alkioon i todennäköisyydellä p i, missä 1 i n. Alkiot on talletettu linkitettyyn listaan. Alkioita ei lisätä eikä poisteta. Joka kerta kun käsitellään alkiota i, se siirretään listan ensimmäiseksi. (a) Oletetaan, että p i = 1 n. Mikä on haun asymptoottinen ajan kulutus? (b) Oletetaan, että p i = 2 i /(1 2 n ) ja lista on i:n mukaisessa järjestyksessä, alkio 1 ensin. Mikä on haun asymptoottinen ajan kulutus? (c) Oletetaan, että p i = c n /i 2 ja lista on i:n mukaisessa järjestyksessä, alkio 1 ensin. Luku c n = ( n i=1 i 2 ) 1 vaihtelee n:n mukana niin vähän, että sitä ei tarvitse ottaa huomioon. Mikä on haun asymptoottinen ajan kulutus? 71. Kirjoita epätyhjästä keosta poistamisen algoritmi uusiksi siten, että keon suurin on lokerossa A[0] ja keko ulottuu lokeroon A[n 1] asti. 72. Oletetaan, että k on paljon pienempi kuin n. Luonnostele algoritmi, joka ajassa O(n log k) tulostaa n alkion joukosta k suurinta. Keskimääräisen suoritusajan takaava vastaus ei riitä. 73. Oletetaan, että rekisteritunnus koostuu enintään kolmesta kirjaimesta ja enintään kolmesta numeromerkistä. Kaikki suomalaisen aakkoston 29 kirjainta ovat käytössä. Numero-osuus voi alkaa nollalla vain jos se on 0. Kumpikaan osuus ei ole tyhjä. (a) Kuinka monta erilaista rekisteritunnusta on olemassa? (b) Oletetaan, että rekisterissä on noin ajoneuvoa. Valitse hajautustaulun koko ja suunnittele hajautusfunktio. 74. Heebo ehdotti, että jos käytetään tarpeeksi suurta hajautustaulua, niin kahden eri avaimen osuminen samaan lokeroon on niin epätodennäköistä, että siihen ei tarvitse varautua. Tällöin voitaisiin käyttää taulua, jossa alkiot ovat suoraan, eikä linkitettyjä listoja tarvittaisi. Etsi netistä syntymäpäiväongelma ja selvitä, kuinka monta alkiota enintään voidaan laittaa 365 alkion tauluun, jos todennäköisyyden on oltava alle 50% sille, että kaksi eri alkiota osuu samaan lokeroon. Kommentoi Heebon ehdotuksen toimivuutta. 75. Tavoitteena on tallettaa kappaletta 21-bittisiä lukuja mahdollisimman vähällä muistilla, kun lukujen jakauma voidaan olettaa satunnaiseksi. (a) Luvut talletetaan peräkkäisiin tavuihin mahdollisimman tiiviisti. Ensimmäinen luku varaa kaksi ensimmäistä tavua ja kolmannesta tavusta 5 bittiä. Toinen luku varaa kolmannen tavun loput 3 bittiä, kaksi seuraavaa tavua ja kuudennesta tavusta 2 bittiä. Kolmas luku varaa kuudennen tavun loput bitit, seitsemännen tavun ja yhtä bittiä vaille kahdeksannen tavun. Näin jatketaan. Kuinka monta tavua tarvitaan kaikkiaan?

14 MAT laskuharjoituksia AV (b) Luvut talletetaan erikoisvalmisteiseen hajautustauluun. Siinä on perustaulukko, jossa on kappaletta 9-tavuisia tietueita sekä ylivuototaulukko, jossa on kappaletta 3-tavuisia tietueita. Luvun vähiten merkitseviä 10 bittiä käytetään valitsemaan yksi perustietue. Perustietueessa on 6 kappaletta 11-bittisiä lokeroita. Luvun eniten merkitsevät 11 bittiä talletetaan ensimmäiseen vapaaseen lokeroon. Perustietueessa on myös 3-bittinen koodi, jonka arvot 0,..., 6 tarkoittavat, että lokeroista niin monta on käytössä, ja arvo 7 tarkoittaa, että 5 lokeroa on käytössä ja kuudes lokero sisältää linkin ylivuototietueeseen. Ylivuototietueessa on kaksi 11-bittistä lokeroa sekä samanlainen koodi. Tarkasta, että perustietue mahtuu sille varattuun määrään tavuja. Jääkö muistia hyödyntämättä? Tee sama tarkastus ylivuototietueelle. Onko linkeissä riittävästi bittejä? (c) Arvioi, montako ylivuototietuetta tarvitaan. Pituutta k olevien listojen määrä on laskettu oheen kaavasta me n/m (n/m) k /k!, missä m = 1024 ja n = Kaava on paljon tarkempi kuin tarvittaisiin. Onko varattu riittävästi ylivuototietueita? pituus määrä (d) Laske hajautustaulun käyttämän muistin määrä. Huomaatko mitään yllättävää? Keksitkö selityksen? 76. Oletetaan, että binäärihakupuun jokaisessa solmussa on ylimääräinen kenttä n, jonka sisältö kertoo, montako solmua on siinä alipuussa, jonka juuri on ko. solmu. Kirjoita hitaimmillaan puun korkeuteen verrannollisessa ajassa toimiva algoritmi, jolle annetaan osoitin solmuun, ja joka palauttaa luvun, joka kertoo, kuinka mones ko. solmu on suuruusjärjestyksessä. 77. Radix-puu on binääripuu, jonka jokaisessa solmussa on yksi bitti ja solmulla on korkeintaan kaksi lasta, 0-lapsi ja 1-lapsi. Radix-puu tallettaa joukon bittijonoja. Bittijono on joukossa, jos ja vain jos sen mukaan voidaan kulkea puussa (ts. vuorossa olevan bitin arvoa vastaava lapsi on aina olemassa) ja päädytään solmuun, jonka bitti on päällä. Olkoon n puussa olevien bittijonojen määrä ja m puussa olevien solmujen määrä. (a) Kirjoita algoritmi, joka lisää bittijonon radix-puuhun. Olkoon bittijonossa b bittiä. Mikä on algoritmin asymptoottinen ajan kulutus? (b) Miten radix-puun avulla voidaan järjestää joukko keskenään erisuuria bittijonoja, ja mikä on sen asymptoottinen ajan kulutus? 78. Mittaa, kuinka monta tavua C++:n set-säiliön tietue vie, jos avain vie (a) yhden (b) neljä (c) 8 (d) 12 tavua. 79. C++:n säiliöt set, multiset, map ja multimap edellyttävät, että avainten vertaamista varten on operaattori. Merkitsemme sitä <. Siltä vaadittavat ominaisuudet esitetään C++-kirjallisuudessa eri tavoin. Aina vaaditaan ainakin seuraavat ominaisuudet jokaisella x, y ja z:

15 MAT laskuharjoituksia AV Irrefleksiivisyys: (x<x). Transitiivisuus: jos x<y ja y <z, niin x<z. (a) Toisinaan vaaditaan myös asymmetrisyys: jos x < y, niin (y < x). (Jos C++kirjasi kutsuu tätä antisymmetrisyydeksi, niin se on väärässä.) Osoita, että asymmetrisyys seuraa irrefleksiivisyydestä ja transitiivisuudesta. (Sitä ei siis tarvitse vaatia erikseen.) (b) Operaattori == määritellään x==y (x<y) (y<x). Osoita, että == on refleksiivinen, eli jokaisella x pätee x == x. (c) Osoita, että == on symmetrinen, eli jokaisella x ja y, joille x==y pätee, pätee myös y ==x. (d) Osoita, että == ei välttämättä ole transitiivinen. Vihje: vastaesimerkin voi rakentaa olettamalla, että on olemassa vain kolme erisuuruista arvoa. Erilaisia irrefleksiivisiä transitiivisia < on silloin niin vähän, että ne voi vaikka kokeilla kaikki. 80. Olkoot < ja == kuten edellisessä tehtävässä. (a) Osoita, että kullekin x ja y pätee täsmälleen yksi seuraavista: x<y, x== y tai y <x. (b) Osoita, että jos == on transitiivinen, x 1 ==x 2, y 1 ==y 2 ja x 1 <y 1, niin x 2 <y Tarvitaan tietorakenne tallettamaan monijoukko. Toisin sanoen, sama avain voi esiintyä useasti, eikä alkiossa ole mitään muuta tietoa kuin avain. Oletetaan, että jos alkio on joukossa ainakin yhden kerran, se on siinä keskimäärin kolme kertaa. Voit vastata kysymyksiin todellisen tai kuvitellun tietokoneen mukaan. (a) Kuinka paljon muistia kuluu alkion talletuskertaa kohden, jos tietorakenteeksi valitaan C++:n multiset? (b) Kuinka paljon muistia kuluu alkion talletuskertaa kohden, jos valitaan map, ja talletetaan alkiosta ja luvusta koostuvia pareja, missä luku kertoo alkion esiintymiskertojen määrän? (c) Minkälaisessa tilanteessa multiset on hyödyllinen? Vihje: etsi paperisesta suomenkielisestä sanakirjasta Watti tai puhelinluettelosta Wikström. 6 Algoritmien oikeaksi todistaminen 82. Anna oheisen ohjelman sisemmälle silmukalle invariantti. Ei tarvitse osoittaa, että se on pätevä. for i := 1 to n 1 do k := i for j := i+1 to n do if A[j].x < A[k].x then k := j apu := A[i]; A[i] := A[k]; A[k] := apu

16 MAT laskuharjoituksia AV (a) Miksi k;2 k < i : A[k 1].x A[k].x ei ole edellisen tehtävän ohjelman ulomman silmukan invariantti? (b) Anna edellisen tehtävän ohjelman ulommalle silmukalle invariantti. Ei tarvitse osoittaa, että se on pätevä. 84. Seuraavan ohjelman tehtävä on laskea polynomin n i=0 A[i]xi arvo tehokkaasti. Anna sille silmukkainvariantti ja osoita, että se on silmukkainvariantti. y := 0 for i := n downto 0 do y := x y +A[i] 85. Anna seuraavalle ohjelmalle silmukkainvariantti. Ei tarvitse osoittaa, että se on pätevä. { ( i;1 i < n : A[i] A[i+1] ) i : j;1 i < j n : A[i]+A[j] = x } a := 1; y := n while A[a]+A[y] x a < y do if A[a]+A[y] < x then a := a+1 else y := y 1 { A[a]+A[y] = x } 86. Tarkoittakoon #(A[a...y],x) (osa)taulukossa A[a...y] olevien alkioiden x määrää. Osoita seuraava ohjelma oikeaksi. Huomaa, että lsk ei välttämättä ole siihen mennessä kohdattujen oikeiden ja väärien alkioiden määrien erotus eikä sen vastaluku. { #(A[1...n], avain) > n 2 } lsk := 0 for i := 1 to n do if lsk = 0 then arvaus := A[i] if A[i] = arvaus then lsk := lsk+1 else lsk := lsk 1 { arvaus = avain } 87. Luentojen muunnettu binääripotenssi jää ikuiseen silmukkaan, kun n = 1. Muunna sitä edelleen niin, että se tuottaa silloin oikean vastauksen. 88. Risteykset on numeroitu 1,..., n. Alun perin P[i,j] sisältää risteyksestä i risteykseen j vievän tienpätkän pituuden tai erityisen arvon, jota merkitsemme, kertomaan, että tienpätkää ei ole. Suunnittele Θ(n 3 ) algoritmi, jonka lopetettua P[i, j] sisältää lyhimmän risteyksestä i risteykseen j vievän reitin pituuden. Algoritmin pääsilmukan kierroksen alussa P[i, j] sisältää lyhimmän sellaisen risteyksestä i risteykseen j vievän reitin pituuden, joka lukuunottamatta aloituskohtaa i ja lopetuskohtaa j ei kulje sellaisen risteyksen kautta, jonka numero on k tai enemmän. 89. Lasten pelissä jokainen pelaaja on aluksi ameeba. Pelaajat kiertelevät huoneessa sinne tänne. Kun kaksi ameebaa kohtaa, he heittävät lanttia. Sen voittaja

17 MAT laskuharjoituksia AV ylenee hiireksi ja häviäjä jää ameebaksi. Kun kaksi hiirtä kohtaa, he heittävät lanttia. Sen voittaja ylenee apinaksi ja häviäjä palaa ameebaksi. Samalla lailla kahden apinan kohdatessa toinen ylenee ihmiseksi ja toinen palaa ameebaksi. Ihmiset eivät jatka peliä. Osoita, että peli päättyy joskus. 90. Anna päättymätön kasvavassa suuruusjärjestyksessä oleva jono toinen toistaan pidempiä sanoja, joista mikään ei ole toisen aito alkuosa. 91. Laske seuraavat heikoimmat esiehdot. Taulukon A indeksialue on 1,..., n. (a) wp(i := i+1, 1 i n) (b) wp(x := y +2, x < y) (c) wp(x := a x, x a) (d) wp(a[1] := 3, 1 i n A[i] = 3) (e) wp(a[i] := 0, 1 i j n A[i] < A[j]) (f) wp(apu := A[i]; A[i] := A[j]; A[j] := apu, k;1 k < n : A[k] < A[k +1]) 92. Laske seuraavat heikoimmat esiehdot. Taulukon A indeksialue on 1,...,n ja A 0 sisältää taulukon A arvon juuri ennen lausetta. (a) wp(x := x 3, x 0 x 1) (b) wp(vaje := vaje 2 2b x 2 b+1 ; x := x+2 b, 0 vaje < x 2 b b ) (c) wp( b := b 1 if x 2 b b vaje then vaje := vaje 2 2b x 2 b+1 ; x := x+2 b, 0 vaje < x 2 b b ) (d) wp(a[i] := A[i]+A[i 1], 1 < i n A[i] = i j=1 A 0[j]) (e) wp(a[i] := A[i]+A[i 1], 1 < i n A[i] = i j=1 A[j]) (f) wp(a[i] := A[i]+A[i 1], 1 < i n A[i] = i 1 j=1 A[j]) 93. Todista, että C (C wp(s 1,Q) C wp(s 2,Q)) jac ( C wp(s 1,Q)) (C wp(s 2,Q)) ovat yhtäpitävät. Propositiologiikka riittää tehtävän ratkaisemiseen. 94. Taulukko A indeksoidaan 1,..., n. Muuta puolitushaku sellaiseksi, että se löytää viimeisen kohdan, jossa A[i] x. Mitä sen pitää tehdä, jos x on pienempi kuin mikään A:n alkio? 95. Osoita, että oheinen ohjelma pysähtyy, ja että lopuksi n on lukujen n 0 ja m 0 suurin yhteinen tekijä.

18 MAT laskuharjoituksia AV { n = n 0 > 0 m = m 0 > 0 } while m > 0 do n := nmodm if n > 0 then m := mmodn else n := m; m := Lisää luvun 6.5 kekoon toiminto, jolla voi muuttaa alkiota sen ollessa keossa. Toiminto ei saa perustua alkion poistamiseen ja uudelleen lisäämiseen. 7 (Moni)graafit 97. Määrittele matemaattisesti seuraavat graafiin liittyvät käsitteet. (a) Polku. Se on solmusta solmuun johtava, kaaria pitkin (kaarten suuntaisesti) kulkeva reitti. (b) Yksinkertainen polku. Se on polku, jossa mikään solmu ei toistu. (c) Silmukka. Se on polku, joka päättyy sinne, mistä se alkaa. (d) Yksinkertainen silmukka. Valitse sille edellisten kohtien kanssa johdonmukainen merkitys. 98. Olkoon V = {1,...,2n}. Kun 1 i < n, niin sekä solmusta 2i 1 että solmusta 2i on kaaret solmuihin 2i + 1 ja 2i + 2, ja sekä solmusta 2n 1 että solmusta 2n on kaaret solmuihin 1 ja 2. (a) Piirrä ko. graafi, kun n = 3. (b) Kuinka monta silmukkaa graafilla on (n:n funktiona)? (c) Kuinka monta sellaista silmukkaa graafilla on (n:n funktiona), jossa mikään solmu ei toistu? (Toistumiseksi ei lasketa sitä, että silmukan umpeutuessa tullaan takaisin solmuun, josta silmukka alkoi.) 99. Graafin Eulerin kierros on silmukka, joka käyttää jokaisen kaaren täsmälleen kerran. Suunnittele ihmisten suoritettavaksi sopiva menetelmä, joka löytää Eulerin kierroksen, jos graafissa on sellainen Voiko leveyteen ensin -haussa syntyä tilanne, jossa u on jonossa, u ja kaikilla v u pätee v.found = true? 101. Leveyteen ensin -haussa voi jonon Q sijaan käyttää kahta joukkoa Q 1 ja Q 2 siten, että ajoittain haku ottaa solmuja Q 1 :stä ja panee niiden löytämättömät seuraajat Q 2 :een, ja ajoittain tekee samaa Q 1 :n ja Q 2 :n roolit vaihdettuina. Joukkojen Q 1 ja Q 2 toteutuksella ei ole väliä. Solmujen poistamisen sijaan algoritmi voi selata Q 1 :n läpi ja sitten tyhjentää Q 1 :n. (a) Kirjoita pseudokoodi.

19 MAT laskuharjoituksia AV (b) Lisätään kolmas joukko Q 3. Oletetaan, että graafi on suuntaamaton ja käytettävissä on tehokkaat testit v Q 1, v Q 2 ja v Q 3. Muuta edellisen kohdan pseudokoodia siten, että solmuissa ei tarvita.found-kenttiä. Perustele, että ratkaisusi toimii oikein Graafin solmut ovat {(i,j) 1 i 3 1 j 3}. Solmusta (i,j) on kaari solmuun ((imod3)+1,j) ja solmuun (i,(jmod3)+1). Haku alkaa solmusta (1,1) ja tutkii solmusta lähtevät kaaret siinä järjestyksessä, kuin ne on mainittu edellä. (a) Missä järjestyksessä leveyteen ensin -haku löytää solmut? (b) Missä järjestyksessä syvyyteen ensin -haku löytää solmut? 103. Lisää rekursiiviseen syvyyteen ensin -hakuun lauseet, jotka tallettavat.prevkenttiin takaperin polun haun aloitussolmusta kuhunkin solmuun Suunnittele ajassa O( V + E ) toimiva algoritmi, joka joko kertoo, että opintojaksojen esitietoketjuissa on silmukka, tai luettelee opintojaksot sellaisessa järjestyksessä, että kun opintojakso mainitaan, sen kaikki esitiedot on jo mainittu Suuntaamattoman graafin katkossolmu on solmu, jonka ja johon liittyvien kaarten poistaminen jakaa graafin ainakin kahteen erilliseen osaan. Suunnittele ajassa O( V + E ) toimiva algoritmi, joka löytää katkossolmut. Vihje: käytä syvyyteen ensin -hakua ja numeroi solmut juoksevilla numeroilla sitä mukaa kuin haku löytää ne. Kun haku peruuttaa, se tuo pienimmän kohtaamansa numeron mukanaan kuitenkin siten, että haku ei katso numeroa siitä solmusta, josta nykyiseen solmuun alun perin tultiin Vertaa rekursiivisen ja yleisestä hausta tehdyn syvyyteen ensin -haun ajan ja muistin kulutuksia toisiinsa Osoita vastaesimerkillä, että yleinen haku pinolla ei tuota syvyyteen ensin -hakua, jos.next-mekanismin sijaan W:hen laitetaan u Suunnatun graafin (V, E) solmut jaetaan kahteen erilliseen joukkoon: jasolmuihin V ja tai-solmuihin V. (Siis V V = ja V V = V.) Lisäksi v 0 V. Tavoitteena on löytää osajoukkomielessä mahdollisimman pieni joukko solmuja U siten, että (1) v 0 U, (2) jos v U V niin v U, ja (3) jos v U V niin v U. Siis U:n pitää täyttää em. ehdot ja jos U U, niin U ei saa täyttää ehtoja. U:n alkioiden määrän ei tarvitse olla mahdollisimman pieni. (a) Osoita esimerkillä, että U ei välttämättä ole yksikäsitteinen. (b) Osoita esimerkillä, että haku, joka aloittaa v 0 :sta ja lisää solmuja seuraavasti ei välttämättä tuota oikeaa vastausta. Olkoon u sen löytämä solmu. Jos u V, se ottaa mukaan jokaisen v u. Jos u V, se katsoo, onko se jo ottanut mukaan ainakin yhden v u. Jollei se ole, se valitsee mielivaltaisen v u ja ottaa mukaan sen.

20 MAT laskuharjoituksia AV (c) Suunnittele ajassa O( V 2 + V E ) toimiva algoritmi, joka löytää (jonkin) oikean vastauksen. Vihje: se perustuu solmujen poistamiseen. Jos poistamisen seurauksena myös v 0 pitäisi poistaa, niin poistaminen perutaan Junilla matkustettaessa joskus tärkeintä ei ole päästä perille mahdollisimman varhain vaan minimoida matka-aikaa, johon lasketaan mukaan odotukset vaihtoasemilla mutta joka alkaa vasta ensimmäisen junan lähdöstä ja loppuu kun viimeinen juna saapuu perille. Muunna Dijkstran algoritmi ratkaisemaan tämä tehtävä Osoita, että jos prioriteettijonon toiminta perustuu vertailemiseen, niin Dijkstran algoritmia ei saa toimimaan nopeammin kuin O( V log V ) Suunnittele graafeille esitys, joka mahdollistaa Dijkstran vahvojen komponenttien algoritmin toteuttamisen tehokkaasti. 8 Informaatioteoriaa 112. Ihmisen DNA-sekvenssissä on noin 3,23483 miljardia emäsparia (Wikipedia Human genome ). Emäspari on A T, T A, C G tai G C. Kuinka paljon muistia tarvitaan yhden ihmisen DNA-sekvenssin tallettamiseen? Riittääkö rekkaautollinen muistitikkuja? 113. Etsi Internetistä tietoa UTF-8-koodista. Onko se itserajaava? 114. Olkoon alkio kokonaisluku väliltä 0,..., 255. Joukossa sama alkio ei voi mutta monijoukossa voi esiintyä useasti. (a) Kuinka monta erilaista 2 alkion taulukkoa, 2 alkion joukkoa ja 2 alkion monijoukkoa on olemassa? (b) Kuinka paljon muistia joukko tarvitsee, jos se esitetään varaamalla yksi bitti mahdollista alkiota kohden niin että alkio on joukossa jos ja vain jos sen bitti on 1? (c) Enintään kuinka monen alkion joukko voidaan esittää edellisessä kohdassa tulokseksi saadulla muistin määrällä, jos esitystapana on alkioiden luetteleminen taulukossa? 115. Olkoon erilaisia alkioita m kappaletta. (a) Kuinka monta erilaista k alkion jonoa on olemassa? (b) Kuinka monta erilaista enintään n alkion jonoa on olemassa? (c) Kuinka paljon muistia enintään n alkion jonon esittämiseen vähintään tarvitaan, jos esitystavan muistin määrä ei riipu esitettävästä jonosta? (d) Kuinka paljon rengaspuskuri, jonka kapasiteetti on n, käyttää muistia?

21 MAT laskuharjoituksia AV (e) Olkoon rengaspuskurin kapasiteetti n. Kuinka monta eri esitystapaa on jonolla, jossa on k alkiota? 116. Osoita, että luennoilla esitetyssä lukujen koodissa(2n+1)-bittiset koodisanat esittävät luvut 2 n 1,...,2 n+1 2 ja että jokaiselle luonnolliselle luvulle on tasan yksi koodisana C++:n tekstialkioihin kuuluvat <, <<, <=, =, ==, >, >= ja >>. Ne käyttävät merkkejä <, = ja >. Ajatellaan välilyönti neljänneksi merkiksi. Merkin voi siis esittää kahdella bitillä. Laske Kraftin summa. Huomaatko mitään omituista, ja keksitkö omituisuudelle selityksen? 118. Verrataan kahta tapaa esittää joukko lukuja väliltä 0,..., 15. Yksinkertaisemmassa tavassa käytetään 16 bittiä. Bitin i arvo on 1 jos ja vain jos i kuuluu joukkoon. Monimutkaisemmassa tavassa käytetään 5 tai 17 bittiä. Jos ensimmäisen bitin arvo on 0, niin seuraavat 16 bittiä esittävät joukon yksinkertaisemmalla tavalla. Jos se on 1, niin joukossa on tasan yksi alkio, ja seuraavat 4 bittiä esittävät sen. (a) Kuinka monta erilaista joukkoa ko. luvuista on olemassa? (b) Kuinka monta bittiä monimutkaisempi esitystapa kuluttaa keskimäärin, jos jokainen joukko on yhtä todennäköinen? 119. Kirjainten esiintymistiheydet kymmenestuhannesosina Suomen kirjakielessä ovat oheisen taulukon mukaiset (Matti Pääkkönen, Kielikello 1/1991 s. 3). Laske Shannonin alaraja sille, kuinka monta bittiä vähintään tarvitaan kirjainta kohti. a i t n e s l k o u ä m v r j h y p d ö g b f c w å q Laadi Huffmanin koodi edellisen tehtävän esiintymistiheystaulukon pohjalta ja laske kirjaimen keskimäärin käyttämä bittimäärä Oletetaan, että positiivinen kokonaisluku i esiintyy todennäköisyydellä 2 i. Valitse esitystapa, joka vie keskimäärin mahdollisimman vähän muistia. 9 Tiedon pakkaus ja salaus 122. Suunnatun graafin solmut on numeroitu 1,..., V. Kukin luku esitetään yhdellä nelitavuisella sanalla. Kuinka paljon muistia kumpikin seuraavista esitystavoista vie V :n ja E :n funktiona? Missä tilanteissa tapa (b) käyttää vähemmän muistia?

22 MAT laskuharjoituksia AV (a) Tiedoston alussa on sana, jonka sisältö on V. Kukin kaari on ilmaistu kahdella sanalla, joista ensimmäinen ilmaisee alkupään solmun ja jälkimmäinen loppupään solmun. Tiedoston lopun ilmaisee sana, jonka sisältö on 0. (b) Tiedoston alussa on sana, jonka sisältö on V. Sen jälkeen on lueteltu niiden solmujen numerot, joihin solmusta 1 on kaari. Sitten on sana, jonka sisältö on 0. Sen jälkeen on lueteltu niiden solmujen numerot, joihin solmusta 2 on kaari. Sitten on sana, jonka sisältö on 0. Tämä toistuu jokaiselle solmulle Oletetaan, että LZW-pakkaajan muunnostaulukko kasvaa rajatta. Oletetaan, että syötteessä on n tavua, joiden arvo on 0, eikä mitään muuta. Kuinka paljon muistia pakattu tiedosto vie esitettynä n:n funktiona Θ-merkinnällä? 124. Oletetaan, että LZW-pakkaaja nollaa muunnostaulukon juuri ennen kuin k saisi arvon 13. Oletetaan, että syöte on hyvin pitkä ja siinä on vain 0-tavuja. Pakattu tiedosto koostuu siis jaksoista, joissa muunnostaulukko täyttyy ja sitten tulee nollauskoodi. Kuinka monta bittiä tällainen jakso sisältää ja kuinka monta syötteen bittiä se esittää? 125. Etsi netistä tai muilla keinoin, voidaanko kirjoittaa C++-ohjelma, joka ei lue syötettä eikä tiedostoja, ja joka tulostaa oman lähdekoodinsa ja sen perään /* Hei maailma! */. Äkkipäätä voisi ajatella, että ohjelman lähdekoodi ei voi mahtua itsensä sisään, mutta älä tyydy näin yksioikoiseen ajatukseen Etsi netistä tietoa DES-salausmenetelmistä. Kuinka pitkien avainten käyttöä nykyisin suositellaan? 127. Yhteydenottajan tunnistamiseen käytetään usein ns. haaste vaste-protokollaa: palvelin esittää yhteydenottajalle kysymyksen, johon luvallinen yhteydenottaja pystyy vastaamaan oikein mutta muut oletettavasti eivät. Pankkitunnusten lukuparit ovat arjesta tuttu esimerkki. Esimerkiksi lähimaksukorttien tapauksessa kummankin osapuolen on varmistuttava toisen osapuolen laillisuudesta. Silloin voidaan käyttää haaste vaste-protokollaa molempiin suuntiin. Osoita, että jos molempiin suuntiin käytetään samaa lukuparien taulukkoa, niin protokolla on murrettavissa erittäin helposti (paitsi jos protokollassa on erikseen varauduttu ko. hyökkäykseen). 10 Ratkeamattomuus ja laskennallinen vaativuus 128. Miksi Cantorin diagonalisointitodistuksessa kielletään päättymättömien 9- jonojen käyttö luettelossa? 129. Ratkeamattomien tehtävien olemassaolo voidaan todistaa suoraan tavalla, joka muistuttaa erityisen paljon Cantorin diagonalisointia. Sanomme, että syötettä lukematon pysähtymätön ohjelma on desimaalitulostin, jos ja vain jos se tulostaa 0, (siis nolla pilkku) ja sen perään loputtoman jonon numeromerkkejä. Oleta, että on olemassa ohjelma, jolla voi testata, onko merkkijono desimaalitulostin. Osoita,

23 MAT laskuharjoituksia AV että sen avulla desimaalitulostimet voi laittaa jonoon. Muodosta diagonalisoimalla desimaalitulostin, joka ei ole jonossa. Mikä tehtävä tuli osoitettua ratkeamattomaksi? 130. Oletetaan, että tietokoneessa on kaikki muisti, rekisterit, yms. huomioon ottaen n bittiä tallennustilaa. (a) Osoita, että jos tietokoneeseen voidaan kytkeä laite, joka laskee tietokoneen suorittamia askelia, ja jonka laskurissa on ainakin n+1 bittiä, niin voidaan selvittää, pysähtyykö ko. tietokone annetulla ohjelmalla ja syötteellä. (b) Perustele, että tämä lähestymistapa on epäkäytännöllinen jo melko pienillä n:n arvoilla, esim. n = Olkoon n-ratkaisija ohjelma, joka ratkaisee kysymyksen pysähtyykö annettu ohjelma annetulla syötteellä viimeistään n askeleen jälkeen. Luku n ei ole osa ratkaisijan syötettä, vaan kukin ratkaisija on tehty jollekin kiinteälle n:n arvolle. (a) Osoita, että jokaisella n N on olemassa n-ratkaisija. (b) Osoita, että jokaisella n-ratkaisijalla on syöte, jolla se joutuu itse suorittamaan melkein n askelta. Täsmällisemmin: on olemassa vakio c siten, että jokaisella n-ratkaisijalla on syöte, jolla se laskee vähintään n c askelta Tyhjän syötteen pysähtymistesterin olemattomuus voidaan todistaa myös seuraavasti. Tarkastellaan tietokoneohjelmaa P i, missä i N. Se muodostaa kaikki merkkijonot, joiden pituus on enintään i. Kullekin niistä se kokeilee tyhjän syötteen pysähtymistesterillä, onko ko. merkkijono tyhjällä syötteellä pysähtyvä ohjelma. Jos se on, P i ajaa sen. Sen tulosteet ovat osa P i :n tulosteita. Lopuksi P i tulostaa vielä jotain epätyhjää. Kunkin enintään i merkkiä pitkän pysähtyvän ohjelman tulostus on siis osa P i :n tulostusta ja eri kuin P i :n tulostus. (a) Miksi P i laitetaan lopuksi tulostamaan vielä jotain epätyhjää? (b) Ilmoita Θ-merkinnällä P i :n koko i:n funktiona olettaen, että i on esitetty P i :n sisällä numeromerkkien jonona. (c) Johda ristiriita Loogisessa kaavassa esiintyvä muuttuja x on sidottu jos ja vain jos se esiintyy osakaavassa muotoa x : ϕ tai x : ϕ. Muuttuja on vapaa jos ja vain jos se ei ole sidottu. Kaavan vapaat muuttujat ovat ikään kuin kaavan syöte. Esim. kaavassa y : y 2 = x muuttuja x on vapaa ja y on sidottu, ja kaava väittää, että x:llä on neliöjuuri. Oletetaan, että kaavat puhuvat luonnollisista luvuista. Sanomme, että yhden vapaan muuttujan kaava Q(i) on saatavissa kahden vapaan muuttujan kaavasta P(i,j), jos ja vain jos j : i : Q(i) P(i,j), toisin sanoen, jos ja vain jos sijoittamalla j:lle sopiva arvo P(i,j):ssä saadaan kaava, joka on yhtäpitävä Q(i):n kanssa. Esimerkiksi kaava, joka sanoo, että i on parillinen, on saatavissa kaavasta k : i = j k sijoittamalla j = 2. Osoita diagonalisoimalla, että ei ole olemassa kahden vapaan muuttujan kaavaa P(i,j) siten, että jokainen yhden vapaan muuttujan kaava on saatavissa siitä.

MAT Tieto ja laskenta laskuharjoituksia

MAT Tieto ja laskenta laskuharjoituksia MAT-71000 Tieto ja laskenta laskuharjoituksia Antti Valmari Tampereen teknillinen yliopisto 31.3.2016 Tehtävien tähtiluokitus Tehtävät on yritetty luokitella helppoihin (ei tähtiä), keskivaikeisiin (yksi

Lisätiedot

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta 811312A Tietorakenteet ja algoritmit 2017-2018 Kertausta kurssin alkuosasta II Perustietorakenteet Pino, jono ja listat tunnettava Osattava soveltaa rakenteita algoritmeissa Osattava päätellä operaatioiden

Lisätiedot

Datatähti 2019 loppu

Datatähti 2019 loppu Datatähti 2019 loppu task type time limit memory limit A Summa standard 1.00 s 512 MB B Bittijono standard 1.00 s 512 MB C Auringonlasku standard 1.00 s 512 MB D Binääripuu standard 1.00 s 512 MB E Funktio

Lisätiedot

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

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia 58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, 10..2014, vastauksia 1. [9 pistettä] (a) Todistetaan 2n 2 + n + 5 = O(n 2 ): Kun n 1 on 2n 2 + n + 5 2n 2 + n 2 +5n 2 = 8n 2. Eli

Lisätiedot

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

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: Tietorakenteet, laskuharjoitus 10, ratkaisuja 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: SamaLuku(T ) 2 for i = 1 to T.length 1 3 if T [i] == T [i + 1] 4 return True 5 return

Lisätiedot

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Tietorakenteet, laskuharjoitus 7, ratkaisuja Tietorakenteet, laskuharjoitus, ratkaisuja. Seuraava kuvasarja näyttää B + -puun muutokset lisäysten jälkeen. Avaimet ja 5 mahtuvat lehtisolmuihin, joten niiden lisäys ei muuta puun rakennetta. Avain 9

Lisätiedot

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö Algoritmit 1 Demot 1 31.1.-1.2.2018 Timo Männikkö Tehtävä 1 (a) Algoritmi, joka tutkii onko kokonaisluku tasan jaollinen jollain toisella kokonaisluvulla siten, että ei käytetä lainkaan jakolaskuja Jaettava

Lisätiedot

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 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ätiedot

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 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ätiedot

Tietotekniikan valintakoe

Tietotekniikan 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ätiedot

Tietorakenteet ja algoritmit - syksy 2015 1

Tietorakenteet 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ätiedot

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet 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ätiedot

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö Algoritmit 1 Luento 8 Ke 1.2.2017 Timo Männikkö Luento 8 Järjestetty binääripuu Solmujen läpikäynti Binääripuun korkeus Binääripuun tasapainottaminen Graafit ja verkot Verkon lyhimmät polut Fordin ja Fulkersonin

Lisätiedot

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9 Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9 Tuntitehtävät 9-10 lasketaan alkuviikon harjoituksissa ja tuntitehtävät 13-14 loppuviikon harjoituksissa. Kotitehtävät 11-12 tarkastetaan loppuviikon

Lisätiedot

811312A Tietorakenteet ja algoritmit, 2014-2015, Harjoitus 7, ratkaisu

811312A Tietorakenteet ja algoritmit, 2014-2015, Harjoitus 7, ratkaisu 832A Tietorakenteet ja algoritmit, 204-205, Harjoitus 7, ratkaisu Hajota ja hallitse-menetelmä: Tehtävä 7.. Muodosta hajota ja hallitse-menetelmää käyttäen algoritmi TULOSTA_PUU_LASKEVA, joka tulostaa

Lisätiedot

811120P Diskreetit rakenteet

811120P 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ätiedot

Algoritmit 2. Luento 8 To Timo Männikkö

Algoritmit 2. Luento 8 To Timo Männikkö Algoritmit 2 Luento 8 To 4.4.2019 Timo Männikkö Luento 8 Algoritmien analysointi Algoritmien suunnittelu Rekursio Osittaminen Rekursioyhtälöt Rekursioyhtälön ratkaiseminen Master-lause Algoritmit 2 Kevät

Lisätiedot

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta 811312A Tietorakenteet ja algoritmit 2016-2017 Kertausta kurssin alkuosasta II Algoritmien analyysi: oikeellisuus Algoritmin täydellinen oikeellisuus = Algoritmi päättyy ja tuottaa määritellyn tuloksen

Lisätiedot

ja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2

ja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2 Johdatus diskreettiin matematiikkaan Harjoitus 4, 7.10.2015 1. Olkoot c 0, c 1 R siten, että polynomilla r 2 c 1 r c 0 on kaksinkertainen juuri. Määritä rekursioyhtälön x n+2 = c 1 x n+1 + c 0 x n, n N,

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 7. huhtikuuta 2017 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille. Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Kirjoita 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ätiedot

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö Algoritmit 1 Luento 1 Ti 10.1.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin toteutus Ongelman ratkaiseminen Algoritmin tehokkuus Algoritmin suoritusaika Algoritmin analysointi Algoritmit 1 Kevät 2017

Lisätiedot

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö Algoritmit 2 Luento 7 Ti 4.4.2017 Timo Männikkö Luento 7 Joukot Joukko-operaatioita Joukkojen esitystapoja Alkiovieraat osajoukot Toteutus puurakenteena Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 2/26

Lisätiedot

Algoritmit 1. Luento 13 Ti 23.2.2016. Timo Männikkö

Algoritmit 1. Luento 13 Ti 23.2.2016. Timo Männikkö Algoritmit 1 Luento 13 Ti 23.2.2016 Timo Männikkö Luento 13 Suunnittelumenetelmät Taulukointi Kapsäkkiongelma Ahne menetelmä Verkon lyhimmät polut Dijkstran menetelmä Verkon lyhin virittävä puu Kruskalin

Lisätiedot

Algoritmit 1. Luento 11 Ti Timo Männikkö

Algoritmit 1. Luento 11 Ti Timo Männikkö Algoritmit 1 Luento 11 Ti 14.2.2017 Timo Männikkö Luento 11 Algoritminen ongelmanratkaisu Osittaminen Lomituslajittelu Lomituslajittelun vaativuus Rekursioyhtälöt Pikalajittelu Algoritmit 1 Kevät 2017

Lisätiedot

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 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ätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 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ätiedot

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu 811312A Tietorakenteet ja algoritmit 2017-2018, Harjoitus 2 ratkaisu Harjoituksen aiheena on algoritmien oikeellisuus. Tehtävä 2.1 Kahvipurkkiongelma. Kahvipurkissa P on valkoisia ja mustia kahvipapuja,

Lisätiedot

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ti Timo Männikkö Algoritmit 1 Luento 12 Ti 19.2.2019 Timo Männikkö Luento 12 Osittamisen tasapainoisuus Pikalajittelun vaativuus Lajittelumenetelmien vaativuus Laskentalajittelu Lokerolajittelu Kantalukulajittelu Algoritmit

Lisätiedot

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 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ätiedot

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta 5. 1. Toteuta Pythonilla seuraava ohjelma:

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta 5. 1. Toteuta Pythonilla seuraava ohjelma: Kerta 2 Kerta 3 Kerta 4 Kerta 5 Kerta 2 1. Toteuta Pythonilla seuraava ohjelma: 2. Tulosta Pythonilla seuraavat luvut allekkain a. 0 10 (eli, näyttää tältä: 0 1 2 3 4 5 6 7 8 9 10 b. 0 100 c. 50 100 3.

Lisätiedot

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

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria Graafit ja verkot Suuntamaton graafi: eli haaroja Joukko solmuja ja joukko järjestämättömiä solmupareja Suunnattu graafi: Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria Haaran päätesolmut:

Lisätiedot

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen) TKT0001 Tietorakenteet ja algoritmit Erilliskoe 5.1.01, malliratkaisut (Jyrki Kivinen) 1. [1 pistettä] (a) Esitä algoritmi, joka poistaa kahteen suuntaan linkitetystä järjestämättömästä tunnussolmullisesta

Lisätiedot

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

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun: Tietorakenteet ja algoritmit, kevät 201 Kurssikoe 1, ratkaisuja 1. Tehtävästä sai yhden pisteen per kohta. (a) Invariantteja voidaan käyttää algoritmin oikeellisuustodistuksissa Jokin väittämä osoitetaan

Lisätiedot

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö Algoritmit 1 Luento 12 Ke 15.2.2017 Timo Männikkö Luento 12 Pikalajittelu Pikalajittelun vaativuus Osittamisen tasapainoisuus Lajittelumenetelmien vaativuus Laskentalajittelu Lokerolajittelu Kantalukulajittelu

Lisätiedot

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö Algoritmit 2 Luento 9 Ti 17.4.2018 Timo Männikkö Luento 9 Merkkitiedon tiivistäminen Huffmanin koodi LZW-menetelmä Taulukointi Editointietäisyys Algoritmit 2 Kevät 2018 Luento 9 Ti 17.4.2018 2/29 Merkkitiedon

Lisätiedot

4 Tehokkuus ja algoritmien suunnittelu

4 Tehokkuus ja algoritmien suunnittelu TIE-20100 Tietorakenteet ja algoritmit 52 4 Tehokkuus ja algoritmien suunnittelu Tässä luvussa pohditaan tehokkuuden käsitettä ja esitellään kurssilla käytetty kertaluokkanotaatio, jolla kuvataan algoritmin

Lisätiedot

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö Algoritmit 1 Demot 1 25.-26.1.2017 Timo Männikkö Tehtävä 1 (a) Algoritmi, joka laskee kahden kokonaisluvun välisen jakojäännöksen käyttämättä lainkaan jakolaskuja Jaettava m, jakaja n Vähennetään luku

Lisätiedot

Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten. Ratkaisuehdotelma

Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten. Ratkaisuehdotelma Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten Ratkaisuehdotelma Tehtävä 1 1. Etsi lukujen 4655 ja 12075 suurin yhteinen tekijä ja lausu se kyseisten lukujen lineaarikombinaationa ilman laskimen

Lisätiedot

1 Erilaisia tapoja järjestää

1 Erilaisia tapoja järjestää TIE-20100 Tietorakenteet ja algoritmit 1 1 Erilaisia tapoja järjestää Käsitellään seuraavaksi järjestämisalgoritmeja, jotka perustuvat muihin kuin vertailuun alkioiden oikean järjestyksen saamiseksi. Lisäksi

Lisätiedot

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 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ätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

Zeon PDF Driver Trial

Zeon PDF Driver Trial Matlab-harjoitus 2: Kuvaajien piirto, skriptit ja funktiot. Matlabohjelmoinnin perusteita Numeerinen integrointi trapezoidaalimenetelmällä voidaan tehdä komennolla trapz. Esimerkki: Vaimenevan eksponentiaalin

Lisätiedot

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö Algoritmit 2 Luento 13 Ti 2.5.2017 Timo Männikkö Luento 13 Merkkijonon sovitus Horspoolin algoritmi Laskennallinen vaativuus Päätösongelmat Epädeterministinen algoritmi Vaativuusluokat NP-täydellisyys

Lisätiedot

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Tietorakenteet 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ätiedot

Kurssikoe on maanantaina 29.6. Muista ilmoittautua kokeeseen viimeistään 10 päivää ennen koetta! Ilmoittautumisohjeet löytyvät kurssin kotisivuilla.

Kurssikoe on maanantaina 29.6. Muista ilmoittautua kokeeseen viimeistään 10 päivää ennen koetta! Ilmoittautumisohjeet löytyvät kurssin kotisivuilla. HY / Avoin ylioisto Johdatus yliopistomatematiikkaan, kesä 201 Harjoitus 7 Ratkaisut palautettava viimeistään perjantaina 26.6.201 klo 16.00. Huom! Luennot ovat salissa CK112 maanantaista 1.6. lähtien.

Lisätiedot

Tietorakenteet (syksy 2013)

Tietorakenteet (syksy 2013) Tietorakenteet (syksy 2013) Harjoitus 1 (6.9.2013) Huom. Sinun on osallistuttava perjantain laskuharjoitustilaisuuteen ja tehtävä vähintään kaksi tehtävää, jotta voit jatkaa kurssilla. Näiden laskuharjoitusten

Lisätiedot

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

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Esimerkki otteluvoiton todennäköisyys A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Yksittäisessä pelissä A voittaa todennäköisyydellä p ja B todennäköisyydellä q =

Lisätiedot

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä Rekursiolause Laskennan teorian opintopiiri Sebastian Björkqvist 23. helmikuuta 2014 Tiivistelmä Työssä käydään läpi itsereplikoituvien ohjelmien toimintaa sekä esitetään ja todistetaan rekursiolause,

Lisätiedot

1. Esitä rekursiivinen määritelmä lukujonolle

1. Esitä rekursiivinen määritelmä lukujonolle Matematiikan laitos Johdatus Diskrettiin Matematiikkaan Harjoitus 4 24.11.2011 Ratkaisuehdotuksia Aleksandr Pasharin 1. Esitä rekursiivinen määritelmä lukujonolle (a) f(n) = (2 0, 2 1, 2 2, 2 3, 2 4,...)

Lisätiedot

13 Lyhimmät painotetut polut

13 Lyhimmät painotetut polut TIE-20100 Tietorakenteet ja algoritmit 297 13 Lyhimmät painotetut polut BFS löytää lyhimmän polun lähtösolmusta graafin saavutettaviin solmuihin. Se ei kuitenkaan enää suoriudu tehtävästä, jos kaarien

Lisätiedot

Metropolia ammattikorkeakoulu 05.02.2015 TI00AA43-3004: Ohjelmointi Kotitehtävät 3

Metropolia ammattikorkeakoulu 05.02.2015 TI00AA43-3004: Ohjelmointi Kotitehtävät 3 : http://users.metropolia.fi/~pasitr/2014-2015/ti00aa43-3004/kt/03/ratkaisut/ Tehtävä 1. (1 piste) Tee ohjelma K03T01.cpp, jossa ohjelmalle syötetään kokonaisluku. Jos kokonaisluku on positiivinen, niin

Lisätiedot

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 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ätiedot

(1) refleksiivinen, (2) symmetrinen ja (3) transitiivinen.

(1) refleksiivinen, (2) symmetrinen ja (3) transitiivinen. Matematiikassa ja muuallakin joudutaan usein tekemisiin sellaisten relaatioiden kanssa, joiden lakina on tietyn ominaisuuden samuus. Tietyn ominaisuuden samuus -relaatio on ekvivalenssi; se on (1) refleksiivinen,

Lisätiedot

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

ALGORITMIT 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ätiedot

a k+1 = 2a k + 1 = 2(2 k 1) + 1 = 2 k+1 1. xxxxxx xxxxxx xxxxxx xxxxxx

a k+1 = 2a k + 1 = 2(2 k 1) + 1 = 2 k+1 1. xxxxxx xxxxxx xxxxxx xxxxxx x x x x x x x x Matematiikan johdantokurssi, syksy 08 Harjoitus, ratkaisuista Hanoin tornit -ongelma: Tarkastellaan kolmea pylvästä A, B ja C, joihin voidaan pinota erikokoisia renkaita Lähtötilanteessa

Lisätiedot

Matematiikassa ja muuallakin joudutaan usein tekemisiin sellaisten relaatioiden kanssa, joiden lakina on tietyn ominaisuuden samuus.

Matematiikassa ja muuallakin joudutaan usein tekemisiin sellaisten relaatioiden kanssa, joiden lakina on tietyn ominaisuuden samuus. Matematiikassa ja muuallakin joudutaan usein tekemisiin sellaisten relaatioiden kanssa, joiden lakina on tietyn ominaisuuden samuus. Matematiikassa ja muuallakin joudutaan usein tekemisiin sellaisten relaatioiden

Lisätiedot

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

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut 58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut 1. Palautetaan vielä mieleen O-notaation määritelmä. Olkoon f ja g funktioita luonnollisilta luvuilta positiivisille

Lisätiedot

TIE Tietorakenteet ja algoritmit 25

TIE Tietorakenteet ja algoritmit 25 TIE-20100 Tietorakenteet ja algoritmit 25 Tällä kurssilla keskitytään algoritmien ideoihin ja algoritmit esitetään useimmiten pseudokoodina ilman laillisuustarkistuksia, virheiden käsittelyä yms. Otetaan

Lisätiedot

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.

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, laskuharjoitus 11, ratkaisuja 1. Leveyssuuntaisen läpikäynnin voi toteuttaa rekursiivisesti käsittelemällä jokaisella rekursiivisella kutsulla kaikki tietyllä tasolla olevat solmut. Rekursiivinen

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

815338A 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ätiedot

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016 ICS-C2000 Tietojenkäsittelyteoria Kevät 206 Kierros 0, 2. 24. maaliskuuta Huom! Perjantaina 25. maaliskuuta ei ole laskareita (pitkäperjantai), käykää vapaasti valitsemassanne ryhmässä aiemmin viikolla.

Lisätiedot

Onko kuvaukset injektioita? Ovatko ne surjektioita? Bijektioita?

Onko kuvaukset injektioita? Ovatko ne surjektioita? Bijektioita? Matematiikkaa kaikille, kesä 2017 Avoin yliopisto Luentojen 2,4 ja 6 tehtäviä Päivittyy kurssin aikana 1. Olkoon A = {0, 1, 2}, B = {1, 2, 3} ja C = {2, 3, 4}. Luettele joukkojen A B, A B, A B ja (A B)

Lisätiedot

58131 Tietorakenteet ja algoritmit (syksy 2015)

58131 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ätiedot

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö Algoritmit 2 Luento 14 Ke 3.5.2017 Timo Männikkö Luento 14 Ositus ja rekursio Rekursion toteutus Kertaus ja tenttivinkit Algoritmit 2 Kevät 2017 Luento 14 Ke 3.5.2017 2/30 Ositus Tehtävän esiintymä ositetaan

Lisätiedot

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Esimerkkejä polynomisista ja ei-polynomisista ongelmista Esimerkkejä polynomisista ja ei-polynomisista ongelmista Ennen yleisempiä teoriatarkasteluja katsotaan joitain tyypillisiä esimerkkejä ongelmista ja niiden vaativuudesta kaikki nämä ongelmat ratkeavia

Lisätiedot

9 Erilaisia tapoja järjestää

9 Erilaisia tapoja järjestää TIE-20100 Tietorakenteet ja algoritmit 198 9 Erilaisia tapoja järjestää Käsitellään seuraavaksi järjestämisalgoritmeja, jotka perustuvat muihin kuin vertailuun alkioiden oikean järjestyksen saamiseksi.

Lisätiedot

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu 811312A Tietorakenteet ja algoritmit, 2018-2019, Harjoitus 3, Ratkaisu Harjoituksessa käsitellään algoritmien aikakompleksisuutta. Tehtävä 3.1 Kuvitteelliset algoritmit A ja B lajittelevat syötteenään

Lisätiedot

Python-ohjelmointi Harjoitus 2

Python-ohjelmointi Harjoitus 2 Python-ohjelmointi Harjoitus 2 TAVOITTEET Kerrataan tulostuskomento ja lukumuotoisen muuttujan muuttaminen merkkijonoksi. Opitaan jakojäännös eli modulus, vertailuoperaattorit, ehtorakenne jos, input-komento

Lisätiedot

Algoritmit 2. Luento 10 To Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö Algoritmit 2 Luento 10 To 11.4.2019 Timo Männikkö Luento 10 Merkkitiedon tiivistäminen LZW-menetelmä Taulukointi Editointietäisyys Peruutusmenetelmä Osajoukon summa Algoritmit 2 Kevät 2019 Luento 10 To

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin

Lisätiedot

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

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet ) T-79144 Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet 11-22) 26 29102004 1 Ilmaise seuraavat lauseet predikaattilogiikalla: a) Jokin porteista on viallinen

Lisätiedot

Algoritmi on periaatteellisella tasolla seuraava:

Algoritmi on periaatteellisella tasolla seuraava: Algoritmi on periaatteellisella tasolla seuraava: Dijkstra(V, E, l, v 0 ): S := { v 0 } D[v 0 ] := 0 for v V S do D[v] := l(v 0, v) end for while S V do valitse v V S jolle D[v] on minimaalinen S := S

Lisätiedot

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 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ätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 12. huhtikuuta 2019 Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä. Yksi A4-kokoinen lunttilappu

Lisätiedot

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

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko, Tehtävä 1 : 1 a) Olkoon G heikosti yhtenäinen suunnattu verkko, jossa on yhteensä n solmua. Määritelmän nojalla verkko G S on yhtenäinen, jolloin verkoksi T voidaan valita jokin verkon G S virittävä alipuu.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 26.1.2011 T-106.1208 Ohjelmoinnin perusteet Y 26.1.2011 1 / 34 Luentopalaute kännykällä käynnissä! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti Vast

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 16.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 16.9.2015 1 / 26 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

Äärellisten mallien teoria

Äärellisten mallien teoria Äärellisten mallien teoria Harjoituksen 4 ratkaisut Tehtävä 1. Määritä suurin aste k, johon saakka kuvan verkot G ja G ovat osittaisesti isomorfisia: Ratkaisu 1. Huomataan aluksi, että G =4 G : Ehrenfeucht-Fraïssé

Lisätiedot

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 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ätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 16.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 16.2.2010 1 / 41 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

isomeerejä yhteensä yhdeksän kappaletta.

isomeerejä yhteensä yhdeksän kappaletta. Tehtävä 2 : 1 Esitetään aluksi eräitä havaintoja. Jokaisella n Z + symbolilla H (n) merkitään kaikkien niiden verkkojen joukkoa, jotka vastaavat jotakin tehtävänannon ehtojen mukaista alkaanin hiiliketjua

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 21.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 21.9.2015 1 / 25 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

4.3. Matemaattinen induktio

4.3. Matemaattinen induktio 4.3. Matemaattinen induktio Matemaattinen induktio: Deduktion laji Soveltuu, kun ominaisuus on osoitettava olevan voimassa luonnollisilla luvuilla. Suppea muoto P(n) : Ominaisuus, joka joka riippuu luvusta

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin 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ätiedot

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

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut Tietorakenteet ja algoritmit (syksy 0) Toinen välikoe, malliratkaisut. (a) Alussa puu näyttää tältä: Lisätään 4: 4 Tasapaino rikkoutuu solmussa. Tehdään kaksoiskierto ensin oikealle solmusta ja sitten

Lisätiedot

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

58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen) 58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen) 1. Lisäysjärjestämisessä järjestetään ensin taulukon kaksi ensimmäistä lukua, sitten kolme ensimmäistä lukua, sitten neljä ensimmäistä

Lisätiedot

n! k!(n k)! n = Binomikerroin voidaan laskea pelkästään yhteenlaskun avulla käyttäen allaolevia ns. palautuskaavoja.

n! k!(n k)! n = Binomikerroin voidaan laskea pelkästään yhteenlaskun avulla käyttäen allaolevia ns. palautuskaavoja. IsoInt Tietokoneiden muisti koostuu yksittäisistä muistisanoista, jotka nykyaikaisissa koneissa ovat 64 bitin pituisia. Muistisanan koko asettaa teknisen rajoituksen sille, kuinka suuria lukuja tietokone

Lisätiedot

Python-ohjelmointi Harjoitus 5

Python-ohjelmointi Harjoitus 5 Python-ohjelmointi Harjoitus 5 TAVOITTEET Kerrataan silmukkarakenteen käyttäminen. Kerrataan jos-ehtorakenteen käyttäminen. Opitaan if else- ja if elif else-ehtorakenteet. Matematiikan sisällöt Tehtävät

Lisätiedot

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5) Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 27.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 27.1.2010 1 / 37 If-käsky toistokäskyn sisällä def main(): HELLERAJA = 25.0 print "Anna lampotiloja, lopeta -300:lla."

Lisätiedot

Tiraka, yhteenveto tenttiinlukua varten

Tiraka, yhteenveto tenttiinlukua varten Tiraka, yhteenveto tenttiinlukua varten TERMEJÄ Tietorakenne Tietorakenne on tapa tallettaa tietoa niin, että tietoa voidaan lisätä, poistaa, muokata ja hakea. Tietorakenteet siis säilövät tiedon niin,

Lisätiedot

Algoritmit 1. Luento 2 Ke Timo Männikkö

Algoritmit 1. Luento 2 Ke Timo Männikkö Algoritmit 1 Luento 2 Ke 11.1.2017 Timo Männikkö Luento 2 Algoritmin esitys Algoritmien analysointi Suoritusaika Asymptoottinen kertaluokka Peruskertaluokkia NP-täydelliset ongelmat Algoritmit 1 Kevät

Lisätiedot

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 2. Lukujen esittäminen ja aritmetiikka 2.1 Kantajärjestelmät ja lukujen esittäminen Käytettävät lukujoukot: Luonnolliset luvut IN = {0,1,2,3,... } Positiiviset kokonaisluvut

Lisätiedot

Luku 8. Aluekyselyt. 8.1 Summataulukko

Luku 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ätiedot

Diskreetin matematiikan perusteet Laskuharjoitus 1 / vko 8

Diskreetin matematiikan perusteet Laskuharjoitus 1 / vko 8 Diskreetin matematiikan perusteet Laskuharjoitus 1 / vko 8 Tuntitehtävät 1-2 lasketaan alkuviikon harjoituksissa ja tuntitehtävät 5- loppuviikon harjoituksissa. Kotitehtävät 3-4 tarkastetaan loppuviikon

Lisätiedot