Diskreetin ateatiikan perusteet Laskuharjoitus 4 / vko 40 Tuntitehtävät 31-32 lasketaan alkuviikon harjoituksissa ja tuntitehtävät 35-36 loppuviikon harjoituksissa. Kotitehtävät 33-34 tarkastetaan loppuviikon harjoituksissa. Kotitehtävät 37-39 tulee palauttaa seuraavan alkuviikon harjoituksiin paperilla tai pdf-uodossa kurssin MyCourses-sivuille tiistaihin klo 16.00 ennessä. Saa kellonaika on yös viikoittaisten verkkotehtävien dl, joskin verkkotehtävät kannattaa tehdä ennen palautettavia kotitehtäviä. Alkuviikko: kobinatoriikka, jaollisuus Tuntitehtävä 31: Määritä Eukleideen algoritilla lukujen 126 ja 35 suurin yhteinen tekijä ja sen esitys lukujen 126 ja 35 lineaarikobinaationa. Kertaa tarvittaessa Eukleideen algoriti ensin vaikkapa Wikipediasta. Eukleideen algoritia käyttäen 126 = 3 35 + 21 35 = 1 21 + 14 21 = 1 14 + 7 14 = 2 7 + 0 saae suuriaksi yhteiseksi tekijäksi 7. Kootaan luvun 7 lineaarikobinaatio kulkealla saat yhtälöt alhaalta ylös: 7 =21 14 = 21 (35 21) =2 21 35 =2 (126 3 35) 35 =2 126 7 35 Tuntitehtävä 32: Olkoon annettuna seitseän eri positiivista kokonaislukua. Miksi niiden joukosta löytyy kaksi lukua, joiden sua tai erotus on kyenellä jaollinen? (Voit käyttää tietoa: jos luku loppuu nollaan, se on kyenellä jaollinen.) Kahden kokonaisluvun sua on jaollinen kyenellä jos viieisten lukujen sua on jaollinen kyenellä. Esierkiksi 434 + 26 on jaollinen kyenellä, koska 4 + 6 on jaollinen kyenellä. Saa tapahtuu erotuksilla. Eli riittää tutkia vain näiden lukujen viieisiä nueroita. Jos A = {a 1,, a 7 } on joukko, 1
jossa on 7 eri kokonaislukua, erkitään viieisten nueroiden joukkoa sybolilla I = {n 1, n 2,, n 7 }. Tutkitaan kahta ahdollista tapausta: i) Seitseän luvun joukko A sisältää kaksi sellaista lukua, joiden viieinen nuero on saa. Tällöin näiden kahden erotus on kyenellä jaollinen. ii) Seitseän luvun joukko A ei sisällä kahta sellaista lukua, joiden viieinen nuero on saa. Toisin sanoen, joukko I sisältää 7 eri alkiota. Määritellään joukot A 0 = {0} A 1 = {1, 9} A 2 = {2, 8} A 3 = {3, 7} A 4 = {4, 6} A 5 = {5}. Nähdään, että joukkojen A 1,..., A 4 alkioiden sua on 10. Lisäksi joukko I sisältää vähintään 5 alkiota joukoista A 1, A 2, A 3, A 4. Laatikkoperiaatteen ukaan I sisältää oleat alkiot jostain joukosta A 1, A 2, A 3, tai A 4. Toisin sanoen A i I jollekin i = 1, 2, 3, 4. Eli löytyy kaksi alkiota, joiden sua on 10. Kotitehtävä 33: Eräissä juhlissa kuusi ihistä istuutuu satunnaisesti saan pöydän ääreen. Osoita, että heidän joukossaan on kolen hengen ryhä, jonka jäsenet joko ovat kaikki kätelleet toinen toisiaan tai joista yksikään ei ole kätellyt ryhän kahta uuta jäsentä. Ratkaise käyttäen kyyhkyslakkaperiaatetta. Oletetaan, että tällaista joukkoa ei löydy ja johdetaan ristiriita. Valitaan yksi henkilö, jota erkitään kirjaiella x. Tää henkilö on ahdollisesti kätellyt viittä uuta henkilöä. Kyyhkyslakkaperiaatteen ukaisesti, koska viisi suhdetta jaetaan kahteen tilaan (kätelty tai ei-kätelty), on henkilöllä x vähintään kole suhdetta saassa tilassa. Syetrian vuoksi voie vaikkapa olettaa, että kyseinen tila on kättely eli x on kätellyt vähintään kolea henkilöä. Olkoon nää kole henkilöä a, b ja c. Tarkastellaan näiden välisiä suhteita (a, b), (b, c) ja (a, c). Mikään näistä ei voi olla kätelleet, sillä tällöin syntyisi kolen hengen kättelykolio. Esierkiksi jos a ja c olisivat kätelleet, olisi kysytty kolen hengen ryhä (x, a, c). Mutta nyt uodostuu henkilöiden (a, b, c) välille tilanne, jossa yksikään ei ole kätellyt ryhän kahta uuta jäsentä. Siispä tehtävänannon tilanteelta ei voi välttyä. Kotitehtävä 34: On oleassa n k erilaista k-pituista erkkijonoa, jossa erkit valitaan joukosta {1, 2,..., n}. Jos k n, niin onessako eri jonossa esiintyy kaikki n erkkiä? Ratkaise käyttäen seulayhtälöä. 2
Merkitään x = n k, joka on kaikkien k-pituisten erkkijonojen äärä. Vastaus saadaan vähentäällä tästä äärästä kaikki k-pituiset erkkijonot, joista puuttuu yksikin käytössä olevista erkeistä {1, 2,..., n}. Merkitään A i :lla sitä k-pituisten erkkijonojen joukkoa, jossa ei ole käytetty erkkiä i. Joukon A i erkkijonot voidaan uodostaa n 1:stä erkistä, joten A i = (n 1) k. Saoin voidaan laskea tälläisten joukkojen leikkausten koko: joukko A i A j, jossa i j, koostuu erkkijonoista, joissa ei ole käytetty kupaakaan erkkiä i tai j. Tään joukon erkkijonot siis uodostetaan (n 2):sta erkistä, joten A i A j = (n 2) k. Saalla tavalla voidaan päätellä kaikkien leikkauksien koot: jos B on joukon {1,..., n} osajoukko, jolle B =, on i B A i = (n ) k. Joukko k-pituisista erkkijonoista, joista puuttuu vähintään yksi käytössä olevista erkeistä on A 1 A 2... A n. Tään joukon koon ratkaiseiseksi tarvitaan seulayhtälöä. Ratkaistaan ensin S, kun uistetaan, että n-kokoisesta joukosta löytyy -kokoisia osajoukkoja ( n ) kappaletta. S = A i = ( ) n (n ) k = (n ) k B i B B Tää voidaan sijoittaa seulayhtälöön, jolloin ratkaisuksi saadaan ( ) n x A 1... A n = n k ( 1) 1 S = n k ( 1) 1 (n ) k =1 =1 ( ) n ( ) n = n k + ( 1) (n ) k = ( 1) (n ) k. =1 Jossa ensin on vaihdettu suan erkki (huoaa 1:sen potenssin uutos) ja lopuksi huoattu, että teri n k saadaan suan indeksillä 0. =0 Loppuviikko: odulaariaritetiikka Tuntitehtävä 35: Tenttivalvojan palkanaksua varten täyttäässä henkilötietoloakkeessa henkilötunnus oli kirjoitettu hyvin suttuisesti, toisesta nuerosta ei saanut selvää. Tiedetään vain, että tunnus on uotoa 2x1189 321W. Mikä nuero x on? Vihje: Tarkistuserkki W tarkoittaa, että kun tarkistuserkkiä edeltävien nueroiden uodostaa luku jaetaan luvulla 31, niin jakojäännös on 28. Kysyyksen löytyy tietenkin ratkaisu kokeilealla, utta nyt on tarkoitus uodostaa yhtälö, josta voi ratkaista x:n. Voit käyttää hyväksi tietoa, että 201 189 321 = 3 od 31, 10 000 000 = 20 od 31 ja [20] 1 31 = [14] 31. 3
Koska voie kirjoittaa luvun 2x1 189 321 uodossa 201 189 321+x 10 000 000 niin saae yhtälön [28] 31 = [201 189 321 + x 10 000 000] 31 = [201 189 321] 31 + [x] 31 [10 000 000] 31. Annettujen tietojen perusteella tiedäe, että [201 189 321] 31 = [3] 31 ja [10 000 000] 31 = [20] 31 joten yhtälöksi tulee ja saae ratkaisuksi [28] 31 = [3] 31 + [x] 31 [20] 31, [x] 31 = [20] 1 31 [28 3] 31 = [14] 31 [25] 31 = [350] 31 = [9] 31, josta seuraa, että x = 9, koska x {0, 1,..., 9}. Tuntitehtävä 36: a) Määrittele kokonaisluvun a Z käänteisluku odulo, issä Z +. b) Miten a-kohdan käänteisluku lasketaan, jos syt(a, ) = 1? c) Etsi luvun 7 käänteisluku odulo 19. d) Miten käänteisluvun avulla ratkaistaan kongruenssiyhtälö x a (od ), jos syt(a, ) = 1? e) Ratkaise kongruenssiyhtälö 7x 13 (od 19). a) Alkion a Z käänteisalkio od on sellainen alkio b {0, 1,..., 1}, jolle ab 1 ( od ). b) Esitetään 1 alkioiden a ja lineaarikobinaationa saalla tapaa kuin tuntitehtävässä 31. Tää voidaan tehdä Eukleideen algoritin avulla. Nyt 1 = xa + y xa (od ), eli x on etsiäe käänteisalkio. Mikäli x ei kuulu joukkoon {0,..., 1}, voidaan tulosta siirtää lisääällä tai vähentäällä sopivasti lukua. c) Euklideen algoriti: 19 = 2 7 + 5 7 = 5 + 2 5 = 2 2 + 1 1 = 5 2 2 = 5 2 (7 5) = 3 5 2 7 = 3 (19 2 7) 2 7 = 3 19 8 7 Eli luvun 7 käänteisluku od 19 on sen kerroin 8. Haluae kuitenkin luvun joukosta {0,..., 18}, ja koska 8 11 (od 19), on vastaus 11. 4
d) Kerrotaan oleat puolet a:n käänteisalkiolla (jonka löytäisen kuvailie kohdassa b), jolloin saadaan a 1 ax a 1 b( od ) x a 1 b( od ). e) Kerrotaan yhtälön oleat puolet luvun 7 käänteisalkiolla od 19, eli luvulla 11: 11 7x 11 13( od 19) 77x 143( od 19) x 10 a) Etsi jäännösluokkarenkaan Z 9 kääntyvät alkiot ja niiden kään- Kotitehtävä 37: teisalkiot. b) Ratkaise x, kun tai perustele, iksi ratkaisua ei ole. 5x 3 od 9 a) Alkiot, joiden suurin yhteinen tekijä luvun 9 kanssa on 1, ovat kääntyviä, eli 1,2,4,5,7,8. Näiden käänteisalkiot (saassa järjestyksessä) ovat 1,5,7,2,4,8. Se nähdään esi. kertolaskutaulukosta tai vain kokeilealla, ikä kääntyvistä alkiosta kerrottuna toisella kääntyvällä alkiolla antaa arvoksi 1 od 9. b) 5x 3 od 9 5 1 5x 5 1 3 od 9 2 5x 2 3 od 9 eli vastaus on x 6 od 9. 1 x 6 od 9 Kotitehtävä 38: Jos lasketaan od (13 21, 9) ja od (13 22, 9) Matlabilla (versio R2017a) niin tulokset ovat 7 ja 4. a) Miksi oleat eivät voi olla oikein? b) Mistä virhe johtuu? a) Jos od (13 21, 9) = 7, niin od (13 22, 9) = od (7 13, 9) = od (91, 9) = 1 4 ja tästä nähdään että joko od (13 21, 9) 7 tai od (13 22, 9) 4 (tosiasiassa ne ovat 1 ja 4 eli jälkiäinen sattuu oleaan oikein). 5
b) Virhe johtuu siitä, että Matlab käyttää laskeiseen liukulukuja, joiden tarkkuus on äärellinen. Se laskee ensin 13 21 tai 13 22, pyöristää luvut, ja sitten vasta laskee jakojäännöksen. Pyöristyksen takia jakojäännös ei välttäättä ene oikein. Kotitehtävä 39: Alla on pseudokoodi Eukleideen algoritille. Siinä!= ilaisee erisuuruutta ja % ilaisee jakojäännöstä. gcd(, n ) { while( n!= 0 ) { long re = % n; = n; n = re; } return ; } Osoita: jos > n, niin od n < /2. Sen jälkeen perustele, että yllä olevan koodin nopeus :stä riippuatta on O(log n), kun n. Jos > n, niin jakoyhtälön ukaan = qn + r, issä q 1 ja 0 r < n. Nyt siis r on :n jakojäännös n:llä jakaessa siis r = ( od n). Nyt saadaan r < n r + r < n + r r < n + r qn + r = 2. 2 2 Jos = n, saa uuttuja re arvon 0. Silukka päättyy ja palautetaan arvo. Tällöin funktiolla kestää vakioaika. Oletetaan nyt, että > n. Huoaa, että yös jokaisella tulevalla kierroksella pätee > n. Ensiäisellä kierroksella n:n arvo kopioidaan uuttujaan. Sen jälkeisellä kierroksella lasketaan n (od ( od n)). Edellisen todistuksen perusteella tään tulokselle pätee re< od n 2 < n/2. tää arvo taas kopioidaan uuttujaan n, ja jälleen kahden kierroksen jälkeen saa toistuu. Siispä jokaisen kahden kierroksen aikana n:n arvo on vähintään puolittunut: Koska ohjela päättyy (vakioajassa) kun n 1, kasvaa ajokierrosten äärä funktiona O(log n). Jos taas funktiota kutsuttaessa < n, niin ensiäisellä kierroksella uuttuja re saa arvon, jonka jälkeen uuttujat vaihtavat paikkaa. Näin edellisen arguentin ukaan kasvaa silukka-ajojen äärä funktiona O(log ). Koska kuitenkin tällöin < n, kasvaa log n vielä nopeain ja ajoaika on vieläkin O(log n). Todellinen kopleksisuus on siis O(log(in(n, ))), utta tää kasvaa hitaain kuin O(log n), jolloin väite ajoaika kasvaa funktiona O(log n) pitää paikkansa. Verkkotehtävät 4: Muistathan yös verkkotehtävät! Neljäs tehtäväsarja sulkeutuu ti 10.10. klo 16.00. 6