2. Algoritmien analysointimenetelmistä

Koko: px
Aloita esitys sivulta:

Download "2. Algoritmien analysointimenetelmistä"

Transkriptio

1 Kokeelliset tutkimukset 2. Algoritmien analysointimenetelmistä Tietokoneohjelmien suoritusaika on usein tärkeä kysymys, erityisesti käsiteltäessä paljon tietoa tai prosessin ollessa monimutkainen, so. runsaasti aikaavievä. Monesti toinen olennainen kysymys on tarvittavan muistitilan määrä. Näitä seikkoja pohditaan seuraavassa ja annetaan menetelmiä erilaisia tietorakenteita käyttävien algoritmien vaatimien suoritusaikojen arviointia varten. Tässä on olennaista arvioida suoritusaikoja matemaattisessa mielessä, ikään kuin algoritmin (matemaattisena) funktiona, joka on riippumaton käytettävästä tietokoneesta. Algoritmin toteutus jossakin koneessa antaa käytännössä tarkkoja suoritusaikoja Ohjelmien suoritusaika Jos algoritmi on toteutettu jossakin tietokoneessa, sitä voidaan ajaa ja tutkia suorituksen vaatimaa aikaa käyttäen erilaisia syötteitä ja syötemääriä. Yleisessä mielessä kiinnostavaa on selvittää suoritusajan riippuvuus syötetiedon eli -datan määrän suhteen. Tätä varten tehdään riittävä määrä testejä eri syötejoukoilla tilastollisesti edustavassa testitilanteessa. Tulokset kuvataan usein visuaalisesti tai taulukoin seuraavan kuvan tapaan. suoritusaika t [ms] (a) (b) Algoritmin suoritusaika riippuu useista tekijöistä. Näitä voidaan tutkia ohjelmatoteutuksilla kokeellisesti ja yleisillä menetelmillä syötealkioiden määrä n Kuva 2.1. Tapauksessa (a) oli hitaampi tietokone kuin tapauksessa (b). teoreettisesti. 2. luku luku 15 Ohjelman suoritusaika kasvaa yleisesti syötteen koon kasvaessa, mutta saattaa jonkin verran vaihdella samankokoisilla, mutta erilaisilla syötejoukoilla. Luonnollisesti ajoympäristö ja laitteisto vaikuttavat asiaan, kuten myös käytetty ohjelmointikieli, kääntäjä yms. tekijät. Yleisen arviointimenetelmän tarve Vaikka kokeelliset suoritusaikatutkimukset ovat hyödyllisiä ja tarpeellisia, niillä on kolme rajoitusta: Testit voidaan tehdä ainoastaan rajoitetuille syötejoukoille, jotka eivät kenties ole edustavia kuvaamaan testien ulkopuolelle jääviä tilanteita. On vaikeaa verrata kahden algoritmin tehokkuutta, ellei niitä ole testattu samassa koneessa ja ohjelmistoympäristössä. On tarpeellista toteuttaa ja suorittaa algoritmi suoritusaikojen tutkimiseksi. 2. luku 16 Tämän luvun loppuosassa esitetään yleisiä menetelmiä algoritmien suoritusaikojen arviointia varten: Ottaa huomioon kaikki mahdolliset syötteet. Sallii minkä tahansa kahden algoritmin suhteellisen tehokkuuden arvioinnin ja vertaamisen tavalla, joka on riippumaton laitteisto- ja ohjelmistoympäristöistä. On tehtävissä tutkimalla algoritmin korkeantason kuvausta ilman algoritmin toteutusta ja tämän testausta. Nämä menetelmät liittävät algoritmiin funktion f(n), joka luonnehtii algoritmin suoritusajan syötteen koon n funktiona. Tyypilliset funktiot sisältävät tekijöitä n ja n 2. Jos esim. algoritmin suoritusaika riippuu tekijästä n (lineaarinen), tämä tarkoittaa, että algoritmin suoritusaika minkä tahansa syötteen kooltaan n tapauksessa on enintään cn, jossa positiivinen vakio c riippuu algoritmin lisäksi käytetyistä ohjelmisto- ja laitteistoympäristöistä. Jos jonkin toisen algoritmin suoritusaika on suhteessa tekijään n 2 (neliöllinen), niin tämä on edellistä huomattavasti hitaampi muuttujan n arvon kasvaessa riittävän suureksi. 2. luku 17

2 2.2. Pseudokoodi Tietojenkäsittelyssä pitää esittää algoritmeja ei vain koneen ymmärtämässä muodossa, vaan myös ihmisen ymmärtämällä selkeällä ja täsmällisellä tavalla. Ohjelmakoodi käsittää tavallisesti monia yksityiskohtia, jotka eivät ole keskeistä itse algoritmin toiminnan ymmärtämisessä. Luonnollisen kielen ja melko vapaamuotoisen (kuvitellun) ohjelmointikielen yhdistelmä, pseudokoodi, mahdollistaa selkeän, informatiivisen ja tiiviin esitysmuodon. Pseudokoodiesimerkki Taulukon maksimialkion suoraviivaista etsimistä varten käydään silmukassa läpi taulukon alkiot. 2. luku 18 Algorithm arraymax(a,n): Input: Taulukko A sisältää n kokonaislukua. Output: Taulukon maksimialkio. currentmax A[0] for 1 to n-1 do if currentmax < A[i] then currentmax A[i] return currentmax Koodi 2.1. Maksimialkion etsintä. Edellä oleva pseudokoodinen esitys saadaan Java-kielisenä esim. seuraavana. 2. luku 19 Public class ArrayMaxProgram { // testaa maksimialkion taulukosta etsivän algoritmin static int arraymax(int[ ] A, int n) { //etsii maksimialkion kokonaislukutaulukosta A selaamalla //taulukon alkiot ja pitämällä kirjaa eri vaiheissa suurimmasta //löydetystä int currentmax = A[0]; //suoritetaan kerran for (int i=1; i<n; i++) //asetus suoritetaan kerran, vertailu n kertaa ja //lisäys n-1 kertaa if (currentmax < A[i]) //suoritetaan n-1 kertaa currentmax = A[i]; //suoritetaan enintään n-1 kertaa return currentmax; //suoritetaan kerran } 2. luku 20 public static void main(string args[ ]) { //testausmetodia kutsutaan pääohjelmaa suoritettaessa int [ ] num = { 10, 15, 3, 5, 56, 107, 22, 16, 85 }; int n = num.length; System.out.print( taulukko: ); for (int i=0; i<n; i++) System.out.print( + num[i]); //tulostaa taulukon alkion System.out.println(. ); System.out.println( maksimialkio on + arraymax(num,n) +. ); } } Koodi 2.2. Algoritmi arraymax toteutettuna Javalla kommenttien selvittäessä lauseiden suorituskerrat. 2. luku 21

3 Mitä on pseudokoodi? Repeat-silmukat: repeat toiminnot until ehto. Toiminnot selvennetään sisennyksen avulla. Pseudokoodi on luonnollisen kielen ja korkeantason ohjelmointikielen sekoitusta, joka kuvaa käytettävien tietorakenteiden ja algoritmin pääideat. Pseudokoodille ei ole mitään tarkkaa määrittelyä, mutta seuraavia merkintätapoja noudatetaan tällä kurssilla. Lausekkeet: Käytetään tavanomaisia matemaattisia symboleja numeeristen ja (Boolen) totuuslausekkeiden yhteydessä. Vasen nuoli vastaa asetusoperaatiota ja yksi yhtäsuuruusmerkki vertailuoperaatiota. Metodiesittelyt: Algorithm nimi(param1, param2, ) esittää metodin nimen ja parametrit. Ehtorakenteet: if ehto then toiminnot tosi-arvolle [else toiminnot epätosi-arvolle]. Sisennystä käytetään erottamaan näitä osia toisistaan. While-silmukat: while ehto do toiminnot. Jälleen sisennystä käytetään. 2. luku 22 For-silmukat: for määrittely muuttujan lisäykselle do toiminnot. Jälleen on sisennys käytössä. Taulukon indeksointi: A[i] on taulukon i:s alkio. Alkiot on indeksoitu arvosta 0 arvoon n-1 Javan tapaan. Metodikutsut: olio.metodi(argumentit) (olio voidaan jättää pois, mikäli se on tunnettu). Metodipalautukset: return arvo. Tämä palauttaa metodin arvon metodin kutsuneelle. Pseudokoodia käytettäessä on hyvä muistaa tarkoituksen olevan korkeantason ideoiden esittäminen eikä toteutuskohtaisten yksityiskohtien, mutta näiden seikkojen välillä pitää vallita sopuisa tasapaino. 2. luku Suppea matemaattisten välineiden tarkastelu Seuraavaksi käydään läpi diskreetin matematiikan peruskäsitteitä, jotka ovat tarpeen tietorakenteiden ja algoritmien käyttöä tarkasteltaessa, varsinkin suorituskykyanalyysia varten (kompleksisuusanalyysi: suhteellinen suoritusaika ja tarvittava muistila). Vakiofunktio Yksinkertaisin mahdollinen funktio on vakiofunktio f(n)=c, jossa c on jokin (positiivinen) vakio. Tällöin c ei riipu argumentin arvosta n. Vakioaika tarvitaan esim. kahden luvun yhteenlaskussa tai vertaamisessa tai arvon asettamisessa muuttujalle. Lineaarinen funktio Lineaarinen funktio on seuraavaksi yksinkertaisin, f(n)=n. Kun on annettu arvo n, f määrittää arvon itsensä. Logaritmit ja eksponentit Logaritmit ja eksponentit ovat alituisesti käytössä suorituskykyanalyysissa. Muistetaan, että log b n = x, jos ja vain jos n = b x. 2. luku luku 25

4 Kuutiollinen funktio ja muut polynomit Kantaluku jätetään tavanomaiseen tapaan pois sen ollessa 2. Logaritmilaskennan normaalit säännöt oletetaan tunnetuiksi. Lyhennysmerkintöinä ovat käytössä log c n tarkoittaen funktiota (log n) c ja log log n tarkoittaen funktiota log (log n). n log n -funktio Tämä on tärkeä funktio, jossa kasvunopeus on hieman nopeampaa kuin lineaarisessa, mutta hitaampaa kuin neliöllisessä. Neliöllinen funktio Usein esiintyvä funktio on niin ikään neliöllinen, f(n)=n 2. Kuutiollinen funktio on muotoa f(n)=n 3, joka määrittää syötteensä kolminkertaisena tulona. Yleisemmin polynomi yhdistää eriasteiset aina korkeimpaan kokonaislukupotenssiin d 0) asti, f(n)=a 0 + a 1 n + a 2 n 2 + a 3 n a d n d, jossa a 0, a 1,, a d ovat vakioita ja a d 0. (Kompleksisuuslaskuissa a d >0 ja muutkin vakiot useimmiten ei-negatiivisia. Mieti, miksi näin on!) Tästä ovat esimerkkejä seuraavat. f(n)=2+5n+n 2 f(n)=1 f(n)= n 2 f(n)=1+ n 3 f(n)=n f(n)=3+4n 2. luku luku 27 Eksponenttifunktio Viimeinen tarpeellinen funktio on eksponentiaalinen f(n)=b n, jossa b on positiivinen vakio (yleensä >1 ja usein yhtä kuin 2), kantaluku, ja argumentti n on eksponentti. Tämä määrittää argumentille arvon, joka saadaan kertomalla b nkertaa itsensä kanssa. Tämä hirmuinen funktio edustaa suurinta kasvunopeutta kompleksisuusfunktioilla. Käytössä ovat myös lattia- ja kattofunktiot eli x ja x. Näistä saadaan suurin kokonaisluku, joka on pienempi tai yhtä suuri kuin x, tai vastaavasti pienin kokonaisluku, joka on suurempi tai yhtä suuri kuin x. Silti kompleksisuusanalyysissa monesti käytetään reaaliarvoisia funktiota pyöristämättä niitä kokonaislukuarvoon. Summalausekkeet Sarjan summat ovat jatkuvasti tarpeen, joten esim. geometristen ja aritmeettisten sarjojen summalausekkeet oletetaan tunnetuiksi (a>0, a1): 2. luku luku 29

5 n : Havainnollinen tapa visualisoida aritmeettista sarjaa on esittää jälkimmäinen edellisistä sarjoista oheisen kuvan mukaan (geometrisesti) n n/2 (a) (b) Kuva 2.2. Kummatkin kuviot esittävät aritmeettista summaa, (a) kaavan vasenta ja (b) oikeaa puolta. Edellisessä on n suorakulmiota korkeudeltaan (myös pinta-alaltaan) 1,, n ja jälkimmäisessä yksi suuri, leveydeltään n/2 ja korkeudeltaan n+1 (n tässä parillinen). n+1 n : luku Yksinkertaisia todistusmenetelmiä Jotta voitaisiin osoittaa vakuuttavasti jonkin algoritmin kompleksisuus, tarvitaan matemaattista symbolikieltä. Tällaista todistamista varten on olemassa muutamia erityisiä menetelmiä, joita seuraavassa lyhyesti tarkastellaan. Todistus esimerkin perusteella Jotkin väitteet ovat muotoa: On olemassa alkio x joukossa S, jolla on ominaisuus P. Tällöin riittää sellaisen alkion esittäminen. Edelleen on väitteitä muotoa. Jokaisella alkiolla x joukossa S on ominaisuus P. Tämän osoittamiseksi vääräksi pitää esittää sovelias alkio, jolla ei ole ominaisuutta P. Kysymyksessä on vastaesimerkki. Esim Väitetään, että 2 i -1 on alkuluku, kun i on 1:stä suurempi kokonaisluku. 2. luku 31 Vastaesimerkillä on helppo osoittaa, että 2 4-1=15=35, joten luku ei ole alkuluku. Negaation käyttö Negaatiota voidaan hyödyntää todistamisessa. Kaksi päämenetelmää ovat kontrapositiivinen ja ristiriita. Edelliselle sovelletaan mm. tilannetta, jossa on väite: Jos p on tosi, niin q on tosi. Tämän sijasta sovelletaan väitettä: Jos q ei ole tosi, niin p ei ole tosi. Nämä ovat loogisesti tietysti samoja, mutta toisinaan jälkimmäinen, kontrapositiivinen, on helpompi osoittaa oikeaksi. De Morganin lait auttavat usein sen käsittelyssä. Myös ristiriidan osoittamiseksi De Morganin lait voivat olla käyttökelpoisia. Väite q osoitetaan vääräksi ensin olettamalla se oikeaksi ja todistamalla sitten, että oletus johtaa ristiriitaan. 2. luku 32 Induktio ja silmukkainvariantti Useimmat algoritmien suorituskykyä koskevista väitteistä käsittävät kokonaislukuparametrin n (intuitiivistä käsitettä ongelman koko tarkoittaen). Tällaiset väitteet ovat ekvivalentteja sille, että jokin lause q(n) on tosi kaikille arvoille n1. Kun tämä käsittää tarkkaan ottaen äärettömän määrän lukuja, väitettä olisi mahdotonta osoittaa todeksi suoraviivaisesti kaikkien alkioiden läpikäynnillä. Induktio on kätevä menetelmä, jolla voidaan osoittaa em. kaltaisia väitteitä oikeaksi. Oletetaan se tunnetuksi tällä kurssilla. Silmukkainvariantti on menetelmä, jolla analysoidaan ja todistetaan silmukkarakenteiden oikeellisuus. Se toimii muodollisesti seuraavaan tapaan. 2. luku 33

6 2.5. Algoritmien analyysi Jotta jokin silmukan lause S saadaan osoitettua oikeaksi, määritellään lause induktiivisesti pienempien lauseiden S 0, S 1,, S k jonon suhteen: 1. Alkuväite S 0 on tosi ennen silmukan aloittamista. 2. Jos S i-1 on tosi ennen iteraation i aloittamista, niin voidaan osoittaa, että S i on tosi iteraation i suorittamisen jälkeen. 3. Lopullinen lause S k osoittaa, että lause S, joka piti todistaa, on tosi. Edellä tarkasteltiin algoritmia arraymax, jossa tavallaan sovellettiin silmukkainvarianttia. 2. luku 34 Seuraavaksi esitetään eri tapoja algoritmien varsinaista kompleksisuusanalyysia varten. Alkeisoperaatiot Algoritmeja tutkittaessa analyyttisesti lähtökohtana ovat pohjimmiltaan seuraavat seikat: 1. Ohjelmoi algoritmi jollakin korkeantason kielellä. 2. Käännä ohjelma jollekin matalantason kielelle. 3. Määrää matalantason kielen jokaiselle käskylle i käskyn käyttämä suoritusaika t i. 4. Määrää matalantason kielen jokaiselle käskylle i suorituskertojen määrä n i, jotka suoritetaan algoritmissa. 5. Laske yhteen tulot n i t i kaikkien käskyjen yli, mikä antaa algoritmin suoritusajan. 2. luku 35 Tämä menettelytapa antaa yleensä suoritusajan tarkan arvion, mutta menettelyä on vaikea noudattaa, koska se vaatii kääntäjän generoiman matalantason kielen ja käytetyn ohjelmointiympäristön yksityiskohtaista ymmärtämistä. Täten on mielekästä perustaa analyysi suoraan korkeantason koodiin tai pseudokoodiin. Määritellään korkeantason kielen alkeisoperaatioiden joukko, joka on jokseenkin riippumaton käytetystä ohjelmointikielestä ja soveltuu pseudokoodille niin ikään: arvon asetus muuttujalle metodikutsu aritmeettisen operaation suoritus (esim. kahden luvun yhteenlasku) kahden luvun vertaaminen toisiinsa taulukon indeksiarvon laskenta olioviitteen laskenta paluu metodista 2. luku 36 Alkeisoperaatio vastaa matalantason kielen käskyä käsittäen suoritusajan, joka riippuu laitteistosta ja ohjelmasta, mutta joka on kuitenkin vakio. Sen sijaan, että yritettäisiin määrätä kunkin alkeisoperaation eksakti suoritusaika aikayksiköissä, lasketaan yksinkertaisesti käytettyjen alkeisoperaatioiden lukumäärä ja käytetään tätä lukumäärää t suoritusajan estimaattina eli arviona. Alkeisoperaatioiden määrä on suhteessa jonkin määrätyn tietokoneen ja ohjelmatoteutuksen todelliseen suoritusaikaan, sillä jokainen alkeisoperaatio vastaa vakioaikaista käskyä ja alkeisoperaatioita on ainoastaan rajoitettu määrä. Näin ollen alkeisoperaatioiden määrä t on suhteessa algoritmin todelliseen suoritusaikaan. Tarkastellaan edeltä algoritmin arraymax suoritusaikaa. Seuraava soveltuu sekä pseudokoodiseen että Java-kieliseen esitykseen. 2. luku 37

7 Muuttujan currentmax alustaminen arvoksi A[0] vaatii kaksi alkeisoperaatiota, taulukon indeksin asetuksen ja arvon asetuksen. Tämä suoritetaan vain kerran. Silmukan alussa muuttuja i alustetaan arvoksi 1. Tämä vaatii yhden operaation. Ennen silmukan runkoon siirtymistä pitää suorittaa ehdon i<n arvon laskenta eli suorittaa vertailu, joka käsittää yhden alkeisoperaation. Kaikkiaan tämä suoritetaan n kertaa. Silmukan runko suoritetaan n-1 kertaa. Kullakin iteraatiolla arvoa A[i] verrataan muuttujaan currentmax (kaksi operaatiota, indeksilaskenta ja vertailu). Suoritetaan asetus tapauksessa, että ehto toteutui (kaksi operaatiota, indeksilaskenta ja asetus). Sitten muuttujaa i lisätään yhdellä (kaksi operaatiota, yhteenlasku ja asetus). Täten jokaisella iteraatiolla on joko neljä tai kuusi alkeisoperaatiota riippuen vertailun tuloksesta, jolloin silmukan runko sisältää operaatioita ainakin 4(n-1), mutta enintään 6(n-1). Muuttujan currentmax arvon palauttaminen vastaa yhtä operaatiota, joka suoritetaan kerran. Laskien alkeisoperaatioiden määrät yhteen saadaan algoritmille arraymax vähintään n + 4(n-1) + 1 = 5n ja enintään n + 6(n-1) +1 = 7n -2. Paras tapaus tulee silloin, kun A[0] sisältää maksimiarvon, jolloin muuttujan currentmax arvoa ei koskaan aseteta. Pahin tapaus sattuu, kun alkiot ovat kasvavassa järjestyksessä, jolloin ko. muuttujan asetus suoritetaan joka iteraatiolla. 2. luku luku 39 Keskimääräisen ja pahimman tapauksen analyysi Algoritmi voi toimia nopeammin tai hitaammin syötteestä riippuen. Mielenkiintoista olisi tällöin tietää keskimääräinen suoritusaika. Tämä on kuitenkin tavallisesti varsin vaikeaa laskea arvon riippuessa syötteiden todennäköisyysjakaumista. Seuraavan kuvan esimerkki havainnollistaa tätä seikkaa, kun suoritusaika saattaa olla mikä tahansa huonoimmasta parhaimpaan. suoritusaika pahin tapaus keskimääräinen aika? paras tapaus syötetapaukset Kuva 2.3. Jonkin algoritmin eri suoritusaikoja eri syötteille. 2. luku luku 41

8 Keskimääräisen suoritusajan analyysi vaatii suoritusaikojen odotusarvojen laskentaa oletetuille syötejakaumille, mikä voi olla hankala tehtävä. Näin ollen lasketaan tyypillisesti vain pahimman tapauksen suoritusaika. Esim. algoritmin arraymax pahin tapaus on 7n-2 alkeisoperaatiota riippuen syötteen määrästä n. Käsittelemällä juuri pahinta tapausta tiedetään tarkkaan, ettei algoritmi voi toimia sitä hitaammin. Käytännössä se usein toimii keskimäärin paremmin. Joskus näiden ero voi olla suurikin, mutta joskus sitä ei ole lainkaan Asymptoottinen notaatio eli merkintäjärjestelmä Edellä mentiin suoraan algoritmin arraymax yksityiskohtiin, mutta sellainen analyysi herättää muutamia kysymyksiä: Tarvitaanko todella niin yksityiskohtaista lähestymistapaa? Miten tärkeää on laskea alkeisoperaatioiden tarkka lukumäärä? Miten tarkkaan alkeisoperaatiot on määriteltävä? Esim. asetuslauseen y = a*x + b alkeisoperaatioiden määrä riippuu tilanteesta (kuinka kääntäjä generoi niitä), kun tekijä a*x voidaan tallettaa väliaikaismuuttujaan. Pseudokoodisen kuvauksen ja korkeantason kielen lauseen toteutus riippuu joka tapauksessa pienestä määrästä alkeisoperaatioita. Niinpä voidaan tehdä yksinkertaistettu analyysi, jossa käytetään operaatioiden määrän estimaattia (ylhäältäpäin) rajoitetulla vakiolla. Lasketaan yksinkertaisesti pseudokoodin vaiheet tai korkeantason kielen lauseet. 2. luku luku 43 Hyödyllisempää, kuin juuttua yksityiskohtiin algoritmien suorituskyvyssä, on yleensä selvittää suuruusluokka tai kertaluku, jossa suhteessa syötteen kokoon n kompleksisuus on. Esim. algoritmin arraymax tilanteessa riittää yleisesti tietää sen kasvavan lineaarisessa suhteessa eli suoraan syötteen kokoon n nähden. Muut tekijät sen kompleksisuutta kuvaavassa funktiossa ovat vakioita, jotka vaihtelevat toteutusympäristöstä riippuen. Seuraavaksi esitetään notaatiotavat aika- ja muistitilavaatimuksille. suoritusaika cg(n) f(n) Merkintä iso O Olkoot f(n) ja g(n) funktioita, jotka kuvaavat ei-negatiiviset kokonaisluvut reaaliluvuiksi. Silloin f(n) on O(g(n)), jos on olemassa vakio c>0 ja kokonaislukuvakio n 0 1, joille f(n) cg(n) kaikille kokonaisluvuille n n 0. Tämä merkintä luetaan iso O tai ordo, ja se ilmaisee suuruusluokkaa (ks. seur. kuvaa). 2. luku 44 n o syötteen koko Kuva 2.4. Ordo-merkintä: funktio f(n) on O(g(n)), sillä f(n) cg(n) kaikille kokonaisluvuille n n luku 45

9 Esim n - 2 on O(n). Perustelu: Määritelmän mukaan pitää löytää vakio c>0 ja kokonaisluku n 0 1 niin, että 7n -2cn jokaiselle kokonaisluvulle n n 0. Helposti nähdään, että ehdot täyttyvät, kun valitaan c=7 ja n 0 =1. Itse asiassa valintavaihtoehtoja on äärettömästi, mutta on mielekästä valita pienimmät mahdolliset, koska näin saadaan tarkat rajat kompleksisuudelle! Tämä merkintä sanoo, että eräs funktio on pienempi tai yhtä suuri kuin muuan toinen johonkin vakiokertoimeen asti ja erityisesti asymptoottisesti, kun n kasvaa kohti ääretöntä. Tämä keskeinen merkintä unohtaa kätevästi vakiotekijät antaen suuruusluokan - tärkeimmän. Algoritmin arraymax tapauksessa syötteen koko n on taulukon alkioiden määrä. Lause 2.1. Algoritmin arraymax suoritusaika on O(n). Perustelu: Edellä osoitettiin alkeisoperaatioiden määräksi 7n-2 tälle algoritmille. On siis olemassa positiivinen vakio a, joka riippuu toteutusympäristöstä niin, että suoritusaika on enintään a(7n-2). Valitsemalla c=7a ja n 0 =1 algoritmin aikakompleksisuudeksi saadaan O(n). Esim n n log n + 5 on O(n 3 ). Perustelu: 20n n log n +520n n 3 +5n 3 = 35n 3, kun n1. Itse asiassa mikä tahansa polynomi a k n k + a k-1 n k-1 + +a 0 on aina O(n k ). Esim log n + log log n on O(log n). 2. luku luku 47 Perustelu: 3 log n + log log n 4 log n, kun n2. Huomaa, että log log n ei olisi määritelty, jos olisi n=1. Esim on O(1) (vastaa tässä vakiota ylipäänsä). Perustelu: kaikille n1. Huomaa, että muuttuja n ei esiinny ollenkaan epäyhtälössä, sillä kysymyksessä on vakiofunktioita. Ordo-merkinnän määrittelyn suoraan soveltamisen sijasta yleensä käytetään seuraavia sääntöjä. Lause 2.2. Olkoot f(n), g(n) ja h(n) ei-negatiivisia kokonaislukuja reaaliluvuiksi kuvaavia funktioita. Tällöin ovat voimassa: 1. f(n) on O(af(n)) kaikille vakioille a>0. 2. Jos f(n) g(n) ja g(n) on O(h(n)), niin f(n) on O(h(n)). 3. Jos f(n) on O(g(n)) ja g(n) on O(h(n)), niin f(n) on O(h(n)). 4. f(n) + g(n) on O(max{f(n), g(n)}). 5. Jos g(n) on O(h(n)), niin f(n) + g(n) on O(f(n) + h(n)). 6. Jos g(n) on O(h(n)), niin f(n)g(n) on O(f(n)h(n)). 7. Jos f(n) on polynomi astetta d (f(n) =a 0 +a 1 n+ +a d n d ), niin f(n) on O(n d ). 8. n x on O(a n ) mille tahansa kiinnitetyille x>0 ja a>1. 2. luku luku 49

10 9. log n x on O(log n) mille tahansa kiinnitetylle x> log x n on O(n y ) mille tahansa kiinnitetyille vakioille x>0 ja y>0. Pyritään yleensä yksinkertaisimpaan mahdolliseen muotoon, joten vakiokertoimet jätetään esityksestä pois. Esim n 3 + 4n 2 log n on O(n 3 ). Muutamilla tärkeimmillä kompeksisuusfunktiotyypeillä on omat nimensä oheisen taulukon mukaisesti. Taulukko 2.1. Kompleksisuusfunktioiden luokkia. Perustelu: Käytetään edellisen lauseen sääntöjä: log n on O(n) (10. sääntö; ylöspäin arviointi on mielekäs, koska summalausekkeessa on suurempi tekijä, n 3 ). 4n 2 log n on O(4n 3 ) (6. sääntö). 2n 3 + 4n 2 log n on O(2n 3 + 4n 3 ) (5. sääntö). 2n 3 + 4n 3 on O(n 3 ) (7. sääntö) 2n 3 + 4n 2 log n on O(n 3 ) (3. sääntö). 2. luku luku 51 Ordon sukulaisia Esim log n + log log n on (log n). Kuten ordo-merkintä kuvasi funktion olevan pienempi tai yhtä suuri kuin toinen funktio, myös seuraavat merkinnät antavat asymptoottisen vertailutavan. Olkoot f(n) ja g(n) kokonaislukuja reaaliluvuiksi kuvaavia funktioita. Jos on olemassa vakio c>0 ja kokonaislukuvakio n 0 1 niin, että f(n) cg(n), kun n n 0, silloin f(n) on (g(n)) (luetaan f(n) on iso omega g(n) ). Tämä määrittelee asymptoottisesti, että funktio on suurempi tai yhtä suuri kuin toinen määrättyyn vakioon asti. Vastaavasti ilmaistaan f(n) on (g(n)) (iso theta), jos f(n) on O(g(n)) ja f(n) on (g(n)), so. on olemassa reaalilukuvakiot c >0 ja c >0 ja kokonaislukuvakio n 0 1 niin, että c g(n) f(n) c g(n) (c c ), kun n n 0. Iso theta esittää tilannetta, jossa kaksi funktiota ovat asymptoottisesti yhtä suuria johonkin vakiotekijään asti. Perustelu: 3 log n + log log n 3 log n, kun n2. Tämä osoittaa, että alemman asteen termit eivät ole vallitsevia alarajaa muodostettaessa -mielessä. Tilanne on samanlainen -mielessä. Esim log n + log log n on (log n). Perustelu: Tulos seuraa esimerkeistä 2.4. ja 2.7. Ordon etäisiä serkkuja On esitystapoja sille, että funktio on aidosti pienempi tai aidosti suurempi asymptoottisesti kuin toinen funktio, mutta näitä käytetään harvemmin kuin edellisiä (ordo on tärkein). Määritellään ne silti. 2. luku luku 53

11 Olkoot f(n) ja g(n) kokonaislukuja reaaliluvuiksi kuvaavia funktioita. Tällöin f(n) on o(g(n)) ( f(n) on pikku o g(n) ), jos mille tahansa vakiolle c>0 on olemassa vakio n 0 >0 niin, että f(n) cg(n), kun nn 0. Vastaavasti f(n) on (g(n)) ( f(n) on pikku g(n) ), jos g(n) on o(f(n)), so. mille tahansa vakiolle c>0 on olemassa vakio n 0 >0 niin, että g(n) cf(n), kun nn 0. Nyt o on intuitiivisesti analoginen tapaukselle pienempi kuin asymptoottisessa mielessä ja tapaukselle suurempi kuin asymptoottisessa mielessä. Huomattakoon, että f(n) on o(g(n)) silloin ja vain silloin kun (rajarvon ollessa määritelty): Pääero merkintöjen iso O ja pikku o välillä on, kun edelliselle määritellään, että on olemassa vakio c>0, ja jälkimmäiselle kaikille vakioille c>0. Funktio f(n) tulee merkityksettömäksi merkinnälle pikku o verrattuna funktioon g(n), kun n kasvaa kohti ääretöntä Asymptoottinen analyysi Jos jonkin algoritmin kompleksisuus on (n) ja toisen (n 2 ) samalle ongelmalle, niin edellinen on asymptoottisesti parempi. Jälkimmäinen saattaa kuitenkin joillekin yksittäisille arvoille n antaa paremman suorituskyvyn, esim. pienillä n:nnän arvoilla. Seuraavassa taulukossa funktiot on järjestetty kasvavan kasvunopeuden mukaan. Jos f(n) edeltää funktiota g(n) vasemmalta oikealle taulukossa siirryttäessä, f(n) on o(g(n)). 2. luku luku 55 Taulukko 2.2. Kasvunopeuksia. Asymptoottista näkökulmaa kuvataan myös seuraavassa taulukossa, jossa annetaan laskettavissa oleva ongelman maksimikoko, kun käytettävissä on määrätty suoritusaika, yksi sekunti, minuutti tai tunti ja olettaen kunkin alkeisoperaation vievän 1 s ajan. Huomattavaa siinä on, miten esim. melko suuri kompleksisuus, kuten O(n 2 ), häviää pienemmille kompleksisuuksille, vaikka näiden vakiokertoimet ovat huomattavasti suuremmat kuin edellisen. Taulukko 2.3. Maksimaalinen ongelman koko käytettävissä olevin ajoin. 2. luku luku 57

12 Pohditaan vielä tilannetta, jossa kuvitellaan saadun aiempaa merkittävästi tehokkaampi tietokone prosessoimaan ongelmaa. Oletetaan uuden prosessoinnin olevan 256 kertaa niin tehokas kuin edeltävän arvon m. Taulukko 2.4. Maksimaalisen ongelman koon kasvaminen alkuperäisen suoristusarvon m funktiona, kun prosessointiteho on noussut 256- kertaiseksi. Ordon käytöstä On epätäsmällistä kirjoittaa, että f(n) O(g(n)), sillä ordo-merkintä pitää sisällään suhteen pienempi tai yhtä suuri. Tarkkaan ottaen myös merkintä f(n) = O(g(n)) ei ole täysin oikein, kun yhtäsuuruus ymmärretään tavanomaisessa merkityksessään. Täten on paras kirjoittaa f(n) on O(g(n)). Matemaattisesti oikein on esittää, että f(n)o(g(n)), koska muodollisesti ajatellen kysymyksessä on joukko funktioita. Ordo-lausekkeiden esittäminen on kuitenkin melko vapaata tilanteesta riippuen. Voidaan mm. esittää osa kompleksisuudesta ordon avulla ja osa täsmällisenä lausekkeena, kuten 2n log n + O(n), jossa alempaa astetta oleva tekijä on esitetty suuruusluokaltaan. Huomattakoon myös, että jos f(n) on O(g(n)) + O(h(n)), niin se on myös O(g(n) + h(n)) ja jos f(n) on O(g(n)) O(h(n)), niin se on myös O(g(n) h(n)). 2. luku luku 59 Varoitus! Asymptoottisuuden käsitteen kanssa pitää olla varovainen, sillä nämä merkinnät saattavat olla hiukan harhaanjohtavia piilottaessaan vakiotekijät - nämähän saattavat olla hyvin suuria arvoiltaan. Esim. lukua tähtitieteilijät pitävät tunnetun maailmankaikkeuden atomien määrän estimattina. Funktio n on silti muotoa (n). Jos ongelmalle olisi tällaisen kompleksisuuden mukaisen algoritmin sijasta käytettävissä kompleksisuudeltaan 10n log n oleva algoritmi, tämä jälkimmäinen olisi luonnollisesti ainoa järjellinen valinta, vaikka edellinen on asymptoottisesti nopeampi. Herää kysymys, mikä on yleisessä mielessä nopea algoritmi. Hyvänä nopeudeltaan voidaan pitää sellaisia, joiden suoritusajat ovat enintään luokkaa O(n log n) (kohtuullisin vakiotekijöin). Joissakin yhteyksissä jopa O(n 2 ) voi olla riittävän nopea, kun n on melko pieni. Eksponentiaalinen tapaus O(2 n ) ei ole tehokas koskaan. 2. luku 60 Asymptoottisen algoritmianalyysin esimerkki Sisältäköön taulukko X lukuja n kappaletta. Pitää laskea kumulatiivisesti keskiarvoja taulukkoon A, ts. A[i] on alkioiden X[0],, X[i] keskiarvo, missä i=0,, n-1. Algorithm prefixaverages1(x): Input: Taulukko X, jossa on n syötelukua. Output: Taulukko A, jossa on n keskiarvoa. for i 0 to n-1 do a 0 for j 0 to i do a a + X[j] A[i] a/(i+1) return taulukko A Koodi 2.3. Keskiarvoja laskeva algoritmi. 2. luku 61

13 Tällaisella keskiarvolla on paljon sovelluksia mm. talous- ja tilastotieteissä. Algoritmi lienee idealtaan yksinkertaisin mieleen tuleva. Analysoidaan sen vaativuus. Taulukon A alustus ja palautus vaativat kullekin alkiolle vakiomäärän alkeisoperaatioita, jotka suoritetaan ajassa O(n). Kaksi sisäkkäistä silmukkaaa kontrolloidaaan muuttujilla i ja j. Ulommalla silmukalla on n suorituskertaa, joten ensimmäinen ja viimeinen asetuslause suoritetaan niin ikään n kertaa. Täten nämä asetuslauseet ja silmukkamuuttujan i lisääminen ovat O(n). Sisemmän silmukan runko suoritetaan i+1 kertaa riippuen muuttujan i arvosta. Tällöin sisemmän silmukan runko suoritetaan yhteensä n kertaa, mikä on yhtä kuin n(n+1)/2. Sisemmän silmukan suoritusaika on siis O(n 2 ). Vastaavan ajan vaatii myös silmukkalaskurin muuttujan j lisääminen. Algoritmin kokonaissuoritusaika saadaan eo. kolmen osatuloksen summana, O(n) + O(n) + O(n 2 ). Tämä on O(n 2 ). Ongelmalle on olemassa tätä tehokkaampikin algoritmi. 2. luku 62

2. Algoritmien analysointimenetelmistä

2. Algoritmien analysointimenetelmistä 2. Algoritmien analysointimenetelmistä Tietokoneohjelmien suoritusaika on usein tärkeä kysymys, erityisesti käsiteltäessä paljon tietoa tai prosessin ollessa monimutkainen, so. runsaasti aikaavievä. Monesti

Lisätiedot

2. Algoritmien analysointimenetelmistä

2. Algoritmien analysointimenetelmistä Kokeelliset tutkimukset 2. Algoritmien analysointimenetelmistä Tietokoneohjelmien suoritusaika on usein tärkeä kysymys, erityisesti käsiteltäessä paljon tietoa tai prosessin ollessa monimutkainen, so.

Lisätiedot

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

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

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

Algoritmit 2. Luento 1 Ti Timo Männikkö

Algoritmit 2. Luento 1 Ti Timo Männikkö Algoritmit 2 Luento 1 Ti 14.3.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin valinta Algoritmin analysointi Algoritmin suoritusaika Peruskertaluokkia Kertaluokkamerkinnät Kertaluokkien ominaisuuksia

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

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT ALGORITMIEN ANALYYSISTÄ 1.ratkaisu Laskentaaika hakkeri - optimoitu ALGORITMIANALYYSIÄ hyvä algoritmi hakkeri -optimoitu hyvä algoritmi Tehtävän koko Kuva mukailtu

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

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

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 1. Luento 3 Ti Timo Männikkö

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

Lisätiedot

Tietorakenteet, laskuharjoitus 2,

Tietorakenteet, laskuharjoitus 2, Tietorakenteet, laskuharjoitus, 6.-9.1 Muista TRAKLA-tehtävien deadline 31.1. 1. Tarkastellaan ensin tehtävää yleisellä tasolla. Jos funktion T vaativuusluokka on O(f), niin funktio T on muotoa T (n) =

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

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

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

Tutkimusmenetelmät-kurssi, s-2004

Tutkimusmenetelmät-kurssi, s-2004 Algoritmitutkimuksen menetelmistä Tutkimusmenetelmät-kurssi, s-2004 Pekka Kilpeläinen Kuopion yliopisto Tietojenkäsittelytieteen laitos Algoritmitutkimuksen menetelmistä p.1/20 Sisällys Tänään Tietojenkäsittelytiede

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

1.4 Funktioiden kertaluokat

1.4 Funktioiden kertaluokat 1.4 Funktioiden kertaluokat f on kertaluokkaa O(g), merk. f = O(g), jos joillain c > 0, m N pätee f(n) cg(n) aina kun n m f on samaa kertaluokkaa kuin g, merk. f = Θ(g), jos joillain a, b > 0, m N pätee

Lisätiedot

Tietorakenteet, laskuharjoitus 1,

Tietorakenteet, laskuharjoitus 1, Tietorakenteet, laskuharjoitus 1, 19.-22.1 Huom: laskarit alkavat jo ensimmäisellä luentoviikolla 1. Taustaa http://wiki.helsinki.fi/display/mathstatkurssit/matukurssisivu Halutaan todistaa, että oletuksesta

Lisätiedot

Tietorakenteet, laskuharjoitus 3, ratkaisuja

Tietorakenteet, laskuharjoitus 3, ratkaisuja Tietorakenteet, laskuharjoitus 3, ratkaisuja 1. (a) Toistolauseen runko-osassa tehdään yksi laskuoperaatio, runko on siis vakioaikainen. Jos syöte on n, suoritetaan runko n kertaa, eli aikavaativuus kokonaisuudessaan

Lisä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

Nopea kertolasku, Karatsuban algoritmi

Nopea kertolasku, Karatsuban algoritmi Nopea kertolasku, Karatsuban algoritmi Mikko Männikkö 16.8.2004 Lähde: ((Gathen and Gerhard 1999) luku II.8) Esityksen kulku Algoritmien analysointia (1), (2), (3), (4) Klassinen kertolasku Parempi tapa

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

Johdatus matematiikkaan

Johdatus matematiikkaan Johdatus matematiikkaan Luento 7 Mikko Salo 11.9.2017 Sisältö 1. Funktioista 2. Joukkojen mahtavuus Funktioista Lukiomatematiikassa on käsitelty reaalimuuttujan funktioita (polynomi / trigonometriset /

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

3. Laskennan vaativuusteoriaa

3. Laskennan vaativuusteoriaa 3. Laskennan vaativuusteoriaa tähän asti puhuttu siitä, mitä on mahdollista laskea äärellisessä ajassa siirrytään tarkastelemaan laskemista kohtuullisessa ajassa vaihtoehtoisesti voidaan laskenta-ajan

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

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

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

11. Javan toistorakenteet 11.1

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

Lisätiedot

Johdatus matemaattiseen päättelyyn

Johdatus matemaattiseen päättelyyn Johdatus matemaattiseen päättelyyn Maarit Järvenpää Oulun yliopisto Matemaattisten tieteiden laitos Syyslukukausi 2015 1 Merkintöjä Luonnollisten lukujen joukko N on joukko N = {1, 2, 3,...} ja kokonaislukujen

Lisätiedot

Matematiikassa väitelauseet ovat usein muotoa: jos P on totta, niin Q on totta.

Matematiikassa väitelauseet ovat usein muotoa: jos P on totta, niin Q on totta. Väitelause Matematiikassa väitelauseet ovat usein muotoa: jos P on totta, niin Q on totta. Tässä P:tä kutsutaan oletukseksi ja Q:ta väitteeksi. Jos yllä oleva väitelause on totta, sanotaan, että P:stä

Lisätiedot

1. Osoita, että joukon X osajoukoille A ja B on voimassa toinen ns. de Morganin laki (A B) = A B.

1. Osoita, että joukon X osajoukoille A ja B on voimassa toinen ns. de Morganin laki (A B) = A B. HY / Avoin yliopisto Johdatus yliopistomatematiikkaan, kesä 2015 Harjoitus 3 Ratkaisuehdotuksia Tehtäväsarja I Seuraavissa tehtävissä harjoitellaan muun muassa kahden joukon osoittamista samaksi sekä joukon

Lisätiedot

Sekalaiset tehtävät, 11. syyskuuta 2005, sivu 1 / 13. Tehtäviä

Sekalaiset tehtävät, 11. syyskuuta 2005, sivu 1 / 13. Tehtäviä Sekalaiset tehtävät, 11. syyskuuta 005, sivu 1 / 13 Tehtäviä Tehtävä 1. Johda toiseen asteen yhtälön ax + bx + c = 0, a 0 ratkaisukaava. Tehtävä. Määrittele joukon A R pienin yläraja sup A ja suurin alaraja

Lisätiedot

12. Javan toistorakenteet 12.1

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

Lisätiedot

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms. Kokeellinen algoritmiikka (3 ov) syventäviä opintoja edeltävät opinnot: ainakin Tietorakenteet hyödyllisiä opintoja: ASA, Algoritmiohjelmointi suoritus harjoitustyöllä (ei tenttiä) Kirjallisuutta: Johnson,

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

Approbatur 3, demo 1, ratkaisut A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat.

Approbatur 3, demo 1, ratkaisut A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat. Approbatur 3, demo 1, ratkaisut 1.1. A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat. Käydään kaikki vaihtoehdot läpi. Jos A on rehti, niin B on retku, koska muuten

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 ari.vesanen (at) oulu.fi 5. Rekursio ja induktio Rekursio tarkoittaa jonkin asian määrittelyä itseensä viittaamalla Tietojenkäsittelyssä algoritmin määrittely niin,

Lisätiedot

Todistusmenetelmiä Miksi pitää todistaa?

Todistusmenetelmiä Miksi pitää todistaa? Todistusmenetelmiä Miksi pitää todistaa? LUKUTEORIA JA TO- DISTAMINEN, MAA11 Todistus on looginen päättelyketju, jossa oletuksista, määritelmistä, aksioomeista sekä aiemmin todistetuista tuloksista lähtien

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

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 4 Jatkuvuus Jatkuvan funktion määritelmä Tarkastellaan funktiota f x) jossakin tietyssä pisteessä x 0. Tämä funktio on tässä pisteessä joko jatkuva tai epäjatkuva. Jatkuvuuden

Lisätiedot

811312A Tietorakenteet ja algoritmit 2015-2016. I Johdanto

811312A Tietorakenteet ja algoritmit 2015-2016. I Johdanto 811312A Tietorakenteet ja algoritmit 2015-2016 I Johdanto Sisältö 1. Algoritmeista ja tietorakenteista 2. Algoritmien analyysistä 811312A TRA, Johdanto 2 I.1. Algoritmeista ja tietorakenteista I.1.1. Algoritmien

Lisätiedot

1 Määrittelyjä ja aputuloksia

1 Määrittelyjä ja aputuloksia 1 Määrittelyjä ja aputuloksia 1.1 Supremum ja infimum Aluksi kerrataan pienimmän ylärajan (supremum) ja suurimman alarajan (infimum) perusominaisuuksia ja esitetään muutamia myöhemmissä todistuksissa tarvittavia

Lisätiedot

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1 13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.

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

Tekijä MAA2 Polynomifunktiot ja -yhtälöt = Vastaus a)

Tekijä MAA2 Polynomifunktiot ja -yhtälöt = Vastaus a) K1 a) Tekijä MAA Polynomifunktiot ja -yhtälöt 6.8.016 ( + + ) + ( ) = + + + = + + + = + 4 b) 4 4 ( 5 + ) ( 5 + 1) = 5 + + 5 + 1 4 = + + + 4 = + 5 5 1 1 Vastaus a) 4 + b) 4 + 1 K a) f ( ) = + 1 f () = +

Lisätiedot

MS-A0401 Diskreetin matematiikan perusteet

MS-A0401 Diskreetin matematiikan perusteet MS-A0401 Diskreetin matematiikan perusteet Osa 2: Relaatiot ja funktiot Riikka Kangaslampi Syksy 2017 Matematiikan ja systeemianalyysin laitos Aalto-yliopisto Relaatiot Relaatio Määritelmä 1 Relaatio joukosta

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

Johdatus matemaattiseen päättelyyn

Johdatus matemaattiseen päättelyyn Johdatus matemaattiseen päättelyyn Maarit Järvenpää Oulun yliopisto Matemaattisten tieteiden laitos Syyslukukausi 2015 1 Merkintöjä 2 Todistamisesta 2 3 Joukko-oppia Tässä luvussa tarkastellaan joukko-opin

Lisätiedot

Joukot. Georg Cantor ( )

Joukot. Georg Cantor ( ) Joukot Matematiikassa on pyrkimys määritellä monimutkaiset asiat täsmällisesti yksinkertaisempien asioiden avulla. Tarvitaan jokin lähtökohta, muutama yleisesti hyväksytty ja ymmärretty käsite, joista

Lisätiedot

Positiivitermisten sarjojen suppeneminen

Positiivitermisten sarjojen suppeneminen Positiivitermisten sarjojen suppeneminen Jono (b n ) n= on kasvava, jos b n+ b n kaikilla n =, 2,... Lemma Jokainen ylhäältä rajoitettu kasvava jono (b n ) n= raja-arvo on lim n b n = sup n Z+ b n. suppenee

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

7. Olemassaolo ja yksikäsitteisyys Galois n kunta GF(q) = F q, jossa on q alkiota, määriteltiin jäännösluokkarenkaaksi

7. Olemassaolo ja yksikäsitteisyys Galois n kunta GF(q) = F q, jossa on q alkiota, määriteltiin jäännösluokkarenkaaksi 7. Olemassaolo ja yksikäsitteisyys Galois n kunta GF(q) = F q, jossa on q alkiota, määriteltiin jäännösluokkarenkaaksi Z p [x]/(m), missä m on polynomirenkaan Z p [x] jaoton polynomi (ks. määritelmä 3.19).

Lisätiedot

12. Javan toistorakenteet 12.1

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

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

Reaalifunktioista 1 / 17. Reaalifunktioista

Reaalifunktioista 1 / 17. Reaalifunktioista säilyy 1 / 17 säilyy Jos A, B R, niin funktiota f : A B sanotaan (yhden muuttujan) reaalifunktioksi. Tällöin karteesinen tulo A B on (aiempia esimerkkejä luonnollisemmalla tavalla) xy-tason osajoukko,

Lisätiedot

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

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten Sisällys 16. Ohjelmoinnin tekniikkaa Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. For-lause lyhemmin. If-else-lause vaihtoehtoisesti

Lisätiedot

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

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin Sisällys 17. Ohjelmoinnin tekniikkaa for-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. if-else-lause vaihtoehtoisesti

Lisätiedot

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 8. syyskuuta 2016

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 8. syyskuuta 2016 TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 8. syyskuuta 2016 Sisällys a https://tim.jyu.fi/view/kurssit/tie/ tiea241/2016/videoiden%20hakemisto Matemaattisen

Lisätiedot

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö Johdatus diskreettiin matematiikkaan Harjoitus 5, 14.10.2015 1. Ratkaise rekursioyhtälö x n+4 2x n+2 + x n 16( 1) n, n N, alkuarvoilla x 1 2, x 2 14, x 3 18 ja x 4 42. Ratkaisu. Vastaavan homogeenisen

Lisätiedot

Kuvaus eli funktio f joukolta X joukkoon Y tarkoittaa havainnollisesti vastaavuutta, joka liittää joukon X jokaiseen alkioon joukon Y tietyn alkion.

Kuvaus eli funktio f joukolta X joukkoon Y tarkoittaa havainnollisesti vastaavuutta, joka liittää joukon X jokaiseen alkioon joukon Y tietyn alkion. Kuvaus eli funktio f joukolta X joukkoon Y tarkoittaa havainnollisesti vastaavuutta, joka liittää joukon X jokaiseen alkioon joukon Y tietyn alkion. Vastaavuus puolestaan on erikoistapaus relaatiosta.

Lisätiedot

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. For-lause lyhemmin. If-else-lause vaihtoehtoisesti

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

Matematiikan tukikurssi, kurssikerta 2

Matematiikan tukikurssi, kurssikerta 2 Matematiikan tukikurssi kurssikerta 1 Relaatioista Oletetaan kaksi alkiota a ja b. Näistä kumpikin kuuluu johonkin tiettyyn joukkoon mahdollisesti ne kuuluvat eri joukkoihin; merkitään a A ja b B. Voidaan

Lisätiedot

4. Algoritmien tehokkuus

4. Algoritmien tehokkuus 4. Algoritmien tehokkuus (Harel luku 6) vastaa jo minulle! [Psalmi 69:18] Kuinka paljon suoritusaikaa tai -tilaa algoritmin suoritus vaatii? Keskitymme lähinnä aikavaativuuden tarkasteluun. Myös algoritmien

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

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma. 2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä

Lisätiedot

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys For-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. If-else-lause vaihtoehtoisesti

Lisätiedot

Johdatus matematiikkaan

Johdatus matematiikkaan Johdatus matematiikkaan Luento 4 Mikko Salo 4.9.2017 Sisältö 1. Rationaali ja irrationaaliluvut 2. Induktiotodistus Rationaaliluvut Määritelmä Reaaliluku x on rationaaliluku, jos x = m n kokonaisluvuille

Lisätiedot

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö Algoritmit 1 Luento 10 Ke 14.2.2018 Timo Männikkö Luento 10 Algoritminen ongelmanratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Lisäyslajittelu Valintalajittelu Permutaatiot

Lisätiedot

Matematiikan tukikurssi, kurssikerta 5

Matematiikan tukikurssi, kurssikerta 5 Matematiikan tukikurssi, kurssikerta 5 1 Jonoista Matematiikassa jono (x n ) on yksinkertaisesti järjestetty, päättymätön sarja numeroita Esimerkiksi (1,, 3, 4, 5 ) on jono Jonon i:ttä jäsentä merkitään

Lisätiedot

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3 16. Lohkot 16.1 Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 16.2 Lohkot Kaarisulut

Lisätiedot

Kuvaus eli funktio f joukolta X joukkoon Y tarkoittaa havainnollisesti vastaavuutta, joka liittää joukon X jokaiseen alkioon joukon Y tietyn alkion.

Kuvaus eli funktio f joukolta X joukkoon Y tarkoittaa havainnollisesti vastaavuutta, joka liittää joukon X jokaiseen alkioon joukon Y tietyn alkion. Kuvaus eli funktio f joukolta X joukkoon Y tarkoittaa havainnollisesti vastaavuutta, joka liittää joukon X jokaiseen alkioon joukon Y tietyn alkion. Kuvaus eli funktio f joukolta X joukkoon Y tarkoittaa

Lisätiedot

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisältö. 2. Taulukot. Yleistä. Yleistä Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä

Lisätiedot

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1 13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.

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

Harjoitustyön testaus. Juha Taina

Harjoitustyön testaus. Juha Taina Harjoitustyön testaus Juha Taina 1. Johdanto Ohjelman teko on muutakin kuin koodausta. Oleellinen osa on selvittää, että ohjelma toimii oikein. Tätä sanotaan ohjelman validoinniksi. Eräs keino validoida

Lisätiedot

Esitetään tehtävälle kaksi hieman erilaista ratkaisua. Ratkaisutapa 1. Lähdetään sieventämään epäyhtälön vasenta puolta:

Esitetään tehtävälle kaksi hieman erilaista ratkaisua. Ratkaisutapa 1. Lähdetään sieventämään epäyhtälön vasenta puolta: MATP00 Johdatus matematiikkaan Ylimääräisten tehtävien ratkaisuehdotuksia. Osoita, että 00 002 < 000 000. Esitetään tehtävälle kaksi hieman erilaista ratkaisua. Ratkaisutapa. Lähdetään sieventämään epäyhtälön

Lisätiedot

2017 = = = = = = 26 1

2017 = = = = = = 26 1 JOHDATUS LUKUTEORIAAN (syksy 2017) HARJOITUS 2, MALLIRATKAISUT Tehtävä 1. Sovella Eukleiden algoritmia ja (i) etsi s.y.t(2017, 753) (ii) etsi kaikki kokonaislukuratkaisut yhtälölle 405x + 141y = 12. Ratkaisu

Lisätiedot

5 Kertaluokkamerkinnät

5 Kertaluokkamerkinnät TIE-20100 Tietorakenteet ja algoritmit 75 5 Kertaluokkamerkinnät Tässä luvussa käsitellään asymptoottisessa analyysissa käytettyjä matemaattisia merkintätapoja Määritellään tarkemmin Θ, sekä kaksi muuta

Lisätiedot

Ratkaisu: Käytetään induktiota propositiolauseen A rakenteen suhteen. Alkuaskel. A = p i jollain i N. Koska v(p i ) = 1 kaikilla i N, saadaan

Ratkaisu: Käytetään induktiota propositiolauseen A rakenteen suhteen. Alkuaskel. A = p i jollain i N. Koska v(p i ) = 1 kaikilla i N, saadaan HY / Matematiikan ja tilastotieteen laitos Johdatus logiikkaan I, syksy 2018 Harjoitus 2 Ratkaisuehdotukset 1. Olkoon totuusjakauma v sellainen että v(p i ) = 1 kaikilla i N ja A propositiolause, jossa

Lisätiedot

missä on myös käytetty monisteen kaavaa 12. Pistä perustelut kohdilleen!

missä on myös käytetty monisteen kaavaa 12. Pistä perustelut kohdilleen! Matematiikan johdantokurssi Kertausharjoitustehtävien ratkaisuja/vastauksia/vihjeitä. Osoita todeksi logiikan lauseille seuraava: P Q (P Q). Ratkaisuohje. Väite tarkoittaa, että johdetut lauseet P Q ja

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

1. Logiikan ja joukko-opin alkeet

1. Logiikan ja joukko-opin alkeet 1. Logiikan ja joukko-opin alkeet 1.1. Logiikkaa 1. Osoita totuusarvotauluja käyttäen, että implikaatio p q voidaan kirjoittaa muotoon p q, ts. että propositio (p q) ( p q) on identtisesti tosi. 2. Todista

Lisätiedot

Luonnollisten lukujen ja kokonaislukujen määritteleminen

Luonnollisten lukujen ja kokonaislukujen määritteleminen Luonnollisten lukujen ja kokonaislukujen määritteleminen LuK-tutkielma Jussi Piippo Matemaattisten tieteiden yksikkö Oulun yliopisto Kevät 2017 Sisältö 1 Johdanto 2 2 Esitietoja 3 2.1 Joukko-opin perusaksioomat...................

Lisätiedot

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen:

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen: Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen: S A S B Samaan jäsennyspuuhun päästään myös johdolla S AB Ab ab: S A S B Yhteen jäsennyspuuhun liittyy aina tasan yksi vasen

Lisätiedot

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

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 12 (opetusmoniste, kappaleet ) T-79.144 Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 12 (opetusmoniste, kappaleet 9.1 9.5) 30.11. 3.12.2004 1. Osoita lauselogiikan avulla oheisten ehtolausekkeiden ekvivalenssi. (a)!(a

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

Rajapinta (interface)

Rajapinta (interface) 1 Rajapinta (interface) Mikä rajapinta on? Rajapinta ja siitä toteutettu luokka Monimuotoisuus ja dynaaminen sidonta Rajapinta vs periytyminen 1 Mikä rajapinta on? Rajapintoja käytetään, kun halutaan määritellä

Lisätiedot

Matematiikan johdantokurssi, syksy 2016 Harjoitus 11, ratkaisuista

Matematiikan johdantokurssi, syksy 2016 Harjoitus 11, ratkaisuista Matematiikan johdantokurssi, syksy 06 Harjoitus, ratkaisuista. Valitse seuraaville säännöille mahdollisimman laajat lähtöjoukot ja sopivat maalijoukot niin, että syntyy kahden muuttujan funktiot (ks. monisteen

Lisätiedot

2.1. Tehtävänä on osoittaa induktiolla, että kaikille n N pätee n = 1 n(n + 1). (1)

2.1. Tehtävänä on osoittaa induktiolla, että kaikille n N pätee n = 1 n(n + 1). (1) Approbatur 3, demo, ratkaisut Sovitaan, että 0 ei ole luonnollinen luku. Tällöin oletusta n 0 ei tarvitse toistaa alla olevissa ratkaisuissa. Se, pidetäänkö nollaa luonnollisena lukuna vai ei, vaihtelee

Lisätiedot

7 Vapaus. 7.1 Vapauden määritelmä

7 Vapaus. 7.1 Vapauden määritelmä 7 Vapaus Kuten edellisen luvun lopussa mainittiin, seuraavaksi pyritään ratkaisemaan, onko annetussa aliavaruuden virittäjäjoukossa tarpeettomia vektoreita Jos tällaisia ei ole, virittäjäjoukkoa kutsutaan

Lisätiedot

Algoritmianalyysin perusteet

Algoritmianalyysin perusteet Tietorakenteet ja algoritmit Algoritmianalyysin perusteet Ari Korhonen 1 5. ALGORITMIANALYYSI 5.1 Johdanto 5.2 Tavoitteet 5.3 Algoritmien luokittelu 5.4 Kertaluokkamerkinnät (Big Oh Notation) 5.5 Kertaluokkamerkinnöillä

Lisätiedot

Tutoriaaliläsnäoloista

Tutoriaaliläsnäoloista Tutoriaaliläsnäoloista Tutoriaaliläsnäolokierroksella voi nyt täyttää anomuksen läsnäolon merkitsemisestä Esim. tagi ei toiminut, korvavaltimon leikkaus, yms. Hyväksyn näitä omaa harkintaa käyttäen Tarkoitus

Lisätiedot

Diskreetin Matematiikan Paja Ratkaisuhahmotelmia viikko 1. ( ) Jeremias Berg

Diskreetin Matematiikan Paja Ratkaisuhahmotelmia viikko 1. ( ) Jeremias Berg Diskreetin Matematiikan Paja Ratkaisuhahmotelmia viikko 1. (14.3-18.3) Jeremias Berg 1. Luettele kaikki seuraavien joukkojen alkiot: (a) {x Z : x 3} (b) {x N : x > 12 x < 7} (c) {x N : 1 x 7} Ratkaisu:

Lisätiedot

3. Kirjoita seuraavat joukot luettelemalla niiden alkiot, jos mahdollista. Onko jokin joukoista tyhjä joukko?

3. Kirjoita seuraavat joukot luettelemalla niiden alkiot, jos mahdollista. Onko jokin joukoista tyhjä joukko? HY / Avoin yliopisto Johdatus yliopistomatematiikkaan, kesä 2015 Harjoitus 1 Ratkaisuehdotuksia Tehtäväsarja I Seuraavat tehtävät liittyvät luentokalvoihin 1 14. Erityisesti esimerkistä 4 ja esimerkin

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

A215 Tietorakenteet. Tietojenkäsittelytieteiden laitos Tampereen yliopisto. Periodit I-II, syksy 2007

A215 Tietorakenteet. Tietojenkäsittelytieteiden laitos Tampereen yliopisto. Periodit I-II, syksy 2007 Kurssiesittely Tietojenkäsittelytieteiden laitos Tampereen yliopisto A215 Tietorakenteet Periodit I-II, syksy 2007 Luennot/vastuuhenkilö: Heikki Hyyrö Sähköposti: heikki.hyyro@cs.uta.fi Kurssin kotisivu:

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