Diskretna matematika ETF Akermanova Funkcija Autor Dejan Markovi

  • Slides: 11
Download presentation
Diskretna matematika, ETF Akermanova Funkcija Autor: Dejan Marković Beograd 2011.

Diskretna matematika, ETF Akermanova Funkcija Autor: Dejan Marković Beograd 2011.

-Akermanova funkcija predstavlja pojam iz teorije izracunljivosti a u literaturi je jos poznata I

-Akermanova funkcija predstavlja pojam iz teorije izracunljivosti a u literaturi je jos poznata I kao Akerman-Peterova funkcija. -Predstavlja primer rekurzivne funkcije koja nije primitivno rekurzivna. -Funkcija kao argumente prima dva prirodna broja a kao rezultat vraća jedan prirodan broj.

� ISTORIJAT -Krajem 1920 -tih Gabriel Sudan i Vilhem Akerman su se bavili problemom

� ISTORIJAT -Krajem 1920 -tih Gabriel Sudan i Vilhem Akerman su se bavili problemom rekurzivnosti funkcije. -Sudan je prvi objavio rekurzivnu funkciju koja nije primitivno rekurzivna. -David Hilbert je u svom delu On the infinite izneo hipotezu da Akermanova funkcija nije primitivno rekurzivna, ali je Akerman, njegov bivši student, dokazao ovu teoremu u svom radu On Hilbert’s Construction of the Real Numbers. -Ovaj rad sadrži jos i zanimljive metode vezane za transfinitne brojeve i hipotezu kontinuuma, što je kasnije uticalo znacajno na rad drugih matematičara i istraživača.

� DEFINICIJA I OSOBINE -Iako mozda ne izgleda na prvi pogled da se rekurzija

� DEFINICIJA I OSOBINE -Iako mozda ne izgleda na prvi pogled da se rekurzija uopste završava, suprotno se uočava ako vidimo da se u svakom pozivu funkcije ili m smanjuje, ili m ostaje isto a n se smanjuje. -Problem koji data funkcija zadaje programerima jeste veliko povećavanje broja n dok se m smanjuje, često do ogromnih brojeva koji se ne mogu predstaviti na racunaru.

-Funkcija se moze nerekurzivno zapisati upotrebom Konvejeve notacije sa strelicama: A(m, n) = (2

-Funkcija se moze nerekurzivno zapisati upotrebom Konvejeve notacije sa strelicama: A(m, n) = (2 → (n+3) → (m − 2)) − 3 za m > 2 odnosno 2 → n → m = A(m+2, n-3) + 3 за n > 2 *n=1 и n=2 bi odgovaralo A(m, − 2) = − 1 и A(m, − 1) = 1. -Dati zapis je moguće ostvariti i sa hiper operatorima: A(m, n) = hyper(2, m, n + 3) − 3

-Za male vrednosti m kao na primer 1, 2 ili 3 funkcija raste sporo

-Za male vrednosti m kao na primer 1, 2 ili 3 funkcija raste sporo u odnosu na n (eksponencijalni porast u najboljem slučaju). -Za m ≥ 4 , na primer za A(4, 2) vrednost funkcije je oko 2× 1019728 , a decimalni zapis ne moze da se ostvari u poznatom univerzunu. -Navođenjem gornjeg primera problem za računarstvo postaje jasan, međutim taj problem se prenosi i na matematičare i na matematiku samu jer se tezi rešavanju svih problema poznatih čoveku. -Ekstremnim rastom funkcije se pokazuje da je ona jedino izračunljiva na mašini sa neograničenom memorijom kao što je Tjuringova mašina, i time je ona izračunljiva funkcija. Funkcija raste brze od bilo koje primitivno rekurzivne funkcije što implicira da data funkcija nije primitivno rekurzivna. -U teoriji postoje čak i funkcije sa većim porastom od Akermanove funkcije kao na primer funkcija Vrednih dabrova.

� TABLICA VREDNOSTI m/n 0 1 2 3 4 5 n+1 1 2 3

� TABLICA VREDNOSTI m/n 0 1 2 3 4 5 n+1 1 2 3 4 5 6 n+2 2 3 5 7 9 11 2 n+3 3 5 13 29 61 125 2(n + 3) − 3 13 65533 265536 − 3 A(3, 265536 − 3) A(3, A(4, 3)) 65533 A(4, 65533) A(4, A(5, 1)) A(4, A(5, 2)) A(4, A(5, 3)) A(5, 1)) A(5, A(6, 2)) A(5, A(6, 3)) 4 5 6

Izracunavanje za manje brojeve se cak i na papiru brzo izvode u nekoliko redova.

Izracunavanje za manje brojeve se cak i na papiru brzo izvode u nekoliko redova. Problem nastaje kod recimo pokušamo sledeće da nađemo: A(4, 3) = A(3, A(4, 2)) = A(3, A(4, 1))) = A(3, A(4, 0)))) = A(3, 1)))) = A(3, A(2, A(3, 0))))) = A(3, A(2, 1))))) = A(3, A(2, A(1, A(2, 0)))))) = A(3, A(2, A(1, 1)))))) = A(3, A(2, A(1, A(0, A(1, 0))))))) = A(3, A(2, A(1, A(0, 1))))))) = A(3, A(2, A(1, A(0, 2)))))) = A(3, A(2, A(1, 3))))) = A(3, A(2, A(0, A(1, 2)))))) = A(3, A(2, A(0, A(1, 1))))))) = A(3, A(2, A(0, A(1, 0)))) = A(3, A(2, A(0, 1))))…

� INVERZNA FUNKCIJA -Obzirom da Akermanova funkcija raste brzo, inverzna datoj funkciji će logično

� INVERZNA FUNKCIJA -Obzirom da Akermanova funkcija raste brzo, inverzna datoj funkciji će logično da raste vrlo sporo. -Inverzna funkcija se obično označava sa alfa, a njena predstava izgleda ovako: -Funkcija se pojavljuje u vremenskoj kompleksnosti nekih algoritama kao što su strukture podataka disjunktnih skupova i Šazelov algoritam za minimalna razapinjujuća stabla(Minimum spanning tree).

� OPTIMIZACIJE I MOGUĆA REŠENJA -Mnogi noviji programski prevodioci vrše optimizaciju programskog koda koji

� OPTIMIZACIJE I MOGUĆA REŠENJA -Mnogi noviji programski prevodioci vrše optimizaciju programskog koda koji korisnik unese, naravno olakšavajući time sebi posao a i doprinoseći brzini rada datog programskog koda. -Ova mogućnost je naročito bitna kod rešavanja problema ovakvog tipa, tj. problema računanja rekurzivnih funkcija. U praksi se obično teži svodjenje na iterativnu varijantu rešavanja problema ali uvek postoje slučajevi kao što je ovaj koji ne dozvoljavaju takav vid optimizacije. -Ono što korisnik programskog paketa ne vidi a mnogi noviji prevodioci rade, jeste optimizacija pamcenja prethodnih iteracija funkcije, preskakanje nekih delova koda za koje je je iz prethodnog prevodjenja jasan ishod i dalji nastavak rada. -Takve cinjenice olakšavaju problem, ali kod ovakvih funkcija čak ni podrazumevane optimizacije poput gore navedenih ili na primer nekih sitnih poput stavljanja veceg opsega brojeva, prosirivanjem memorije koja je dodeljena aplikaciji ili stvljanja promenljivih u brze registre ne pomazu u rešavanju.

-Na običnim desktop računarima, koje običan čovek moze da poseduje, problemi nastaju na vrlo

-Na običnim desktop računarima, koje običan čovek moze da poseduje, problemi nastaju na vrlo niskim brojevima čak na primer za brojeve veće od četiri. -Problem koji onemogućava formiranje iterativne varijante problema jeste rekurzivni poziv funkcije u gotovo svakom novom pozivu funkcije. -Program napisan za izračunavanje Akermanove funkcije se obično prekida kada dođe do prepunjavanja steka jer se svaki rekurzivni poziv funkcije stavlja na stek pri tom pamteci na njemu mesto poziva, mesto povratka kad se izvrši i promenljive koje se koriste. -Iako stek moze da primi mnogo podataka on je i dalje vrlo ograničen i prepuni se vrlo brzo. Situacija koja se moze dogoditi prepunjavanjem steka jeste prekidanje programa pozivanjem sistemskih funkcija ili u najgorem slucaju prekidanjem procesa nasilno ako sistemske funkcije nisu uspele da zaustave proces.