Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

2.7 Rekursio ja iteraatio Algoritminen ongelmanratkaisu ei ole

Samankaltaiset esitykset


Esitys aiheesta: "2.7 Rekursio ja iteraatio Algoritminen ongelmanratkaisu ei ole"— Esityksen transkriptio:

1 2.7 Rekursio ja iteraatio Algoritminen ongelmanratkaisu ei ole
läheskään aina triviaalien moduuleiden kirjoittamista. Ongelman ratkaisun ydin perustuu usein sopivan toisto-osan löytymiseen. Toiston ohjelmointiin on kaksi näennäisesti erilaista ratkaisutapaa: rekursio ja iteraatio

2 2.7 Rekursio ja iteraatio …
Rekursiivinen moduuli sisältää moduulin itsensä kutsun ja iteratiivinen moduuli sisältää toistorakenteen. Rekursio ja iteraatio ovat keinoja etsiä ongelmanratkaisuja algoritmien suunnittelu- menetelmien (esim. top-down) ’sisällä’.

3 2.7 Rekursio ja iteraatio …
MODULE maalaa (aita) ITERAATIO WHILE aitaa maalamatta DO suorita laudan maalaus siirry seuraavaan lautaan ENDWHILE ENDMODULE MODULE maalaa (aita) REKURSIO IF aitaa maalamatta THEN maalaa (loput aidasta) ENDIF

4 2.7.1 Rekursio MODULE maalaa (aita) ITERAATIO
WHILE aitaa maalamatta DO suorita laudan maalaus siirry seuraavaan lautaan ENDWHILE ENDMODULE MODULE maalaa (aita) REKURSIO IF aitaa maalamatta THEN suorita laudan maalaus maalaa (loput aidasta) ENDIF

5 Rekursio… Rekursio on modulaarisuusperiaatteen suora seuraus, eikä suinkaan mikään erillinen ominaisuus tai sallittu temppu. Rekursio on yleisen ongelmanratkaisu-periaatteen, reduktioperiaatteen erikoistapaus. Reduktiota sanotaan rekursioksi, jos ainakin yksi osaongelma on alkuperäisen ongelman kaltainen.

6 Rekursio … Jotta menettely suppenisi eli johtaisi todella ratkaisuun tulee rekursiivisen aliongelman luonnollisestikin olla ongelman alkuperäistä tapausta yksinkertaisempi.

7 Rekursio … Rekursiivisten moduulien konstruoimisessa on huomattava kaksi seikkaa: Moduulissa pitää kuvata ainakin yksi ongelman triviaali tapaus, joka ratkeaa suoraan, siis ei-rekursiivisesti, ja Jokaisen rekursiivisen kutsun tulee lähestyä jotakin tällaista triviaalia tapausta

8 Rekursio … Kaikissa ohjelmointikielissä rekursiota ei ole mahdollista toteuttaa (mm. konekielet, eräät vanhat tehtävän läheiset kielet kuten Basic, Fortran, Cobol)

9 Rekursio … Jos moduuli kutsuu itseään, on kyseessä suora rekursio. Tämä on tyypillisin tapaus rekursiosta. Esim. aidan maalaus. Epäsuora rekursio: jokin osaongelma sisältää rekursiivisen kutsun.

10 Epäsuoran rekursion esimerkki:
MODULE M1 MODULE M2 … … M2 … … M1 ENDMODULE … ENDMODULE Epäsuora rekursio tekee algoritmeista vaikeasti ymmärrettäviä  ei suositella.

11 Rekursio … Rekursioesimerkkejä monisteessa.

12 Iteraatio Iteraatioperiaate tarkoittaa sitä, että jotakin toimenpidettä toistamalla päästään yhä lähemmäksi ratkaisua tai asetettua tavoitetta. Tarkoitus on siis tuottaa yhä parempia ja parempia ratkaisuja, ns. välitiloja tai likiarvoja ongelman ratkaisulle. Prosessi päättyy, kun saadaan joko tarkka ratkaisu tai riittävän tarkka likiarvo.

13 Iteraatio Iteraation soveltamiselle asetaan kolme vaatimusta: väliarvojen olemassaolo keino edetä kohti ratkaisua kyky tunnistaa ratkaisu (ts. pitää tietää milloin toisto lopetetaan).

14 Iteraatio … Esimerkiksi järjestä-moduulissa: vaadittavat välitilat ovat lukujonon eri järjestykset kullakin ulomman silmukan toistokerralla päästään yhä lähemmäksi ratkaisua: jono on oikeassa järjestyksessä alusta lukien i:nteen alkioon saakka, i = 1, 2, … n-1. tarkka ratkaisu on saavutettu, kun i = n-1.

15 Iteraatio … Iteraatio on luonteva lähestymistapa tehtävissä, jossa ei välttämättä saada tarkkaa ratkaisua, vaan on tyydyttävä likarvoon. Monet numeerisen analyysin menetelmät ovat tällaisia.

16 Iteraatio … Esimerkki: neliöjuuri, √a = ? Newtonin menetelmä: oletetaan, että luvun neliöjuuri = 1 (merk. x1). Lasketaan sitten ns. Newtonin kaavalla aina uusia ja uusia x-arvoja: x2, x3,…. Seuraava x-arvo on edeltäjäänsä lähempänä √a :n arvoa. Kaava: xn = ½(xn-1 + a/xn-1), n > 1.

17 Esimerkki: neliöjuuri jatkuu
Iteraatio … Esimerkki: neliöjuuri jatkuu MODULE neliöjuuri (a, eps) RETURNS √a n:=1 x1:=1 REPEAT xn+1 = ½(xn + a/xn) n:=n+1 UNTIL xn-1 – xn < eps RETURN xn

18 Esimerkki: neliöjuuri jatkuu, parempi versio:
Iteraatio … Esimerkki: neliöjuuri jatkuu, parempi versio: MODULE neliöjuuri (a, eps) RETURNS √a nykyinen:=1 REPEAT edellinen:=nykyinen nykyinen:= ½(edellinen + a/edellinen) UNTIL edellinen-nykyinen < eps RETURN nykyinen ENDMODULE

19 Iteraatio … Menetelmä on tehokas ja yksinkertainen. Esimerkiksi, jos a = , kahdeksan numeron tarkkuus saavutetaan jo yhdeksällä kierroksella.

20 2.7.2 Iteraatio … Integrointiesimerkki Käyrän ja x-akselin
välisen rajoittaman alueen pinta-ala voidaan laskea approksimatiivi- sesti laskemalla yhteen pylväiden pinta-alat (kuvio).

21 2.7.2 Iteraatio … MODULE integroi (f, a, b) RETURNS luku I:=0
n:= (* n:n arvoksi suuri luku *) dx:=(b-a)/n FOR x:=0, 1, 2,…, n-1 DO I:=I+f(a+x*dx) ENDFOR RETURN I*dx ENDMODULE

22 2.7.2 Iteraatio … Eratostheneen (276-195 eKr.) seula etsii alkulukuja:
MODULE seula (n) RETURNS alkulukujen joukko S:= {2, 3, 4, 5, 6, …, n} A:= Ø (* tyhjä joukko *) REPEAT Etsi joukon S pienin luku b A:=A U {b} (* alkio b lisätään joukkoon A *) m:=b S:=S- {m} (* poistetaan m joukosta S*) m:=m+b UNTIL m > n UNTIL b > √n RETURN A U S ENDMODULE

23 2.7.3 Rekursio vai iteraatio ?
Rekursio ja iteraatio ovat vaihtoehtoisia strategioita. Jokainen rekursiivinen algoritmi voidaan muuntaa iteratiiviseksi ja päinvastoin. Imperatiivisessa ajattelussa iteraatio on varsin tavallinen ajattelutapa, koska kyseinen työskentelytapa on lähellä tietokoneen toiminta-mallia. Rekursio puolestaan perustuu modulaarisuuteen ja reduktiiviseen ajatteluun, joka taas on luonteenomaista esim. funktionaalisessa ohjelmoinnissa.

24 Rekursio vai iteraatio ? ….
Jotkin tehtävät ovat sellaisia, että niille on kohtuullisen helposti löydettävissä joko rekursiivinen tai iteratiivinen ratkaisu mutta ei molempia. On myös tehtäviä, joille ei ole olemassa luonnollista ei-rekursiivista ratkaisua, kyseessä ovat ns. ei-rekursiiviset tehtävät.

25 Rekursio vai iteraatio ? …
Seuraavat kaksi esimerkkiä ratkeavat varsin helposti rekursion kautta. Iteratiivinen ratkaisukin on olemassa, mutta se on hankala keksiä: symbolinen derivointi Hanoin tornit


Lataa ppt "2.7 Rekursio ja iteraatio Algoritminen ongelmanratkaisu ei ole"

Samankaltaiset esitykset


Iklan oleh Google