MAT Tieto ja laskenta laskuharjoituksia
|
|
- Ritva Hyttinen
- 7 vuotta sitten
- Katselukertoja:
Transkriptio
1 MAT Tieto ja laskenta laskuharjoituksia Antti Valmari Tampereen teknillinen yliopisto Tehtävien tähtiluokitus Tehtävät on yritetty luokitella helppoihin (ei tähtiä), keskivaikeisiin (yksi tähti) ja vaikeisiin (kaksi tähteä). Luokittelu ei perustu työmäärään vaan tehtävän ratkaisemisessa tarvittavaan osaamiseen, ottaen huomioon myös aikaisemmat tehtävät. Puutteellisesti ratkaistu tehtävä voidaan harkinnan mukaan tai tehtävässä ilmoitetulla tavalla hyväksyä pienemmällä tähtien määrällä. Luokittelua voidaan tulevia vuosia varten muuttaa, jos tehtävä osoittautuu arvioitua helpommaksi tai vaikeammaksi. Kysymysmerkki ilmaisee, että tehtävää ei ole vielä luokiteltu. 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ä. 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 tietokoneesi C++-toteutuksessa 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 jakolasku). 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 jakolasku). 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 Tee ohjelma, joka lukee merkkejä ja tulostaa niiden numeroarvot. Selvitä sen avulla merkkien a, 4, Ö ja jonkin kreikkalaisen kirjaimen (esim. µ) numeroarvot tai numeroarvojen jonot. 14. Matalin Suomessa mitattu ilmanpaine on 940 hpa ja korkein 1066 hpa. Tee ohjelma, joka ottaa vastaan enintään 100 kpl Suomessa mitattuja ilmanpainelukemia ja sen jälkeen vastaa tehokkaasti kysymyksiin muotoa esiintyykö lukema x aineistossa. Ohjelmasi ei saa käyttää tietorakenteita, joita ei ole vielä käsitelty tällä opintojaksolla. Syötteessä on ensin ilmanpainelukemat, sitten 0, sitten luvut x ja lopuksi 0. Kaikki luvut ovat kokonaislukuja. 15. 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. 16. 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ää). 17.* Mitä erilaisia väliviivoja, tavuviivoja, ajatusviivoja yms. Unicode sisältää? Entä mitä erilaisia välejä ja sen kaltaisia? 18.** 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. Kaksi monikulmiota katsotaan samoiksi, jos niistä tulee sama kuva, vaikka niiden esitystavat eivät olisikaan samat. Kuvaile testi, jolla voi selvittää, esittääkö kaksi eri esitystä samaa monikulmiota. 19.* Merkit on numeroitu 0,...,n 1. 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, kahden pituisia merkkijonoja vastaavat luvut n+1,..., n+n 2 ja niin edelleen. 20.** 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?
4 MAT laskuharjoituksia AV 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. Oleta, että rivinsiirto on tekstialkio RS. 22.* Joukon A ositus on kokoelma joukkoja A 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? 2 Lausekkeet, lauseet ym. 23. 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)) 24. Piirrä seuraavien lausekkeiden lausekepuut. (a) A[i+1]*p->n (b)!!!0 (c) std::cout<<1 2<<3&&4 (d) p*=*q 25. 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-- 26.* 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. 27.* 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ä. 28. 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. 29.* Ohjelmoi käänteisen puolalaisen esitystavan mukainen laskin, joka laskee liukulukujen yhteen-, vähennys-, kerto- ja jakolaskuja. Ohjelmoinnin helpottamiseksi oleta, että jokaisen luvun edessä on #.
5 MAT laskuharjoituksia AV Selvitä lausekkeesta (1+2)*(3+4), kumman yhteenlaskun tietokoneesi C++toteutus laskee ensin. Vihje: tee oma lukutyyppi, jolle määrittelet operator+. 31.* Kirjoita ohjelma, jossa on tämä rivi siten, että se tulostaa Rivin sisälle ei saa lisätä mitään eikä riviä saa muuttaa. Älä ota käyttöön omia tietotyyppejä. i=j=123; std::cout<<i; i=321; std::cout<<i; 32. Millä muuttujan i arvoilla silmukan for(int i=32; i--; ){...} vartalo suoritetaan? Entä for(unsigned i=32; i>=0; --i){...}? 33.** 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. 34.* Tässä tehtävässä saat käyttää silmukoina vain perusmuotoisia for-silmukoita. Poikkeusten, ylimääräisten aliohjelmien yms. käyttö on kielletty, mutta if on sallittu. Vastausaliohjelmat eivät saa kutsua toisiaan. 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 luonnollista lukua n ja m. (a) Käyttäen enintään yhtä silmukkaa, kirjoita aliohjelma, joka palauttaa n + m. (b) Käyttäen enintään kahta silmukkaa, kirjoita aliohjelma, joka palauttaa nm. (c) Käyttäen enintään kolmea silmukkaa, kirjoita aliohjelma, joka palauttaa n m. Perustele, että jos lukualue ei loppuisi kesken, niin varsin lyhyellä aliohjelmalla voitaisiin tuottaa valtavan suuri luku. 35.* Tee edellisen tehtävän mukainen seuraava aliohjelma, eli aliohjelma, joka käyttää enintään neljää silmukkaa ja palauttaa f(m), missä f(0) = 1 ja f(m+1) = n f(m). 36.* 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? 37.* Kerro, miten silmukat ja if-lauseet saa aikaan ohjelmointikielellä Brainfuck. 38. 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.
6 MAT laskuharjoituksia AV 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 40. Kirjoita aliohjelma, joka kääntää yksisuuntaisen linkitetyn listan takaperin. 41.** Tässä tehtävässä toteutetaan nimellä Merge-Sort tunnettu järjestämisalgoritmi yksisuuntaisille linkitetyille listoille. Yleisimmät nopeat järjestämisalgoritmit 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,... niin pitkälle kuin tarvitaan. 42.* Selvitä sopivalla koejärjestelyllä, kuinka monta tavua tietokoneesi C++toteutus varaa aliohjelman aktivaatiotietueelle parametrien ja paikallisten muuttujien tarvitseman muistin lisäksi. Selvitä myös, että jos aliohjelmassa luodaan tilapäisiä muuttujia (esim. for(int i=...), varataanko niille tilaa jo aliohjelmaan tultaessa vai vasta muuttuja käyttöön otettaessa. Vihje: kutsu toista aliohjelmaa ennen ja jälkeen tilapäisen muuttujan luonnin. Suunnittele tilanne, jossa toteutuksen odottaisi käyttävän samaa muistia kahdelle tilapäiselle muuttujalle, ja selvitä, käyttääkö se todella samaa muistia.
7 MAT laskuharjoituksia AV * (a) Luo muuttuja, joka käyttää paljon tavuja (esim. miljoona-alkioinen std:: vector<int>). Osoita kokeellisesti, että sen välittäminen arvoparametrina (esim. vektori v) vie enemmän aikaa kuin välittäminen vakioituna viiteparametrina (esim. const vektori &v). Tarvittaessa kutsu ko. aliohjelmaa useasti. (b) Osoita esimerkillä, että vakioituna viiteparametrina välittäminen ei takaa, että kun parametriä käytetään, sillä on sama arvo kuin aliohjelman kutsuhetkellä oli. Tee tämä antamalla pääsy samaan tietoon (b1) globaalina muuttujana, (b2) välittämällä sama muuttuja myös toisena parametrina, ja (b3) antamalla aliohjelmalle osoitin. 44.** 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. 45. 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); } } 46. Aapo kyllästyi taulukoiden ohi-indeksoinnin aiheuttamiin virheisiin ja tietoturvaongelmiin, ja kirjoitti seuraavat aliohjelmat. Mikä toisessa niistä on vikana? bool sijoita( std::vector<int> &A, int i, int x ){ if( 0 <= i && i < A.size() ){ A[i] = x; return true; } else{ return false; } } int palauta( std::vector<int> A, int i, bool &ok ){ if( 0 <= i && i < A.size() ){ ok = true; return A[i]; } else{ ok = false; return 0; } } 47. 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. Oleta, että A ja B ovat riittävän suuria. Mitä tapahtuu kutsussa kopioi(a, 1, 5, A, 3)? Voiko tältä suojautua, edes jossain määrin?
8 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; } 49. 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. 50.* 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? 51.** 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. 52.* Muunna tehtävässä 50 annettu aliohjelma tarkoitukseen sopivaksi ja laadi sitä hyödyntäen ohjelma, joka tulostaa tekstin jaettuna riveille. Pseudokoodina annettu vastaus riittää.
9 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 54. 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, paitsi että 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; } }
10 MAT laskuharjoituksia AV ** Olkoon edellisen tehtävän sailio tyyppiä std::deque<int>. Kuinka monta erilaista virhetoimintoa saat havainnollistettua käyttämällä erilaisia säiliön sisältöjä? Yhdellä virhetoiminnolla saat nolla tähteä, kahdella yhden ja kolmella kaksi. 4 Algoritmien toimivuus ja nopeus 57.* Tavoitteena on löytää vaihtoehtoinen tapa sanoa jos alkiot pannaan kasvavassa suuruusjärjestyksessä jonoon, niin jonon viides on arvoltaan x. (a) Osoita, että tasan neljä alkiota on pienempiä kuin x ei toimi. (b) Anna samaan ajatukseen perustuva, mutta paremmin toimiva ilmaus. 58.* 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. 59.** 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.) 60.* 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. 61. Oletetaan, että taulukon sekoittamisalgoritmissa lukee j := random(1, n) eikä j := random(1, i). Olkoon n = 3. Millä todennäköisyydellä kukin lopputulos tulee? 62. Ilmaise seuraavat funktiot mahdollisimman yksinkertaiselle Θ-merkinnällä. Lisäksi luettele kaikki parit (i,j) siten, että f i (n) = O(f j (n)). f 1 (n) = n 2 3n+2 f 2 (n) = 4+5nlogn 2n f 4 (n) = 3+n 2+4n f 5 (n) = 1 2 n(n+1) f 3 (n) = 6+2 n+ 1 3 n3 +8nlogn f 6 (n) = n n
11 MAT laskuharjoituksia AV Olkoot X ja Y jotkin symboleista ω, Ω, Θ, O ja o. (a) Luettele kaikki parit (X, Y), joissa f(n) = X(g(n)) takaa f(n) = Y(g(n)). (b) Mitä merkintää tai merkintöjä käyttäessäsi voit jättää sanomatta, että puhe on hitaimman tapauksen suoritusajasta? (c) Mitä merkintää tai merkintöjä käyttäessäsi voit jättää sanomatta, että puhe on nopeimman tapauksen suoritusajasta? 64.* 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 )? 65.** Ilmaise seuraavien sarjojen summat Θ-merkinnällä. Perustele vastauksesi matemaattisesti. Kolmella saat nolla, neljällä yhden ja kuudella kaksi tähteä. (a) n 2 (b) log 2 1+log log 2 n (c) n (d) 1+sin1 π 4 +sin2 π sinn π 4 (e) n n+1 (f) n 66.* Keksi funktio f(n) siten, että se tuottaa vain positiivisia arvoja kun n N, f(n) O(n) ja n O(f(n)). Vihje: laita f(n) heilumaan ylös ja alas. 67.** Osoita, että Θ(2 n ) ei ole sama kuin Θ(3 n ), mutta ne molemmat ovat 2 Θ(n). 68. Arvioi seuraavien algoritmien suoritusaikaa n:n funktiona O-, Ω- ja Θ-merkinnällä. Huomaa tässä ja myöhemmissä tehtävissä, että saattaa olla mahdotonta antaa kaikki kolme. (a) i := 1; while i n A[i] x do i := i+1 (b) i := 1; while i < n do i := 2i+1 (c) z := n while z > 1 do y := z 1; z := 0 for i := 1 to y do if A[i] > A[i+1] then t := A[i]; A[i] := A[i+1]; A[i+1] := t; z := i 69. Arvioi seuraavan algoritmin suoritusaikaa n:n funktiona O-, Ω- ja Θ-merkinnällä. 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
12 MAT laskuharjoituksia AV Arvioi seuraavien algoritmien suoritusaikaa n:n funktiona O-, Ω- ja Θ-merkinnällä. (b)-kohdassa tarkka tulos on työläs laskea, joten helposti löytyvät likiarvot riittävät. (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 1 71.* Arvioi seuraavien algoritmien suoritusaikaa n:n funktiona O-, Ω- ja Θ- 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ä? 73.** On n opiskelijaa jamesitelmä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
13 MAT laskuharjoituksia AV (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ä? (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ä. 74.* 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. 75.** 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) Ω(logw). 5 Tärkeimmät tietorakenteet 76. 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). 77.** Oletetaan, että osoitin vie yhden sanan ja samoin kokonaisluku. Pino toteutetaan linkitettynä listana, jonka jokaisessa tietueessa on tilaa kolmelle kokonaisluvulle 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ä.
14 MAT laskuharjoituksia AV * Etsi esim. Wikipediasta, mikä on hyppylista (skip list) ja kerro se muille läsnäolijoille. Tähti tulee, jos esitys on helppo ymmärtää ja kaikki olennainen on mukana. 79.** (Ilman c-kohtaa yksi tähti.) 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? 80. Kirjoita epätyhjästä keosta poistamisen algoritmi uusiksi siten, että keon suurin on lokerossa A[0] ja keko ulottuu lokeroon A[n 1] asti. 81. 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ä. 82. 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. 83.* 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. 84.** 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?
15 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ä saman periaatteen mukainen 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?) 85. 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. Jokaisessa solmussa on osoitin isäsolmuun. 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ä. 86.* 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? 87. Mittaa, kuinka monta tavua tietokoneesi C++-toteutuksen set-säiliön tietue vie, jos avain vie (a) yhden (b) neljä (c) kahdeksan (d) 12 tavua. 88.** (Ilman d-kohtaa yksi tähti.) 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:
16 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. 89.* (Ilman b-kohtaa nolla tähteä.) 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 Mikä on C++-algoritmin find_first_of ajan kulutus? (Kirjallisuudessa esiintyy harhaanjohtavaa tietoa.) Miten päästään olennaisesti parempaan ajan kulutukseen? 91.* 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.
17 MAT laskuharjoituksia AV Algoritmien oikeaksi todistaminen 92. Kerro suomeksi, mitä seuraavat taulukkoa A[1... n] koskevat väittämät tarkoittavat. Jos väittämä on loogisesti yhtäpitävä jonkin yksinkertaisemman väittämän kanssa, kerro se. (a) i;1 i n : A[i] > 0 (b) i;1 i < n : A[i] = A[i+1] (c) i;1 i n : j;1 j n : A[i] A[j] (d) i;1 i n : j;1 j n : A[i] > A[j] 93. Kerro suomeksi, mitä seuraavat taulukkoa A[1... n] koskevat väittämät tarkoittavat. Jos väittämä on loogisesti yhtäpitävä jonkin yksinkertaisemman väittämän kanssa, kerro se. (a) i;1 i n : A[i] = A[i] (b) i;1 i n : A[i] A[i] (c) i;1 i n : j;1 j n : A[i] = A[j] (d) i;1 i n : j;1 j n : A[i] = A[j] 94. Esitä seuraavat taulukkoa A[1... n] koskevat väittämät. Kirjoita jokaiselle C++-aliohjelma, joka palauttaa true jos ja vain jos väittämä pätee. (a) Ensimmäinen alkio on 3. (b) Jokin alkio on 3. (c) Jokainen alkio on 3. (d) Kohdassa i oleva alkio on Esitä seuraavat taulukkoa A[1... n] koskevat väittämät. (a) Taulukon suurin alkio on i. (b) Taulukon suurin alkio on kohdassa i. (c) Taulukon suurin alkio esiintyy taulukossa vain yhden kerran. 96. Esitä seuraavat taulukkoja A[1... n] ja B[1... m] koskevat väittämät. (a) A:n alkiot ovat suurempia kuin B:n alkiot. (b) Jokin A:n alkio on suurempi kuin B:n alkiot. (c) i on pienin sellainen luku, että A[i] esiintyy B:ssä.
18 MAT laskuharjoituksia AV Missä kohdassa seuraava päättely menee pieleen? Merkitään suurinta reaalilukua symbolilla x. Koska x on suurin reaaliluku, pätee x... mille tahansa hyvin määritellylle... Siksi pätee x x 2 x+1. Vähentämällä molemmilta puolilta x ja soveltamalla binomin neliön kaavaa saadaan 0 x 2 2x+1 = (x 1) 2. Koska reaaliluvun neliö ei voi olla negatiivinen, seuraa tästä (x 1) 2 = 0, josta saadaan x = 1. Siis 1 on suurin reaaliluku. 98. Anna oheisen ohjelman sisemmälle silmukalle invariantti. Ei tarvitse osoittaa, että se on pätevä. 99. 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 (a) Miksi k;1 k < i : A[k].x A[k +1].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ä. 100.* 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] 101.* 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 } 102.* 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 }
19 MAT laskuharjoituksia AV Luentojen muunnettu binääripotenssi jää ikuiseen silmukkaan, kun n = 1. Muunna sitä edelleen niin, että se tuottaa silloin oikean vastauksen. (Oleta, että muuttujat kykenevät esittämään kaikki tarvittavat luvut.) 104.** 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 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 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 Anna päättymätön kasvavassa suuruusjärjestyksessä oleva jono toinen toistaan pitempiä sanoja, joista mikään ei ole toisen aito alkuosa. 107.* Laske seuraavat heikoimmat esiehdot. Taulukon A indeksialue on 1,...,n. Kolme oikein tuottaa nolla tähteä. (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]) 108.** Laske seuraavat heikoimmat esiehdot. Taulukon A indeksialue on 1,...,n ja A 0 sisältää taulukon A arvon juuri ennen lausetta. Kaksi lähes oikein nolla tähteä, neljällä yksi ja kuudella kaksi. (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])
20 MAT laskuharjoituksia AV (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]) 109. 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 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? 111.* Osoita, että oheinen ohjelma pysähtyy, ja että lopuksi n on lukujen n 0 ja m 0 suurin yhteinen tekijä. { 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 113.* 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. 114.* 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.)
21 MAT laskuharjoituksia AV 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? 117.** 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. (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. (Tämän algoritmin hyöty on siinä, että jos solmut syntyvät implisiittisesti kuten on asian laita usein esim. tekoälyssä, niin solmua ei tarvita lainkaan silloin kun se ei ole missään joukoista Q 1, Q 2 ja Q 3. Näin voidaan säästää huomattavasti muistia.) 118. 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? 119. 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. 121.** 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. 122.* Vertaa rekursiivisen ja yleisestä hausta tehdyn syvyyteen ensin -haun ajan ja muistin kulutuksia toisiinsa.
22 MAT laskuharjoituksia AV * (a) Osoita vastaesimerkillä, että yleinen haku pinolla ei tuota syvyyteen ensin -hakua, jos.next-mekanismin sijaan W:hen laitetaan ja löydetyiksi merkitään ne solmut joukosta u, joita ei ole vielä löydetty. (b) Jos toimitaan muuten kuten (a)-kohdassa, mutta solmu merkitään löydetyksi vasta kun se nostetaan pinosta, niin syvyyteen ensin -haku toteutuu. Mikä huono puoli on tässä ratkaisussa? 124.** 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. (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. 125.* 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ä. 126.* Osoita, että jos prioriteettijonon toiminta perustuu vertailemiseen, niin Dijkstran algoritmia ei saa toimimaan nopeammin kuin O( V log V ). 127.** Suunnittele graafeille esitys, joka mahdollistaa Dijkstran vahvojen komponenttien algoritmin toteuttamisen tehokkaasti. 8 Informaatioteoriaa 128. 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?
23 MAT laskuharjoituksia AV Etsi Internetistä tietoa UTF-8-koodista. Onko se itserajaava? 130. 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? 131.* 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? (e) Olkoon rengaspuskurin kapasiteetti n. Kuinka monta eri esitystapaa on jonolla, jossa on k alkiota? 132. 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. 133.* 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? 134.* 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?
MAT-71000 Tieto ja laskenta laskuharjoituksia
MAT-71000 Tieto ja laskenta laskuharjoituksia Antti Valmari Tampereen teknillinen yliopisto 23.1.2015 Pisteytys Arvosanan 1 raja tulee olemaan välillä 40%... 50% tentin maksimipisteistä. Muiden arvosanojen
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
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
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
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
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
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
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
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ä
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
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:
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
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
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
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
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.
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
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
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
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
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
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,
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
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
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
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,
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
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
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
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 =
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
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
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,
(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
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
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
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
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
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
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
Tietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin
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
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
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
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,...)
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.
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
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
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
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.
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
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
Ää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é
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
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
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
(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
ITKP102 Ohjelmointi 1 (6 op)
ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 20. huhtikuuta 2018 Vastaa kaikkiin tehtäviin. Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä.
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
ITKP102 Ohjelmointi 1 (6 op)
ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 22. huhtikuuta 2016 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille! Kirjoittamasi luokat, funktiot ja aliohjelmat
Ohjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 21.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 21.1.2009 1 / 32 Tyypeistä Monissa muissa ohjelmointikielissä (esim. Java ja C) muuttujat on määriteltävä ennen
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:
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
MS-A0402 Diskreetin matematiikan perusteet
MS-A040 Diskreetin matematiikan perusteet Osa : Relaatiot ja funktiot Riikka Kangaslampi 017 Matematiikan ja systeemianalyysin laitos Aalto-yliopisto Relaatiot Relaatio Määritelmä 1 Relaatio joukosta A
(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,
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,
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/
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
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,
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
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
TIE Tietorakenteet ja algoritmit 261
TIE-20100 Tietorakenteet ja algoritmit 261 12 Graafit Seuraavaksi tutustutaan tietorakenteeseen, jonka muodostavat pisteet ja niiden välille muodostetut yhteydet graafiin. Keskitymme myös tyypillisimpiin
Ohjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 20.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 20.1.2010 1 / 40 Arvon pyytäminen käyttäjältä Käyttäjän antaman arvon voi lukea raw_input-käskyllä. Käskyn sulkujen
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
Ohjelmassa 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
815338A 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,
11. Javan toistorakenteet 11.1
11. Javan toistorakenteet 11.1 Sisällys Laskuri- ja lippumuuttujat. Sisäkkäiset silmukat. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin
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.
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
Algoritmit 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
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
Tietorakenteet, laskuharjoitus 10, ratkaisuja. 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
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.
58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 1, , vastauksia
58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 1, 25.2.2013, vastauksia 1. (a) O-merkintä Ω-merkintä: Kyseessä on (aika- ja tila-) vaativuuksien kertalukumerkinnästä. O-merkintää käytetään ylärajan
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
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,
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
f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))
Määritelmä: on O(g(n)), jos on olemassa vakioarvot n 0 > 0 ja c > 0 siten, että c g(n) kun n > n 0 O eli iso-o tai ordo ilmaisee asymptoottisen ylärajan resurssivaatimusten kasvun suuruusluokalle Samankaltaisia
12. Javan toistorakenteet 12.1
12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu
4. Joukkojen käsittely
4 Joukkojen käsittely Tämän luvun jälkeen opiskelija osaa soveltaa lomittuvien kasojen operaatioita tuntee lomittuvien kasojen toteutuksen binomi- ja Fibonacci-kasoina sekä näiden totetutusten analyysiperiaatteet
Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina
Hakupuut tässä luvussa tarkastelemme puita tiedon tallennusrakenteina hakupuun avulla voidaan toteuttaa kaikki joukko-tietotyypin operaatiot (myös succ ja pred) pahimman tapauksen aikavaativuus on tavallisella
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
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
58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, , vastauksia
58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, 652013, vastauksia 1 [6 pistettä] Vastaa jokaisesta alla olevasta väittämästä onko se tosi vai epätosi ja anna lyhyt perustelu Jokaisesta kohdasta
58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe ratkaisuja (Jyrki Kivinen)
58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe 12.9.2018 ratkaisuja (Jyrki Kivinen) 1. [10 pistettä] Iso-O-merkintä. (a) Pitääkö paikkansa, että n 3 + 5 = O(n 3 )? Ratkaisu: Pitää paikkansa.
Java-kielen perusteet
Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero
815338A 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ä.
TAMPEREEN TEKNILLINEN YLIOPISTO
TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja Tietokonetekniikan laitos TKT-3200 Tietokonetekniikka ASSEMBLER: QSORT 11.08.2010 Ryhmä 00 nimi1 email1 opnro1 nimi2 email2 opnro2 nimi3 email3 opnro3 1. TEHTÄVÄ
Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään
Ohjelmointi Ohjelmoinnissa koneelle annetaan tarkkoja käskyjä siitä, mitä koneen tulisi tehdä. Ohjelmointikieliä on olemassa useita satoja. Ohjelmoinnissa on oleellista asioiden hyvä suunnittelu etukäteen.
A274101 TIETORAKENTEET JA ALGORITMIT
A274101 TIETORAKENTEET JA ALGORITMIT PUURAKENTEET, BINÄÄRIPUU, TASAPAINOTETUT PUUT MIKÄ ON PUUTIETORAKENNE? Esim. Viereinen kuva esittää erästä puuta. Tietojenkäsittelytieteessä puut kasvavat alaspäin.