SlideShare a Scribd company logo
Generoivat funktiot rekursioyhtälöiden
ratkaisemisessa
LuK-tutkielma
TURUN YLIOPISTO
Informaatioteknologian laitos
Tietojenkäsittelytiede
Tuomas Poukkula
Joulukuu 2010
TURUN YLIOPISTO
Informaatioteknologian laitos
POUKKULA, TUOMAS: Generoivat funktiot rekursioyhtälöiden
ratkaisemisessa
LuK-tutkielma, 28 s.
Tietojenkäsittelytiede
Joulukuu 2010
Yksi tapa kirjoittaa algoritmeja on laittaa ne kutsumaan itseään. Tätä rekursioksi
kutsuttua algoritmien toteutusmallia käytetään muun muassa kertoman laskemisessa
sekä lajittelualgoritmeissa. Rekursiivisille algoritmeille voidaan kirjoittaa niiden suori-
tusaikoja kuvaavia rekursioyhtälöitä. Muun muassa edellä mainittujen yksinkertaisten
algoritmien tapauksessa rekursioyhtälöt pystytään ratkaisemaan helpoilla matemaat-
tisilla menetelmillä. On kuitenkin olemassa hyvin paljon rekursioyhtälöitä, joiden suljet-
tujen muotojen johtaminen on hyvin vaikeaa.
Tässä tutkielmassa näytetään, miten lukujonoja generoivia funktioita voidaan hyödyntää
rekursioyhtälöiden ratkaisemisessa. Opinnäytetyön alussa esitetään tarvittavat mate-
maattiset käsitteen kuten osamurtokehitelmät ja summat. Generoivien funktioiden esit-
telyn jälkeen tarkastellaan tunnettuja esimerkkirekursioita ja ratkaistaan ne generoivilla
funktioilla. Lopuksi näytetään, miten summien suljettuja muotoja voidaan johtaa gene-
roivien funktioiden avulla.
Avainsanat: generoiva funktio, rekursio, rekursioyhtälö
Sisällysluettelo
1 Johdanto .................................................................................................................. 1
2 Matemaattiset käsitteet............................................................................................ 5
2.1 Summat ja rekursiot ............................................................................................. 5
2.2 Osamurtokehitelmä.............................................................................................. 8
3 Generoivat funktiot ...............................................................................................11
3.1 Määritelmä .........................................................................................................11
3.2 Perusoperaatiot...................................................................................................12
3.3 Lukujonot ja niiden generoivat funktiot ............................................................14
4 Rekursioyhtälöiden ratkaiseminen generoivilla funktioilla..................................17
4.1 Ratkaisumenetelmä............................................................................................17
4.2 Perussäännöt.......................................................................................................20
4.3 Summien ratkaiseminen generoivilla funktioilla...............................................24
5 Yhteenveto ............................................................................................................27
1
1 Johdanto
Rekursiivisten algoritmien analysointiin on olemassa monimutkaisia matemaattisia
menetelmiä, joilla voidaan kuitenkin johtaa algoritmien suoritusaikoja helposti.
Rekursiivisissa algoritmeissa ohjelmarutiini kutsuu itseään ja käyttää omaa infor-
maatiotaan yhä uudelleen, kunnes se saa aikaan tuloksen. Esimerkiksi jotkin
lajittelualgoritmit[1] toimivat näin. Rekursiivisten algoritmien suoritusaikojen
selvittämiseksi voidaan johtaa niiden toimintaa kuvaavia rekursioyhtälöitä, joiden
ratkaiseminen ei aina onnistu alkeellisella matematiikalla. Seuraavaksi esitetään tun-
nettuja esimerkkejä sekä helpoista että vaikeista rekursioyhtälöistä.
Esimerkki 1 – Hanoin Tornit: Hanoin tornit on yksinkertainen matemaattinen peli,
jonka keksi ranskalainen matemaatikko Èdouard Lucas vuonna 1883. Se koostuu
kolmesta tangosta sekä levyistä, joita voi siirtää tangosta toiseen. Alkutilanteessa
levyt on pinottu päällekkäin yhteen tangoista kokojärjestyksessä suurimman levyn
ollessa alimmaisena. Tarkoitus on siirtää pino toiseen tankoon kolmatta apuna
käyttäen samaan järjestykseen siten, että vain yhtä levyä saa siirtää kerrallaan ja
suurempi levy ei saa olla pienemmän päällä. Algoritmin esittämistä varten sovitaan,
että kiekkoja on n kappaletta ja pienin tarvittava siirtojen lukumäärä on .
Lähtötilanne on esitetty kuvassa 1.
Kuva 1: Hanoin tornit[2]
2
Peli on ratkaistavissa seuraavalla algoritmilla:
1. Siirretään n-1 pienintä kiekkoa tangosta A keskimmäiseen aputankoon.
On siis ratkaistava n-1-kiekkoinen Hanoin tornien ongelma, mikä vaatii
siirtoa.
2. Siirretään suurin kiekko tangosta A tankoon B, mikä vaatii yhden siirron.
3. Siirretään n-1 kiekkoa aputangosta tankoon B, mikä vaatii siirtoa.
On todistettu, että tämä algoritmi tuottaa pienimmän tarvittavien siirtojen
lukumäärän[2]. Ratkaisuun vaadittava siirtojen lukumäärä voidaan esittää seuraa-
valla rekursiolla:
= 0;
= + 1, kun n ≥ 1.
Yksinkertaisin tapa ratkaista rekursioyhtälö on arvata tulos ja todistaa se matemaat-
tisella induktiolla[2]. Hanoin tornien tapauksessa saadaan pienillä kokonaisluvuilla
seuraavat arvot:
= 0 = 1 = 3 = 7 = 15 = 31 = 63.
Pienillä arvoilla näyttää siltä, että = – 1, kun n ≥ 0.
Induktiolla voidaan osoittaa, että siirtojen määrä n:llä kiekolla on todella = – 1
[3].
Tämä rekursioyhtälö voitaisiin ratkaista myös iteroimalla termiin asti
( 0 < k < n ). Kun on tehty k iteraatiota, voidaan havaita johdonmukaisuus:
3
Kun tiedetään, että rekursion pohja on = 0, voidaan ratkaista luku k kiekkojen
lukumäärän n avulla ratkaisemalla yhtälö n - k = 0. Kun lisäksi tiedetään, että
rekursioyhtälön oikean puolen summalauseke on suppeneva geometrinen sarja[7],
jolla on tässä tapauksessa suljettu muoto , saadaan yhtälön lopullinen ratkaisu
–
Peli perustuu vanhaan legendaan hindutemppelistä, jonka papeilla tai munkeilla on
ratkaistavanaan 64 kultaisesta levystä koostuva Hanoin torni. Kun he saavat työnsä
päätökseen, koittaa maailmanloppu. 64-levyisen Hanoin tornin ratkaiseminen vaatii
vähintään 18 446 744 073 709 551 615 siirtoa. Jos legenda olisi totta, jos papit
kykenisivät siirtämään yhden levyn joka sekunti ja jos he osaisivat ratkaista pelin
vähimmäismäärällä siirtoja, maailmanloppu koittaisi 264
− 1 sekunnin eli noin 585
miljardin vuoden kuluttua pelin aloittamisesta. Maailmankaikkeuden arvioidaan
nykyään olevan noin 13,7 miljardin vuoden ikäinen. Ei tiedetä, keksikö Lucas myös
tarinan vai kehittikö hän pelin legendan pohjalta.[4]
Esimerkki 2 – Fibonaccin luvut: 1200-luvulla italialainen matemaatikko Leonardo
Fibonacci tutki seuraavanlaista lukujonoa: 0, 1, 1, 2, 3, 5, 8, 13, … Hänen mukaansa
on nimetty niin sanotut Fibonaccin luvut, jotka määritellään rekursiivisesti
seuraavasti:
= 0;
= 1;
= + .
Fibonaccin lukuja on käytetty hyödyksi tietojenkäsittelyssä tehokkaiden
hakualgoritmien ja tietorakenteiden toteutuksissa[1]. Niitä esiintyy myös luonnossa
muun muassa jänisten lisääntymismallissa, puiden oksien haarautumisissa,
kotiloiden spiraaleissa ja aaltojen kaarissa.[5]
4
Taulukko 1: Fibonaccin lukuja eri n:n arvoilla.
n 0 1 2 3 4 5 6 7 8 9 10 11 12 13
Fn 0 1 1 2 3 5 8 13 21 34 55 89 144 233
Kyseisen rekursion ratkaiseminen ei onnistu yhtä helposti kuin Hanoin tornien
tapauksessa, vaan tarvitaan kehittyneitä menetelmiä. Tässä tutkielmassa kerrotaan
siitä, miten lukujonoja generoivia funktioita voidaan hyödyntää monimutkaisten
rekursioyhtälöiden ratkaisemisessa. Fibonaccin lukuihin palataan luvussa 4, jossa
esitetään rekursioyhtälöiden ratkaisumalli sekä näytetään, miten summien suljettuja
muotoja voidaan ratkaista samalla tavalla. Luvussa 3 kerrotaan generoivista
funktioista. Jotta generoivien funktioiden käsitteitä voisi ymmärtää, on sitä ennen
määriteltävä tarvittavat matemaattiset käsitteet, kuten summat ja osamurtokehitelmät
luvussa 2. Viimeisessä luvussa esitetään yhteenveto.
5
2 Matemaattiset käsitteet
2.1 Summat ja rekursiot
Tässä luvussa tarkastellaan summia, niiden merkintöjä, niihin liittyviä laskulakeja
sekä niiden yhteyttä rekursioihin. Summalla on yleinen muoto
+ + + + + … + ,
jossa jokainen on määritelty. Jokaista yhteenlaskettavaa kutsutaan termiksi.
Sama summa voidaan määritellä myös yksinkertaisemmin ∑-notaatiolla (sigma)
Yleistetty ∑-notaatio on muotoa
Summa (2.2) tarkoittaa kaikkien sellaisten lukujen summaa, joiden
indeksimuuttujilla on ominaisuus P(k). Esimerkiksi summa (2.1) voitaisiin määri-
tellä muodossa
Yleisellä ∑-notaatiolla voidaan indeksiä muuttaa helposti:
Sama summa voidaan myös kirjoittaa muotoon
6
Seuraavaksi tarkastellaan summien ja rekursioiden yhteyttä. Summan suljettua
muotoa selvitettäessä on hyvä ajatella sitä rekursiona. Se on mahdollista, sillä
summa
on ekvivalentti seuraavan rekursioyhtälön kanssa:
Esimerkiksi summan
laskeminen käy helposti, sillä summa voidaan kirjoittaa muotoon
+ n, kun n ≥ 1.
Arvo saadaan laskettua seuraavasti:
Tästä saadaan:
7
josta saadaan lopullinen tulos:
Summien ratkaisemiseen rekursioyhtälöiden avulla palataan luvussa 4. Seuraavaksi
esitellään summalausekkeiden käsittelyn perussäännöt. Olkoon K mikä tahansa
äärellinen kokonaislukujoukko. Summien käsittelyn peruslait ovat seuraavat:
Distributiivilaki:
Assosiatiivilaki:
Kommutatiivilaki:
Distributiivilain perusteella voidaan indeksistä riippumaton vakio siirtää joko
summaan sisälle tai summasta ulos. Assosiatiivilaki kertoo, miten kaksi summaa
voidaan yhdistää toisiksi tai miten ne voidaan erottaa toisistaan. Kommutatiivilain
perusteella summattavat termit voidaan järjestää mielivaltaiseen järjestykseen. Tässä
p(k) on kokonaislukujen permutaatio.
8
Esimerkki 3: Jos K = {-1, 0, 1} ja p(k) = -k, niin edellä olevien lakien perusteella.
 (distributiivilaki)
 (
= ( ) (assosiatiivilaki)
 = (kommutatiivilaki)
2.2 Osamurtokehitelmä
Seuraavaksi esitetään jatkossa tarvittava apukeino, jonka avulla murtofunktioita
voidaan hajottaa osiin. Osamurtokehitelmällä on tarkoitus pienentää joko osoittajan
tai nimittäjän astetta murtofunktioissa. Tuloksena saadaan summa murtofunktioita,
josta alkuperäinen murtofunktio koostuu. [6] Tarkoitus on siis, että murtofunktio
missä on alempaa astetta kuin voidaan kirjoittaa muodossa:
missä ovat polynomeja, jotka ovat polynomin tekijöitä ja täten alempaa
astetta kuin . Hajottamista voidaan jatkaa niin pitkälle kuin mahdollista.
Esimerkki 4: Jaetaan osamurtoihin funktio
Nimittäjä saadaan hajotettua muotoon
9
Nyt halutaan löytää sellaiset vakiot A ja B, että
Laventamalla samannimisiksi saadaan
josta saadaan
Tästä muodosta nähdään, että murtofunktiot eroavat ainoastaan osoittajien
perusteella. Täten voidaan muodostaa yhtälöpari:
jonka ratkaisuna saadaan arvot A = ja B = . Täten tulos voidaan kirjoittaa
lopulliseen muotoon:
Esimerkki 5: Jaetaan osamurtoihin monimutkaisempi murtofunktio
Se on kirjoitettava muodossa:
10
Kun lavennetaan kaikki yhtälön oikean puolen murtofunktiot termillä
saadaan osoittajille yhteys:
Yhtälöllä on ratkaisu arvoilla A = B = D = F = 0 ja C = E = G =1. Täten ratkaisu
on:
11
3 Generoivat funktiot
3.1 Määritelmä
Tarkastellaan esimerkkimurtofunktiota G(z) = . On ilmeistä, että tämä funktio
on jatkuva, kun muuttuja z ≠ Funktio G(z) generoi potenssisarjan, jonka
kantaluku on 2. Tämä voidaan nähdä suorittamalla jakolasku jakokulmassa.
1 + 2z + 4 + 8 + 16 + …
1
-1 + 2z
2z
-2z + 4
4
- 4 + 8
8 …
Tulokseksi muodostuu sarja … Näin muodostunut
sarja voidaan esittää muodossa
Tämä muoto on generoivan funktion G(z) yleinen muoto. Alussa esitettyä muotoa
G(z) = kutsutaan suljetuksi muodoksi esitettynä muuttujan z avulla. Yleisen
muodon kerroin kertoo sen, että G(z) generoi jonon 〈1, 2, 4, 8, 16, 32…〉.
Seuraavaksi esitetään yleisiä notaatioita.
Generoivalla funktiolla on muoto
Sanotaan, että funktio G(z) generoi lukujonon 〈 , …〉, joka voidaan
ilmaista notaatiolla 〈 〉. Summa käy läpi kaikki indeksit n ≥ 0 mutta myös
12
negatiiviset indeksit voidaan määritellä siten, että Termi
[ ]G(z) tarkoittaa generoivan funktion G(z) kerrointa . Generoivien funktioiden
yhteydessä ei tarkastella sarjojen suppenemista, sillä saadut tulokset voidaan aina
tarkistaa induktiolla.
3.2 Perusoperaatiot
Seuraavaksi tarkastellaan jonoja 〈 〉 ja 〈 〉 sekä niiden generoivia funktioita A(z)
ja B(z), eli
Jonoista 〈 〉 ja 〈 〉 saatujen jonojen generoivat funktiot saadaan seuraavien
perussääntöjen mukaan.
Summaus :
Siirto oikealle
Siirto vasemmalle :
13
+
Indeksillä n kertominen :
Edellistä oikealle siirtämällä saadaan jono
Indeksillä n jakaminen :
Konvoluutio
14
Osasumma :
Koska niin
Erotus :
3.3 Lukujonot ja niiden generoivat funktiot
Seuraavaksi esitetään muutamia tunnettujen lukujonojen generoivia funktioita, joita
tarvitaan usein rekursioyhtälöiden ratkaisemisessa. Taulukossa käytetään seuraavia
lyhenteitä.
 Funktio määritellään seuraavasti:
Esimerkiksi , jos ja vain jos
 Funktio määritellään siten, että
Esimerkiksi ja
15
 Luvun kertoma on tulo
 Binomikerroin määritellään seuraavasti.
16
Taulukko 2: Lukujonoja ja niiden generoivia funktioita.[2]
Jono Generoiva funktio Suljettu muoto
17
4 Rekursioyhtälöiden ratkaiseminen generoivilla funktioilla
4.1 Ratkaisumenetelmä
Seuraavaksi tarkastellaan generoivien funktioiden tärkeintä sovelluskohdetta eli
rekursioyhtälöiden ratkaisemista. Tehtävän alussa muodostetaan jono 〈 〉, joka
toteuttaa annetun rekursion. Tehtävän tarkoituksena on selvittää jonon 〈 〉 suljettu
muoto ilmaistuna muuttujan n avulla. Rekursioyhtälöiden ratkaisemisessa on neljä
vaihetta.
1 Kirjoitetaan yhtälö, joka ilmaisee jonon termin muilla jonon termeillä.
Tämän yhtälön on oltava voimassa kaikille luvuille n huomioiden sen, että
2 Kerrotaan molemmat puolet termillä , minkä jälkeen yhtälö summataan
yli luvun n ≥ 0. Tämän jälkeen yhtälön vasemmalla puolella on summa
, joka on generoiva funktio G(z). Yhtälön oikeaa puolta on
muokattava, jotta se voitaisiin ilmaista generoivan funktion G(z) avulla.
3 Ratkaistaan jäljellä olevasta yhtälöstä generoivan funktion G(z) suljettu
muoto muuttujan z avulla.
4 Laajennetaan G(z) potenssisarjaksi ja selvitään termin kerroin, joka on
termin suljettu muoto.
Tämä toimintaperiaate on aina käytännöllinen, sillä G(z) esittää kaikkia jonon
〈 〉 termejä siten, että tarvittavat manipulaatiot on mahdollista suorittaa.
Esimerkki 6: Ratkaistaan Hanoin tornien ongelma generoivilla funktioilla.
Ratkaistavana on seuraavanlainen rekursiosysteemi:
Kerrotaan alempi yhtälö puolittain termillä ja summataan molemmat puolet yli
luvun n. Summattaessa on huomioitava luvun n alaraja, joka tässä tapauksessa on
n ≥ 1. Tässä tapauksessa lauseketta ei siis voida summata yli kaikkien lukujen
18
koska tehtävän määrittely ei sitä salli. Tämän vuoksi kaavaa pyritään jatkossa
sieventämään siten, että summaus voidaan suorittaa kaikille luvuille Näin
yhtälö saa muodon
Yhtälön oikean puolen osat olisi pystyttävä ilmaisemaan vasemman puolen avulla.
Summissa, joissa on mukana termi , indeksin n alaraja voidaan asettaa nollaksi,
koska tässä tapauksessa Lisäksi summa
Yhtälö voidaan kirjoittaa muotoon
Summan suljettu muoto on taulukon 2 mukaan . voidaan
kirjoittaa muodossa
Tällöin yhtälöllä on muoto
joka voidaan ilmaista G(z):n avulla seuraavalla tavalla:
Kun termejä järjestellään ja jaetaan tekijöihin, yhtälö voidaan kirjoittaa
ekvivalenttiin muotoon
19
Nyt kyseinen suljettu muoto täytyy kirjoittaa sellaiseen muotoon, että se voitaisiin
taulukon 2 kaavojen avulla laajentaa potenssisarjaksi. Se onnistuu jakamalla yhtälö
osamurtoihin. Seuraavaksi yritetään löytää sellaiset kertoimet A ja B, että G(z)
voitaisiin kirjoittaa muodossa:
Laventamalla oikeanpuolen termit samannimisiksi saadaan
Yllä olevasta muodosta nähdään, että osoittajien yhtäläisyyttä voidaan kuvata
seuraavalla yhtälöparilla:
Yhtälöparista saadaan ratkaisuksi
Nyt G(z) voidaan kirjoittaa muodossa
Taulukon 2 avulla oikea puoli voidaan laajentaa potenssisarjaksi, jolloin se saa
muodon
20
Se voidaan kirjoittaa myös yhtenä summana seuraavalla tavalla:
jossa termin kerroin on alkuperäisen rekursiosysteemin ratkaisu eli
vastaus on
4.2 Perussäännöt
Seuraavaksi esitetään sääntöjä, joita käyttämällä voidaan helposti ratkaista kerroin
Sääntöjen todistuksista löytyy tietoa muun muassa Ronald
Grahamin, Donald Knuthin ja Oren Patashnikin kirjoittamasta teoksesta Concrete
Mathematics.
Sääntö 1
Jos generoiva funktio G(z) on muotoa
missä kaikilla ja on
korkeintaan astetta , niin
+…+ ,
missä
21
Sääntö 2
Jos generoiva funktio on
missä on muotoa
ja niin tällöin käänteisellä polynomilla
on seuraava tärkeä ominaisuus:
Sääntö 3
Jos generoiva funktio on
missä kaikilla ja
on korkeintaan astetta , niin
missä kukin on astetta oleva polynomi, jonka ensimmäisen termin
kerroin on
22
Esimerkki 7: Palataan johdannossa esiteltyihin Fibonacin lukuihin ja formuloidaan
niiden suljettu muoto generoivien funktioiden avulla. Fibonaccin luvut ovat siis
muotoa
= 0;
= 1;
= + .
Fibonaccin luvut voidaan myös ilmaista muodossa
= +
missä termi saa arvon 1 ainoastaan silloin, kun Muuten se saa arvon
0. Nyt voidaan kertoa yhtälö puolittain termillä ja summata yhtälö kaikille n ≥ 0.
Näin yhtälö muuttuu muotoon
Summa on taulukon 2 mukaan z. Tämän ominaisuuden huomioiden
yhtälöä pystytään muokkaamaan muotoon
Termejä järjestelemällä voidaan johtaa generoivalle funktiolle suljettu muoto
23
Nyt saadaan säännön 2 perusteella haluttuun muotoon
ratkaisemalla käänteisen polynomin
nollakohdat toisen asteen yhtälön ratkaisukaavalla
Arvoilla saadaan
Luku on niin sanottu kultainen leikkaus, joka on
myös nimetty Feidiaan keskipisteeksi kreikkalaisen kuvanveistäjä Feidiaan*
mukaan.
Kultaista leikkausta pidetään ihmissilmälle optimaalisimpana jakosuhteena, minkä
vuoksi sitä on käytetty muun muassa rakennusten arkkitehtuurissa, taidemaa-
lauksissa ja musiikissa. [9] Luvulla tarkoitetaan arvoa .
Täten n nollakohdat ovat
ja
joka on ekvivalentti sen kanssa, että
*
Feidias (Φειδίας, n. 490–430 eaa.) oli antiikin Kreikan klassisen kauden kuuluisin kuvanveistäjä ja arvostetuin mestari. Kuuluisin
Feidiaan veistoksista oli 12 metriä korkea Olympian istuvaa Zeusta esittävä patsas. Veistos on yksi maailman seitsemästä ihmeestä.
[8]
24
Nyt ja Säännön 1 mukaan
Nyt
Samoin voidaan laskea
Näin ollen
4.3 Summien ratkaiseminen generoivilla funktioilla
Kuten luvussa 2 esitettiin, summan suljetun muodon selvittämiseksi summa voidaan
ajatella rekursiona. Tällöin ongelma palaa rekursioyhtälöiden ratkaisemiseen, jossa
voidaan käyttää apuna generoivia funktioita. Tässä alaluvussa esitetään esimerkki
siitä, miten summia voi ratkaista generoivilla funktioilla.
Esimerkki 8: Ratkaistaan summa
generoivilla funktioilla. Kyseinen summa vastaa rekursiota:
25
Kerrotaan alimmainen summa termillä ja summataan yli kaikkien lukujen
. Näin saadaan yhtälö
Yhtälön summien indeksin alarajaksi tulee määritellä . Tämä onnistuu, sillä
Näin voidaan lausua generoiva funktio muodossa
eli
Nyt on löydettävä sellaiset vakiot A ja B siten, että
Seuraavaksi lavennetaan oikea puoli samannimiseksi, joten saadaan
Ratkaisemalla osoittajien yhtäläisyyttä kuvaava yhtälöpari
26
saadaan vakioiden arvoiksi Nyt voidaan kirjoittaa uuteen
muotoon
Käyttäen apuna taulukkoa 2, voidaan laajentaa potessisarjaksi
Nyt saadusta sarjasta voidaan lukea summan suljettu muoto, joka on
Summan suljettu muoto on siis
27
5 Yhteenveto
Tässä tutkielmassa on esitetty johdatus siihen, miten lukujonoja generoivia
funktioita voidaan hyödyntää rekursioyhtälöiden ja summien ratkaisemisessa. Kuten
johdantoluvussa todettiin, joissain tapauksissa ei tarvita generoivia funktioita
rekursioyhtälön ratkaisemiseen, mutta kompleksisemmissa rekursioyhtälöissä
generoivat funktiot voivat olla ainoa tapa ratkaisun formulointiin.
Generoivat funktiot ovat hyödyllinen työkalu, jonka ymmärtäminen vaatii tiettyjen
matemaattisten käsitteiden, kuten summien ymmärtämistä. Generoivien funktioiden
suljettujen muotojen formuloinnissa joudutaan usein hajottamaan murtofunktio
pienempiin osiin, minkä vuoksi tämän tutkielman yksi alaluku käsittelee
osamurtokehitelmiä.
Generoivat funktiot ovat matemaattinen tutkimuskohde, jonka avulla ratkaistiin
tässä työssä Hanoin tornien ja Fibonaccin lukujen rekursiot. Samaa tekniikkaa
voidaan soveltaa muissakin rekursioyhtälöissä, joita esiintyy algoritmien
analysoinnissa. Generoivista funktioista voi lukea lisää esimerkiksi kirjoista [10] ja
[11].
28
Viitteet
[1] Donald E. Knuth. The Art of Computer Programming 3 Sorting and Searching, 1997.
Kolmas painos.
[2] Graham Greene, Donald E. Knuth, Oren Patashnik Concrete Mathematics, 1994.
Toinen painos.
[3] Jouni Järvinen. Algoritmien Matematiikka 1999. Turun yliopiston informaatio-
teknologian laitoksen luentomateriaali.
[4] Hanoin tornit. http://fi.wikipedia.org/wiki/Hanoin_torni Viitattu
1.10.2010.
[5] Fibonacci number.
http://en.wikipedia.org/wiki/Fibonacci_number Viitattu 1.10.2010.
[6] Partial fraction.
http://en.wikipedia.org/wiki/Partial_fraction#Partial_fract
ion_decomposition Viitattu 1.10.2010.
[7] Spiegel, Liu. Mathematical Handbook of Formulas and Tables, 1999. Toinen painos.
[8] Phidias. http://en.wikipedia.org/wiki/Phidias Viitattu 1.10.2010.
[9] Golden ratio. http://en.wikipedia.org/wiki/Golden_ratio Viitattu
1.10.2010.
[10] Daniel H. Greene, Donald E. Knuth. Mathematics for the Analysis of Algorithms,
1990. Toinen painos.
[11]Herbert S. Wilf. Generating Functionology, 1992. Toinen painos.

More Related Content

Featured

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
marketingartwork
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
Skeleton Technologies
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
SpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Lily Ray
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
Rajiv Jayarajah, MAppComm, ACC
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
Christy Abraham Joy
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
Vit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
MindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
GetSmarter
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
Alireza Esmikhani
 

Featured (20)

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 

Generoivat Funktiot Rekursioyhtälöiden Ratkaisemisessa

  • 1. Generoivat funktiot rekursioyhtälöiden ratkaisemisessa LuK-tutkielma TURUN YLIOPISTO Informaatioteknologian laitos Tietojenkäsittelytiede Tuomas Poukkula Joulukuu 2010
  • 2. TURUN YLIOPISTO Informaatioteknologian laitos POUKKULA, TUOMAS: Generoivat funktiot rekursioyhtälöiden ratkaisemisessa LuK-tutkielma, 28 s. Tietojenkäsittelytiede Joulukuu 2010 Yksi tapa kirjoittaa algoritmeja on laittaa ne kutsumaan itseään. Tätä rekursioksi kutsuttua algoritmien toteutusmallia käytetään muun muassa kertoman laskemisessa sekä lajittelualgoritmeissa. Rekursiivisille algoritmeille voidaan kirjoittaa niiden suori- tusaikoja kuvaavia rekursioyhtälöitä. Muun muassa edellä mainittujen yksinkertaisten algoritmien tapauksessa rekursioyhtälöt pystytään ratkaisemaan helpoilla matemaat- tisilla menetelmillä. On kuitenkin olemassa hyvin paljon rekursioyhtälöitä, joiden suljet- tujen muotojen johtaminen on hyvin vaikeaa. Tässä tutkielmassa näytetään, miten lukujonoja generoivia funktioita voidaan hyödyntää rekursioyhtälöiden ratkaisemisessa. Opinnäytetyön alussa esitetään tarvittavat mate- maattiset käsitteen kuten osamurtokehitelmät ja summat. Generoivien funktioiden esit- telyn jälkeen tarkastellaan tunnettuja esimerkkirekursioita ja ratkaistaan ne generoivilla funktioilla. Lopuksi näytetään, miten summien suljettuja muotoja voidaan johtaa gene- roivien funktioiden avulla. Avainsanat: generoiva funktio, rekursio, rekursioyhtälö
  • 3. Sisällysluettelo 1 Johdanto .................................................................................................................. 1 2 Matemaattiset käsitteet............................................................................................ 5 2.1 Summat ja rekursiot ............................................................................................. 5 2.2 Osamurtokehitelmä.............................................................................................. 8 3 Generoivat funktiot ...............................................................................................11 3.1 Määritelmä .........................................................................................................11 3.2 Perusoperaatiot...................................................................................................12 3.3 Lukujonot ja niiden generoivat funktiot ............................................................14 4 Rekursioyhtälöiden ratkaiseminen generoivilla funktioilla..................................17 4.1 Ratkaisumenetelmä............................................................................................17 4.2 Perussäännöt.......................................................................................................20 4.3 Summien ratkaiseminen generoivilla funktioilla...............................................24 5 Yhteenveto ............................................................................................................27
  • 4. 1 1 Johdanto Rekursiivisten algoritmien analysointiin on olemassa monimutkaisia matemaattisia menetelmiä, joilla voidaan kuitenkin johtaa algoritmien suoritusaikoja helposti. Rekursiivisissa algoritmeissa ohjelmarutiini kutsuu itseään ja käyttää omaa infor- maatiotaan yhä uudelleen, kunnes se saa aikaan tuloksen. Esimerkiksi jotkin lajittelualgoritmit[1] toimivat näin. Rekursiivisten algoritmien suoritusaikojen selvittämiseksi voidaan johtaa niiden toimintaa kuvaavia rekursioyhtälöitä, joiden ratkaiseminen ei aina onnistu alkeellisella matematiikalla. Seuraavaksi esitetään tun- nettuja esimerkkejä sekä helpoista että vaikeista rekursioyhtälöistä. Esimerkki 1 – Hanoin Tornit: Hanoin tornit on yksinkertainen matemaattinen peli, jonka keksi ranskalainen matemaatikko Èdouard Lucas vuonna 1883. Se koostuu kolmesta tangosta sekä levyistä, joita voi siirtää tangosta toiseen. Alkutilanteessa levyt on pinottu päällekkäin yhteen tangoista kokojärjestyksessä suurimman levyn ollessa alimmaisena. Tarkoitus on siirtää pino toiseen tankoon kolmatta apuna käyttäen samaan järjestykseen siten, että vain yhtä levyä saa siirtää kerrallaan ja suurempi levy ei saa olla pienemmän päällä. Algoritmin esittämistä varten sovitaan, että kiekkoja on n kappaletta ja pienin tarvittava siirtojen lukumäärä on . Lähtötilanne on esitetty kuvassa 1. Kuva 1: Hanoin tornit[2]
  • 5. 2 Peli on ratkaistavissa seuraavalla algoritmilla: 1. Siirretään n-1 pienintä kiekkoa tangosta A keskimmäiseen aputankoon. On siis ratkaistava n-1-kiekkoinen Hanoin tornien ongelma, mikä vaatii siirtoa. 2. Siirretään suurin kiekko tangosta A tankoon B, mikä vaatii yhden siirron. 3. Siirretään n-1 kiekkoa aputangosta tankoon B, mikä vaatii siirtoa. On todistettu, että tämä algoritmi tuottaa pienimmän tarvittavien siirtojen lukumäärän[2]. Ratkaisuun vaadittava siirtojen lukumäärä voidaan esittää seuraa- valla rekursiolla: = 0; = + 1, kun n ≥ 1. Yksinkertaisin tapa ratkaista rekursioyhtälö on arvata tulos ja todistaa se matemaat- tisella induktiolla[2]. Hanoin tornien tapauksessa saadaan pienillä kokonaisluvuilla seuraavat arvot: = 0 = 1 = 3 = 7 = 15 = 31 = 63. Pienillä arvoilla näyttää siltä, että = – 1, kun n ≥ 0. Induktiolla voidaan osoittaa, että siirtojen määrä n:llä kiekolla on todella = – 1 [3]. Tämä rekursioyhtälö voitaisiin ratkaista myös iteroimalla termiin asti ( 0 < k < n ). Kun on tehty k iteraatiota, voidaan havaita johdonmukaisuus:
  • 6. 3 Kun tiedetään, että rekursion pohja on = 0, voidaan ratkaista luku k kiekkojen lukumäärän n avulla ratkaisemalla yhtälö n - k = 0. Kun lisäksi tiedetään, että rekursioyhtälön oikean puolen summalauseke on suppeneva geometrinen sarja[7], jolla on tässä tapauksessa suljettu muoto , saadaan yhtälön lopullinen ratkaisu – Peli perustuu vanhaan legendaan hindutemppelistä, jonka papeilla tai munkeilla on ratkaistavanaan 64 kultaisesta levystä koostuva Hanoin torni. Kun he saavat työnsä päätökseen, koittaa maailmanloppu. 64-levyisen Hanoin tornin ratkaiseminen vaatii vähintään 18 446 744 073 709 551 615 siirtoa. Jos legenda olisi totta, jos papit kykenisivät siirtämään yhden levyn joka sekunti ja jos he osaisivat ratkaista pelin vähimmäismäärällä siirtoja, maailmanloppu koittaisi 264 − 1 sekunnin eli noin 585 miljardin vuoden kuluttua pelin aloittamisesta. Maailmankaikkeuden arvioidaan nykyään olevan noin 13,7 miljardin vuoden ikäinen. Ei tiedetä, keksikö Lucas myös tarinan vai kehittikö hän pelin legendan pohjalta.[4] Esimerkki 2 – Fibonaccin luvut: 1200-luvulla italialainen matemaatikko Leonardo Fibonacci tutki seuraavanlaista lukujonoa: 0, 1, 1, 2, 3, 5, 8, 13, … Hänen mukaansa on nimetty niin sanotut Fibonaccin luvut, jotka määritellään rekursiivisesti seuraavasti: = 0; = 1; = + . Fibonaccin lukuja on käytetty hyödyksi tietojenkäsittelyssä tehokkaiden hakualgoritmien ja tietorakenteiden toteutuksissa[1]. Niitä esiintyy myös luonnossa muun muassa jänisten lisääntymismallissa, puiden oksien haarautumisissa, kotiloiden spiraaleissa ja aaltojen kaarissa.[5]
  • 7. 4 Taulukko 1: Fibonaccin lukuja eri n:n arvoilla. n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Fn 0 1 1 2 3 5 8 13 21 34 55 89 144 233 Kyseisen rekursion ratkaiseminen ei onnistu yhtä helposti kuin Hanoin tornien tapauksessa, vaan tarvitaan kehittyneitä menetelmiä. Tässä tutkielmassa kerrotaan siitä, miten lukujonoja generoivia funktioita voidaan hyödyntää monimutkaisten rekursioyhtälöiden ratkaisemisessa. Fibonaccin lukuihin palataan luvussa 4, jossa esitetään rekursioyhtälöiden ratkaisumalli sekä näytetään, miten summien suljettuja muotoja voidaan ratkaista samalla tavalla. Luvussa 3 kerrotaan generoivista funktioista. Jotta generoivien funktioiden käsitteitä voisi ymmärtää, on sitä ennen määriteltävä tarvittavat matemaattiset käsitteet, kuten summat ja osamurtokehitelmät luvussa 2. Viimeisessä luvussa esitetään yhteenveto.
  • 8. 5 2 Matemaattiset käsitteet 2.1 Summat ja rekursiot Tässä luvussa tarkastellaan summia, niiden merkintöjä, niihin liittyviä laskulakeja sekä niiden yhteyttä rekursioihin. Summalla on yleinen muoto + + + + + … + , jossa jokainen on määritelty. Jokaista yhteenlaskettavaa kutsutaan termiksi. Sama summa voidaan määritellä myös yksinkertaisemmin ∑-notaatiolla (sigma) Yleistetty ∑-notaatio on muotoa Summa (2.2) tarkoittaa kaikkien sellaisten lukujen summaa, joiden indeksimuuttujilla on ominaisuus P(k). Esimerkiksi summa (2.1) voitaisiin määri- tellä muodossa Yleisellä ∑-notaatiolla voidaan indeksiä muuttaa helposti: Sama summa voidaan myös kirjoittaa muotoon
  • 9. 6 Seuraavaksi tarkastellaan summien ja rekursioiden yhteyttä. Summan suljettua muotoa selvitettäessä on hyvä ajatella sitä rekursiona. Se on mahdollista, sillä summa on ekvivalentti seuraavan rekursioyhtälön kanssa: Esimerkiksi summan laskeminen käy helposti, sillä summa voidaan kirjoittaa muotoon + n, kun n ≥ 1. Arvo saadaan laskettua seuraavasti: Tästä saadaan:
  • 10. 7 josta saadaan lopullinen tulos: Summien ratkaisemiseen rekursioyhtälöiden avulla palataan luvussa 4. Seuraavaksi esitellään summalausekkeiden käsittelyn perussäännöt. Olkoon K mikä tahansa äärellinen kokonaislukujoukko. Summien käsittelyn peruslait ovat seuraavat: Distributiivilaki: Assosiatiivilaki: Kommutatiivilaki: Distributiivilain perusteella voidaan indeksistä riippumaton vakio siirtää joko summaan sisälle tai summasta ulos. Assosiatiivilaki kertoo, miten kaksi summaa voidaan yhdistää toisiksi tai miten ne voidaan erottaa toisistaan. Kommutatiivilain perusteella summattavat termit voidaan järjestää mielivaltaiseen järjestykseen. Tässä p(k) on kokonaislukujen permutaatio.
  • 11. 8 Esimerkki 3: Jos K = {-1, 0, 1} ja p(k) = -k, niin edellä olevien lakien perusteella.  (distributiivilaki)  ( = ( ) (assosiatiivilaki)  = (kommutatiivilaki) 2.2 Osamurtokehitelmä Seuraavaksi esitetään jatkossa tarvittava apukeino, jonka avulla murtofunktioita voidaan hajottaa osiin. Osamurtokehitelmällä on tarkoitus pienentää joko osoittajan tai nimittäjän astetta murtofunktioissa. Tuloksena saadaan summa murtofunktioita, josta alkuperäinen murtofunktio koostuu. [6] Tarkoitus on siis, että murtofunktio missä on alempaa astetta kuin voidaan kirjoittaa muodossa: missä ovat polynomeja, jotka ovat polynomin tekijöitä ja täten alempaa astetta kuin . Hajottamista voidaan jatkaa niin pitkälle kuin mahdollista. Esimerkki 4: Jaetaan osamurtoihin funktio Nimittäjä saadaan hajotettua muotoon
  • 12. 9 Nyt halutaan löytää sellaiset vakiot A ja B, että Laventamalla samannimisiksi saadaan josta saadaan Tästä muodosta nähdään, että murtofunktiot eroavat ainoastaan osoittajien perusteella. Täten voidaan muodostaa yhtälöpari: jonka ratkaisuna saadaan arvot A = ja B = . Täten tulos voidaan kirjoittaa lopulliseen muotoon: Esimerkki 5: Jaetaan osamurtoihin monimutkaisempi murtofunktio Se on kirjoitettava muodossa:
  • 13. 10 Kun lavennetaan kaikki yhtälön oikean puolen murtofunktiot termillä saadaan osoittajille yhteys: Yhtälöllä on ratkaisu arvoilla A = B = D = F = 0 ja C = E = G =1. Täten ratkaisu on:
  • 14. 11 3 Generoivat funktiot 3.1 Määritelmä Tarkastellaan esimerkkimurtofunktiota G(z) = . On ilmeistä, että tämä funktio on jatkuva, kun muuttuja z ≠ Funktio G(z) generoi potenssisarjan, jonka kantaluku on 2. Tämä voidaan nähdä suorittamalla jakolasku jakokulmassa. 1 + 2z + 4 + 8 + 16 + … 1 -1 + 2z 2z -2z + 4 4 - 4 + 8 8 … Tulokseksi muodostuu sarja … Näin muodostunut sarja voidaan esittää muodossa Tämä muoto on generoivan funktion G(z) yleinen muoto. Alussa esitettyä muotoa G(z) = kutsutaan suljetuksi muodoksi esitettynä muuttujan z avulla. Yleisen muodon kerroin kertoo sen, että G(z) generoi jonon 〈1, 2, 4, 8, 16, 32…〉. Seuraavaksi esitetään yleisiä notaatioita. Generoivalla funktiolla on muoto Sanotaan, että funktio G(z) generoi lukujonon 〈 , …〉, joka voidaan ilmaista notaatiolla 〈 〉. Summa käy läpi kaikki indeksit n ≥ 0 mutta myös
  • 15. 12 negatiiviset indeksit voidaan määritellä siten, että Termi [ ]G(z) tarkoittaa generoivan funktion G(z) kerrointa . Generoivien funktioiden yhteydessä ei tarkastella sarjojen suppenemista, sillä saadut tulokset voidaan aina tarkistaa induktiolla. 3.2 Perusoperaatiot Seuraavaksi tarkastellaan jonoja 〈 〉 ja 〈 〉 sekä niiden generoivia funktioita A(z) ja B(z), eli Jonoista 〈 〉 ja 〈 〉 saatujen jonojen generoivat funktiot saadaan seuraavien perussääntöjen mukaan. Summaus : Siirto oikealle Siirto vasemmalle :
  • 16. 13 + Indeksillä n kertominen : Edellistä oikealle siirtämällä saadaan jono Indeksillä n jakaminen : Konvoluutio
  • 17. 14 Osasumma : Koska niin Erotus : 3.3 Lukujonot ja niiden generoivat funktiot Seuraavaksi esitetään muutamia tunnettujen lukujonojen generoivia funktioita, joita tarvitaan usein rekursioyhtälöiden ratkaisemisessa. Taulukossa käytetään seuraavia lyhenteitä.  Funktio määritellään seuraavasti: Esimerkiksi , jos ja vain jos  Funktio määritellään siten, että Esimerkiksi ja
  • 18. 15  Luvun kertoma on tulo  Binomikerroin määritellään seuraavasti.
  • 19. 16 Taulukko 2: Lukujonoja ja niiden generoivia funktioita.[2] Jono Generoiva funktio Suljettu muoto
  • 20. 17 4 Rekursioyhtälöiden ratkaiseminen generoivilla funktioilla 4.1 Ratkaisumenetelmä Seuraavaksi tarkastellaan generoivien funktioiden tärkeintä sovelluskohdetta eli rekursioyhtälöiden ratkaisemista. Tehtävän alussa muodostetaan jono 〈 〉, joka toteuttaa annetun rekursion. Tehtävän tarkoituksena on selvittää jonon 〈 〉 suljettu muoto ilmaistuna muuttujan n avulla. Rekursioyhtälöiden ratkaisemisessa on neljä vaihetta. 1 Kirjoitetaan yhtälö, joka ilmaisee jonon termin muilla jonon termeillä. Tämän yhtälön on oltava voimassa kaikille luvuille n huomioiden sen, että 2 Kerrotaan molemmat puolet termillä , minkä jälkeen yhtälö summataan yli luvun n ≥ 0. Tämän jälkeen yhtälön vasemmalla puolella on summa , joka on generoiva funktio G(z). Yhtälön oikeaa puolta on muokattava, jotta se voitaisiin ilmaista generoivan funktion G(z) avulla. 3 Ratkaistaan jäljellä olevasta yhtälöstä generoivan funktion G(z) suljettu muoto muuttujan z avulla. 4 Laajennetaan G(z) potenssisarjaksi ja selvitään termin kerroin, joka on termin suljettu muoto. Tämä toimintaperiaate on aina käytännöllinen, sillä G(z) esittää kaikkia jonon 〈 〉 termejä siten, että tarvittavat manipulaatiot on mahdollista suorittaa. Esimerkki 6: Ratkaistaan Hanoin tornien ongelma generoivilla funktioilla. Ratkaistavana on seuraavanlainen rekursiosysteemi: Kerrotaan alempi yhtälö puolittain termillä ja summataan molemmat puolet yli luvun n. Summattaessa on huomioitava luvun n alaraja, joka tässä tapauksessa on n ≥ 1. Tässä tapauksessa lauseketta ei siis voida summata yli kaikkien lukujen
  • 21. 18 koska tehtävän määrittely ei sitä salli. Tämän vuoksi kaavaa pyritään jatkossa sieventämään siten, että summaus voidaan suorittaa kaikille luvuille Näin yhtälö saa muodon Yhtälön oikean puolen osat olisi pystyttävä ilmaisemaan vasemman puolen avulla. Summissa, joissa on mukana termi , indeksin n alaraja voidaan asettaa nollaksi, koska tässä tapauksessa Lisäksi summa Yhtälö voidaan kirjoittaa muotoon Summan suljettu muoto on taulukon 2 mukaan . voidaan kirjoittaa muodossa Tällöin yhtälöllä on muoto joka voidaan ilmaista G(z):n avulla seuraavalla tavalla: Kun termejä järjestellään ja jaetaan tekijöihin, yhtälö voidaan kirjoittaa ekvivalenttiin muotoon
  • 22. 19 Nyt kyseinen suljettu muoto täytyy kirjoittaa sellaiseen muotoon, että se voitaisiin taulukon 2 kaavojen avulla laajentaa potenssisarjaksi. Se onnistuu jakamalla yhtälö osamurtoihin. Seuraavaksi yritetään löytää sellaiset kertoimet A ja B, että G(z) voitaisiin kirjoittaa muodossa: Laventamalla oikeanpuolen termit samannimisiksi saadaan Yllä olevasta muodosta nähdään, että osoittajien yhtäläisyyttä voidaan kuvata seuraavalla yhtälöparilla: Yhtälöparista saadaan ratkaisuksi Nyt G(z) voidaan kirjoittaa muodossa Taulukon 2 avulla oikea puoli voidaan laajentaa potenssisarjaksi, jolloin se saa muodon
  • 23. 20 Se voidaan kirjoittaa myös yhtenä summana seuraavalla tavalla: jossa termin kerroin on alkuperäisen rekursiosysteemin ratkaisu eli vastaus on 4.2 Perussäännöt Seuraavaksi esitetään sääntöjä, joita käyttämällä voidaan helposti ratkaista kerroin Sääntöjen todistuksista löytyy tietoa muun muassa Ronald Grahamin, Donald Knuthin ja Oren Patashnikin kirjoittamasta teoksesta Concrete Mathematics. Sääntö 1 Jos generoiva funktio G(z) on muotoa missä kaikilla ja on korkeintaan astetta , niin +…+ , missä
  • 24. 21 Sääntö 2 Jos generoiva funktio on missä on muotoa ja niin tällöin käänteisellä polynomilla on seuraava tärkeä ominaisuus: Sääntö 3 Jos generoiva funktio on missä kaikilla ja on korkeintaan astetta , niin missä kukin on astetta oleva polynomi, jonka ensimmäisen termin kerroin on
  • 25. 22 Esimerkki 7: Palataan johdannossa esiteltyihin Fibonacin lukuihin ja formuloidaan niiden suljettu muoto generoivien funktioiden avulla. Fibonaccin luvut ovat siis muotoa = 0; = 1; = + . Fibonaccin luvut voidaan myös ilmaista muodossa = + missä termi saa arvon 1 ainoastaan silloin, kun Muuten se saa arvon 0. Nyt voidaan kertoa yhtälö puolittain termillä ja summata yhtälö kaikille n ≥ 0. Näin yhtälö muuttuu muotoon Summa on taulukon 2 mukaan z. Tämän ominaisuuden huomioiden yhtälöä pystytään muokkaamaan muotoon Termejä järjestelemällä voidaan johtaa generoivalle funktiolle suljettu muoto
  • 26. 23 Nyt saadaan säännön 2 perusteella haluttuun muotoon ratkaisemalla käänteisen polynomin nollakohdat toisen asteen yhtälön ratkaisukaavalla Arvoilla saadaan Luku on niin sanottu kultainen leikkaus, joka on myös nimetty Feidiaan keskipisteeksi kreikkalaisen kuvanveistäjä Feidiaan* mukaan. Kultaista leikkausta pidetään ihmissilmälle optimaalisimpana jakosuhteena, minkä vuoksi sitä on käytetty muun muassa rakennusten arkkitehtuurissa, taidemaa- lauksissa ja musiikissa. [9] Luvulla tarkoitetaan arvoa . Täten n nollakohdat ovat ja joka on ekvivalentti sen kanssa, että * Feidias (Φειδίας, n. 490–430 eaa.) oli antiikin Kreikan klassisen kauden kuuluisin kuvanveistäjä ja arvostetuin mestari. Kuuluisin Feidiaan veistoksista oli 12 metriä korkea Olympian istuvaa Zeusta esittävä patsas. Veistos on yksi maailman seitsemästä ihmeestä. [8]
  • 27. 24 Nyt ja Säännön 1 mukaan Nyt Samoin voidaan laskea Näin ollen 4.3 Summien ratkaiseminen generoivilla funktioilla Kuten luvussa 2 esitettiin, summan suljetun muodon selvittämiseksi summa voidaan ajatella rekursiona. Tällöin ongelma palaa rekursioyhtälöiden ratkaisemiseen, jossa voidaan käyttää apuna generoivia funktioita. Tässä alaluvussa esitetään esimerkki siitä, miten summia voi ratkaista generoivilla funktioilla. Esimerkki 8: Ratkaistaan summa generoivilla funktioilla. Kyseinen summa vastaa rekursiota:
  • 28. 25 Kerrotaan alimmainen summa termillä ja summataan yli kaikkien lukujen . Näin saadaan yhtälö Yhtälön summien indeksin alarajaksi tulee määritellä . Tämä onnistuu, sillä Näin voidaan lausua generoiva funktio muodossa eli Nyt on löydettävä sellaiset vakiot A ja B siten, että Seuraavaksi lavennetaan oikea puoli samannimiseksi, joten saadaan Ratkaisemalla osoittajien yhtäläisyyttä kuvaava yhtälöpari
  • 29. 26 saadaan vakioiden arvoiksi Nyt voidaan kirjoittaa uuteen muotoon Käyttäen apuna taulukkoa 2, voidaan laajentaa potessisarjaksi Nyt saadusta sarjasta voidaan lukea summan suljettu muoto, joka on Summan suljettu muoto on siis
  • 30. 27 5 Yhteenveto Tässä tutkielmassa on esitetty johdatus siihen, miten lukujonoja generoivia funktioita voidaan hyödyntää rekursioyhtälöiden ja summien ratkaisemisessa. Kuten johdantoluvussa todettiin, joissain tapauksissa ei tarvita generoivia funktioita rekursioyhtälön ratkaisemiseen, mutta kompleksisemmissa rekursioyhtälöissä generoivat funktiot voivat olla ainoa tapa ratkaisun formulointiin. Generoivat funktiot ovat hyödyllinen työkalu, jonka ymmärtäminen vaatii tiettyjen matemaattisten käsitteiden, kuten summien ymmärtämistä. Generoivien funktioiden suljettujen muotojen formuloinnissa joudutaan usein hajottamaan murtofunktio pienempiin osiin, minkä vuoksi tämän tutkielman yksi alaluku käsittelee osamurtokehitelmiä. Generoivat funktiot ovat matemaattinen tutkimuskohde, jonka avulla ratkaistiin tässä työssä Hanoin tornien ja Fibonaccin lukujen rekursiot. Samaa tekniikkaa voidaan soveltaa muissakin rekursioyhtälöissä, joita esiintyy algoritmien analysoinnissa. Generoivista funktioista voi lukea lisää esimerkiksi kirjoista [10] ja [11].
  • 31. 28 Viitteet [1] Donald E. Knuth. The Art of Computer Programming 3 Sorting and Searching, 1997. Kolmas painos. [2] Graham Greene, Donald E. Knuth, Oren Patashnik Concrete Mathematics, 1994. Toinen painos. [3] Jouni Järvinen. Algoritmien Matematiikka 1999. Turun yliopiston informaatio- teknologian laitoksen luentomateriaali. [4] Hanoin tornit. http://fi.wikipedia.org/wiki/Hanoin_torni Viitattu 1.10.2010. [5] Fibonacci number. http://en.wikipedia.org/wiki/Fibonacci_number Viitattu 1.10.2010. [6] Partial fraction. http://en.wikipedia.org/wiki/Partial_fraction#Partial_fract ion_decomposition Viitattu 1.10.2010. [7] Spiegel, Liu. Mathematical Handbook of Formulas and Tables, 1999. Toinen painos. [8] Phidias. http://en.wikipedia.org/wiki/Phidias Viitattu 1.10.2010. [9] Golden ratio. http://en.wikipedia.org/wiki/Golden_ratio Viitattu 1.10.2010. [10] Daniel H. Greene, Donald E. Knuth. Mathematics for the Analysis of Algorithms, 1990. Toinen painos. [11]Herbert S. Wilf. Generating Functionology, 1992. Toinen painos.