Informatikai tehetséggondozás:

Hasonló dokumentumok
Informatikai tehetséggondozás:

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

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

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

Rekurzív algoritmusok

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

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

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

Kombinatorikai algoritmusok

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

Diszkrét matematika 1.

Diszkrét matematika 1.

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

FPI matek szakkör 8. évf. 4. szakkör órai feladatok megoldásokkal. 4. szakkör, október. 20. Az órai feladatok megoldása

Adatszerkezetek II. 10. előadás

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

Nyugat-magyarországi Egyetem Geoinformatikai Kara. Prof. Dr. Závoti József. Matematika III. 1. MA3-1 modul. Kombinatorika

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).

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.

ARCHIMEDES MATEMATIKA VERSENY

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

A programozás alapjai 1 Rekurzió

Számelmélet Megoldások

Tamás Ferenc: Nevezetes szögek szögfüggvényei

2010. október 12. Dr. Vincze Szilvia

Feladatmegoldási stratégiák

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

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

Felvételi tematika INFORMATIKA

NT Matematika 11. (Heuréka) Tanmenetjavaslat

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

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

Játék a szavakkal. Ismétléses nélküli kombináció: n különböző elem közül választunk ki k darabot úgy, hogy egy elemet csak egyszer

1. A Horner-elrendezés

Szerencsejátékok. Elméleti háttér

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

æ A GYAKORLAT (* feladatok nem kötelezőek)

;3 ; 0; 1 7; ;7 5; 3. pozitív: ; pozitív is, negatív is: ;

Elemi matematika szakkör

Informatikai tehetséggondozás:

2018, Diszkrét matematika

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉP SZINT Számelmélet

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

Tananyag: Kiss Béla - Krebsz Anna: Lineáris algebra, többváltozós függvények, valószínűségszámítás,

Analízis előadás és gyakorlat vázlat

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

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

Irodalom. (a) A T, B T, (b) A + B, C + D, D C, (c) 3A, (d) AD, DA, B T A, 1 2 B = 1 C = A = 1 0 D = (a) 1 1 3, B T = = ( ) ; A T = 1 0

æ A GYAKORLAT (* feladatok nem kötelezőek)

Oszthatósági problémák

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

KOVÁCS BÉLA, MATEMATIKA I.

Bevezető feldatok. Elágazás és összegzés tétele

Számsorozatok (1) First Prev Next Last Go Back Full Screen Close Quit

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

Makay Géza, SZTE, Bolyai Intézet

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

24. tétel. Kombinatorika. A grá fok.

Kombinatorika - kidolgozott típuspéldák

Sorozatok határértéke SOROZAT FOGALMA, MEGADÁSA, ÁBRÁZOLÁSA; KORLÁTOS ÉS MONOTON SOROZATOK

11. Sorozatok. I. Nulladik ZH-ban láttuk:

Matematika tanmenet 11. évfolyam (középszintű csoport)

Kombinatorika jegyzet és feladatgyűjtemény

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

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

2015, Diszkrét matematika

Hogyan folytatnád? Gellért-hegy, Kékes. /Kilimandzsáró,, Mount Everest,Mount Blanc/ Háromszögszámok

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉPSZINT Számelmélet

Matematikai játékok és az aranymetszés

Az Országos Középiskolai Tanulmányi Verseny tanévi első fordulójának feladatmegoldásai. 81f l 2 f 2 + l 2

ARANYMETSZÉS. - érettségi dolgozat védése analízis és algebrából - Készítette: Szénási Eszter Mentor: Dr. Péics Hajnalka június 11.

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

1. Mennyi a dobókockák nem látható lapjain levő pontok ( számok ) összege? A ) 14 B ) 20 C ) 21 D ) 24

1. Feladatsor. I. rész

Feladatok és megoldások az 1. sorozat Építőkari Matematika A3

REKURZIÓ. Rekurzív: önmagát ismétlő valami (tevékenység, adatszerkezet stb.) Rekurzív függvény: függvény, amely meghívja saját magát.

V.7. NÉPSZÁMLÁLÁS. A feladatsor jellemzői

Feladatok és megoldások a 8. hétre Építőkari Matematika A3

Formális nyelvek és automaták

INFORMATIKA javítókulcs 2016

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Számelmélet I.

7. Számelmélet. 1. Lehet-e négyzetszám az a pozitív egész szám, amelynek tízes számrendszerbeli alakjában 510 darab 1-es és valahány 0 szerepel?

1. Olvassuk be két pont koordinátáit: (x1, y1) és (x2, y2). Határozzuk meg a két pont távolságát és nyomtassuk ki.

Osztályozóvizsga és javítóvizsga témakörei Matematika 9. évfolyam

Matematika szóbeli érettségi témakörök 2016/2017-es tanév őszi vizsgaidőszak

Polinomok, Lagrange interpoláció

Adatszerkezetek I. 7. előadás. (Horváth Gyula anyagai felhasználásával)

Egész számok. pozitív egész számok: 1; 2; 3; 4;... negatív egész számok: 1; 2; 3; 4;...

Arany Dániel Matematikai Tanulóverseny 2008/2009-es tanév első (iskolai) forduló haladók II. kategória

Gazdasági matematika II. vizsgadolgozat megoldása A csoport

Kombinatorika avagy hányféleképp? Piros, fehér zöld színekből hány ország számára tudunk különböző zászlókat készíteni?

Érdemes egy n*n-es táblázatban (sorok-lányok, oszlopok-fiúk) ábrázolni a két színnel, mely éleket húztuk be (pirossal, kékkel)

TANMENET. a matematika tantárgy tanításához 11.E osztályok számára

Osztályozóvizsga követelményei

Matematika szintfelmérő dolgozat a 2018 nyarán felvettek részére augusztus

Számelmélet, műveletek, egyenletek, algebrai kifejezések, egyéb

Informatikai tehetséggondozás:

Országos Középiskolai Tanulmányi Verseny 2009/2010 Matematika I. kategória (SZAKKÖZÉPISKOLA) 2. forduló feladatainak megoldása

Az R halmazt a valós számok halmazának nevezzük, ha teljesíti az alábbi 3 axiómacsoport axiómáit.

X. PANGEA Matematika Verseny II. forduló 10. évfolyam. 1. Az b matematikai műveletet a következőképpen értelmezzük:

Átírás:

Ég és Föld vonzásában a természet titkai Informatikai tehetséggondozás: Rekurzió TÁMOP-4.2.3.-12/1/KONV

1. A faktoriális függvény A rekurzió, mint eszköz felbukkan specifikációs, algoritmikus, implementációs (nyelvi) eszközként. Kezdjük a specifikációnál, amellyel a matematikusok a problémák megoldását kezdik! A függvény egy igen hatékony absztrakciós eszköz, ugyanis jól kidolgozott formalizmussal rendelkezik és sokrétű, bejáratott operációval (függvényművelettel) lehet építkezni. Mivel sok mindent (érts ezalatt bármilyen tevékenységsort) úgy lehet tekinteni, mint valamiféle függvényt, ami a kezdetben meglévő adatokhoz hozzárendeli a kívánt valamit, ezért nem reménytelen vállalkozás a függvény definiálást választani általános leíró eszközként. Ilyen ok miatt nincs mit csodálkozni azon, hogy példáink java része rekurzív függvény lesz, és elindulásként is az egyik legismertebbiket választottuk ki: a faktoriálist. Definíciója: n! n * n 1! ha n 0 1 ha n 0 A faktoriális definíciója két részre bomlik. Az egyik épít a már meglévő, és működő definícióra, és azt eggyel csökkentett értékkel újra meghívja. A másik bízva abban, hogy valamikor eljő az ő ideje kijáratot biztosít a(z előbbi) végtelenségig való önhívogatásból. Vagyis valahogy így: Faktoriális(n): Ha n=0 akkor [a definíció nem rekurzív része] f:=1 különben [a definíció rekurzív része] f:=n*faktoriális(n-1) Elágazás vége Faktoriális:=f Nézzük meg, hogy pontosan mi is történik pl. a Faktoriális(3) hívásakor! Faktoriális(3) => 3 * Faktoriális(2) 3 * 2 * 1 * 1 Faktoriális(2) => 2 * Faktoriális(1) 2 * 1 * 1 Faktoriális(1)=> 1 * Faktoriális(0) 1 * 1 Faktoriális(0) => 1 1 A faktoriális függvény értéke nagyon gyorsan nő, azaz nem tudjuk nagyobb N értékekre kiszámolni: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 2 6 24 120 720 5 040 40 320 362 880 3 628 800 39 916 800 479 001 600 6 227 020 800 87 178 291 200 2

Érdekességként az utolsó K számjegyét viszont számolhatjuk megfelelő számtípus esetén: Faktoriális(n,k): Ha n=0 akkor f:=1 különben f:=(n*faktoriális(n-1)) mod 10 k Elágazás vége Faktoriális:=f K=6 esetén: néhány következő tag: 10 11 12 13 14 15 16 17 18 19 20 628 800 916 800 1 600 20 800 291 200 368 000 888 000 96 000 728 000 832 000 640 000 Könnyű belátni, hogy K=6 esetén N=25-tól kezdődően csupa 0 lesz az így kiszámolt sorozatban. 2. A Fibonacci-számok A rekurzív függvények matematikai elméletében éppúgy ismert, mint a biológiában a Fibonacci olasz matematikusról elnevezett számsorozat. E híres matematikus (aki egyébként a matematikának sok mai szóhasználattal élve ágában jeleskedett) Európában talán elsőként nyúlt egzakt eszközökhöz mindennapos mondhatnánk háztáji probléma megoldásához. Ugyanis azt vizsgálta, hogy egy nyúlpár alapította nyúlnemzetség adott idő alatt mekkora létszámúra növekszik, figyelembe véve, hogy a leszármazottak is alaposan besegítenek a létszámnövelésbe. Ha a szaporodás eléggé szabályosan történik, akkor az új generáció létszámát az előzőek ismeretében könnyen kiszámíthatjuk. Szerinte az új generáció növekedését az előző 2 generáció gyerekei teszik ki. E mögött az a feltételezés húzódik meg, hogy minden nyúlpár egyszerre éppen 2 utóddal járul a népességhez, és e szokásukat születésüket követő 2 egymásutáni időpontban gyakorolják (mert mondjuk mielőtt a harmadik szaporodásra sor kerülhetne, fazékba kerülnek). Definíciója: Fib n 0 ha n 0 1 ha n 1 Fib n 1 Fib n 2 ha n 1 Példa: (a Fibonacci-szám sorozat első néhány tagja) 0,1,1,2,3,5,8,13,21,34,55,... 3

Fib(N): Elágazás N=0 esetén Fib:=0 N=1 esetén Fib:=1 egyéb esetben Fib:=Fib(N-1)+Fib(N-2) Elágazás vége Nézzük meg Fib(4) kiszámítását! Fib(4) => Fib(3) + Fib(2) Fib(3) => Fib(2) + Fib(1) Fib(2) => Fib(1) + Fib(0) Fib(2) => Fib(1) + Fib(0) Többször is kiszámításra kerülnek ugyanazok a tagok! Járdakövezés Számítsuk ki, hogy hányféleképpen lehet egy 2xn egység méretű járdát kikövezni 1x2 méretű lapokkal! Az első lapot lerakhatjuk függőlegesen: vagy kettőt vízszintesen: Az első esetben (n-1)*2 cellát kell még lefednünk, a másodikban pedig (n-2)*2 cellát. Azaz az n*2 cella lefedéseinek Lefed(n) száma Lefed(n-1)+Lefed(n-2). Lefed(N): Elágazás N=0 esetén Lefed:=0 N=1 esetén Lefed:=1 egyéb esetben Lefed:=Lefed(N-1)+Lefed(N-2) Elágazás vége 4

Járdakövezés újra Számítsuk ki, hogy hányféleképpen lehet egy n egység méretű járdát kikövezni 1x1, 1x2 és 1x3 méretű lapokkal! Az első helyre tehetünk 1x1-es lapot: Az első helyre tehetünk 1x2-es lapot: Az első helyre tehetünk 1x3-as lapot: Az első esetben n-1, a másodikban n-2-t, a harmadikban pedig n-3 cellát kell még lefednünk. Azaz az n cella lefedéseinek Lefed(n) száma Lefed(n-1)+Lefed(n-2)+Lefed(n-3). Lefed(N): Elágazás N=0 esetén Lefed:=0 N=1 esetén Lefed:=1 N=2 esetén Lefed:=2 egyéb esetben Lefed:=Lefed(N-1)+Lefed(N-2)+Lefed(N-3) Elágazás vége Gondolkodtató Hányféleképpen lehet egy 3xn egység méretű járdát kikövezni 1x2 méretű lapokkal! Az első oszlop középső négyzete háromféleképpen fedhető le. A második és harmadik eset ráadásul egymás tükörképe. 1. eset 5

2. eset 3. eset Az első oszlop betöltéséhez mindegyik csak egyféleképpen folytatható: 1. eset 2. eset 3. eset 6

Lépcső Az iskola bejáratánál N lépcsőfok van. Egyszerre maximum K fokot tudunk lépni, ugrani fölfele. Minden nap egyszer megyünk be az iskolába. Készíts programot, amely megadja, hogy hány napig tudunk más és más módon feljutni a lépcsőkön! Másképp megfogalmazva a feladatot, arra vagyunk kíváncsiak, hogy az N. lépcsőfokra hányféleképpen lehet feljutni. Nézzük először a K=2 esetet! Az N. lépcsőfokra két helyről tudunk lépni, az N-1-edikről és az N-2-edikről. Azaz annyiféle feljutási lehetőség van az N. lépcsőfokra, amennyi az N-1- edikre plusz amennyi az N-2-dikre, tehát Lépcső(N)=Lépcső(N-1)+Lépcső(N-2). Itt is a Fibonacci számokat kapjuk. Ezt kell általánosítanunk K-ra: Lépcső(N)=Lépcső(N-1)+ +Lépcső(N-K). Lépcső(N): Ha N=0 akkor L:=1 különben L:=0 Ciklus i=1-től K-ig Ha N-i 0 akkor L:=L+Lépcső(N-i) Ciklus vége Lépcső:=L 3. M-nél kisebb vagy egyenlő kettő-hatványok előre Adjuk meg az M-nél nem nagyobb kettő-hatványokat növekvő sorrendben! A feladatot átfogalmazhatjuk úgy, hogy adjuk meg a K-nál nagyobb vagy egyenlő, M-nél kisebb vagy egyenlő kettő-hatványokat növekvő sorrendben (ha K kettő-hatvány)! Már itt is a rekurzió: ezek a számok a K, majd pedig a 2*K-nál nagyobb vagy egyenlő, M-nél kisebb vagy egyenlő kettő-hatványok növekvő sorrendben: Hatványok(K,M): Ha KM akkor Ki: K; Hatványok(2*K,M) Példa: K=1, M=1000 1 2 4 8 16 32 64 128 256 512 4. M-nél kisebb vagy egyenlő kettő-hatványok visszafelé Adjuk meg az M-nél nem nagyobb kettő-hatványokat csökkenő sorrendben! A feladatot átfogalmazhatjuk úgy, hogy adjuk meg a K-nál nagyobb vagy egyenlő, M-nél kisebb vagy 7

egyenlő kettő-hatványokat csökkenő sorrendben (ha K kettő-hatvány)! Már itt is a rekurzió: ezek a számok a 2*K-nál nagyobb vagy egyenlő, M-nél kisebb vagy egyenlő kettő-hatványok csökkenő sorrendben, majd pedig a K: Hatványok(K,M): Ha KM akkor Hatványok(2*K,M); Ki: K Példa: K=1, M=1000 512 256 128 64 32 16 8 4 2 1 5. M-nél kisebb vagy egyenlő kettő-hatványok oda és vissza Adjuk meg az M-nél nem nagyobb kettő-hatványokat növekvő, majd visszafelé csökkenő sorrendben! A feladatot átfogalmazhatjuk úgy, hogy adjuk meg a K-nál nagyobb vagy egyenlő, M-nél kisebb vagy egyenlő kettő-hatványokat ilyen sorrendben (ha K kettő-hatvány)! Már itt is a rekurzió: ezek a számok a K, majd a 2*K-nál nagyobb vagy egyenlő, M-nél kisebb vagy egyenlő kettő-hatványok csökkenő sorrendben, végül pedig újra a K: Hatványok(K,M): Ha KM akkor Ki: K; Hatványok(2*K,M); Ki: K Példa: K=1, M=1000 1 2 4 8 16 32 64 128 256 512 512 256 128 64 32 16 8 4 2 1 6. Binomiális együtthatók Egy véges halmaz, melynek N darabszámú elemeiből K elemszámú halmazokat (kombinatorika nevén osztályokat) akarunk mindenféle módon képezni (és minden elem csak egyszer fordul elő). Ezt úgy hívjuk, hogy n elem k-ad osztályú ismétlés nélküli kombinációja. Ezen kombinációk száma megegyezik a matematikából máshonnan is ismert binomiális együtthatókkal. A binomiális együtthatókat a következő képlettel definiálhatjuk: n k n! k! n k! Ennek kiszámítása hosszú programot igényelne, próbálkozzunk inkább egy másik kiszámítási módszerrel! 8

Ehhez nézzük meg e számok elrendezését, a Pascal háromszöget: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 1 10 45 120 210 252 210 120 45 10 1 1 11 55 165 330 462 462 330 165 55 11 1 1 12 66 220 495 792 924 792 495 220 66 12 1 Felfedezhetjük, hogy a fenti táblázatban minden szám a fölötte levő két szám összege, azaz N elemből K elem választása leírható az alábbi módon: az első elemet választjuk, majd még N-1 elemből választunk K-1 elemet. vagy az első elemet nem választjuk és a maradék N-1 elemből választunk K elemet. 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) Egy gyorsabb módszert is találhatunk N elemből K elem választására, ha felírjuk B(n.k) és B(n,k-1) értékét: B n,k n! k! n k! n! Bn,k 1 (k 1)! n k n n 1... k 1 n kn k 1... 1 n n 1... k 1 k 1! n k 1 n k... 1 Ha az alsó képlet számlálójából elhagyjuk a K értékét, a nevezőjéből pedig az (n-k+1)-et, akkor éppen a felső képletet kapjuk. A módszer másképp megfogalmazva: először kiválasztunk K-1 elemet, majd a maradék N-K+1 elemből kell egyet választani (de így minden kombináció pontosan K-féleképpen áll elő), tehát jön még egy K-val osztás. 9

Bin(n,k): Ha k=0 akkor Bin:=1 különben Bin:=Bin(n,k-1)*(n-k+1)/k Eddig közvetlen, szimpla rekurzióval foglalkoztunk. Ideje megnézni a dupla, illetve a közvetett rekurziót is. 7. McCarthy-féle 91-es függvény: Zohar Manna, Amir Pnueli és John McCarthy 1970-ben találta ki elméleti informatikai célokra ezt a rekurzív függvényt. Értéke 91 lesz minden 100-nál kisebb vagy egyenlő n természetes számra. 100-nál nagyobb n-ekre az értéke n-10 lesz. 1. példa: M(99) = M(M(110)) mert 99 100 = M(100) mert 110 > 100 = M(M(111)) mert 100 100 = M(101) mert 111 > 100 = 91 mert 101 > 100 2. példa: M(87) = M(M(98)) = M(M(M(109))) = M(M(99)) = M(M(M(110))) = M(M(100)) = M(M(M(111))) = M(M(101)) = M(91) = M(M(102)) = M(92) 10

= M(M(103)) = M(93) = M(99) innen ugyanaz, mint az 1. példa = 91 A függvény duplán rekurzívan: M(n): Ha n>100 akkor M:=n-10 különben M:=M(M(n+11)) A függvényben a dupla rekurzió kifejtve: M(n): Ha n>100 akkor M:=n-10 különben x:=m(n+11); M:=M(x) Tehát a dupla rekurzió algoritmikus szinten nem okoz semmilyen gondot! 8. Döntsük el egy számról, hogy páros-e! Tegyük fel, hogy nincs maradék-számítás műveletünk! A megoldás egy közvetett rekurzív számítás: a párosságot visszavezethetjük eggyel kisebb szám páratlanságára, a páratlanságot pedig eggyel kisebb szám párosságára. Ez a közvetett rekurzió Páros(n): Ha n=0 akkor Páros:=igaz különben Páros:=Páratlan(n-1) Páratlan(n): Ha n=1 akkor Páratlan:=igaz különben Páratlan:=Páros(n-1) Ugyanez összevonva egyetlen rekurzív függvénybe, közvetlen rekurzióvá alakítva: 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) 11

9. Hatványozás Két szám hatványozását (A B ) visszavezethetjük szorzásokra és kettővel osztásra a következőképpen: A B 1 A A A A B / 2 B1 ha ha ha B 0 B B páros páratlan Hatvány(A,B): Ha B=0 akkor Hatvány:=1 különben Ha B páros akkor Hatvány:=Hatvány((A*A),(B/2)) különben Hatvány:=A*Hatvány(A,(B-1)) Példa: 2 10 =4 5 =4*4 4 =4*16 2 =4*256 1 =4*256 12