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

Hasonló dokumentumok
Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

Rekurzív algoritmusok

Algoritmusok és adatszerkezetek gyakorlat 09 Rendezések

2018, Diszkrét matematika

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Algoritmusok és adatszerkezetek gyakorlat 07

Adatszerkezetek 7a. Dr. IványiPéter

10. előadás Speciális többágú fák

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

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

Algoritmuselmélet 2. előadás

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

15. A VERSENYRENDEZÉS

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

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

Programozási módszertan. Függvények rekurzív megadása "Oszd meg és uralkodj" elv, helyettesítő módszer, rekurziós fa módszer, mester módszer

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

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

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

Lapok száma: 1 Oldalarány: A/4 Lépésszám: 58. Szarvasbogár

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

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

Tartalomjegyzék. Köszönetnyilvánítás. 1. Az alapok 1

Ellenőrző kérdések. 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t

Algoritmusokfelülnézetből. 1. ELŐADÁS Sapientia-EMTE

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik.

A programozás alapjai 1 Rekurzió

Programozás alapjai 5. gyakorlat Vezérlési szerkezetek egymásba ágyazása

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

10. gyakorlat Tömb, mint függvény argumentum

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik.

Számjegyes vagy radix rendezés

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

Algoritmusok pszeudókód... 1

Fibonacci számok. Dinamikus programozással

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

Programozási segédlet

Sapientia Egyetem, Műszaki és Humántudományok Tanszék.

Tartalomjegyzék Algoritmusok - pszeudókód

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

2. Visszalépéses keresés

Rekurzió. Dr. Iványi Péter

29. Visszalépéses keresés 1.

Általános algoritmustervezési módszerek

B-fa. Felépítés, alapvető műveletek. Programozás II. előadás. Szénási Sándor.

Algoritmusok pszeudókód... 1

Legkönnyebb és legnehezebb Rendezési algoritmusok

Programozás alapjai 9. előadás. Wagner György Általános Informatikai Tanszék

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

Webprogramozás szakkör

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

Programozási módszertan. Dinamikus programozás: szerelőszalag ütemezése Mátrixok véges sorozatainak szorzása

A programozás alapjai előadás. [<struktúra változó azonosítók>] ; Dinamikus adatszerkezetek:

Algoritmusok vektorokkal keresések 1

TestLine - bh-web Minta feladatsor

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

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

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Programozási módszertan. Mohó algoritmusok

7. BINÁRIS FÁK 7.1. A bináris fa absztrakt adattípus 7.2. A bináris fa absztrakt adatszerkezet

MUNKAANYAG. Szám János. Síkmarás, gépalkatrész befoglaló méreteinek és alakjának kialakítása marógépen. A követelménymodul megnevezése:

Gráfok 1. Tárolási módok, bejárások. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Visszalépéses keresés

Algoritmusok bonyolultsága

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

FFT =0.. 1! 1 %=0.. 1! 2. Legyen az ú.n. egységgyök a következő definícióval megadva: &# = 3

Buborékrendezés: Hanoi Tornyai: Asszimptótikus fv.ek: Láncolt ábrázolás: For ciklussal:

Optimalizációs stratégiák 2.

Kupac adatszerkezet. 1. ábra.

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

Információs Technológia

Programozás alapjai II. (7. ea) C++

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

Algoritmusok. Hogyan csináljam?

Dinamikus programozás - Szerelőszalag ütemezése

Feladatmegoldási stratégiák

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

Adatszerkezetek I. 4. előadás

10. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: január 28.

Optimalizációs stratégiák 1.

1. előadás. számításokban. Adatszerkezetek és algoritmusok előadás február 12. Kósa Márk, Pánovics János, Szathmáry László és Halász Gábor

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Felhasználói kézikönyv a WEB EDInet rendszer használatához

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

Egyszerű programozási tételek

1. ábra. Számláló rendezés

Algoritmusok és adatszerkezetek 2.

Dinamikus programozás II.

Adatmanipuláció, transzformáció, szelekció SPSS-ben

2018, Funkcionális programozás

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

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

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

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?

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

Absztrakt adatstruktúrák A bináris fák

2018, Funkcionális programozás

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

Átírás:

Algoritmusok és adatszerkezetek gyakorlat 03 Oszd meg és uralkodj Divide & Conquer (,,Oszd meg és uralkodj ) paradigma Divide: Osszuk fel az adott problémát kisebb problémákra. Conquer: Oldjuk meg a kisebb problémákat (iteratívan vagy rekurzívan) Combine: Ezek eredményei alapján oldjuk meg az adott,,nagy problémát. Nagy Kisebb Kisebb Rekurzió Olyan művelet, mely végrehajtáskor a saját maga által definiált műveletet, vagy műveletsort hajtja végre (általában a probléma egy kisebb példányára), ezáltal önmagát ismétli. Egy rekurzív algoritmusnak két része van: Alapeset: a megoldást már előre tudjuk vagy könnyen kiszámítható (ekkor nincs rekurzív hívás) Rekurzív eset: a megoldást úgy kapjuk, hogy a probléma más, általában kisebb példányainak megoldását használjuk fel Csináljunk belőle mindig kisebbet, amíg el nem érjük az alapesetet 1 Gelle Kitti

Példa: Faktoriális számítás: n! = n (n 1) (n 2)... 2 1 Rekurzív összefüggés: n! = n (n 1)! Alapeset: n = 1 Rekurzív eset: n > 1 n (n 1)! 1. Feladat Az előző órán tárgyalt bináris keresés egy ilyen Oszd meg és uralkodj típusú algoritmus. Mutassuk meg, hogy tényleg az és adjuk meg a rekurzív változatát! Az oszd meg és uralkodj paradigma 3 lépésének megvalósulása: 1. Divide: megnézzük a középső elemet, és az értékétől függően döntünk 2. Conquer: Az egyik résztömbben keresünk ugyanezzel a módszerrel 3. Combine: Nem szükséges. Írjuk fel a lehetséges eseteket: Alapeset: két alapesetünk van: 1. amikor megtaláljuk az elemet: key == a[mid] return mid 2. és amikor nincs benne a keresett elem a tömbben: r <= l return 1 Rekurzív eset: attól függően, hogy a középső elemtől merre van a keresett elem, keressük abban a résztömbben rekurzívan. return binarysearch(a, alsohatar, felsohatar, key); 2. Feladat Adjunk rekurzív algoritmust, ami meghatározza, hogy hányféleképpen mehetünk fel egy n lépcsőfokból álló lépcsőn, ha egyszerre csak 1 vagy 2 lépcsőfokot léphetünk! Jelölje P (n) azt, hogy n lépcsőfokon hányféleképpen mehetünk fel. összefüggések állnak fent: Ekkor a következő P (1) = 1 (ha egy lépcső van, egyféleképpen mehetünk) 2 Gelle Kitti

P (2) = 2 (ha két lépcső van, vagy kétszer egyet lépünk, vagy egyszer kettőt) P (n) = P (n 1) + P (n 2), ha n 3 (utolsó lépésként egyet vagy kettőt léphetünk) Algoritmus: i n t P( i n t n){ i f ( n == 1) return 1 ; e l s e i f ( n == 2) return 2 ; e l s e return P(n 1) + P(n 2); } 3. Feladat Adjunk rekurzív algoritmust, amely meghatározza, hogy hányféleképpen juthatunk el egy k sorból és n oszlopból álló sakktábla bal alsó sarkából a jobb felső sarkába, ha csak a jobbra vagy a felfelé szomszédos mezőre léphetünk! Jelölje R(k, n) azt a számot, ahányféleképpen eljuthatunk a bal alsó sarokból a jobb felső sarokba. 3 Gelle Kitti

Ekkor a következő összefüggések állnak fent: R(k, 1) = 1 (csak felfelé mehetünk) R(1, n) = 1 (csak jobbra mehetünk) R(k, n) = R(k, n 1)+R(k 1, n), ha n, k 2 (az első lépés jobbra vagy felfelé történhet) Algoritmus: i n t R( i n t k, i n t n){ i f ( ( k == 1) or ( n == 1 ) ) return 1 ; e l s e return R( k, n 1) + R( k 1, n ) ; } 4. Feladat Hajtsuk végre a következő rendezőalgoritmust a 8, 4, 1, 5, 3, 2, 6, 7 listán! Összefésülő rendezés Input: Egy n elemet tartalmazó tömb Output: Az input tömb rendezve 4 Gelle Kitti

Algoritmus (D&C): MERGESORT (A[1,..., n]) 1. Ha n = 1 return A 2. Rekurzívan alkalmazzuk a lista két felére: M ERGESORT (A[1,..., n/2 ]) és MERGESORT (A[ n/2 + 1,..., n]) 3. A 2 listát,,fésüljük össze Egy lehetséges megvalósítás (helyben rendezve) itt, és egy másik temp tömbbel itt. 1 1 2 2 12 12 3 3 7 7 13 13 17 17 4 8 1 5 3 2 6 7 4 5 8 9 14 15 18 19 4 8 1 5 2 3 6 7 6 10 16 20 1 4 5 8 2 3 6 7 11 21 1 2 3 4 5 6 7 8 1. Ábra.: A nyilakon a számok a rekurzív hívások sorrendjét jelölik. Érdekesség: ha meg akarod tudni, hogyan működik a Divide & Conquer módszer a Fast Fourier transzformáció esetén, kattints a nyuszira: 5 Gelle Kitti