Informatikai tehetséggondozás:

Hasonló dokumentumok
Visszalépéses kiválogatás

Adatszerkezetek II. 10. előadás

Kombinatorikai algoritmusok

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

Informatikai tehetséggondozás:

Informatikai tehetséggondozás:

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

BACKTRACKING Visszalépéses keresés

Feladatmegoldási stratégiák

Programozási tételek. Dr. Iványi Péter

Problémamegoldási stratégiák

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

Felvételi tematika INFORMATIKA

Permutáció n = 3 esetében: Eredmény: permutációk száma: P n = n! romámul: permutări, angolul: permutation

Visszalépéses maximumkiválasztás

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

Rendezések. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar október 24.

Informatikai tehetséggondozás:

Multihalmaz, intervallumhalmaz

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

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

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

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

Rekurzív algoritmusok

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Összetett programozási tételek

Algoritmusok és adatszerkezetek I. 7. előadás

Kombinatorika. Permutáció

Informatikai tehetséggondozás:

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

INFORMATIKA javítókulcs 2016

Visszalépéses keresés

OSZTHATÓSÁG. Osztók és többszörösök : a 3 többszörösei : a 4 többszörösei Ahol mindkét jel megtalálható a 12 többszöröseit találjuk.

Dinamikus programozás II.

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 2015/2016 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

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

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

Alkalmazott modul: Programozás

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

1. feladatsor: Vektorterek, lineáris kombináció, mátrixok, determináns (megoldás)

ELEMI PROGRAMOZÁSI TÉTELEK

HHF0CX. k darab halmaz sorbarendezésének a lehetősége k! Így adódik az alábbi képlet:

Bevezetés a programozásba I.

Adatszerkezetek II. 6. előadás

FÖLDPRÖGETŐK TERMÉSZETTUDOMÁNYOS HÁZIVERSENY IV. FORDULÓ - Sakk 5 6. évfolyam

Assignment problem Hozzárendelési feladat (Szállítási feladat speciális esete)

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

Klasszikus algebra előadás. Waldhauser Tamás április 14.

K O M B I N A T O R I K A P e r m u t á c i ó k, k o m b i n á c i ó k, v a r i á c i ó k

Mohó stratégia. Feladat: Megoldás:

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

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.

Matematika tanmenet 2. osztály részére

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

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

Közismereti informatika I. 4. előadás

Műveletek egész számokkal

7! (7 2)! = 7! 5! = 7 6 5! 5 = = ből 4 elem A lehetőségek száma megegyezik az 5 elem negyedosztályú variációjának számával:

43. ORSZÁGOS TIT KALMÁR LÁSZLÓ MATEMATIKAVERSENY MEGYEI FORDULÓ HATODIK OSZTÁLY JAVÍTÁSI ÚTMUTATÓ

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

A 2013/2014 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

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

Adatszerkezetek II. 1. előadás

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

MATEMATIKA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ

Diszkrét matematika I.

8. GYAKORLÓ FELADATSOR MEGOLDÁSA. (b) amelyiknek mindegyik számjegye különböző, valamint a második számjegy a 2-es?

2018, Diszkrét matematika

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 I. 1. előadás

Amortizációs költségelemzés

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA

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

Informatikai tehetséggondozás:

Backtrack-es feladat-variációk

VI. Vályi Gyula Emlékverseny november

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 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny első fordulójának feladatai. INFORMATIKA II. (programozás) kategória

Elemi matematika szakkör

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

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

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

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

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

1. TÁJÉKOZÓDÁS A SAKKTÁBLÁN 1

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

2. Visszalépéses keresés

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

INFORMATIKAI ALAPISMERETEK

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).

Megoldások III. osztály

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

Visszalépéses keresés korlátozással

Money Run KEZELÉSI ÚTMUTATÓ

1. FELADATSOR MEGOLDÁSAI. = 6. Ezek a sorozatok a következők: ab, ac, ba, bc, ca, cb.

Egyszerű programozási tételek

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

Átírás:

Ég és Föld vonzásában a természet titkai Informatikai tehetséggondozás: isszalépéses kiválogatás TÁMOP-4.2.3.-12/1/KON

isszalépéses kiválogatás 1. Az összes lehetséges sorrend Sokszor előfordul feladatként, hogy elő kell állítani valamilyen elemek összes lehetséges sorrendjét. Az egyszerűség kedvéért legyenek az elemek az 1,,N sorszámok. Ha ugyanis bármi más elemekről lenne szó, akkor azokat helyezzük el egy tömbbe és a sorszámukat használjuk indexelésre! Így például 4 elem összes lehetséges sorrendje: 1.: 1 2 3 4 2.: 1 2 4 3 3.: 1 3 2 4 4.: 1 3 4 2 5.: 1 4 2 3 6.: 1 4 3 2 7.: 2 1 3 4 8.: 2 1 4 3 9.: 2 3 1 4 10.: 2 3 4 1 11.: 2 4 1 3 12.: 2 4 3 1 13.: 3 1 2 4 14.: 3 1 4 2 15.: 3 2 1 4 16.: 3 2 4 1 17.: 3 4 1 2 18.: 3 4 2 1 19.: 4 1 2 3 20.: 4 1 3 2 21.: 4 2 1 3 22.: 4 2 3 1 23.: 4 3 1 2 24.: 4 3 2 1 Látszik ezen a számsorozaton, hogy mindegyik tagja 1 és 4 közötti (általános esetben 1 és N közötti), de minden szám pontosan egyszer fordul elő egy sorozatban. Másképp ránézve: annak 1-essel, 2-essel, 3-assal és 4-essel kezdődő típusúak. A megoldás is erre fog építeni, adjuk meg az összes 1-essel kezdődőt, az összes 2-essel kezdődőt, Az alábbi programban N az elemek száma, i pedig azon helyek száma, ahova már tettünk elemet. Összes sorrend(n,i): Ha i>n akkor db:=db+1; Y(db):=X különben Ciklus j=1-től N-ig Összes sorrend(n,i+1) 2

isszalépéses kiválogatás volt(i,j): k:=1 Ciklus amíg k<i és X(k) j k:=k+1 volt:=(k<i) Függvény vége. 2. Az összes lehetséges speciális sorrend Az 1,,n sorozat összes olyan permutációját állítsuk elő, ahol minden elem maximum 1 hellyel mozdul el a helyéről, azaz i-1 X(i) i+1! Így például 4 elem összes lehetséges olyan sorrendje, ahol az elemek a sorszámuktól legfeljebb 1 távolságra lehetnek: 1.: 1 2 3 4 2.: 1 2 4 3 3.: 1 3 2 4 4.: 2 1 3 4 5.: 2 1 4 3 Kiszámolhatjuk egy egyszerű rekurzív függvénnyel, hogy hány ilyen sorozat lehet. Egy ilyen sorrend vagy 1-essel kezdődik és mögötte N-1 szám összes lehetséges jó sorrendje van, vagy 2 1-gyel kezdődik és mögötte N-2 szám összes lehetséges jó sorrendje van. Azaz az N szám összes lehetséges jó sorrendje megegyezik N-1 szám összes lehetséges jó sorrendje + N-2 szám összes lehetséges jó sorrendjével: ami ezek szerint egy Fibonacci-szám. A rekurzív megoldásban tehát j értéke csak i-1, i vagy i+1 lehet, két kivétellel, az 1-est nem lehet előre hozni, az N értéket nem lehet hátrább tenni. Összes jó sorrend(n,i): Ha i>n akkor db:=db+1; Y(db):=X különben Ciklus j=i-1-től i+1-ig Ha j 1 és j N és nem volt(i,j) akkor X(i):=j; Összes jó sorrend(n,i+1) 3. Szóösszeadó fejtörő Jól ismert fejtörő, amelyben egy aritmetikai művelet kapcsol egybe szavakat. A feladat az, hogy a szavak egyes betűinek feleltessünk meg egy számjegyet úgy, hogy a művelet helyes eredményt szolgáltasson a szavakon. 3

isszalépéses kiválogatás Pl. SEND + MORE = MONEY, vagy hagyományosan leírva: SEND + MORE MONEY A szavakban előforduló jelekhez (SENDMORY) keressük a 0..9 számjegyek egyértelmű hozzárendelését! 1. megoldási ötlet ( algebrai hozzáállás ): D+E=Y, N+R=E, M=1 D+E=10+Y, N+R+1=E, M=1 2. megoldási ötlet: Az összes permutáció algoritmusára építünk. A betűkhöz számjegyeket rendelünk az öszszes lehetséges sorrendben, majd megnézzük, hogy ez a hozzárendelés jó-e az összegzés szerint. A Jó eljárás ellenőrzi a permutáció a feladat szempontjából való helyességét, és gondoskodik az esetleges megoldás gyűjtéséről vagy kiírásáról. A megfelelőség a (*) SEND + MORE MONEY = 0 egyenletre. Ha 'S X(1) értékű, akkor a (*)-ban X(1) *1000-rel van jelen; 'E' X(2) értékű, akkor X(2)*(100+1-10)=X(2)*91-gyel; 'N' X(3) értékű, akkor X(3)*(10-100)= X(3)*(-90)-nel; 'D' X(4) értékű, akkor X(4)*(1)-gyel; 'M' X(5) értékű, akkor X(5)*(1000-10000)=X(5)*(-9000)-rel; 'O' X(6) értékű, akkor X(6)*(100-1000)= X(6)*(-900)-zal; 'R' X(7) értékű, akkor X(7)*10-zel; 'Y' X(8) értékű, akkor X(8)*(-1)-gyel van jelen. továbbá az S és az M betűhöz nem rendelhetünk nullát, azaz X(1) 0 és X(5) 0! Megoldás(n,i): Ha i=n+1 és jó(x) akkor db:=db+1; Y(db):=X; Kiírás(X) különben Ciklus j=0-tól 9-ig Ha nem volt(i,j) akkor X(i):=j; Megoldás(n,i+1) 4

isszalépéses kiválogatás jó(x): jó:=(x(1) *1000+X(2)*91+X(3)*(-90)+X(4)*1+X(5)*(-9000)+ X(6)*(-900)+X(7)*10+X(8)*(-1)=0 és X(1) 0 és X(5) 0) Függvény vége. Egy megoldás kiírása a következőképpen nézhet ki: Konstans szöveg= SENDMORY Kiírás(X): Ciklus i=1-től 8-ig Ki: szöveg(i),x(i) Szebben kiírva: SEND 9567 + MORE + 1085 MONEY 10652 Megjegyzés: Hatékonyabb lenne, ha az utolsó feltételt kihasználnánk menet közben: továbbá az S és az M betűhöz nem rendelhetünk nullát, azaz X(1) 0 és X(5) 0. Megoldás(n,i): Ha i=n+1 és jó(x) akkor db:=db+1; Y(db):=X; Kiírás(X) különben Ha i=1 vagy i=5 akkor jj:=1 különben jj:=0 Ciklus j=jj-től 9-ig Ha nem volt(i,j) akkor X(i):=j; Megoldás(n,i+1) Néhány hasonló fejtörő több összeadással: THIS + ISA +GREAT + TIME WASTER SATURN + URANUS +NEPTUNE + PLUTO PLANETS 5

isszalépéses kiválogatás MARS + ENUS +SATURN +URANUS NEPTUNE HEART + EARS + NOSE +THROAT HEALTH És egy fejtörő szorzással: HE * HE = SHE 4. N-ből K az összes lehetséges sorrendben Egy iskolai versenyen N tanuló vett részt. Meg szeretnénk tudni, hogy az első 3 helyen milyen lehetséges tanuló sorrendek fordulhatnak elő. A feladat általánosítása: álasszunk ki N elemből K különböző elemet az összes lehetséges sorrendben (ismétlés nélküli variáció)! A megoldás ugyanolyan, mint N elem összes lehetséges sorbarendezése, csupán az így kapott sorozatoknak az első K tagját kell nézni. Ehhez nem is kell előállítani az összes sorrendet, hanem meg lehet állni akkor, amikor már az első K tagot ismerjük az adott sorozatból. Így például 4 elemből 2 elem összes lehetséges sorrendje: 1.: 1 2 2.: 1 3 3.: 1 4 4.: 2 1 5.: 2 3 6.: 2 4 7.: 3 1 8.: 3 2 9.: 3 4 10.: 4 1 11.: 4 2 12.: 4 3 6

isszalépéses kiválogatás Összes sorrend(n,k,i): Ha i>k akkor db:=db+1; Y(db):=X különben Ciklus j=1-től N-ig Összes sorrend(n,k,i+1) 5. N-ből K az összes lehetséges növekvő sorrendben álasszunk ki N elemből K különböző elemet az összes lehetséges növekvő sorrendben (ismétlés nélküli kombináció)! A megoldás ugyanolyan, mint az N elemből K különböző elemet az összes lehetséges sorrendben feladaté, de csak olyan megoldásokat fogadunk el, ahol a kapott sorozat monoton növekvő. Így például 4 elemből 2 elem összes lehetséges növekvő sorrendje: 1.: 1 2 2.: 1 3 3.: 1 4 4.: 2 3 5.: 2 4 6.: 3 4 Ha a kapott sorozat csak monoton növekvő lehet, akkor persze az i-edik tagot elég az I-1. tagnál nagyobb lehetséges értékekre kipróbálni. Ugyancsak igaz, hogy a mögötte levőknek is kell hagyni értékeket, azaz a K. érték N-ig mehet, a K-1. érték N-1-ig, a K-2. érték N-2-ig, és így tovább. Összes sorrend(n,k,i): Ha i>k akkor db:=db+1; Y(db):=X különben Ciklus j=x(i-1)+1-től-től N-(K-i)-ig Összes sorrend(n,k,i+1) Megjegyzés: Azaz ez a feladat nem is visszalépéses kiválogatás, mert minden úton megoldáshoz jutunk. Ha megengednénk az ismétlődéseket, akkor az algoritmus a ciklus határai egyszerűsödne. 7

isszalépéses kiválogatás Összes sorrend(n,k,i): Ha i>k akkor db:=db+1; Y(db):=X különben Ciklus j=x(i-1)-től-től N-ig Összes sorrend(n,k,i+1) 6. Feladatok a sakktáblán N bástya elhelyezése egy NxN-es sakktáblán Helyezzünk el egy NxN-es sakktáblán az összes lehetséges módon N bástyát úgy, hogy ne üssék egymást! A bástyákról azt kell tudnunk, hogy a sorukban és az oszlopukban álló bábukat üthetik. Tehát úgy kell elhelyezni a bástyákat, hogy minden sorban és minden oszlopban is pontosan 1 bástya legyen! Ebből következik, hogy a megoldásokban elég azt megmondani, hogy az 1. oszlopban levő bástya melyik sorban áll, a második oszlopban levő bástya melyik sorban áll, és így tovább. Mivel mindegyiknek különböző sorokban kell állnia, ezért a feladat ugyanaz, mint az N elem összes lehetséges sorrendjének előállítása. Egy lehetséges megoldás N=8-ra: 8

isszalépéses kiválogatás Összes bástya(n,i): Ha i>n akkor db:=db+1; Y(db):=X különben Ciklus j=1-től N-ig Összes bástya(n,i+1) volt(i,j): k:=1 Ciklus amíg k<i és X(k) j k:=k+1 volt:=(k<i) Függvény vége. N vezér elhelyezése egy NxN-es sakktáblán Helyezzünk el egy NxN-es sakktáblán az összes lehetséges módon N vezért úgy, hogy ne üssék egymást! A vezérekről azt kell tudnunk, hogy a sorukban, az oszlopukban és az átlójukban álló bábukat üthetik. Tehát úgy kell elhelyezni a vezéreket, hogy minden sorban és minden oszlopban is pontosan 1 vezér legyen, és minden átlóban legfeljebb 1 vezér legyen! Ebből következik, hogy a megoldásokban elég azt megmondani, hogy az 1. oszlopban levő bástya melyik sorban áll, a második oszlopban levő bástya melyik sorban áll, és így tovább. Egy lehetséges megoldás N=5-re és N=4-re: Itt tehát nem elég azt megnézni egy új vezér elhelyezésekor, hogy volt-e már a j. sorban vezér, hanem azt is kell, hogy volt-e már az (i,j) mezővel egy átlóban vezér. 9

isszalépéses kiválogatás Összes vezér(n,i): Ha i>n akkor db:=db+1; Y(db):=X különben Ciklus j=1-től N-ig Összes vezér(n,i+1) volt(i,j): k:=1 Ciklus amíg k<i és X(k) j és i-k abs(j-x(k)) k:=k+1 volt:=(k<i) Függvény vége. Megjegyzés: Amíg a bástyás feladatnak mindig van (méghozzá nagyon sok) megoldása, addig a vezéres feladatnak N=2 és N=3 esetén biztosan nincs egy megoldása sem, más N-ek esetén pedig vannak megoldások, de sokkal kevesebb, mint a bástyás feladatnál. Példa: az alábbi sakktáblákra nem lehet elhelyezni 2, illetve 3 vezért úgy, hogy ne üssék egymást: 10