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, yksikäsitteinen ratkaisu, kun alkuarvot x 1 ja x 2 on annettu. Koska polynomilla on kaksinkertainen nollakohta r 0, on oltava c 1 = 2r 0 ja c 0 = r 2 0. Erityisesti r 0 on reaalinen; lisäksi jos c 0 = 0, niin c 1 = 0 ja siten x n+2 = 0 kaikilla n N. Tarkastellaan sitten tapausta c 0 0, jolloin myös r 0 0. Osoitetaan, että ratkaisujonon (y n ) n N alkiot ovat kaikilla n N, missä λ 1 = x 2 x 1 r 0 r 2 0 y n = λ 1 nr n 0 + λ 2 r n 0 ja λ 2 = 2x 1r 0 x 2 r 2 0 Osoitetaan, että jono (y n ) n N toteuttaa kyseisen toisen kertaluvun rekursioyhtälön alkuarvoineen. Muistetaan, että c 1 = 2r 0 ja c 0 = r0 2. Näin ollen c 1 y n+1 + c 0 y n = 2r 0 (λ 1 (n + 1)r n+1 0 + λ 2 r n+1 0 ) r 2 0(λ 1 nr n 0 + λ 2 r n 0 ) = 2λ 1 (n + 1)r0 n+2 + 2λ 2 r0 n+2 λ 1 nr0 n+2 λ 2 r0 n+2 = λ 1 (n + 2)r0 n+2 + λ 2 r0 n+2 = y n+2. Tarkastellaan vielä alkuarvojen toteutumista; määritelmän nojalla Edelleen, y 1 = λ 1 r 0 + λ 2 r 0 = x 2 x 1 r 0 r 0 + 2x 1r 0 x 2 r 0 = x 1r 0 r 0 = x 1. y 2 = 2λ 1 r 2 0 + λ 2 r 2 0 = 2(x 2 x 1 r 0 ) + 2x 1 r 0 x 2 = x 2. Alkuarvot siis toteutuvat, kuten haluttiin.. 2. Tietokoneella järjestettäessä listoja eli jonoja (x 1,, x n ), x i R (tavanomaisen -järjestyksen suhteen), eräs algoritmi (mergesort) toimii rekursiivisesti seuraavalla tavalla: On annettuna lista (x 1,, x n ) joka halutaan suuruusjärjestykseen: 1) Jos listassa on vähintään kaksi alkiota, jaetaa lista kahteen (suunnilleen yhtä suureen osaan) ja järjestetään ensin molemmat tällä samalla algoritmilla, sitten
2 2) Yhdistetään kaksi järjestettyä listaa yhdeksi järjestetyksi listaksi vertaamalla alkioita. 1 Oletetaan että annetun listan koko on 2 k, jollakin k N. a) Muodosta rekursioyhtälö josta (pahimman mahdollisen) tarvittavien vertailutoimenpiteiden määrän voisi laskea listan koon ollessa 2 k? b) Osaatko ratkaista yhtälön? Tämä taitaa olla ensi viikon asiaa... Parempi pseudokoodi tuolle margesortille on siis seuraa: f u n c t i o n merge sort ( l i s t m) // Base case. A l i s t o f zero or one elements i s sorted, by d e f i n i t i o n. i f l e n g t h (m) <= 1 r eturn m // Recursive case. F i r s t, d i v i d e the l i s t i n t o equal s i z e d s u b l i s t s. var l i s t l e f t, r i g h t var i n t e g e r middle = length (m) / 2 f o r each x in m b e f o r e middle add x to l e f t f o r each x in m a f t e r or equal middle add x to r i g h t // R e c u r s i v e l y s o r t both s u b l i s t s l e f t = merge sort ( l e f t ) r i g h t = merge sort ( r i g h t ) // Then merge the now s o r t e d s u b l i s t s. return merge ( l e f t, r i g h t ) missä merge -funktio liittää kaksi jäjestettyä listaa yhdeksi järjestetyksi listaksi. f u n c t i o n merge ( l e f t, r i g h t ) var l i s t r e s u l t while notempty ( l e f t ) and notempty ( r i g h t ) i f f i r s t ( l e f t ) <= f i r s t ( r i g h t ) append f i r s t ( l e f t ) to r e s u l t l e f t = r e s t ( l e f t ) e l s e append f i r s t ( r i g h t ) to r e s u l t r i g h t = r e s t ( r i g h t ) // e i t h e r l e f t or r i g h t may have elements l e f t while notempty ( l e f t ) 1 Tämä tehdään vertaamalla ensin listojen pienimpiä alkioita, valitsemalla pienempi ja poistamalla se, ja vertaamalla jäljelle jääneistä listoista pienimpiä...
append f i r s t ( l e f t ) to r e s u l t l e f t = r e s t ( l e f t ) while notempty ( r i g h t ) append f i r s t ( r i g h t ) to r e s u l t r i g h t = r e s t ( r i g h t ) return r e s u l t (a) Merkitään ensin v n = vertailutoimenpiteiden määrä 2 n kokoisella listalla ja huomataan sitten että 1) kohdassa lista jaetaan kahtia ja nämä 2 n 1 kokoiset listat järjestetään ja kun nämä on järjestetty, yhdistetään ne. Tässä yhdistämisessä tarvitsee selvästi verrata enintään 2 2 n 1 1 kertaa, eli molemmat listat täytyy pahimmillaan mennä läpi, mutta viimeistä yksinäistä alkiota ei tarvitse verrata mihinkään. Siis v n+1 = 2v n + 2 n+1 1 kaikilla n N ja alkuarvona v 1 = 1 koska kahden alkion listassa tarvitsee verrata yhden kerran. (b) Huomataan ensin että, jos z n on ratkaisu yhtälölle x n+1 = 2x n + 2 n+1, alkuarvolla v 1 1, niin y n = z n + 1 toteuttaa yhtälön alkuarvolla v 1. Riittää siis ratkaista y n+1 = 2y n + 2 n+1 1, x n+1 = 2x n + 2 n+1, alkuarvolla v 1 1. Tätä vastaavan homogeenisen yhtälön karakteristinen polynomi on r = 2, joten sopiva yrite yksittäisratkaisuksi on y n = nλ2 n. Sijoitus antaa λ = 1 joten y n = n2 n. Vastaavan homogeenisen yhtälön ratkaisu on z n = λ 2 2 n ja alkuarvosta z 1 = v 1 1 y 1 = 1 1 2 = 2 saadaan 2 = λ 2 2 1, eli z n = 2 n kaikilla n joten nyt voidaan kirjoitta ratkaisu koko ongelmalle: v n = y n + z n + 1 = n2 n 2 n + 1, n N. 3 3. Olkoon f R. Määritä rekursioyhtälölle x n+1 = x n + f, n N, ratkaisu, kun alkuarvo x 1 on annettu. Osoitetaan, että jono (x n ) n N on rekursioyhtälön ratkaisu, missä x n = x 1 + (n 1)f (1)
4 kaikilla n N; huomaa, että tämä kaava pätee myös kun n = 1 ja alkuarvo x 1 on annettu. Olkoon n N, jolloin kaavan (1) nojalla kuten haluttiin. x n+1 = x 1 + nf = x 1 + (n 1)f + f = x n + f, 4. Ratkaise rekursioyhtälö alkuarvoilla x 1 = 3 ja x 2 = 0. 2x n+2 + x n+1 = x n, n N, Havaitaan aluksi, että kaikilla n N pätee missä c 1 = 1/2 ja c 2 = 1/2 0. Koska 2x n+2 + x n+1 = x n x n+2 = c 1 x n+1 + c 0 x n, p(r) = r 2 c 1 r c 0 = r 2 + r/2 1/2 = (r 1/2)(r + 1), niin rekursioyhtälön x n+2 = c 1 x n+1 + c 0 x n karakteristisen polynomin p juuret ovat nollasta poikkeavat eri reaaliluvut r 1 = 1/2 ja r 2 = 1. Lauseen 3.6(1) nojalla ratkaisujonon (x n ) n N alkiot ovat x n = λ 1 r1 n + λ 2 r2 n, missä λ 1 = x 1r 2 x 2 r 1 (r 2 r 1 ) = 4 ja λ 2 = x 1r 1 x 2 r 2 (r 1 r 2 ) = 1 Ratkaisu sievenee muotoon x n = 2 n+2 + ( 1) n+1 kaikilla n N. 5. Ratkaise rekursioyhtälö alkuarvoilla x 1 = 2 ja x 2 = 8. x n+2 + 4x n = 4x n+1, n N, Tarkasteltavana on alkuarvollinen rekursioyhtälö missä c 1 = 4 ja c 0 = 4 0. Koska x n+2 = c 1 x n+1 + c 0 x n, p(r) = r 2 c 1 r c 0 = r 2 4r + 4 = (r 2) 2, on yhtälön karakteristisella polynomilla p kaksinkertainen reaalinen juuri r 0 = 2. Tehtävän 3 ratkaisun perusteella ratkaisujonon (x n ) n N alkiot ovat missä λ 1 = x 2 x 1 r 0 Näin ollen x n = nr n 0 = n2n kaikilla n N. r 2 0 x n = λ 1 nr n 0 + λ 2 r n 0, = 1 ja λ 2 = 2x 1r 0 x 2 r 2 0 = 0.
5 6. Ratkaise rekursioyhtälö alkuarvoilla x 1 = 3 ja x 2 = 0. 1 3 x n+2 + 3x n = 0, n N, Tarkasteltavana on alkuarvollinen rekursioyhtälö missä c 1 = 0 ja c 0 = 9 0. Koska x n+2 = c 1 x n+1 + c 0 x n, p(r) = r 2 c 1 r c 0 = r 2 + 9 = (r + 3i)(r 3i), niin yhtälön karakteristisella polynomilla p on kaksi nollasta poikkeavaa juurta 3i ja 3i. Kirjoitetaan 3i = α iβ ja 3i = α + iβ, missä α = 0 ja β = 3 0. Lauseen 3.6(3) tai luennoilla Lauseen 3.6 jälkeisen huomautuksen nojalla ratkaisujonon (x n ) n N alkiot ovat x n = β n( λ 1 cos(nπ/2) + λ 2 sin(nπ/2) ) kaikilla n N, missä λ 1 = x 2 β 2 = 0 ja λ 2 = β2 x 1 β 3 = 1. Näin ollen ratkaisu sievenee muotoon x n = 3 n sin(nπ/2) kaikilla n N. Ratkaisu (2): Kuten edellä karakteristisen polynomin nollakohdat ovat 3i ja 3i joten ratkaisu on Lauseen 3.6 nojalla muotoa x n = λ 1 (3i) n + λ 2 ( 3i) n. Nyt alkuarvoista saadaan 3 = x 1 = λ 1 3i + λ 2 ( 3i) 0 = x 2 = λ 1 ( 9) + λ 2 ( 9), 1 mistä saadaan λ 1 2 i ja λ 2 = 1 2i joten ratkaisu on x n = 1 2 i(3i)n + 1 2 i( 3i)n = 3 n sin(nπ/2), n N. 7. Kaksi ensimmäistä Fibonaccin lukua ovat F 1 = 1 ja F 2 = 1. Kun n 3 on luonnollinen luku, niin määritellään n:s Fibonaccin luku asettamalla F n = F n 1 + F n 2. Ratkaise n:s Fibonaccin luku. Merkitsemällä F n = x n ratkaistavana on rekursioyhtälö x n+2 = c 1 x n+1 + c 0 x n, missä c 1 = c 0 = 1 ja alkuarvot ovat x 1 = x 2 = 1. Yhtälön karakteristinen polynomi on p(r) = r 2 r 1, jonka juuret ovat toisen asteen yhtälön ratkaisukaavan nojalla r 1 = 1 5 2 ja r 2 = 1 + 5 2.
6 Lauseen 3.6(1) nojalla ratkaisujonon (x n ) n N alkiot ovat kaikilla n N, missä ja x n = λ 1 r n 1 + λ 2 r n 2 5 λ 1 = x 1+ 1r 2 x 2 r 1 (r 2 r 1 ) = 2 1 1 5 2 ( 5) = 1 5 λ 2 = x 1r 1 x 2 r 2 (r 1 r 2 ) = 1. 5 Ratkaisu sievenee siis muotoon F n = x n = 1 (( ) 1 + 5 n ( ) 1 5 n ) 5 2 2 kaikilla n N.
Johdatus diskreettiin matematiikkaan Ohjaus 4, 7.10.2015 1. Olkoot n N ja A n = {0,..., n} [0, n] [0, n] {0,..., n}. Määritä sellaisten 2n pituisten joukon A n {(x, y) R 2 : y x} polkujen, jotka kulkevat vasemmasta alakulmasta (0, 0) oikeaan yläkulmaan (n, n), lukumäärä C n rekursiivisesti. Osoita 2, että kaikilla n N. C n = 1 n + 1 ( ) 2n n Joukon A n ne 2n pituiset polut, jotka kulkevat pisteestä (0, 0) pisteeseen (n, n), voidaan samaistaa niiden sanojen {O, Y } 2n kanssa joissa on sama määrä molempia kirjaimia. Samaistus on seuraava: aloitetaan pisteestä (0, 0) ja luetaan annettua sanaa; kirjain O tarkoittaa askelta oikealle ja Y askelta ylös. Kääntän, annettuun polkuun voidaan liittää 2n-pituinen sana annetun koodauksen avulla. Tarkastellaan niitä yllä kuvattuja polkuja, jotka kuuluvat lisäksi joukkoon {(x, y) R 2 : y x} ja kutsutaan näitä n-sallituiksi poluiksi. Nämä voidaan osittaa sen perusteella millä tavalla (jos millään) ne kohtaavat joukon {(i, i) : i = 1,..., n 1}. Ne n-sallitut polut jotka eivät kohtaa pisteitä (i, i) millään i {1,..., n 1} ovat muotoa OγY, missä γ {O, Y } 2(n 1) on sellainen polku joukossa {1,..., n} [0, n 1] [1, n] {0,..., n 1}, joka samaistuu (n 1)-sallitun polun kanssa joukossa A n 1 siirron (x, y) (x 1, y) avulla. Kutsutaan tällaisia polkuja OγY aidosti n-sallituiksi poluiksi; edellisen samaistuksen nojalla näitä on C n 1 kappaletta joukossa A n. Niiden n-sallittujen polkujen lukumäärä, jotka eivät kohtaa pisteitä (j, j) millään 1 j < i, mutta kohtaavat pisteen (i, i) annetulla i {1,..., n 1} on C i 1 C n i kappaletta; tällainen polku voidaan nimittäin kirjoittaa muodossa γγ, missä γ on aidosti i-sallittu polku joukossa A i ja γ on (n i)-sallittu polku joukossa A n i (polku γ on tarkemmin sanoen sellainen polku joukossa {i,..., n} [i, n] [i, n] {i,..., n} joka voidaan siirron avulla samaistaa sallitun polun kanssa joukossa A n i ). Kaiken kaikkiaan n-sallittujen polkujen lukumäärä on n 1 n C 0 = 1, C n = C n 1 + C i 1 C n i = C i 1 C n i n 1. i=1 Johdetaan esityskaava tälle luvulle ratkaisemalla tehtävä toisella tavalla. Kaikkien 2npituisten ja pisteet (0, 0) ja (n, n) joukossa A n yhdistävien polkujen lukumäärä on ( 2n n ) ; 2 Vinkki: Sellaisten 2n pituisten An:n polkujen, jotka eivät pysy joukossa {(x, y) R 2 : y x}, lukumäärän saa laskettua tarkastelemalla joukon N N pistettä, jossa polku ensimmäisen kerran poistuu joukosta {(x, y) R 2 : y x} ja peilaamalla loppupolku suoran {(x, y) R 2 : y = x + 1} suhteen. i=1
8 tämä on niiden sanojen γ {O, Y } 2n joissa molempia kirjaimia on n kappaletta lukumäärä. Toisaalta peilaamalla kuten vinkissä havaitaan, että joukon A n ei n-sallitut polut ovat bijektiivisessä vastaavuudessa niiden polkujen kanssa, jotka yhdistävät pisteet (0, 0) ja (n 1, n + 1) joukossa {0,..., n 1} [0, n + 1] [0, n 1] {0,..., n + 1}. Nämä polut voidaan puolestaan samaistaa joukon {O, Y } 2n niiden sanojen kanssa, joissa on n 1 kappaletta O-kirjaimia ja n+1 kappaletta Y -kirjaimia. Tällaisia sanoja on ( ) 2n n+1 kappaletta ja siten kaikilla n 1 pätee ( ) ( ) 2n 2n C n = n n + 1 (2n)! = n!(2n n)! (2n)! (n + 1)!(2n (n + 1))! ( = 1 n ) (2n)! = 1 ( ) 2n. n + 1 n!n! n + 1 n Huomautus; tehtävänanto voidaan formuloida seuraavilla yhtäpitävillä tavoilla: Jos vaaleissa ehdokkaat A ja B saavat molemmat n ääntä ja äänet nostetaan vaaliuurnasta yksi kerrallaan laskettavaksi, niin kuinka monella eri tavalla äänet voidaan nostaa siten, että ehdokas A ei ole missään vaiheessa äänten laskentaa ehdokasta B jäljessä? Tai: Kuinka monella eri tavalla pyöreän pöydän ympärille sijoittuneet 2n ihmistä voi kätellä toisiaan yhtäaikaa niin, että kädet eivät mene ristiin? 2. Olkoon c > 0 siten, että c 1. Osoita, että kaikilla n N. n 1 c i = cn 1 c 1 i=0 3. Olkoot f R ja c > 0 siten, että c 1. Ratkaise rekursioyhtälö x n+1 = cx n + f, n N, alkuarvolla x 1 edellisen tehtävän avulla suoraan laskemalla.
9 4. Ratkaise rekursioyhtälö x n+2 + x n+1 = 2x n, n N, alkuarvoilla x 1 = 1 ja x 2 = 1. 5. Ratkaise rekursioyhtälö 2x n+1 = 1 3 x n+2 + 3x n, n N, alkuarvoilla x 1 = 0 ja x 2 = 9. 6. Ratkaise rekursioyhtälö alkuarvoilla x 1 = 0 ja x 2 = 9. x n+2 = 9x n, n N,