Algoritminen matematiikka

Koko: px
Aloita esitys sivulta:

Download "Algoritminen matematiikka"

Transkriptio

1 Algoritminen matematiikka Luentomoniste Turun yliopisto Matematiikan laitos Turku 2016

2 i Alkusanat Kurssin tarkoituksena on algoritmisen ajattelun omaksuminen ja kehittäminen. Tavanomaisesti matematiikassa kysytään Onko jokin väittämä tosi? tai Onko jokin olemassa? mutta tällä kurssilla tarkastellaan lähinnä kysymystä Miten tämä jokin voidaan laskea ja kuinka nopeasti?. Tietotekniikan myötä algoritmisesta matematiikasta on tullut hyvin tärkeä osa matematiikkaa. Laskentaa, ja osin jopa todistamista, suoritetaan tietokoneilla. Monilla soveltavilla matematiikan aloilla, kuten esimerkiksi kryptografissa, algoritminen ajattelu on välttämätöntä. Kurssilla keskitytään tavanomaisten aritmeettisten ja lukuteoreettisten ongelmien laskennallisen kompleksisuuden arviointiin, ja erityisesti siihen miten nämä probleemat tulee nähdä algoritmisesta näkökulmasta ts. mitä voidaan laskea nopeasti, siis käytännössä, ja mitä ei voida (nykytiedon perusteella). Kurssin esitiedoiksi tarvitaan Algebran peruskurssi I:n tai Kryptografian matemaattiset perusteet kurssien antamia lukuteorian perustietoja. Tämä moniste perustuu suurelta osin Juhani Karhumäen luentomonisteeseen vuodelta Luentomonistetta ovat sen jälkeen muokanneet ja päivittäneet Ari Renvall (2006) ja Vesa Halava (2016). Lähteenä on lisäksi käytetty seuraavia kirjoja: 1. G. Brassard, P. Bratley: Fundamentals of Algorithmics, Prentice Hall, T. Cormen, C. Leiserson, R. Rivest, C. Stein: Introduction to Algorithms, MIT Press, 2001 (2nd ed.). 3. J. von zur Gathen, J. Gerhard: Modern Computer Algebra, Cambridge University Press, 2003 (2nd ed.).

3 Sisältö ii Sisältö 1 Johdanto Algoritmien tutkimus Algoritmien peruskäsitteitä Esimerkki Algoritmi ja algoritminen probleema Syöte ja alkeisoperaatiot Algoritmin kompleksisuus Funktion kertaluku Algoritmien kuvauksesta Esimerkkejä Aritmeettisia peruslaskutoimituksia Kahden luvun vertailu Yhteen- ja vähennyslasku Kertolasku Jakolasku Binääriesityksen laskeminen Potenssi Suurin yhteinen tekijä Neliöjuuri Aritmetiikkaa renkaassa Z m Yhteen-, kerto- ja vähennyslasku Käänteisalkio ja jakolasku Lineaarinen kongruenssiyhtälö Modulaarinen potenssilasku RSA-salakirjoitusmenetelmä Algoritmien suunnittelusta Hajoita-ja-hallitse -menetelmä Rekursioyhtälöiden ratkaisemisesta Karatsuba-kertolasku Parannettu kertoalgoritmi Matriisien tulo Dynaaminen suunnittelu Binomikerroin Matriisiketjun kertolasku Polynomien aritmetiikkaa Polynomien summa ja tulo Diskreetti Fourier muunnos Nopea Fourier muunnos Polynomien nopea kertolasku Schönhage Strassen algoritmi Muita polynomiprobleemoja

4 Sisältö iii 7 Alkulukutestaus ja todennäköisyysalgoritmit AKS algoritmi Todennäköisyysalgoritmit Numeeriset satunnaisalgoritmit Monte Carlo -algoritmit Millerin-Rabinin alkulukutestaus Las Vegas -algoritmit Kokonaislukujen tekijöihinjako Neliöjuuri ryhmässä Z p Epädeterministiset algoritmit 70 9 Liite 1: Kokonaisluvuista i 9.1 Jaollisuudesta i 9.2 Kongruenssi ja jäännösluokat modulo n iv

5 1 1 Johdanto 1.1 Algoritmien tutkimus Algoritmi on konstruktiivisen ja diskreetin matematiikan keskeisimpiä käsitteitä. Implisiittisesti algoritmit ovat olleet osa matematiikkaa kautta sen koko historian. Vanhin ja ehkä tunnetuin algoritmi Eukleideen algoritmi on yli 2000 vuotta vanha. Sen laskennallisen kompleksisuuden arviointi vuodelta 1845 (Lame) puolestaan on yksi vanhimmista konkreettisista algoritmiteorian tuloksista. Varsinaisesti algoritmien tutkimus käynnistyi 1930 luvulla teoreettisena Laskettavuuden teorian (ala I, alla) tutkimuksella. Käytännön läheisempää tutkimus oli 1950 luvulla jolloin keskityttiin Algoritmien suunnitteluun ja analysointiin (ala II). Viime aikoina, 1970 luvulta lähtien Kompleksisuusteorian tutkimus (ala III) on ollut keskeisessä asemassa. Kompleksisuusteoriassa tutkitaan esimerkiksi, mitkä probleemat ovat käytännössä algoritmisesti ratkaistavissa polynomiajassa toimivalla algoritmilla tai onko probleemalle olemassa nopeaa todennäköisyysalgoritmilla. Yllä mainituista kolmesta algoritmitutkimuksen alasta käytetään yleensä alla esitetyn mukaisia nimityksiä, niinikään alla esitetään alojen tutkimusten tarjoama keskeinen anti. I: Laskettavuuden teoria; Algoritmisesti ratkeamattomat probleemat, Turingin koneet II: Algoritmien suunnittelu ja analysointi; Monet tärkeät nopeat käytännön algoritmit III: Kompleksisuusteoria; Käytännössä mahdottomat probleemat (nykytiedon mukaan); P? = NP -probleema; todennäköisyysalgoritmit Laskettavuuden teoria mullisti matemaattisen ajattelun, kun A. Turing ja A.

6 1.1 Algoritmien tutkimus 2 Church vuonna osoittivat, että on olemassa algoritmisesti ratkeamattomia probleemoja. Nimittäin vielä vuosisadan vaihteen matemaatikot, kuten D. Hilbert, ajattelivat, että kaikki mielekkäästi määritellyt probleemat ovat ainakin periaatteessa (vaikkakaan ei välttämättä käytännössä) algoritmisesti ratkaistavissa. Kompleksisuusteoria puolestaan on osoittanut, että monet käytännössä tärkeät probleemat, kuten esimerkiksi lukujärjestyksen laatiminen, ovat käytännössä mahdottomia ratkaista (ts. niiden ratkaiseminen vaatii liikaa resursseja), vaikkakin matemaattisesti niiden ratkaiseminen voi olla triviaalia (esim. käydään läpi kaikki vaihtoehdot). Tässä on syytä korostaa, että käytännössä mahdoton tarkoittaa: käytännössä mahdoton nykytiedon mukaan. Se, ovatko kyseessä olevat probleemat todella käytännössä mahdottomia, on yksi modernin matematiikan suurista avoimista kysymyksistä, ns. P? = NP -probleema. Tämän kurssin tarkoituksena on toimia johdatuksena algoritmiseen ajatteluun. Tähän pyritään tarkastelemalla konkreettisten, lähinnä aritmeettisten probleemojen laskennallista vaikeutta. Tarkasteltaviin ongelmiin pyritään etsimään tehokkaita algoritmeja. Siten yllä olevan luokittelun valossa kurssi kuuluu lähinnä alueelle III. Mainittakoon lopuksi, että termi algoritmi juontaa juurensa persialaisesen matemaatikon Mohammed al-khowârizmîn nimestä 800-luvulta. Hän kehitti algoritmiset säännöt lukujen aritmeettisten operaatioiden laskemiseksi: samat, jotka ovat yhä käytössä kouluopetuksessa. 1 Ajan säästämiseksi ohitetaan tässä K. Gödelin epätäydellisyyslauseen (v. 1931) merkitys Turingin ja Churchin tuloksiin. 2 Huomautettakoon kuitenkin täydellisyyden nimissä, että E. Post todisti ensimmäisen ratkeamattomuus tuloksensa jo v. 1924, mutta ei, syystä tai toisesta, tulostaan julkaissut ennen Turingia ja Churchia.

7 3 2 Algoritmien peruskäsitteitä 2.1 Esimerkki Tarkastellaan kahden positiivisen kokonaisluvun tulon laskemista. Aikojen kuluessa on kehitetty useita erilaisia menetelmiä tämän ongelman ratkaisemiseksi. Mielivaltaisen suurten lukujen tulo opitaan laskemaan jo koulun alaluokilla. Klassinen koulualgoritmi palauttaa pidempien lukujen tulon laskemisen 1- numeroisten lukujen tuloihin, jotka puolestaan muistetaan ulkoa opituista kertotauluista. Ns. arabialaisessa kertoalgoritmissa käytetään apuna laatikkoa, jonka sivujen pituudet ovat samat kuin kerrottavien lukujen pituudet. Kerrottavat luvut asetetaan laatikon sivuille, ja laatikkoon kirjataan kaikkien luvuissa esiintyvien numeroiden tulot oheisen kuvan osoittamalla tavalla. Lukujen tulo saadaan puuttuville sivuille laskemalla diagonaalien summat. Kaksi edellä mainittua menetelmää muistuttavat kovasti toisiaan, mutta venäläisessä kertoalgoritmissa asia ratkaistaan toisin. Siinä toista kerrottavista luvuista toistuvasti puolitetaan (pyöristämällä alaspäin) ja toista tuplataan, kunnes puolitettava luku on ykkönen. Lukujen tulo saadaan ynnäämällä ne tuplatut luvut, joita vastaava puolitettu luku on pariton (venäläisen kertoalgoritmin oikeellisuus, ks. demonstraatiot.) Mikä yllä esitetyistä menetelmistä on paras? Jotta tähän voitaisiin vastata, tarvitaan jokin hyvyyden mittari. Tällä kurssilla eri laskentamenetelmiä vertaillaan niiden tehokkuuden, siis nopeuden, perusteella. Osoittautuu, että tässä mielessä kaikki edellä esitetyt algoritmit ovat asymptoottisesti yhtä hyviä. a) b) c) Kuva 1: a) Klassinen, b) arabialainen ja c) venäläinen kertolaskualgoritmi. Esitetään vielä yksi kertolaskualgoritmi. Siinä kerrottavien lukujen a ja b pituus n pitää olla jokin kakkosen potenssi: n = 2 m (jos näin ei ole, lukujen eteen voidaan lisätä tarvittava määrä nollia). Olkoon a= a 1 10 n/2 +a 0 ja b= b 1 10 n/2 + b 0, missä 0 a 0, a 1,b 0,b 1 < 10 n/2. Nyt ab= a 1 b 1 10 n + (a 0 b 1 + a 1 b 0 ) 10 n/2 + a 0 b 0,

8 2.2 Algoritmi ja algoritminen probleema 4 joten kahden luvun tulo saadaan laskemalla neljä puolta lyhyempien lukujen tuloa (ja lisäksi muutamia yhteenlaskuja ja kymmenellä kertomisia). Nämä pienemmät tulot voidaan edelleen laskea samalla menetelmällä. Näin saadaan rekursiivinen kertolaskualgoritmi, jossa 2 i -numeroisten lukujen tulo saadaan laskemalla (2 i ) 2 1-numeroisten lukujen tuloa. Huomaa jo nyt, että kantaluvulla 10 kertominen vastaa bitttiensiirtoa eli nollan lisäämistä luvun loppun, joten se onnistuu erittäin nopeasti. Lisäksi on selvää, että yhteenlasku on kertolaskua nopeampaa (ks. luku 3). Osoittautuu kuitenkin, ettei edellä esitelty rekursiivinen algoritmi ole sen tehokkaampi kuin aiemmin mainitut menetelmät. Mutta kuten myöhemmin nähdään, ideaa voidaan parannella niin, että tulon laskeminen palautuukin kolmen (eikä neljän) puolta lyhyemmän luvun tuloon. Tuloksena on merkittävästi nopeampi algoritmi, etenkin jos tarkasteltavat luvut ovat suuria. 2.2 Algoritmi ja algoritminen probleema Algoritminen probleema koostuu syötteistä I ja kuhunkin syötteeseen liittyvästä (usein yksikäsitteisestä) tulosteesta. Probleema voidaan siis ajatella funktiona I O, missä O on kaikkien mahdollisten tulosteiden joukko. Algoritmi on puolestaan menetelmä, jolla tarkasteltava probleema voidaan mekaanisesti ratkaista. Voidaan siis sanoa, että algoritmi on metodi yllä mainitun funktion I O laskemiseksi. Jos tehtävänä on ratkaista probleema jollakin tietyllä syötteellä, puhutaan probleeman instanssista. Esimerkiksi kahden positiivisen kokonaisluvun kertolasku on algoritminen probleema, ja se voidaan ratkaista millä tahansa alun esimerkissä mainitulla algoritmilla. Ongelman syötteet ovat siis kokonaislukupareja ja parin (123, 45) tulon laskeminen on yksi tämän probleeman instansseista. Yleensä algoritmilta vaaditaan seuraavia ominaisuuksia. (i) Algoritmin suoritus koostuu joukosta peräkkäin suoritettavia yksinkertaisia operaatioita, ns. alkeisoperaatioita. (ii) Algoritmin ohjeita sovelletaan deterministisesti, ts. algoritmin suoritus etenee samalla syötteellä aina tarkalleen samalla tavalla. (iii) Algoritmin ohjeet ovat universaalisia; ts. algoritmi ratkaisee ongelman kaikilla mahdollisilla syötteillä. (iv) Algoritmin ohjeet ovat terminoivia; ts. kullakin syötteellä tarvitaan vain äärellinen määrä alkeisoperaatioita. Tosin käyttökelpoisia käytännön laskentamenetelmiä voidaan saada, vaikka kohdasta (ii) tingittäisiinkin, esim. myöhemmin käsiteltävät todennäköisyys algoritmit.

9 2.3 Syöte ja alkeisoperaatiot 5 Algoritmiset probleemat, joiden vastaus on aina joko KYLLÄ tai EI (tai 1/0) ovat algoritmien teorian kannalta erityisen tärkeitä. Tällaisia probleemoja kutsutaan päätäntäongelmiksi tai vaihtoehtoisesti ratkeavuusongelmiksi. Esimerkiksi probleema, jossa kysytään, onko syötteenä saatu luku alkuluku vai ei, on päätäntäongelma. 2.3 Syöte ja alkeisoperaatiot Algoritmien tehokkuutta mitataan sen syötteen s koon, merk. s l, funktiona. Syötteen koko voidaan tapauksesta riippuen määritellä hieman eri tavoin, mutta intuitiivisesti se yleensä ilmoittaa sen, paljonko tilaa (tai tietokoneen muistia) tarvitaan syötteen esittämiseen. Esimerkiksi kokonaislukusyötteen kooksi on luonnollista määritellä luvun pituus. Kuitenkin esimerkiksi n n matriisin kooksi ajatellaan yleensä n (eikä n 2 ). Saatuaan syötteen s algoritmi suorittaa alkeisoperaatioita niin kauan, kunnes tuloste saadaan. Se, mitä alkeisoperaatioilla tarkoitetaan, vaihtelee tarkasteltavan probleeman mukaan. Esimerkiksi kertoalgoritmeissa 1-numeroisten lukujen tulon (ja summan) laskeminen ajatellaan alkeisoperaatioksi. Joissakin lajittelualgoritmeissa kahden luvun suuruuden vertailu katsotaan alkeisoperaatioksi. Sen sijaan algoritmin ohjauskäskyjä ei ole tapana laskea alkeisoperaatioiksi. Ideana on, että yhden alkeisoperaation suorittaminen onnistuu aina vakioajassa ja että algoritmin suoritusaika on suoraan verrannollinen suoritettujen alkeisoperaatioiden määrään. 2.4 Algoritmin kompleksisuus Tarkasteltava ongelma voidaan (ainakin useimmiten) ratkaista useilla erilaisilla algoritmeilla. Tällöin on luonnollista kysyä: Mikä ongelman ratkaisevisista algoritmeista on paras? Tällä kurssilla algoritmeja vertaillaan lähinnä niiden nopeuden perusteella. Nopeus puolestaan mitataan laskemalla, kuinka monta alkeisoperaatiota algoritmin suorittaminen vaatii. Olkoon T A,s algoritmin A suorittamien alkeioperaatioiden määrä syötteellä s. Syötteen s koko s on luonnollinen luku, ja algoritmin A kompleksisuus määritellään funktiona T A : N N, T A (n)= max s l =n {T A,s}. T A (n) siis kertoo, kuinka nopeasti tuloste varmasti saadaan kaikilla n-kokoisilla syötteillä. Toisinaan tätä kutsutaan pahimman tapauksen kompleksisuudeksi. Usein parempi mittari algoritmin tehokkuudelle olisi keskimääräinen kompleksisuus. Se on kuitenkin lähes aina paljon vaikeampi laskea.

10 2.4 Algoritmin kompleksisuus 6 Yllä tarkasteltiin algoritmissa tarvittavien laskuaskeleiden määrää, siis aikakompleksisuutta. Yhtä hyvin voitaisiin tarkastella vaikka algoritmin vaatimien muistipaikkojen määrää, eli tilakompleksisuutta. Tällä kurssilla kompleksisuudella tarkoitetaan aina aikakompleksisuutta. Yllä kompleksisuuskäsitteet määriteltiin algoritmeille. Käsitteet voidaan laajentaa koskemaan myös tarkasteltavaa algoritmista probleemaa. Probleeman AP kompleksisuus on sen parhaan ratkaisualgoritmin kompleksisuus. Tässä paras tarkoittaa asymptoottisesti nopeiten toimivaa algoritmia. Algoritmin kompleksisuuden analysointi tarkoittaa sen kompleksisuuden (tai oikeastaan sen kertaluvun, suuruusluokan) määräämistä. Tämä on useimmiten mahdollista suorittaa tekemällä esim. sopivia arviointeja. Sen sijaan algoritmisen probleeman AP kompleksisuuden (kertaluvun) määrääminen on usein ylivoimaisen vaikeaa. Mikä tahansa AP:n ratkaiseva algoritmi antaa ylärajan AP:n kompleksisuudelle, mutta hyvien alarajojen määrääminen on yleisesti algoritmien teorian vaikeimpia asioita. Pitäisi nimittäin osoittaa, että mikään algoritmi ei ratkaise AP:ta annettua funktiota nopeammin. Esimerkki 2.1. Tämän luvun alussa tarkasteltiin kokonaislukujen kertolaskun laskevia algoritmeja. Voidaan osoittaa, että esitetyt algoritmit toimivat ajassa O(n 2 ) (ordo-merkintä), mikä tarkoittaa, että on olemassa positiivinen luku α ja luonnollinen luku n 0 joille tiedetään, että kaikille n n 0 T A (n) αn 2. Tästä seuraa, että algoritmisen probleeman kompleksisuus on myös O(n 2 ). Toisaalta, myöhemmin tällä kurssilla osoittautuu, että kertolasku-probleeman algoritminen kompleksisuus on O(n(logn) 2+ε ), koska on olemassa algoritmi, joka toimii ajassa O(n(logn) 2+ε ). Todettakoon vielä, että paras tunnettu kertolaskualgoritmi käytännössä laskettavan kokoisille luvuille toimii O(n log n log(log n)) ajassa (Schönhage and Strassen 1971, Knuth 1998). Sitäkin asymptoottisesti nopeampia algoritmeja on löydetty (esim. ns Fürer-algortimi), mutta ne ovat Schönhage-Strassen algoritmia nopeampia vasta luvuilla, joita käytännön sovelluksissa ja laskuissa ei käytetä. Algoritmit ja algoritmiset probleemat jaetaan tavallisesti kahteen luokkaan, missä rajan määrää polynomiaikaisuus. Algoritmia A kutsutaan toteutettavaksi (feasible), jos on olemassa sellainen polynomi P(n), että T A (n) P(n) jostakin rajasta n n 0 lähtien. Muussa tapauksessa algoritmia sanotaan ei toteutettavaksi (infeasible). Algoritmista probleemaa AP kutsutaan ratkaistavaksi (tractable), jos AP:lle tunnetaan toteutettava ratkaisu; muuten AP:ta sanotaan ei ratkaistavaksi (intractable). Usein ajatellaan, että ratkaistavat probleemat ovat helppoja ja siten käytännössä ratkeavia. Kirjaimellisesti tämä ei tietysti pidä paikkaansa, mutta luo-

11 2.5 Funktion kertaluku 7 kittelu on teoreettisesti perusteltua, ja itse asiassa yleensä polynomiaikaiset algoritmit toimivat alhaista astetta olevassa polynomiajassa. Toisaalta ei ratkaistavien probleemien vähänkin suuremmat instanssit ovat varmasti käytännössä mahdottomia ratkaista ainakin tällä hetkellä. 2.5 Funktion kertaluku Esimerkki 2.2. Alla on taulukoitu algoritmin vaatima aika, kun oletetaan yhden alkeisoperaation suorittamisen kestävän yhden nanosekunnin (10 9 s) verran. n= 10 n= 20 n= 30 n= 50 n= 100 n= 1000 n 0,01 µs 0,02 µs 0,03 µs 0,05 µs 0,10 µs 1,00 µs n log 2 n 0,03 µs 0,09 µs 0,15 µs 0,28 µs 0,66 µs 9,97 µs n 2 0,10 µs 0,40 µs 0,90 µs 2,50 µs 10 µs 1000 µs n 5 0,10 ms 3,20 ms 24,3 ms 0,31 s 10,0 s 11,6 vrk 2 n 1,0 µs 1,0 ms 1,07 s 13,0 vrk 3000 mki mki 3 n 59,0 µs 3,5 s 2,4 vrk v mki... Nähdään, että jos kompleksisuus on eksponentiaalinen (kaksi viimeistä riviä), kasvaa algoritmin suoritusaika vähänkin isommilla instasseilla käsittämättömän suureksi (yksikkö mki tarkoittaa maailmankaikkeuden ikää 3 ). Jos kompleksisuus on polynomiaalinen, ei vastaavaa ilmiötä esiinny. Tarkastellaan vielä teknologian kehittymisen tuomia mahdollisuuksia. Seuraavasta taulukosta nähdään tietokoneiden nopeutumisen vaikutukset suurimpaan ongelmakokoon, joka ratkeaa jossakin annetussa ajassa (esim yhdessä tunnissa). kompl. nykykoneet 100 nykykone 10 6 nykykone n N N N 1 n log 2 n N 2 = N N 2 n 2 N 3 10 N N 3 n 5 N 4 2,5 N 4 16 N 4 2 n N 5 N 5 + 6,6 N ,9 3 n N 6 N 6 + 4,2 N ,6 Kahden viimeisen sarakkeen luvut kertovat sen ongelmakoon, joka ratkeaa samassa ajassa, kun käytössä on sata/miljoona kertaa tehokkaampi tietokone. Taas ero polynomiaikaisten ja eksponentiaalisten algoritmien välillä on räikeä. Eri algoritmeja verrattaessa olennaisinta on, kuinka kompleksisuus muuttuu, kun ongelmakoko kasvaa yhä suuremmaksi. Sitä varten otetaan käyttöön 3 Maailmankaikkeuden ikä on nykytietämyksen mukaan kuitenkin alle 14 miljardia vuotta.

12 2.5 Funktion kertaluku 8 seuraavat merkinnät. Olkoot f, g : N R +. Määritellään 4 f (n)= O(g (n)), joss α>0,n 0 n n 0 : f (n) α g (n), f (n)=ω(g (n)), joss β>0,n 0 n n 0 : f (n) β g (n), f (n)=θ(g (n)), joss α,β>0,n 0 n n 0 : β g (n) f (n) α g (n), f (n)=o(g (n)), joss lim n f (n) g (n) = 0, f (n) g (n), joss lim n f (n) g (n) = 1. Tarkkaan ottaen esimerkiksi O ( g (n) ) on luokka funktioita, ja merkintä f (n)= O ( g (n) ) Tarkoittaa, että f (n) kuuluu luokkaan O ( g (n) ). Esimerkki 2.3. Seuraavat väitteet ovat suhteellisen helppoja todistaa: a 0 + a 1 n+...+ a k n k = Θ(n k ), missä a k > 0 n a = o(n b ), kun a,b R ja 0< a< b log c n= Θ(log d n) (c,d > 1) log c n= o(n a ) (c > 1, a> 0) Sopimus. Jos logaritmien kantalukua ei mainita, tarkoitetaan aina 2-kantaista logaritmia: logn= log 2 n. Näin ollen edellisestä esimerkin kolmannesta kohdasta seuraa, että log c n= Θ(logn) kaikilla kantaluvuilla c > 1. Esimerkki 2.4. Esitetään tyypillinen menetelmä summalausekkeen asymptoottisen kertaluvun määräämiseksi. Osoitetaan, että S(n)= n i k = Θ(n k+1 ). i=1 Tämä voidaan todistaa näyttämällä, että S(n)= O(n k+1 ) ja että S(n)=Ω(n k+1 ). Koska i k < n k, kun 1 i n, niin Siis S(n)= O(n k+1 ). S(n) n n k = n n k = n k+1. i=1 4 Monisteessa esiintyvä sana joss on lyhennys fraasista jos ja vain jos. Se taas on ekvivalentti (eli tarkoittaa samaa) fraasin silloin ja vain silloin kun kanssa.

13 2.5 Funktion kertaluku 9 Myös alaraja eli Ω-suuntaan todistus on lähes yhtä helppo. Nyt arvioimalla 0 i k kun i n 2 ja ( n 2 )k i k kun i n 2 saadaan S(n) n i= n 2 ( n 2 )k n 2 ( n 2 )k = 1 2 k+1 nk+1. Näin ollen siis S(n)=Ω(n k+1 ). Jos F on luokka funktioita N R +, niin luokka O(F ) on luonnollista määritellä ehdosta O(F )= O(f ). f F Vastaavasti funktioille määritellyt operaatiot voidaan laajentaa joukoille luonnollisella tavalla; esimerkiksi ja g +F = {g }+F = {g + f } g (F )= f F f F g f. Tällöin yhdistämällä asymptoottisia luokkia O, Ω ja Θ sekä funktioiden operaatioita, kuten+ja voidaan määritellä uusia funktioluokkia. Esimerkki 2.5. Voidaan osoittaa, että ( O f (n)+o ( g (n) )) = O ( f (n)+ g (n) ) = O ( max{f (n), g (n)} ) ; ( ) n 1+O(1) = 2 O(n) = O(α n ). α 1 Mainittakoon, että niiden päätösongelmien joukkoa, joiden kompleksisuuden ylärajana on luokkaan 2 O(n) kuuluva funktio, merkitään EXP, siis eksponentiaalisessa ajassa ratkeavat ongelmat. Polynomiajassa ratkeavien (kompleksisuuden ylärajana jokin polynomi) päätösongelmien joukkoa merkitään P:llä. Tällä kurssilla funktioluokkia O ( f (n) ) jne. ajatellaan algoritmisina kompleksisuusluokkina, joten f (n) on tavallisesti varsin siististi käyttäytyvä ; esimerkiksi muotoa n k, n logn, loglogn, a n, n logn. Tällä kurssilla käsitellään algoritmien kompleksisuuksia, joten yleensä tarkasteltavien funktioiden arvot kasvavat kun syötteen koko kasvaa. Siksi tarkasteltavat funktiot ovat ei vähenevä tai ainakin lopulta ei vähenevä, siis ei vähenevä jostakin luvun n arvosta alkaen. Määritelmä 2.1. Olkoon f : N R + lopulta ei vähenevä ja b 2 kokonaisluku. Sanotaan, että f on b-sileä, jos f (b n)= O ( f (n) ).

14 2.6 Algoritmien kuvauksesta 10 Usein algoritmien kompleksisuuden arviointi on helpompaa, jos syötteen pituus on jotakin sopivaa muotoa. Jos esimerkiksi rekursiivinen algoritmi jakaa n-pituisen syötteen aina n 2 - ja n 2 pituisiin osiin, ovat kompleksisuustarkastelut luultavasti helpompia, jos n on jokin kakkosen potenssi (silloinhan osat ovat aina yhtä suuret ja myös osien koot ovat kakkosen potensseja). Osoitetaan seuraavaksi, että yleensä voidaan olettaa, että syötteen pituus on sopivaa muotoa. Määritellään ensin ehdolliset kompleksisuusluokat. Määritelmä 2.2. Funktio f kuuluu luokkaan O ( g (n); P(n) ), jos n 0,α>0: ( P(n) on tosi n n 0 ) = f (n) α g (n). Lemma 2.1. Olkoon p 2 kokonaisluku ja g (n) p-sileä sekä f (n) lopulta ei vähenevä. Silloin f (n)= O ( g (n); n on p:n potenssi ) = f (n)= O ( g (n) ). Todistus. Olkoon p m n< p m+1 jollakin m N. Silloin f (n) a f (p m+1 ) b α 1 g (p m+1 ) c α 1 α 2 g (p m ) d α g (n). Kun oletetaan, että argumentti on riittävän suuri, seuraavat arviot a d siitä, että a) f on lopulta ei vähenevä; b) f (n)= O ( g (n) ), kun n on p:n potenssi; c) g on p-sileä; ja d) g on lopulta ei-vähenevä. Yllä olevissa tarkasteluissa, erikoisesti edellisessä lemmassa, O voidaan korvata symbolilla Ω tai Θ. 2.6 Algoritmien kuvauksesta Tässä monisteessa osa algoritmeista kuvataan pelkästään sanallisesti vain oleellisimat seikat mainiten. Joissakin tapauksissa taas annetaan tarkempi kuvaus, joka on helpompi muuntaa vaikka tietokoneohjelmaksi. Koska algoritmin tulee ratkaista ongelma kaiken kokoisilla syötteillä, tarvitaan joitakin lyhennysmerkintöjä. Alla on mainittu käytetyn pseudokoodin yleisimmät käskyt. Toistorakenteet: for i = 1 to n do... repeat... until lopetetaan while jatketaan do...

15 2.7 Esimerkkejä 11 Haaraumat: if... then (... else... ) Aliprosessien kutsut (mukaanlukien rekursiot) Lopetuskäskyt: return (vastaus) quit Käskyjen merkitykset lienevät ilmeisiä. Merkintä x α tarkoittaa, että muuttujan x arvoksi asetetaan α. Lisäksi yleensä ajatellaan, että syötteen pituus, jota merkitään useimmiten parametrillä n, on tiedossa. Esimerkiksi alla on alun esimerkissä mainitun venäläisen kertoalgoritmin kuvaus. Algoritmi 2.1. Venäläinen kertoalgoritmi. SYÖTE: kokonaisluvut a, b > 0 TULOSTE: tulo ab x 0 while a> 0 do if a on pariton then x x+ b a a 2, b 2b return x 2.7 Esimerkkejä Kerrataan vielä määritelmiä ja termejä muutaman esimerkin kautta. Esimerkki 2.6. Tarkastellaan probleemaa PRIME(a), joka päättää, onko syötteenä saatava positiivinen kokonaisluku a alkuluku vai ei. Tällä probleemalla on triviaali ratkaisu: for i = 2 to a do testaa jakaako i luvun a Jaollisuustestit voidaan tehdä tavallisella jakoalgoritmilla. Jos luvun a pituus binäärilukuna on n (siis 2 n 1 a< 2 n ), niin tavanomaisen jakoalgoritmin kompleksisuus on O(n 2 ). Testijakojen tekeminen on siis nopeaa. Testejä pitää kuitenkin tehdä O( a) = O(2 n/2 ) kertaa, joten algoritmin kompleksisuus on eksponentiaalinen. Mainittakoon, että PRIME probleema on yksi tutkituimpia matemaattisia ongelmia. Sille löydettiin polynomiaikainen algoritmi vasta vuonna PRIME probleemaa käsitellään tarkemmin myöhemmin tällä kurssilla.

16 2.7 Esimerkkejä 12 Huomautus. Jos syötteenä on n pituinen kokonaisluku a ja jotain operaatiota täytyy toistaa k a kertaa, on algoritmin kompleksisuus aina eksponentiaalinen: k a= 2 n/k. Luvun n suurilla arvoilla tällaiset algoritmit ovat käyttökelvottomia. Esimerkki 2.7. Tarkastellaan probleemaa FIBONACCI(n), jossa tehtävänä on laskea Fibonaccin luku F n. Fibonaccin luvuthan määritellään ehdoista F 0 = 0, F 1 = 1,. F n+2 = F n+1 + F n, kun n 0 Esitetään neljä menetelmää probleeman ratkaisemiseksi. A) Lasketaan F n kaavasta F n = a α n + b β n missä α= 1 2 (1+ 5) ja β= 1 2 (1 5) sekä a ja b R ovat vakioita (ja voidaan laskea rekursion alkuarvoista). Kaava voidaan todistaa vaikka induktiolla 5. B) Lasketaan F n rekursiivisesti algoritmilla Fibo(n): if n= 0 tai n= 1 then return F 0 = 0 tai F 1 = 1 else x Fibo(n 2), y Fibo(n 1) return F n = x+y C) Lasketaan F n seuraavasti: if n= 0 tai n= 1 then return F 0 = 0 tai F 1 = 1 else x 0 ja y 1 for i = 2 to n 1 do s x+y, x y, y s return F n = x+y D) Määritellään E = ( ), lasketaan matriisi E n+1 ja tulostetaan sen paikassa (1,1) oleva alkio. Selvästi algoritmit B ja C toimivat oikein. Algoritmin D oikeellisuus seuraa kaavasta E n+1 = F n F n+1, F n+1 F n+2 mikä nähdään oikeaksi induktiolla. Arvioidaan seuraavaksi tarvittavien aritmeettisten operaatioiden määrää yllä olevissa algoritmeissa. Algoritmi A vaatii, ainakin tavanomaisesti toteutettuna, Θ(n) aritmeettista operaatiota reaaliluvuilla. Siis vaikka tulos on kokonaisluku, laskut suoritetaan 5 Tosiassa kaava saadaan ratkaisemalla Fibonaccin lukujen rekursio.

17 2.7 Esimerkkejä 13 reaaliluvuilla. Siksi laskun tulos on aina vain likiarvo ja vasta virhetarkastelun jälkeen voidaan olla varmoja tuloksen oikeellisuudesta. Algoritmi ei ole algoritmisesti selkeä. Algoritmista A saadaan kuitenkin algoritmisesti selkeä korvaamalla reaalilukujen laskut symbolisella laskennalla, ks. demonstraatiot. Merkitään algoritmin B kompleksisuutta T :llä. Silloin T (0)=T (1)=0 ja T (n)=t (n 1)+T (n 2)+1, joten T (n) F n 1 ( n 2). Näin ollen T (n)=ω(α n ), missä α= 1 2 ( 5+1)>1, ja algoritmin kompleksisuus on eksponentiaalinen. Algoritmi C puolestaan suorittaa kussakin for silmukassa vain yhden aritmeettisen operaation, joten sen kompleksisuus on Θ(n). On syytä huomata, että vaikka tässä laskettaisiin kaikki toiminnot, kuten esimerkiksi testaus n? = 0, asetukset x y, indeksimuuttujan i kasvattaminen jne., niin kompleksisuus säilyisi luokassa Θ(n). Algoritmissa D ongelma ratkeaa laskemalla matriisin E potensseja. Myöhemmin tullaan näyttämään, että luvun a potenssin a n laskeminen onnistuu Θ( n l ):lla kertolaskulla. 6 Aivan samoin matriisin n:s potenssi voidaan laskea käyttäen Θ( n l ) matriisien kertolaskua. Yksi 2 2 matriisien tulo vaatii vakiomäärän (12 kpl) aritmeettisia operaatioita, joten tämän algoritmin kompleksisuus on Θ( n l ) = Θ(logn) aritmeettista operaatiota. Yllä laskettiin eri algoritmien vaatimia aritmeettisia operaatioita n:n funktiona, missä on siis luku n, jota vastaava luku F n pitää laskea. Syötteen koko on siis tässä tapauksessa luvun n pituus, joka on siis logn. Algoritmi D oli niistä (asymptoottisesti) paras 7, se vaati vain lineaarisen määrän operaatioita syötteen n pituuden log n suhteen. Nämä ovat kuitenkin minkä tahansa pituisten lukujen aritmeettisia operaatioita. Nimittäin, ns. bittioperaatiota, eli 1 numeroisten lukujen aritmeettisia operaatioita, tarkastellessa huomataan, että itse asiassa mikään algoritmi ei voi toimia polynomiajassa. Tämä johtuu siitä, että Fibonaccin luvut ovat eksponentiaalisen pitkiä luvun n pituuden suhteen. Näin ollen jo pelkkä vastauksen tulostaminen vie eksponentiaalisen ajan. Esimerkki 2.8. Tarkastellaan niin sanottua Collatzin probleemaa. Kutakin luon- 6 Ns. peräkkäisten neliöiden menetelmällä. 7 Tosin Algoritmin A muunnelma, jossa irrationaalilukuja α ja β käsitellään symbolisesti kahden rationaalikertoimen parina eikä reaalilukuina toimii asymptoottisesti aivan yhtä nopeasti, ks. demonstraatiot.

18 2.7 Esimerkkejä 14 nollista lukua n kohden määritellään jono (a j ) j=0 ehdosta n jos j = 0 a j = a j 1 /2 jos a j 1 on parillinen. 3a j Olkoon f funktio, joka määritellään ehdosta jos a j 1 on pariton f (n)=min{j a j = 1}. Onko f algoritmisesti laskettavissa, ts. onko olemassa algoritmia, joka syötteelle n tulostaa luvun f (n)? Jonon (a j ) määrittelyn perusteella on helppoa laatia ratkaisumenetelmä, joka saatuaan syötteen n laskee peräkkäin lukuja a j ja tulostaa ensimmäisen j :n, jolle a j = 1. Menetelmää voi kutsua algoritmiksi, jos kyseinen j on aina olemassa. Valitettavasti sitä onko kaikilla n:n arvoilla olemassa tällainen j, ei tiedetä. Algoritmin määritelmän kohdan (iv) nojalla ei tiedetä, onko f hyvin määritelty algoritminen probleema, tai sen laskeva algoritmi määritelmän mukainen algoritmi. Jos algoritmin määritelmästä unohdetaan kohta (iv), eli että kaikille syötteille algoritmi vaatii äärellisen määrän askeleita, saadaan ns. puolialgoritmi. Edellä siis kuvattiin puolialgoritmi funktion f laskemiseksi. Kysymys terminoiko annettu puolialgoritmi annetulla syötteellä on yleisesti erittäin vaikea kysymys 8. Esimerkki 2.9. Olkoon ρ [0, 1] reaaliluku. Liitetään lukuun ρ algoritminen probleema P ρ, missä tehtävänä on syötteellä n laskea luvun ρ n:s desimaali. Algoritmisena probleema P ρ on hyvin määritelty. Mutta onko sillä ratkaisua; ts. onko olemassa algoritmia, joka ratkaisee P ρ :n? Vastaus riippuu luvun ρ valinnasta. Esimerkiksi tapauksissa ρ = 1 2 tai ρ = 2 3 vaadittu algoritmi on helppo antaa. Näin on yleisemminkin aina, kun ρ Q, vaikka perustelu onkin hieman hankalampi. Mutta suurimmalle osalle ρ:n valintoja vastaus on kielteinen, sillä välin [0,1] reaalilukujen kardinaliteetti on ylinumeroituva; mutta algoritmeja on vain numeroituva määrä. Jälkimmäinen väite seuraa siitä, että algoritmi koostuu aina äärellisestä määrästä äärellisiä ohjeita. Siispä algoritmeilla on aina äärellinen deskriptio esimerkiksi suomen kielen lauseina. Kaikki äärelliset lauseet voidaan asettaa jonoon. 9 Yl- 8 Tämä on ns. pysähtymisongelma. 9 On kuitenkin huomattava että tämä järjestys ei ole triviaali, eteenkään kun sallitaan numeroituvasti ääretön määrä symboleja. Äärellisiä merkkijonoja yli numeroituvan aakkoston on kuitenkin numeroituva määrä (todistus löytyy esim. internethaulla Cantor s zigzag).

19 2.7 Esimerkkejä 15 lä oleva osoittaa, että valtaosa reaaliluvuista on algoritmisen matematiikan saavuttamattomissa Lukuja, joille algoritmi P ρ on olemassa kutsutaan englanniksi termillä computable numbers. Niiden tutkimuksen aloitti muuan A. Turing vuonna 1936.

20 16 3 Aritmeettisia peruslaskutoimituksia Tässä luvussa tarkasteltavat probleemat ovat hyvin tuttuja kokonaislukujen aritmeettisia laskutoimituksia ja niiden laskennallista kompleksisuuden määrääminen. Nähdään, että jotkut probleemat voidaan ratkaista ei triviaalilla metodilla yllättävän nopeasti. Pohditaan aluksi, missä muodossa algoritmit saavat kokonaislukusyötteensä. Tietokoneissa, joissa on l-bittinen prosessori, esitetään kokonaisluku a vektorina [b, a 0, a 1,..., a n 1 ], missä a= ( 1) s n 1 i=0 a i (2 l ) i, 0 a i < 2 l kaikille i = 0,...,n 1 ja a n 1 0, ja b ilmoittaa luvun merkin ja pituuden: b = s 2 l 1 + n (s {0,1}). Luvut siis esitetään 2 l -kantaisessa järjestelmässä, ja b kertoo luvun pituuden ja merkin. Lukuja b ja a i kutsutaan tällä kurssilla numeroiksi vaikka ne itse asiassa ovat lukuja. Luvut a i kuitenkin vastaavat 2 l -kantaisen esityksen bittejä eli 1-numeroisia lukuja. Huomaa, että kokonaislukujen esittämiseen on olemassa myös muita tapoja, esim. binäärikoodatuilla desimaaleilla tai kakkosen komplementti esityksellä. Algoritmien kannalta ei ole olennaista, missä kannassa luvut esitetään. Vaikka algoritmit onkin yleensä tarkoitus toteuttaa tietokoneilla ja siten 2 l kantainen esitys olisi luonnollinen, voi olla helpompi ajatella normaalia 10 kantaista esitystä. Merkitään luvun a esitystä kantaluvun k suhteen a= (a n 1,..., a 1, a 0 ) k. Nyt siis a = n 1 i=0 a i k i, missä siis 0 a i < k. Määritellään, että luvun a pituus a l = n. (Kuten yllä todettiin, a:n esittämiseen tarvitaan itse asiassa n+1 numeroa {0,1,...,k 1}.) Näin ollen a l = log k a +1. Algoritmien kompleksisuutta arvioitaessa riittää muistaa, että a l = O(log a). Alkeisoperaatioiksi on luonnollista määritellä 1-pituisilla luvuilla suoritettavat operaatiot: esim. yhteenlasku, kertolasku, vertailu ym. Näitä operaatioita kutsutaan usein bittioperaatioiksi riippumatta siitä, missä järjestelmässä luvut on annettu. Joskus algoritmien kompleksisuutta määrättäessä lasketaan aritmeettisten operaatioiden määrää. Tällä tarkoitetaan mielivaltaisen pitkien lukujen yhteen-, vähennys-, kerto- ja jakolaskujen määrää. 3.1 Kahden luvun vertailu Kahden luvun vertailu on hyvin määritelty algoritminen probleema. Syötteenä saadaan luvut a ja b, ja tuloste on joko 0 tai 1 sen mukaan, onko a b vai a> b. Merkitään tätä probleemaa C(a,b):llä.

21 3.2 Yhteen- ja vähennyslasku 17 C (a,b) on helppo ratkaista. Algoritmi 3.1. Algoritmi kahden luonnollisen luvun vertailemiseksi. SYÖTE: luvut a, b TULOSTE: 0 jos a b, muuten 1 if a l < b l tai a l > b l then return 0 tai 1 else for i = a l 1 downto 0 do if a i < b i tai a i > b i then return 0 tai 1 return 0 (sillä a= b) Algoritmin kompleksisuutta arvioitaessa on siis laskettava vertailujen x < y määrä, missä x ja y ovat 1 numeroisia lukuja. Jos a ja b ovat (korkeintaan) n pituisia lukuja, niin selvästi 2n vertailua riittää aina. Näin ollen algoritmi toimii ajassa O(n). Pahimmassa tapauksessa (jos a ja b poikkeavat vain vähiten merkitsevässä numerossa) algoritmi myös vaatii mainitut 2n+ 2 vertailua, joten se toimii ajassa Ω(n). Siis algoritmi toimii ajassa Θ(n). Yllä oleva algoritmi osoittaa, että probleema C(a, b) kuuluu luokkaan O(n). Mutta kuuluuko se luokkaan Θ(n); ts. vaatiiko jokainen sen ratkaiseva algoritmi ajan Ω(n)? Tämä on ilmeistä, sillä jos vertailuja tehdään vähemmän kuin n kappaletta (saati sitten vähemmän kuin O(n) kpl), jää väkisinkin jokin pari a i0,b i0 vertailematta. Tällaisella algoritmilla ei probleemaa voi ratkaista syötteellä, joissa a i = b i aina kun i i 0. Näin on perusteltu seuraava lause. Lause 3.1. Probleema C(a,b) on luokassa Θ(n). 3.2 Yhteen- ja vähennyslasku Olkoot a ja b ei negatiivisia kokonaislukuja, ja olkoon niistä suuremman pituus n (käytetyssä k kantaisessa järjestelmässä). Merkitään A(a, b):llä probleemaa, jossa pitää laskea summa a+ b, ja S(a,b):lla probleemaa, jossa pitää laskea erotus a b. Aivan kuten edellä vertailu-probleemassa on nytkin selvää, että probleemoja ei voida ratkaista alle lineaarisessa ajassa, joten ne ovat luokassa Ω(n) Turingin kone tasolla tehdään kompleksisuuksisuusteoriassa yleensä oletus, että ongelman koko syöte pitää lukea joten ns. sublineaarisia kompleksisuuksia ei ole olemassa. Vaikka bitin lukeminen ei ole alkeisoperaatio tällä kurssilla, voidaan olettaa, että algoritmi käyttää laskuissaan jokaista syötteen bittiä. Näin ollen kaikki kurssilla käsiteltävät probleemat kuuluvat triviaalisti luokkaan Ω(n). Sublineaarisia kompleksisuuksia kuitenkin esiintyy kirjallisuudessa, esim. ns. puolitushakualgoritmi toimii O(logn) vertailulla. Huomaa kuitenkin, että puolitushaku-algoritmissa vertailut

22 3.3 Kertolasku 18 Toisaalta kumpikin probleema ratkeaa ajassa O(n) tutulla kouluaritmetiikalla. Yhteenlaskun suorittamiseen riittää 2n 1 alkeisoperaatiota, kun on otettu huomioon muistinumeroilla operointi. (Itse asiassa tietokoneen prosessorissa muistinumeroiden käsittely on yhdistetty alkeisyhteenlaskuun, jolloin voidaan sanoa, että n alkeisoperaatiota riittää.) Vähennyslaskun kompleksisuutta tarkasteltaessa muistinumerot aiheuttavat hiukan enemmän huolta, mutta siinäkin saadaan tarvittavien operaatioiden ylärajaksi cn, missä vakion c arvo riippuu alkeisvähennyslaskun tarkasta määritelmästä. Lause 3.2. Probleemat A(a,b) ja S(a,b) ovat luokassa Θ(n). 3.3 Kertolasku Merkitään kertolaskuprobleemaa M(a, b):llä. Oletetaan, että n-pituiset luvut a = (a n 1... a 1 a 0 ) k ja b = (b n 1...b 1 b 0 ) k ovat positiivisia. Koulussa opittu kertolaskualgoritmi toimii seuraavasti. Algoritmi 3.2. Koulualgoritmi kertolaskuun SYÖTE: TULOSTE: luvut a ja b tulo ab t 0 for i = 0 to n 1 do x b i a t t+ k i x return t Jokainen kertolasku b i a vaatii n alkeisoperaatiota (oletetaan, että muistinumeroilla operointi sisältyy alkeiskertolaskuun), ja summien t+k i x laskeminen vie korkeintaan 2n alkeisoperaatiota. Siis kullakin i :n arvolla suoritetaan maksimissaaan 3n operaatiota, joten algoritmin kompleksisuudelle saadaan yläraja 3n 2 = O(n 2 ). Taas on helppo nähdä, että kertolasku vaatii ainakin lineaarisen ajan, eli M(a, b) kuuluu luokkaan Ω(n). Edellinen algoritmi puolestaan osoitti, että M(a, b) kuuluu luokkaan O(n 2 ). Ongelman tarkkaa kompleksisuutta ei itse asiassa tiedetä, mutta myöhemmin näytetään, että koulualgoritmin antamaa ylärajaa voidaan parantaa. eivät ole bittien vertailuja vaan alkioiden (esim. lukujen) vertailuja ja lisäksi oletetaan, että syöte on järjestetty lista, jolloin jokaista alkiota ei tarvitse käsitellä.

23 3.4 Jakolasku 19 Todetaan vielä, että koulualgoritmin kompleksisuus on luokkaa O(mn), jos kerrottavista luvuista toinen on m ja toinen n pituinen. Erityisesti, jos toinen luvuista on 1-numeroinen, on kompleksisuus luokkaa O(n). 3.4 Jakolasku Jakolaskuprobleemassa D(a, b) syötteenä on positiiviset kokonaisluvut a ja b ja tavoitteena on laskea pari (q,r ), joka määräytyy yksikäsitteisesti ehdosta a= q b+ r, missä 0 r < b. Oletetaan, että b on n pituinen ja a (korkeintaan) 2n pituinen luku. Tavanomainen koulussa opittu menetelmä johtaa jälleen kompleksisuutta O(n 2 ) olevaan algoritmiin: Jokainen q:n numero löytyy kokeilemalla (vakiomäärä kertolaskuja, joissa kerrottavat ovat 1- ja n pituisia) ja vaatii O(n) operaatiota. Väite seuraa, koska q:n pituus on kertalukua O(n). Jos jakaja b on 1-pituinen luku, niin q:n numeroidenn etsimisessä lasketaankin kahden 1-numeroisen tuloja, jolloin jokainen numero löytyy vakioajassa. Siksi, aivan kuten kertolaskukin, ratkeaa jakolasku tässä tapauksessa ajassa O(n). Jakolaskun nopeuttaminen on hivenen hankalampaa kuin kertolaskun, ja sitä ei tällä kurssilla käsitellä. Voidaan kuitenkin osoittaa, että (tietyin lievin luonnollisin ehdoin) jakolasku voidaan suorittaa kertaluvultaan samassa ajassa kuin kertolasku. Polynomien aritmetiikkaa käsittelevässä luvussa näytetään, että polynomien jakolasku onnistuu samassa ajassa kuin polynomien kertolasku. 3.5 Binääriesityksen laskeminen Joissakin algoritmeissa on hyödyllistä tuntea luvun binääriesitys. Oletetaan taas, että a on k-kantaisessa järjestelmässä annettu n pituinen luku. Probleemassa BIN(a) tehtävänä on laskea a:n binääriesitys; siis sellaiset bitit α i {0,1}, että a= α i 2 i. BIN(a) voidaan ratkaista seuraavalla algoritmilla. Algoritmi 3.3. Algoritmi luvun binääriesityksen laskemiseksi. SYÖTE: TULOSTE: luku a= (a n 1 a 1 a 0 ) k α=(α 0,α 1,... ) 2 : a= α i 2 i i 0 while a 0 do if a on pariton then α i 1 else α i 0 a a 2 i i + 1

24 3.6 Potenssi 20 return a= (α i 1 α 0 ) 2 Algoritmi laskee siis a:n bitit yhden kerrallaan vähiten merkitsevästä alkaen. Algoritmin kompleksisuus on helposti analysoitavissa. Kussakin silmukassa luvun a arvo pienenee ainakin puolella, joten kierrosten lukumäärä on korkeintaan log a +1 = O(n). Jokaisella kierroksella suoritetaan kaksi korkeintaan ajan O(n) vaativa operaatiota 12, joten algoritmin kompleksisuus on kertalukua O(n 2 ). Lause 3.3. Probleema BIN(a) on luokassa O(n 2 ). Huomautettakoon vielä, että tietokoneissa luvut luonnollisesti esitetään binäärisesti, joten tällaista konversiota ei käytännössä yleensä tarvitse tehdä. 3.6 Potenssi Merkitään potenssinlasku probleemaa P a (e):llä. Tässä siis tehtävänä on laskea luku a e, missä kantaluku a ajatellaan kiinteäksi ja eksponentti e ajatellaan probleeman syötteeksi. Olkoon n eksponentin e pituus. Arvioidaan aluksi tarvittavien aritmeettisten operaatioiden lukumäärää; siis tässä tapauksessa tarvittavien kertolaskujen määrää, kun kerrottavat luvut saavat olla mielivaltaisen pitkiä. Triviaalissa menetelmässä a kerrotaan e 1 kertaa itsellään tarvitaan e 1=2 O(n) kertolaskua. Kompleksisuus on siis eksponentiaalinen, vaikka tarkastellaan pelkästään aritmeettisia operaatioita. Suuria potensseja ei tällä tavalla voi laskea. Mutta kuten jo edellisen luvun Fibonaccin lukuja koskevan esimerkin yhteydessä todettiin on olemassa paljon tehokkaampikin metodi; ns. peräkkäisten neliöiden menetelmä. Algoritmi 3.4. Peräkkäisten neliöiden menetelmä potenssilaskuun. SYÖTE: kantaluku a, eksponentti e = (e n 1 e 1 e 0 ) 2 TULOSTE: a e x a, z 1 for i = 0 to n 1 do if e i = 1 then z zx x x 2 return z 12 Huomaa, että if-lauseessa vaadittava luvun a pariteetti voidaan tarkistaa vaikka silmukan jakolaskun a 2 avulla.

25 3.7 Suurin yhteinen tekijä 21 Algoritmin oikea toiminta seuraa alla olevasta laskusta: a e = a e 0+e e n 1 2 n 1 = a e0 (a 2 ) e1 (a 2n 1 ) e n 1. Laskussa (ja yllä olevassa algoritmissa) tarvitaan n neliöintiä ja korkeintaan n tavallista kertolaskua, siis O(n) aritmeettista operaatiota. 13 On myös ilmeistä, että O(n) aritmeettista operaatiota myös aina tarvitaan. Lause 3.4. Probleema P a (e) ratkeaa lineaarisessa määrässä aritmeettisia operaatioita. On huomattava, että yllä laskettiin aritmeettisia operaatioita. Jos lasketaan 1 numeroisilla luvuilla tehtäviä operaatiota (bittioperaatioita), kompleksisuus muuttuu eksponentiaaliseksi. Näin käy välttämättä kaikilla ongelman ratkaisevilla algoritmeilla. Itse asiassa pelkästään vastauksen tulostaminen vie eksponentiaalisen ajan, sillä a e l e a l 2 n a l = 2 O(n). Huomautus 3.1. Peräkkäisten neliöiden menetelmää voidaan soveltaa myös tulon a a... a laskemiseen, missä on mikä tahansa assosiatiivinen binäärioperaatio. Menetelmä soveltuu siis vaikka neliömatriisien potenssin laskemiseen. 3.7 Suurin yhteinen tekijä Probleemassa GCD(a, b) tehtävänä on määrätä lukujen a ja b suurin yhteinen tekijä syt(a,b), missä a b 0. Olkoon n luvun a pituus. Ongelma ratkeaa jo antiikin ajoilta tunnetulla Eukleideen algoritmilla. Algoritmi perustuu yhtälöön syt(a,b)=syt(b,r ), missä a = qb + r ja 0 r < b. Olkoon Div jokin jakoalgoritmi: yllä olevin merkinnöin Div(a,b)=(q,r ). Algoritmi 3.5. Eukleideen algoritmi (rekursiivinen versio) SYÖTE: luvut a,b, a b> 0 TULOSTE: syt(a, b) KUTSU: Eucl(a, b) (q,r ) Div(a,b) if r = 0 then return b else return Eucl(b,r ) 13 Huomaa, että algoritmin kertaluku ei muutu miksikään, vaikka luvun e binääriesitys pitäisi myös laskea. Binääriesitys voidaan laskea O(n 2 ) bittioperaatiolla ja itse potenssiinkorotus vaatii O(n) aritmeettista operaatiota eli lukujen (ei bittien) operaatiota.

26 3.7 Suurin yhteinen tekijä 22 Eukleideen algoritmi laskee siis suurimman yhteisen tekijän suorittamalla joukon jakolaskuja, joista kukin voidaan tehdä ajassa O(n 2 ). Koko algoritmin kompleksisuuden määräämiseksi pitäisi saada arvio jakolaskujen määrälle; olkoon se k+ 1. Merkitään algoritmin aikana laskettuja jakojäännöksiä järjestyksessä r k, r k 1,..., r 0, joten esimerkiksi r k = a mod b ja r 0 = 0. Näytetään, että luvut r i toteuttavat epäyhtälön r i F i kun i = 0,...,k, missä F i on i :s Fibonaccin luku 14. Tämä onnistuu kätevästi induktiolla. Asia on selvä, kun i = 0 ja i = 1. Toisaalta, koska r i 1 saadaan algoritmilla jakolaskulla (q,r i 1 ) Div(r i+1,r i ), joten r i+1 = qr i + r i 1 r i + r i 1 i.o. F i + F i 1 = F i+1, mikä todistaa induktioaskelen. Voidaan osoittaa, että Fibonaccin luvut toteuttavat epäyhtälön 15 F i A α i sopivasti valituilla vakioilla A> 0 ja α>1. On siis saatu a> r k F k A α k. Ottamalla logaritmit molemmin puolin tästä seuraa n log A k < logα = O(n), koska n log a. Siispä seuraava lause on todistettu. Lause 3.5. Probleema GCD(a,b) kuuluu luokkaan O(n 3 ). Huomautettakoon, että yllä oleva Eukleideen algoritmin kompleksisuuden analysointi on historiallisesti merkittävää, sillä sitä pidetään ensimmäisenä epätriviaalina algoritmin analysointina (Lame, ). Mainittakoon myös, että saatu yläraja tarvittavien jakolaskujen määrälle on siinä mielessä tarkka, että joissakin tapauksissa todella tarvitaan O(n) jakolaskua. Näin käy esimerkiksi laskettaessa kahden peräkkäisen Fibonaccin luvun suurinta yhteistä tekijää. Huomaa, etä arvioimme jakolaskun kompleksisuudeksi O(n 2 ), joten käyttämällä koulualgoritmia nopeampaa jakoalgoritmia saadaan Eukleideen algoritmia nopeutettua. 14 Muistanet jo että F 0 = 0, F 1 = 1, F i+2 = F i+1 + F i kaikille i Muistanet myös, että α=(1+ 5)/2 eli ns. kultainen leikkaus. 16 Suorita internethaku haluamallasi hakukoneella hakusanoilla Lame s Theorem ja huomaat, että Lame n todistus on historiallisesti merkittävä myös siksi, että sitä pidetään Fibonaccin lukujen ensimmäinä sovelluksena.

27 3.8 Neliöjuuri 23 Yksinkertaisuudestaan huolimatta Eukleideen algoritmi on varsin hyödyllinen. Esimerkiksi käänteisalkion laskeminen jäännösluokkarenkaassa onnistuu mukavasti ns. laajennetulla Eukleideen algoritmilla, kuten myöhemmin nähdään. Suurimman yhteisen tekijän laskemiselle tunnetaan muitakin algoritmeja. Ne perustuvat Eukleideen algoritmin ns. matriisiversioon, joka esitettään monisteen seuraavassa luvussa. Matriisiversiossa keskeisessä osassa on kertolaskualgoritmin valinta. Valitsemalla asymptoottisesti tehokkain kertolaskualgoritmi saadaan suurin yhteinen tekijä laskettu alle kuutiollisessa ajassa. Esimerkiksi ns. Stehlé-Zimmermann algoritmi ja Schönhagen algoritmi toimivat ajassa O(lognM(n)), missä M(n) on kertolaskualgoritmin kompleksisuus. Esimerkki 3.1. Lasketaan lukujen 1175 ja 359 suurin yhteinen tekijä Eukleideen algoritmilla. 3.8 Neliöjuuri Tehokkaimmat menetelmät neliöjuuren laskemiseen ovat likimääräisalgoritmeja (esim. numeerisesta analyysistä tuttu Newtonin menetelmä). Nämä metodit eivät ole algoritmisesti selkeitä, sillä ne vaativat mm. virhetarkastelun. Ensimmäinen tunnettu likimääräisalgoritmi luvun a likiarvon laskemiseksi tunnetaan nimellä Babylonialaisten metodi tai Heronin metodi. Se perustuu nimenomaan Newtonin metodiin, joskin algoritmi löydettiin jo ennen Newtonin metodia. Voidaan osoittaa, että oikeiden numeroiden lukumäärä likiarvossa lähes tuplaantuu jokaisella iteraatiokierroksella. Babylonialaisten metodin idea voidaan esittää lyhyesti seuraavasti: Algoritmi 3.6. Babylonialaisten metodi luvun a likiarvolle Aseta luvuksi x 0 jokin luku for n= 0 to k do ) x n (x n + axn return x k+1 Tietysti on hyvä valita luku x 0 mahdollisimman läheltä a:ta. Babylonialaisten menetelmä ei täytä algoritmille asetettuja ehtoja vaan on likimääräisalgoritmi kuten jo mainittiin. Neliöjuuren laskemiseen on kuitenkin olemassa oikea algortimikin, jota tarkastellaan seuraavaksi. Merkitään SQRT(a):lla probleemaa, jossa syöte a on n pituinen kokonaisluku ja tehtävänä on laskea a. Lause 3.6. Probleema SQRT(a) kuuluu luokkaan O(n 3 ).

28 3.8 Neliöjuuri 24 Todistus. Perustellaan lause kuvailemalla vaaditussa ajassa toimiva ratkaisualgoritmi. 17. Merkitään m 1 a= i=0 a i (k 2 ) i m 1 ja b= i=0 b i k i, missä b= a, m= n 2, 0 a i < k 2 ja 0 b i < k. Huomaa, että a= (a m 1 a 0 ) k 2 ja b= (b m 1 b 0 ) k, missä a on esitetty kannassa k 2 ja b kannassa k. Osoitetaan, että kaikilla i :n arvoilla ((b m 1 b m i ) k ) 2 (a m 1 a m i ) k 2 < ((b m 1 b m i ) k + 1) 2. (1) Tästä seuraa, että bitit b m i voidaan laskea yksi kerrallaan kun i käy läpi luvut yhdestä m:n, nimittäin, jos bitit b m 1,...,b m i+1 tunnetaan, niin b m i on se arvo, joka toteuttaa epäyhtälöt (1). 18 Tehdään vastaoletus, että epäyhtälöt (1) eivät pidä paikkaansa kaikille luvuille i = 1,...,m. Olkoon j pienin indeksi, jolle 1) ((b m 1 b m j ) k ) 2 > (a m 1 a m j ) k 2, tai 2) (a m 1 a m j ) k 2 ((b m 1 b m j ) k + 1) 2. Oletetaan tapaus 1) ja merkitään ((b m 1 b m j ) k ) 2 = (c m 1 c m 2 c m j ) k 2 > (a m 1 a m j ) k 2 joten c m j > a m j. ((b m 1 b 0 ) k ) 2 (c m 1 c m 2 c m j 0 0) k 2 > (a m 1 a m j a m j 1 a 0 ) k 2 koska k 2 kannan esityksessä c m j > a m j. Näin ollen b 2 > a, joten b a, mikä on ristiriidassa oletuksen kanssa. Tapauksessa 2) ((b m 1 b m j ) k + 1) 2 (a m 1 a m j ) k 2. Merkitään ((b m 1 b m j ) k + 1) 2 = (c m 1 c m 2 c m j ) k 2, missä k 2 -kantaesityksen pituus seuraa ylärajasta a ja sen k 2 -kannan esityksestä. Nyt ((b m 1 b 0 ) k ) 2 = ((b m 1 b m j ) k k m j + (b m j 1 b 0 ) k ) 2 < (((b m 1 b m j ) k + 1) k m j + (0 0) k ) 2 = (c m 1 c m 2 c m j 0 0) k 2 (a m 1 a m j a m j 1 a 0 ) k 2, joten on olemassa luku c = ((b m 1...b m i ) k + 1) k m i N, jolle b 2 < c 2 a, joten b a, mikä on ristiriidassa oletuksen kanssa. 17 Varsinaista pseudokoodia algoritmille ei siis esitetä. Parhaiten algoritmin toiminta selviää internethaulla Square root by long division löydettyjä esimerkkejä tarkastelemalla. 18 Epäyhtälöille (1) tässä esitetty todistus perustuu FM Markus Viljasen vuonna 2015 demonstraatioissa esittämään todistukseen.

Algoritminen matematiikka

Algoritminen matematiikka Algoritminen matematiikka Luentomoniste Turun yliopisto Matematiikan laitos 20014 Turku 2011 i Alkusanat Kurssin tarkoituksena on algoritmisen ajattelun omaksuminen ja kehittäminen. Tavanomaisesti matematiikassa

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

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

Lukuteorian kertausta

Lukuteorian kertausta Lukuteorian kertausta Jakoalgoritmi Jos a, b Z ja b 0, niin on olemassa sellaiset yksikäsitteiset kokonaisluvut q ja r, että a = qb+r, missä 0 r < b. Esimerkki 1: Jos a = 60 ja b = 11, niin 60 = 5 11 +

Lisätiedot

802328A LUKUTEORIAN PERUSTEET OSA III BASICS OF NUMBER THEORY PART III. Tapani Matala-aho MATEMATIIKKA/LUTK/OULUN YLIOPISTO

802328A LUKUTEORIAN PERUSTEET OSA III BASICS OF NUMBER THEORY PART III. Tapani Matala-aho MATEMATIIKKA/LUTK/OULUN YLIOPISTO 8038A LUKUTEORIAN PERUSTEET OSA III BASICS OF NUMBER THEORY PART III Tapani Matala-aho MATEMATIIKKA/LUTK/OULUN YLIOPISTO SYKSY 016 Sisältö 1 Irrationaaliluvuista Antiikin lukuja 6.1 Kolmio- neliö- ja tetraedriluvut...................

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

802328A LUKUTEORIAN PERUSTEET OSA III BASICS OF NUMBER THEORY PART III

802328A LUKUTEORIAN PERUSTEET OSA III BASICS OF NUMBER THEORY PART III 802328A LUKUTEORIAN PERUSTEET OSA III BASICS OF NUMBER THEORY PART III Tapani Matala-aho MATEMATIIKKA/LUTK/OULUN YLIOPISTO SYKSY 2016 LUKUTEORIA 1 / 77 Irrationaaliluvuista Määritelmä 1 Luku α C \ Q on

Lisätiedot

1 Lukujen jaollisuudesta

1 Lukujen jaollisuudesta Matematiikan mestariluokka, syksy 2009 1 1 Lukujen jaollisuudesta Lukujoukoille käytetään seuraavia merkintöjä: N = {1, 2, 3, 4,... } Luonnolliset luvut Z = {..., 2, 1, 0, 1, 2,... } Kokonaisluvut Kun

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

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

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

Lisätiedot

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

Algoritmit 2. Luento 8 To Timo Männikkö

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

Lisätiedot

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

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 6. Alkeislukuteoria 6.1 Jaollisuus Käsitellään kokonaislukujen perusominaisuuksia: erityisesti jaollisuutta Käytettävät lukujoukot: Luonnolliset luvut IN = {0,1,2,3,...

Lisätiedot

LUKUTEORIA johdantoa

LUKUTEORIA johdantoa LUKUTEORIA johdantoa LUKUTEORIA JA TODISTAMINEN, MAA11 Lukuteorian tehtävä: Lukuteoria tutkii kokonaislukuja, niiden ominaisuuksia ja niiden välisiä suhteita. Kokonaislukujen maailma näyttää yksinkertaiselta,

Lisätiedot

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

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

Lisätiedot

Liite 1. Laajennettu Eukleideen algoritmi suoraviivainen tapa

Liite 1. Laajennettu Eukleideen algoritmi suoraviivainen tapa Liite 1. Laajennettu Eukleideen algoritmi suoraviivainen tapa - johdanto - matemaattinen induktiotodistus - matriisien kertolaskun käyttömahdollisuus - käsinlaskuesimerkkejä - kaikki välivaiheet esittävä

Lisätiedot

(iv) Ratkaisu 1. Sovelletaan Eukleideen algoritmia osoittajaan ja nimittäjään. (i) 7 = , 7 6 = = =

(iv) Ratkaisu 1. Sovelletaan Eukleideen algoritmia osoittajaan ja nimittäjään. (i) 7 = , 7 6 = = = JOHDATUS LUKUTEORIAAN (syksy 07) HARJOITUS 7, MALLIRATKAISUT Tehtävä Etsi seuraavien rationaalilukujen ketjumurtokehitelmät: (i) 7 6 (ii) 4 7 (iii) 65 74 (iv) 63 74 Ratkaisu Sovelletaan Eukleideen algoritmia

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

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

R : renkaan R kääntyvien alkioiden joukko; R kertolaskulla varustettuna on

R : renkaan R kääntyvien alkioiden joukko; R kertolaskulla varustettuna on 0. Kertausta ja täydennystä Kurssille Äärelliset kunnat tarvittavat esitiedot löytyvät Algebran kurssista [Alg]. Hyödyksi voivat myös olla (vaikka eivät välttämättömiä) Lukuteorian alkeet [LTA] ja Salakirjoitukset

Lisätiedot

3. Kongruenssit. 3.1 Jakojäännös ja kongruenssi

3. Kongruenssit. 3.1 Jakojäännös ja kongruenssi 3. Kongruenssit 3.1 Jakojäännös ja kongruenssi Tässä kappaleessa esitellään kokonaislukujen modulaarinen aritmetiikka (ns. kellotauluaritmetiikka), jossa luvut tyypillisesti korvataan niillä jakojäännöksillä,

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

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

a ord 13 (a)

a ord 13 (a) JOHDATUS LUKUTEORIAAN (syksy 2017) HARJOITUS 4, MALLIRATKAISUT Tehtävä 1. Etsi asteet ord p (a) luvuille a 1, 2,..., p 1 kun p = 13 ja kun p = 17. (ii) Mitkä jäännösluokat ovat primitiivisiä juuria (mod

Lisätiedot

on Abelin ryhmä kertolaskun suhteen. Tämän joukon alkioiden lukumäärää merkitään

on Abelin ryhmä kertolaskun suhteen. Tämän joukon alkioiden lukumäärää merkitään 5. Primitiivinen alkio 5.1. Täydennystä lukuteoriaan. Olkoon n Z, n 2. Palautettakoon mieleen, että kokonaislukujen jäännösluokkarenkaan kääntyvien alkioiden muodostama osajoukko Z n := {x Z n x on kääntyvä}

Lisätiedot

Matematiikan tukikurssi, kurssikerta 3

Matematiikan tukikurssi, kurssikerta 3 Matematiikan tukikurssi, kurssikerta 3 1 Epäyhtälöitä Aivan aluksi lienee syytä esittää luvun itseisarvon määritelmä: { x kun x 0 x = x kun x < 0 Siispä esimerkiksi 10 = 10 ja 10 = 10. Seuraavaksi listaus

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

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

Algoritmit 1. Luento 11 Ti Timo Männikkö

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

Lisätiedot

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

Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna

Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna. q 0 x solmuina laskennan mahdolliset tilanteet juurena alkutilanne lehtinä tilanteet joista ei siirtymää,

Lisätiedot

Tekijä Pitkä Matematiikka 11 ratkaisut luku 2

Tekijä Pitkä Matematiikka 11 ratkaisut luku 2 Tekijä Pitkä matematiikka 11 0..017 170 a) Koska 8 = 4 7, luku 8 on jaollinen luvulla 4. b) Koska 104 = 4 6, luku 104 on jaollinen luvulla 4. c) Koska 4 0 = 80 < 8 ja 4 1 = 84 > 8, luku 8 ei ole jaollinen

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

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

Diskreetin matematiikan perusteet Laskuharjoitus 1 / vko 8

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

Lisätiedot

Salausmenetelmät. Veikko Keränen, Jouko Teeriaho (RAMK, 2006)

Salausmenetelmät. Veikko Keränen, Jouko Teeriaho (RAMK, 2006) Salausmenetelmät Veikko Keränen, Jouko Teeriaho (RAMK, 2006) LUKUTEORIAA JA ALGORITMEJA 3. Kongruenssit à 3.1 Jakojäännös ja kongruenssi Määritelmä 3.1 Kaksi lukua a ja b ovat keskenään kongruentteja (tai

Lisätiedot

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

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

Lisätiedot

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

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

Cantorin joukon suoristuvuus tasossa

Cantorin joukon suoristuvuus tasossa Cantorin joukon suoristuvuus tasossa LuK-tutkielma Miika Savolainen 2380207 Matemaattisten tieteiden laitos Oulun yliopisto Syksy 2016 Sisältö Johdanto 2 1 Cantorin joukon esittely 2 2 Suoristuvuus ja

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

2. Eukleideen algoritmi

2. Eukleideen algoritmi 2. Eukleideen algoritmi 2.1 Suurimman yhteisen tekijän tehokas laskutapa Tässä luvussa tarkastellaan annettujen lukujen suurimman yhteisen tekijän etsimistä tehokkaalla tavalla. Erinomaisen käyttökelpoinen

Lisätiedot

a) Mitkä seuraavista ovat samassa ekvivalenssiluokassa kuin (3, 8), eli kuuluvat joukkoon

a) Mitkä seuraavista ovat samassa ekvivalenssiluokassa kuin (3, 8), eli kuuluvat joukkoon Matematiikan johdantokurssi, syksy 08 Harjoitus 3, ratkaisuista. Kokonaisluvut määriteltiin luonnollisten lukujen avulla ekvivalenssiluokkina [a, b], jotka määrää (jo demoissa ekvivalenssirelaatioksi osoitettu)

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

1 Lineaariavaruus eli Vektoriavaruus

1 Lineaariavaruus eli Vektoriavaruus 1 Lineaariavaruus eli Vektoriavaruus 1.1 Määritelmä ja esimerkkejä Olkoon K kunta, jonka nolla-alkio on 0 ja ykkösalkio on 1 sekä V epätyhjä joukko. Oletetaan, että joukossa V on määritelty laskutoimitus

Lisätiedot

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

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

Lisätiedot

Satunnaisalgoritmit. Topi Paavilainen. Laskennan teorian opintopiiri HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Satunnaisalgoritmit. Topi Paavilainen. Laskennan teorian opintopiiri HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Satunnaisalgoritmit Topi Paavilainen Laskennan teorian opintopiiri HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Helsinki, 23. helmikuuta 2014 1 Johdanto Satunnaisalgoritmit ovat algoritmeja, joiden

Lisätiedot

2 j =

2 j = 1. Modulaariaritmetiikkaa Yksinkertaisissa salausjärjestelmissä käytettävä matematiikka on paljolti lukuteoriaan pohjautuvaa suurten lukujen modulaariaritmetiikkaa (lasketaan kokonaisluvuilla modulo n).

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

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

MS-A0402 Diskreetin matematiikan perusteet

MS-A0402 Diskreetin matematiikan perusteet MS-A0402 Diskreetin matematiikan perusteet Osa 4: Modulaariaritmetiikka Riikka Kangaslampi 2017 Matematiikan ja systeemianalyysin laitos Aalto-yliopisto Modulaariaritmetiikka Jakoyhtälö Määritelmä 1 Luku

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

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

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

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

Matematiikan mestariluokka, syksy 2009 7

Matematiikan mestariluokka, syksy 2009 7 Matematiikan mestariluokka, syksy 2009 7 2 Alkuluvuista 2.1 Alkuluvut Määritelmä 2.1 Positiivinen luku a 2 on alkuluku, jos sen ainoat positiiviset tekijät ovat 1 ja a. Jos a 2 ei ole alkuluku, se on yhdistetty

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

1 sup- ja inf-esimerkkejä

1 sup- ja inf-esimerkkejä Alla olevat kohdat (erityisesti todistukset) ovat lähinnä oheislukemista reaaliluvuista, mutta joihinkin niistä palataan myöhemmin kurssilla. 1 sup- ja inf-esimerkkejä Kaarenpituus. Olkoon r: [a, b] R

Lisätiedot

Esko Turunen Luku 3. Ryhmät

Esko Turunen Luku 3. Ryhmät 3. Ryhmät Monoidia rikkaampi algebrallinen struktuuri on ryhmä: Määritelmä (3.1) Olkoon joukon G laskutoimitus. Joukko G varustettuna tällä laskutoimituksella on ryhmä, jos laskutoimitus on assosiatiivinen,

Lisätiedot

802320A LINEAARIALGEBRA OSA I

802320A LINEAARIALGEBRA OSA I 802320A LINEAARIALGEBRA OSA I Tapani Matala-aho MATEMATIIKKA/LUTK/OULUN YLIOPISTO SYKSY 2016 LINEAARIALGEBRA 1 / 72 Määritelmä ja esimerkkejä Olkoon K kunta, jonka nolla-alkio on 0 ja ykkösalkio on 1 sekä

Lisätiedot

Jokaisen parittoman kokonaisluvun toinen potenssi on pariton.

Jokaisen parittoman kokonaisluvun toinen potenssi on pariton. 3 Todistustekniikkaa 3.1 Väitteen kumoaminen vastaesimerkillä Monissa tilanteissa kohdataan väitteitä, jotka koskevat esimerkiksi kaikkia kokonaislukuja, kaikkia reaalilukuja tai kaikkia joukkoja. Esimerkkejä

Lisätiedot

Algebra I Matematiikan ja tilastotieteen laitos Ratkaisuehdotuksia harjoituksiin 3 (9 sivua) OT

Algebra I Matematiikan ja tilastotieteen laitos Ratkaisuehdotuksia harjoituksiin 3 (9 sivua) OT Algebra I Matematiikan ja tilastotieteen laitos Ratkaisuehdotuksia harjoituksiin 3 (9 sivua) 31.1.-4.2.2011 OT 1. Määritellään kokonaisluvuille laskutoimitus n m = n + m + 5. Osoita, että (Z, ) on ryhmä.

Lisätiedot

Muita vaativuusluokkia

Muita vaativuusluokkia Muita vaativuusluokkia Käydään lyhyesti läpi tärkeimpiä vaativuusluokkiin liittyviä tuloksia. Monet tunnetuista tuloksista ovat vaikeita todistaa, ja monet kysymykset ovat vielä auki. Lause (Ladner 1975):

Lisätiedot

Diofantoksen yhtälön ratkaisut

Diofantoksen yhtälön ratkaisut Diofantoksen yhtälön ratkaisut Matias Mäkelä Matemaattisten tieteiden tutkinto-ohjelma Oulun yliopisto Kevät 2017 Sisältö Johdanto 2 1 Suurin yhteinen tekijä 2 2 Eukleideen algoritmi 4 3 Diofantoksen yhtälön

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

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

Täydentäviä muistiinpanoja laskennan rajoista

Täydentäviä muistiinpanoja laskennan rajoista Täydentäviä muistiinpanoja laskennan rajoista Antti-Juhani Kaijanaho 10. joulukuuta 2015 1 Diagonaalikieli Diagonaalikieli on D = { k {0, 1} k L(M k ) }. Lause 1. Päätösongelma Onko k {0, 1} sellaisen

Lisätiedot

Numeeriset menetelmät

Numeeriset menetelmät Numeeriset menetelmät Luento 3 Ti 13.9.2011 Timo Männikkö Numeeriset menetelmät Syksy 2011 Luento 3 Ti 13.9.2011 p. 1/37 p. 1/37 Epälineaariset yhtälöt Newtonin menetelmä: x n+1 = x n f(x n) f (x n ) Sekanttimenetelmä:

Lisätiedot

Johdatus matematiikkaan

Johdatus matematiikkaan Johdatus matematiikkaan Luento 5 Mikko Salo 5.9.2017 The natural development of this work soon led the geometers in their studies to embrace imaginary as well as real values of the variable.... It came

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

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

a b 1 c b n c n

a b 1 c b n c n Algebra Syksy 2007 Harjoitukset 1. Olkoon a Z. Totea, että aina a 0, 1 a, a a ja a a. 2. Olkoot a, b, c, d Z. Todista implikaatiot: a) a b ja c d ac bd, b) a b ja b c a c. 3. Olkoon a b i kaikilla i =

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

9 Matriisit. 9.1 Matriisien laskutoimituksia

9 Matriisit. 9.1 Matriisien laskutoimituksia 9 Matriisit Aiemmissa luvuissa matriiseja on käsitelty siinä määrin kuin on ollut tarpeellista yhtälönratkaisun kannalta. Matriiseja käytetään kuitenkin myös muihin tarkoituksiin, ja siksi on hyödyllistä

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

1 sup- ja inf-esimerkkejä

1 sup- ja inf-esimerkkejä Alla olevat kohdat (erityisesti todistukset) ovat lähinnä oheislukemista reaaliluvuista, mutta joihinkin niistä palataan myöhemmin kurssilla. 1 sup- ja inf-esimerkkejä Nollakohdan olemassaolo. Kaikki tuntevat

Lisätiedot

MS-C1340 Lineaarialgebra ja

MS-C1340 Lineaarialgebra ja MS-C1340 Lineaarialgebra ja differentiaaliyhtälöt Matriisinormi, häiriöalttius Riikka Kangaslampi Kevät 2017 Matematiikan ja systeemianalyysin laitos Aalto-yliopisto Matriisinormi Matriisinormi Matriiseille

Lisätiedot

Vaihtoehtoinen tapa määritellä funktioita f : N R on

Vaihtoehtoinen tapa määritellä funktioita f : N R on Rekursio Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on käyttää rekursiota: 1 (Alkuarvot) Ilmoitetaan funktion arvot

Lisätiedot

Algoritmit 2. Luento 13 Ti Timo Männikkö

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

Lisätiedot

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

rm + sn = d. Siispä Proposition 9.5(4) nojalla e d.

rm + sn = d. Siispä Proposition 9.5(4) nojalla e d. 9. Renkaat Z ja Z/qZ Tarkastelemme tässä luvussa jaollisuutta kokonaislukujen renkaassa Z ja todistamme tuloksia, joita käytetään jäännösluokkarenkaan Z/qZ ominaisuuksien tarkastelussa. Jos a, b, c Z ovat

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

Numeeriset menetelmät

Numeeriset menetelmät Numeeriset menetelmät Luento 2 To 8.9.2011 Timo Männikkö Numeeriset menetelmät Syksy 2011 Luento 2 To 8.9.2011 p. 1/33 p. 1/33 Lukujen tallennus Kiintoluvut (integer) tarkka esitys aritmeettiset operaatiot

Lisätiedot

Todistus: Aiemmin esitetyn mukaan jos A ja A ovat rekursiivisesti lueteltavia, niin A on rekursiivinen.

Todistus: Aiemmin esitetyn mukaan jos A ja A ovat rekursiivisesti lueteltavia, niin A on rekursiivinen. Lause: Tyhjyysongelma ei ole osittain ratkeava; ts. kieli ei ole rekursiivisesti lueteltava. L e = { w { 0, 1 } L(M w ) = } Todistus: Aiemmin esitetyn mukaan jos A ja A ovat rekursiivisesti lueteltavia,

Lisätiedot

on rekursiivisesti numeroituva, mutta ei rekursiivinen.

on rekursiivisesti numeroituva, mutta ei rekursiivinen. 6.5 Turingin koneiden pysähtymisongelma Lause 6.9 Kieli H = { M pysähtyy syötteellä w} on rekursiivisesti numeroituva, mutta ei rekursiivinen. Todistus. Todetaan ensin, että kieli H on rekursiivisesti

Lisätiedot

Ensimmäinen induktioperiaate

Ensimmäinen induktioperiaate Ensimmäinen induktioperiaate Olkoon P(n) luonnollisilla luvuilla määritelty predikaatti. (P(n) voidaan lukea luvulla n on ominaisuus P.) Todistettava, että P(n) on tosi jokaisella n N. ( Kaikilla luonnollisilla

Lisätiedot

Rekursio. Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on

Rekursio. Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on Rekursio Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on käyttää rekursiota: Rekursio Funktio f : N R määritellään yleensä

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

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

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

Lisätiedot

Kielenä ilmaisten Hilbertin kymmenes ongelma on D = { p p on polynomi, jolla on kokonaislukujuuri }

Kielenä ilmaisten Hilbertin kymmenes ongelma on D = { p p on polynomi, jolla on kokonaislukujuuri } 135 4.3 Algoritmeista Churchin ja Turingin formuloinnit laskennalle syntyivät Hilbertin vuonna 1900 esittämän kymmenennen ongelman seurauksena Oleellisesti Hilbert pyysi algoritmia polynomin kokonaislukujuuren

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

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

Ensimmäinen induktioperiaate

Ensimmäinen induktioperiaate 1 Ensimmäinen induktioperiaate Olkoon P(n) luonnollisilla luvuilla määritelty predikaatti. (P(n) voidaan lukea luvulla n on ominaisuus P.) Todistettava, että P(n) on tosi jokaisella n N. ( Kaikilla luonnollisilla

Lisätiedot

Latinalaiset neliöt ja taikaneliöt

Latinalaiset neliöt ja taikaneliöt Latinalaiset neliöt ja taikaneliöt LuK-tutkielma Aku-Petteri Niemi Matemaattisten tieteiden tutkinto-ohjelma Oulun yliopisto Kevät 2018 Sisältö Johdanto 2 1 Latinalaiset neliöt 3 1.1 Latinalainen neliö.........................

Lisätiedot

33. pohjoismainen matematiikkakilpailu 2019 Ratkaisut

33. pohjoismainen matematiikkakilpailu 2019 Ratkaisut 33. pohjoismainen matematiikkakilpailu 2019 Ratkaisut 1. Kutsutaan (eri) positiivisten kokonaislukujen joukkoa merkitykselliseksi, jos sen jokaisen äärellisen epätyhjän osajoukon aritmeettinen ja geometrinen

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 1 1 Matemaattisesta päättelystä Matemaattisen analyysin kurssin (kuten minkä tahansa matematiikan kurssin) seuraamista helpottaa huomattavasti, jos opiskelija ymmärtää

Lisätiedot

Matematiikan ja tilastotieteen laitos Algebra I - Kesä 2009 Ratkaisuehdoituksia harjoituksiin 8 -Tehtävät 3-6 4 sivua Heikki Koivupalo ja Rami Luisto

Matematiikan ja tilastotieteen laitos Algebra I - Kesä 2009 Ratkaisuehdoituksia harjoituksiin 8 -Tehtävät 3-6 4 sivua Heikki Koivupalo ja Rami Luisto Matematiikan ja tilastotieteen laitos Algebra I - Kesä 2009 Ratkaisuehdoituksia harjoituksiin 8 -Tehtävät 3-6 4 sivua Heikki Koivupalo ja Rami Luisto 3. Oletetaan, että kunnan K karakteristika on 3. Tutki,

Lisätiedot

Mitään muita operaatioita symbolille ei ole määritelty! < a kaikilla kokonaisluvuilla a, + a = kaikilla kokonaisluvuilla a.

Mitään muita operaatioita symbolille ei ole määritelty! < a kaikilla kokonaisluvuilla a, + a = kaikilla kokonaisluvuilla a. Polynomit Tarkastelemme polynomirenkaiden teoriaa ja polynomiyhtälöiden ratkaisemista. Algebrassa on tapana pitää erillään polynomin ja polynomifunktion käsitteet. Polynomit Tarkastelemme polynomirenkaiden

Lisätiedot

Vektorien pistetulo on aina reaaliluku. Esimerkiksi vektorien v = (3, 2, 0) ja w = (1, 2, 3) pistetulo on

Vektorien pistetulo on aina reaaliluku. Esimerkiksi vektorien v = (3, 2, 0) ja w = (1, 2, 3) pistetulo on 13 Pistetulo Avaruuksissa R 2 ja R 3 on totuttu puhumaan vektorien pituuksista ja vektoreiden välisistä kulmista. Kuten tavallista, näiden käsitteiden yleistäminen korkeampiulotteisiin avaruuksiin ei onnistu

Lisätiedot