Algoritmizálás, adatmodellezés tanítása 11. előadás. (Horváth Gyula előadása alapján)

Hasonló dokumentumok
Rekurzió. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Rekurzió. (Horváth Gyula és Szlávi Péter előadásai. felhasználásával)

Rekurzió. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Feladatmegoldási stratégiák

Informatikai tehetséggondozás:

Rekurzió 2. Belépő a tudás közösségébe Informatika szakköri segédanyag

Informatikai tehetséggondozás:

Rekurzív algoritmusok

5. Rekurzió és iteráció (Rekurzív programok átírása nemrekurzívvá)

1.1. Alapfeladatok. hogy F 1 = 1, F 2 = 1 és általában F n+2 = F n+1 + F n (mert a jobboldali ág egy szinttel lennebb van, mint a baloldali).

Kombinatorikai algoritmusok

Kombinatorikai algoritmusok. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Algoritmusok és adatszerkezetek gyakorlat 03 Oszd meg és uralkodj. Nagy

Dinamikus programozás II.

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

Programozás alapjai. 6. gyakorlat Futásidő, rekurzió, feladatmegoldás

Algoritmizálás, adatmodellezés tanítása 8. előadás

Információs Technológia

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

A programozás alapjai 1 Rekurzió


Kép mátrix. Feladat: Pap Gáborné-Zsakó László: Algoritmizálás, adatmodellezés 2/35

Arany Dániel Matematikai Tanulóverseny 2014/2015-ös tanév első (iskolai) forduló Haladók II. kategória

BBTE Matek-Infó verseny mintatételsor Informatika írásbeli vizsga

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Sorozatok I. Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma)

Rekurzió. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

A sorozat fogalma. függvényeket sorozatoknak nevezzük. Amennyiben az értékkészlet. az értékkészlet a komplex számok halmaza, akkor komplex

A 2009/2010 tanévi Országos Középiskolai Tanulmányi Verseny első forduló feladatainak megoldása. INFORMATIKÁBÓL II. (programozás) kategóriában

Hajnal Péter. Bolyai Intézet, TTIK, SZTE, Szeged április 8.

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Hatékonyság 1. előadás

Algoritmizálás, adatmodellezés tanítása 1. előadás

3. Előadás. Megyesi László: Lineáris algebra, oldal. 3. előadás Lineáris egyenletrendszerek

GRÁFELMÉLET. 7. előadás. Javító utak, javító utak keresése, Edmonds-algoritmus

100% BIO Natur/Bio kozmetikumok és testápolás

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

Algoritmizálás, adatmodellezés tanítása 7. előadás

Webprogramozás szakkör

Bevezetés az algebrába az egész számok

Rekurzió. Működése, programtranszformációk. Programozás II. előadás. Szénási Sándor.

Algoritmizálás és adatmodellezés tanítása 2. előadás

Fibonacci számok. Dinamikus programozással

Minden feladat teljes megoldása 7 pont

FFT. Második nekifutás. Czirbusz Sándor ELTE IK, Komputeralgebra Tanszék október 2.

Algoritmizálás és adatmodellezés tanítása 6. előadás

A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny első fordulójának feladatai. INFORMATIKA II. (programozás) kategória

Megoldások. Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) 1. Számítsd ki a következő kifejezések pontos értékét!

Adatszerkezetek II. 10. előadás

A félév során előkerülő témakörök

Műveletek mátrixokkal. Kalkulus. 2018/2019 ősz





Algoritmizálás, adatmodellezés tanítása 1. előadás

Szittyai István december 8. SZTE Bolyai Intézet. Szittyai István (NLG, Hmvh) Partíciók , Bolyai, Szeged 1 / 24

Definíció n egymástól megkülönböztethető elem egy sorrendjét az n elem egy (ismétlés nélküli) permutációjának nevezzük.

Partíció probléma rekurzíómemorizálással

Algoritmusok pszeudókód... 1

Algoritmizálás, adatmodellezés tanítása 6. előadás

Algoritmizálás és adatmodellezés tanítása 1. előadás

Tanmenet a évf. fakultációs csoport MATEMATIKA tantárgyának tanításához

Algoritmizálás, adatmodellezés tanítása 2. előadás

Algoritmizálás, adatmodellezés 1. előadás

Számelmélet. 4. Igazolja, hogy ha hat egész szám összege páratlan, akkor e számok szorzata páros!

I. Specifikáció készítés. II. Algoritmus készítés

2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1

Algoritmizálás és adatmodellezés tanítása 9. előadás

Sorozatok és Sorozatok és / 18

ABSZTRAKCIÓ FÜGGVÉNYEKKEL (ELJÁRÁSOKKAL)

4. Sorozatok. 2. Igazoljuk minél rövidebben, hogy a következő egyenlőség helyes: 100 =

Gauss-Jordan módszer Legkisebb négyzetek módszere, egyenes LNM, polinom LNM, függvény. Lineáris algebra numerikus módszerei

Összetett programozási tételek

MBNK12: Permutációk (el adásvázlat, április 11.) Maróti Miklós

2010. október 12. Dr. Vincze Szilvia

Bevezetés. 1. fejezet. Algebrai feladatok. Feladatok

BABEŞ-BOLYAI TUDOMÁNYEGYETEM MATEMATIKA-INFORMATIKA KAR Felvételi verseny - minta Informatika írásbeli

Bevezetés a matematikába (2009. ősz) 1. röpdolgozat

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

Visszalépéses kiválogatás

Algoritmusok pszeudókód... 1

2015, Diszkrét matematika

Nagypontosságú aritmetika I.

Cohen-Sutherland vágóalgoritmus

Beregszászi István Programozási példatár

Tartalomjegyzék Algoritmusok - pszeudókód

I. VEKTOROK, MÁTRIXOK

Diszkrét matematika I.

Diszkrét matematika 1.

A 2008/2009 tanévi Országos Középiskolai Tanulmányi Verseny első forduló feladatainak megoldása. INFORMATIKÁBÓL II. (programozás) kategóriában

Algoritmusok és adatszerkezetek 2.

Waldhauser Tamás december 1.

Algoritmuselmélet. Függvények nagyságrendje, elágazás és korlátozás, dinamikus programozás. Katona Gyula Y.

Megoldás: Mindkét állítás hamis! Indoklás: a) Azonos alapú hatványokat úgy szorzunk, hogy a kitevőket összeadjuk. Tehát: a 3 * a 4 = a 3+4 = a 7

Permutációk véges halmazon (el adásvázlat, február 12.)

Algoritmuselmélet. Függvények nagyságrendje, elágazás és korlátozás, dinamikus programozás. Katona Gyula Y.

Algebra es sz amelm elet 3 el oad as Permut aci ok Waldhauser Tam as 2014 oszi f el ev

1. A polinom fogalma. Számolás formális kifejezésekkel. Feladat Oldjuk meg az x2 + x + 1 x + 1. = x egyenletet.

Nagyságrendek. Kiegészítő anyag az Algoritmuselmélet tárgyhoz. Friedl Katalin BME SZIT február 1.

Átírás:

Algoritmizálás, adatmodellezés tanítása 11. előadás (Horváth Gyula előadása alapján)

Rekurzió Klasszikus példák Faktoriális n! Fibonacci-számok Fib n A rekurzió lényege: önhivatkozás n * n 1! ha n 0 1 ha n 0 0 ha n 0 1 ha n 1 Fib n 1 Fib n 2 ha n 1

Rekurzió Klasszikus példák Ackermann-függvény:,, A n m Elvadultságáról: A(0,m)=m+1 A(1,m)=m+2 A(2,m)=2*m+3 A(3,m)=2 m+3-3 m 1 ha n 0 A n 1 1 ha n 0 és m 0 A(4,m)= 2-3, ahol az a 2-t m+2-ször tartalmazza kitevőként. A n 1, A n, m 1 ha n 0 és m 0 A 2... 2 4, m 2 3 3

Rekurzió Klasszikus példák Binomiális számok:,,, B n k 1 ha k 0 B n 1 k B n 1 k 1 ha 0 k n 1 ha k n B n, k 1 ha k 0 n k 1 B n, k 1 ha 0 k n k 4

Rekurzív specifikáció és algoritmus Faktoriális: n! n * n 1! ha n 0 1 ha n 0 Fakt(n): Ha n>0 akkor Fakt:=n*Fakt(n-1) különben Fakt:=1 Eljárás vége. 5

Fibonacci számok: Rekurzív specifikáció és algoritmus Fib n 0 ha n 0 1 ha n 1 Fib n 1 Fib n 2 ha n 1 Fib(n): Ha n=0 akkor Fib:=0 különben ha n=1 akkor Fib:=1 különben Fib:=Fib(n-1)+Fib(n-2) Eljárás vége. 6

McCarthy 91-függvény: Rekurzív specifikáció és algoritmus M n M n M 10 n 11 ha ha n n 100 100 M(n): Ha n>100 akkor M:=n-10 különben M:=M(M(n+11)) Eljárás vége. Tehát a dupla rekurzió algoritmikus szinten nem okoz semmilyen gondot! M(n) értéke 91 lesz minden 100-nál kisebb n-re. 7

Ackermann függvény: Rekurzív specifikáció,, A n m és algoritmus m 1 ha n 0 A n 1 1 ha n 0 és m 0 Ack(n,m): Ha n=0 akkor Ack:=m+1 különben ha m=0 akkor Ack:=Ack(n-1,1) különben Ack:=Ack(n-1,Ack(n,m-1)) Eljárás vége. Tehát a dupla rekurzió algoritmikus szinten nem okoz semmilyen gondot! A n 1, A n, m 1 ha n 0 és m 0 8

Binomiális számok: Rekurzív specifikáció,,, B n k és algoritmus 1 ha k 0 B n 1 k B n 1 k 1 ha 0 k n 1 ha k n Bin(n,k): Ha k=0 vagy k=n akkor Bin:=1 különben Bin:=Bin(n-1,k)+Bin(n-1,k-1) Eljárás vége. B n, k 1 ha k 0 n k 1 B n, k 1 ha 0 k n k Bin(n,k): Ha k=0 akkor Bin:=1 különben Bin:=Bin(n,k-1)*(n-k+1)/k Eljárás vége. 9

Bajok a rekurzióval Hely: nagyra dagadt veremméret. Problémák a rekurzióval Idő: a vermelés adminisztrációs többletterhe, a többszörösen ismétlődő hívások. Pl. Fibonacci-számoknál: r(n):=az N. Fibonacci-szám kiszámításához szükséges hívások száma r(0):=1, r(1):=1, r(i):=r(i-1)+r(i-2)+1 Állítás: a) r(i)=f(i+1)+f(i)+f(i-1)-1 i>1 b) r(i)=2*f(i+1)-1, ahol F(i)=az i. Fibonacci-szám.

Rekurzió memorizálással Megoldási ötlet: amit már kiszámoltunk egyszer, azt ne számoljuk újra! Tároljuk a már kiszámolt értékeket, s ha szükségünk van rájuk, használjuk fel őket! A megoldásban F(i)0 jelenti, ha már kiszámoltuk az i-edik Fibonacci számot. Fib(N): Ha F(N)<0 akkor ha N<2 akkor F(N):=N különben F(N):=Fib(N-1)+Fib(N-2) Fib:=F(N) Függvény vége.

Rekurzió memorizálással Binomiális együtthatók számolása. Bin(N,K): Ha N=0 vagy N=K akkor Bin:=1 különben Bin:=Bin(N-1,K-1)+Bin(N-1,K) Függvény vége. Ugyanez memorizálással: Bin(N,K): Ha B(N,K)<0 akkor Ha N=0 vagy N=K akkor B(N,K):=1 különben B(N,K):=Bin(N-1,K-1)+Bin(N-1,K) Elágazás vége Bin:=B(N,K) Függvény vége.

Közvetett rekurzió Feladat Döntsük el egy számról, hogy páros-e, ha nincs maradékszámítás műveletünk! Megoldás Páros(n): Ha n=0 akkor Páros:=igaz különben ha n=1 akkor Páros:=hamis különben Páros:=Páratlan(n-1) Függvény vége.

Közvetett rekurzió Feladat Döntsük el egy számról, hogy páros-e, ha nincs maradékszámítás műveletünk! Megoldás Páratlan(n): Ha n=0 akkor Páratlan:=hamis különben ha n=1 akkor Páratlan:=igaz különben Páratlan:=Páros(n-1) Függvény vége.

Közvetett rekurzió Feladat Döntsük el egy számról, hogy páros-e, ha nincs maradékszámítás műveletünk! A két közvetetten rekurzív eljárás összevonható: Megoldás Páros(n): Ha n=0 akkor Páros:=igaz különben ha n=1 akkor Páros:=hamis különben Páros:=Páros(n-2) Függvény vége.

Közvetett rekurzió Feladat Számítsuk ki, hogy hányféleképpen lehet egy 3xn egység méretű járdát kikövezni 1x2 méretű lapokkal! Megoldás Biztos nincs megoldás, ha n páratlan szám!

Közvetett rekurzió Az első oszlop középső négyzete háromféleképpen fedhető le. 1. eset 2. eset 3. eset

Közvetett rekurzió Az egyes esetek csak az alábbi módon folytathatók: Jelölje A(n) a megoldás értékét 3xn egység méretű járda esetén! Az 1. eset csak így folytatható

Közvetett rekurzió Jelölje B(n) azt, hogy hányféleképpen fedhető le egy 3xn egység méretű járda, amelynek a bal alsó sarka már le van fedve! Szimmetria miatt a jobb felső sarok lefedettsége esetén is B(n)- féle lefedés van. A 2. eset csak így folytatható A 3. eset csak így folytatható A n A 0 3 n 2 2 B n 1 ha ha ha n n n 1 2 2

Közvetett rekurzió Az egyes esetek csak az alábbi módon folytathatók: Jelölje B(n) azt, hogy hányféleképpen fedhető le egy 3xn egység méretű járda, amelynek a bal alsó sarka már le van fedve! B(n) páros n-re mindig 0 értékű! A 2. eset csak így folytatható Az 1. eset csak így folytatható B n A 1 0 n 1 B n 2 ha ha ha n n n 1 2 2

Közvetett rekurzió A(n): Ha n=1 akkor A:=0 különben ha n=2 akkor A:=3 különben A:=A(n-2)+2*B(n-1) Függvény vége. B(n): Ha n=1 akkor B:=1 különben ha n=2 akkor B:=0 különben B:=A(n-1)+B(n-2) Függvény vége. Kövezés(n): Ha páros(n) akkor Kövezés:=A(n) különben Kövezés:=0 Függvény vége.

Közvetett rekurzió Szükség van itt memorizálásra? Igen, B(n-3)-hoz háromféle, A(n-4)-hez ötféle úton juthatunk el (B(n-3)-ból is számoljuk) Fibonacci számszor! Megjegyzés: Figyeljük meg, hogy csak minden második A(i) és B(i) értéket számoljuk ki!

Közvetett rekurzió A(n): Ha TA(n)<0 akkor Ha n=1 akkor TA(n):=0 különben ha n=2 akkor TA(n):=3 különben TA(n):=A(n-2)+2*B(n-1) Elágazás vége A:=TA(n) Függvény vége. B(n): Ha TB(n)<0 Ha n=1 akkor TB(n):=1 különben ha n=2 akkor TB(n):=0 különben TB(n):=A(n-1)+B(n-2) Elágazás vége A:=TB(n) Függvény vége.

Algoritmizálás, adatmodellezés tanítása 11. előadás vége