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

Hasonló dokumentumok
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.

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

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

Összetett programozási tételek

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

Egyszerű programozási tételek

Objektum Orientált Programozás VII.

Programozási tételek. PPT 2007/2008 tavasz.

PROGRAMOZÁSI TÉTELEK

Egyszerű programozási tételek

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

Számjegyes vagy radix rendezés

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

Informatikai tehetséggondozás:

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

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

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

Programozási segédlet

ELEMI PROGRAMOZÁSI TÉTELEK

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

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.

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat

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.

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

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]

14. Mediánok és rendezett minták

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

BASH script programozás II. Vezérlési szerkezetek

Algoritmuselmélet 2. előadás

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

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

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

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

Számláló rendezés. Példa

Egyszerű programozási tételek

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

Programozási módszertan. Mohó algoritmusok

Programozási alapismeretek 11. előadás

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

1. ábra. Egy rekurzív preorder bejárás. Egy másik rekurzív preorder bejárás

Adatbázis rendszerek Gy: Algoritmusok C-ben

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

Kupac adatszerkezet. 1. ábra.

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

Felvételi tematika INFORMATIKA

1. Jelölje meg az összes igaz állítást a következők közül!

Tartalom. Programozási alapismeretek. 11. előadás

Dr. Schuster György február / 32

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

Láncolt listák Témakörök. Lista alapfogalmak

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

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

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

Algoritmuselmélet. Legrövidebb utak, Bellmann-Ford, Dijkstra. Katona Gyula Y.

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

Algoritmizálás és adatmodellezés 2. előadás

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

Programozás alapjai. 5. előadás

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

Algoritmusok vektorokkal keresések 1

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

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

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

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

Informatikai tehetséggondozás:

Bevezetés a programozásba I.

Objektumorientált Programozás VI.

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

PROGRAMOZÁSI NYELVEK (GYAKORLAT)

Térinformatikai algoritmusok Elemi algoritmusok

Algoritmuselmélet 1. előadás

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

A PROGRAMOZÁS ALAPJAI 3. Készítette: Vénné Meskó Katalin

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

INFORMATIKA javítókulcs 2016

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

Programozási módszertan. Dinamikus programozás: A leghosszabb közös részsorozat

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

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

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Programozás C nyelven (3. ELŐADÁS) Sapientia EMTE

Térinformatikai algoritmusok Elemi algoritmusok

Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19.

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

Adatszerkezetek II. 10. előadás

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

Az összetett programozási tételek is egy tőről fakadnak

Programozás II. előadás

Adatszerkezetek 7a. Dr. IványiPéter

7. előadás. Gyorsrendezés, rendezés lineáris lépésszámmal. Adatszerkezetek és algoritmusok előadás március 6.

Multihalmaz, intervallumhalmaz

A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre a feladat sorszámát (például: 3. feladat:)!

Gráfelméleti feladatok. c f

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás

Véletlen sorozatok ellenőrzésének módszerei. dolgozat

Informatikai tehetséggondozás:

BASH SCRIPT SHELL JEGYZETEK

Átírás:

Összetett programozási tételek Sorozathoz sorozatot relő feladatokkal foglalkozunk. A bemenő sorozatot le kell másolni, s közben az elemekre vonatkozó átalakításokat lehet végezni rajta: Input : n N 0, x H n, f : H G Output : y G n Q : R : i (1 i n) : y i = f (x i ) Az algoritmus: Függvény: f : H elemtípus G elemtípus Változók: n : egész {a feldolgozandó sorozat elemszáma} x : tömb(1..n:h-elemtipus) {a feldolgozandó sorozat elemei} y : tömb(1..n:g-elemtípus) {a feldolgozott sorozat}

Összetett programozási tételek A megoldás: másolás(n, x, y) for i = 1 : n y (i) := f (x (i)) eljárás vége Példa: Egy szöveg minden magánhangzóját cseréljük ki az e betűre!

Összetett programozási tételek Meg kell adni egy sorozat adott tulajdonságú elemeinek számát és indexeit: Input : n N 0, x H n, T : H L, χ : H {0, 1} χ (x) = 1, ha T (x) és χ (x) = 0, ha T (x) Output : DB N 0, y [1..n] n Q : R : DB = n i=1 χ (x i) y [1..n] i (1 i DB) : T (x yi ) Figyeljük meg, hogy az y tömb hossza előre nem meghatározható, de legfeljebb n.

Összetett programozási tételek Az algoritmus: Függvény: T : elemtípus L Változók: n : egész {a feldolgozandó sorozat elemszáma} x : tömb(1..n:elemtipus) {a feldolgozandó sorozat elemei} DB : egész {a megfelelő elemek száma} y : tömb(1..n:egész) {a megfelelő elemek sorszámai}

Összetett programozási tételek A megoldás: kiválogatás(n, x, DB, y) DB := 0 for i = 1 : n if T (x (i)) then DB := DB + 1 Y (DB) = i eljárás vége Feladat: Módosítsuk a feladatot és az algoritmust, hogy ne a sorszámokat, de magukat az elemeket gyüjtse ki.

Összetett programozási tételek A feladat egy sorozat elemeinek szétválogatása két részsorozatba, ahol az egyik sorozatban adott tulajdonságú elemek, míg a másikban az adott tulajdonsággal nem relkező elemek vannak: Input : n N 0, x H n, T : H L, χ : H {0, 1} χ (x) = 1, ha T (x) és χ (x) = 0, ha T (x) Output : DBY, DBZ N 0, y, z H n Q : R : DBY = n i=1 χ (x i) y x i (1 i DBY ) : T (y i ) DBZ = n DBY z x i (1 i DBZ) : T (z i )

Összetett programozási tételek Az algoritmus: Függvény: T : elemtípus L Változók: n : egész {a feldolgozandó sorozat elemszáma} x : tömb(1..n:elemtipus) {a feldolgozandó sorozat elemei} DBY, DBZ : egész {a megfelelő sorozatok elemszámai} y, z : tömb(1..n:elemtípus) {a megfelelő sorozatok elemei}

Összetett programozási tételek A megoldás: szétválogatás(n, x, DBY, y, z, DBZ) DBY, DBZ := 0, 0 for i = 1 : n if T (x (i)) then DBY := DBY + 1 Y (DBY ) = x (i) else DBZ := DBZ + 1 Z (DBZ) = x (i) eljárás vége

Rezések Az alapfeladat egy n elemszámú sorozat nagyság szerinti sorbarezése. Ez feltételezi, hogy a sorozat elemeire létezik a, < reláció. Számos megoldó algoritmus létezik és ezekkel külön terület (tantárgy) foglalkozik. Input : n N 0, x H n Output : x H n Q : R : x ki rezett és x ki = permutáció (x be ) Az algoritmus: Változók: n : egész {a feldolgozandó sorozat elemszáma} x : tömb(1..n:elemtipus) {a feldolgozandó sorozat elemei}

Rezések Alapötlete: Hasonlítsuk össze az első elemet a sorozat összes többi mögötte levő elemével, s ha valamelyik kisebb nála, akkor cseréljük meg őket. Ezzel elérhetjük, hogy a sorozat első helyére a legkisebb elem kerül. Folytassuk ugyanígy a sorozat második elemével, stb., utoljára pedig az utolsó előttivel. rezés(n, x) for i = 1 : n 1 for j = i + 1 : n if x (i) > x (j) then csere (x (i), x (j)) eljárás vége Az eljárás helyigénye: n + 1. Az összehasonlítások száma: n (n 1) /2. A cserék száma 0 és n (n 1) /2 között van.

Rezések Az előző rezési eljárásban sok a felesleges csere. Ehelyett az aktuális első elemet a mögötte lévők közül egyedül a legkisebbel cseréljük ki. Ehhez a rező ciklus belsejében egy minimumkeresést kell csinálni. rezés(n, x) for i = 1 : n 1 MIN := i for j = i + 1 : n if x (MIN) > x (j) then MIN := j csere(x (i), x (MIN)) eljárás vége Az eljárás helyigénye: n + 1. Az összehasonlítások száma: n (n 1) /2. A cserék száma: n 1.

Rezések Alapötlete: 1. Felosztás: Az {A (p),..., A (r)} tömb (p r) felosztása két összefüggő (esetleg üres) {A (p),..., A (q 1)}, {A (q + 1),..., A (r)} résztömbre úgy, hogy a baloldali résztömb elemei kisebb, vagy kisebb-egyenlők A (q)-nál, a jobboldali résztömb elemei pedig nagyobb vagy egyenlők A (q)-nál. A q index számítása a felosztó eljárás része. 2. Uralkodás: Az {A (p),..., A (q 1)} és {A (q + 1),..., A (r)} résztömböket a felosztás (gyorsrezés) rekurzív hívásával rezzük.

Rezések 3. Összevonás: Mivel a két résztömböt helyben reztük, az egész {A (p),..., A (r)} tömb rezett. Az algoritmus leírása: gyorsrezés (A, p, r) if p < r q = feloszt(a, p, r) gyorsrezés (A, p, q 1) gyorsrezés (A, q + 1, r) eljárás vége

Rezések Teljes tömb rezése: gyorsrezés(a, 1, hossz (A)). A tömb felosztása: A feloszt függvényeljárás helyben átrezi az {A (p),..., A (r)} résztömböt. feloszt (A, p, r) x = A (r) i = p 1 for j = p : r 1 if A (j) x i = i + 1 csere (A(i), A (j)) csere (A (i + 1), A (r)) feloszt = i + 1 eljárás vége

Keresések Adott egy rezett sorozat, amelyben egy adott értékű elem sorszámát kell meghatározni, ha az benne van a sorozatban: Input : n N, x H n, y H Output : VAN L, SORSZ N 0 Q : rezett (x) R : VAN ( i (1 i n) : x i = y) VAN = (1 SORSZ n) x SORSZ = y Az algoritmus: Változók: n : egész {a feldolgozandó sorozat elemszáma} x : tömb(1..n:elemtipus) {a feldolgozandó sorozat elemei} y : elemtipus { a keresett elem} VAN : logikai {az eredmény - van-e megfelelő elem} SORSZ : egész {az eredmény -az elem sorszáma}

Keresések A megoldó algoritmus: keresés(n, x, y, VAN, SORSZ) i := 1 while (i n) (x (i) < y) i := i + 1 VAN := (i n) (x (i) = y) if VAN then SORSZ := i eljárás vége Az algoritmus az y érték első előfordulását választja ki. Egy keresés minimum 1, maximum n, átlagosan pedig (n + 1) /2 összehasonlítással jár.

Keresések A sorozat rezettségét a következőképpen használhatjuk ki. Vizsgáljuk meg első lépésben a sorozat középső elemét. Ha ez a keresett elem, akkor készen vagyunk. Ha a keresett elem ennél kisebb, akkor csak az ezt megelőzőek között lehet, tehát a keresést a továbbiakban a sorozat első felére kell alkalmazni. Ha a keresett elem ennél nagyobb, akkor ugyanezen elv miatt a keresést a sorozat második felére kell alkalmazni. keresés(n, x, y, VAN, SORSZ) e, u := 1, n do k := entier ((e + u) /2) if y < x (k) then u := k 1 if y > x (k) then e := k + 1 until (e u) (x (k) y) VAN := (e u) if VAN then SORSZ := k eljárás vége

Keresések Az algoritmus az y érték valamelyik előfordulását választja ki. Egy keresés minimum 1, maximum log 2 n + 1, átlagosan pedig log 2 n összehasonlítással jár. Innen az eljárás elnevezése.

Programozási tételek egymásra építése Ha programozási tételeket egymásután kell alkalmaznunk, akkor gyakran előnyös a két megoldó algoritmus egybeépítése. Néhány esetet tárgyalunk. A másolással bármelyik programozási tétel egybeépíthető: A programozási tételben szereplő x i hivatkozást kicseréljük g (x i )-re, ahol g a másolásnál szereplő függvényt jelöli. 1. Példa: számsorozat elemeinek négyzetösszege=másolás (négyzetre emelés)+ sorozatszámítás (összegzés)

Programozási tételek egymásra építése Az általános feladat a következő: Input : n N 0, x H n, F : G G, g : H G Output : S G Q : F 0 G és f : G H G és F (y 1,..., y n ) = f (F (y 1,..., y n 1 ), y n ) és F () = F 0 R : S = F (g (x 1 ),..., g (x n ))

Programozási tételek egymásra építése Az algoritmus: Függvény: g : H-elemtípus G-elemtípus Változók: n : egész {a feldolgozandó sorozat elemszáma} x : tömb(1..n:h elemtipus) {a feldolgozandó elemek} F 0 : G-elemtípus {a művelet nulleleme} S : G-elemtípus {az eredmény} A megoldás: Másolás_sorozatszámítás(n, x, s) s := F 0 for i = 1 : n s := f (s, g (x (i))) eljárás vége

Programozási tételek egymásra építése 2. Példa: Másolás és maximumkiválasztás egybeépítése a maximális elem értékének és indexének meghatározásával. A feladat leírása: Input : n N 0, x H n, H rezett halmaz ( <, ), g : H G Output : MAX N Q : n 1 R : 1 MAX n i (1 i n) : g (x MAX ) g (x i ) Az algoritmus: Függvény: g : H-elemtípus G-elemtípus Változók: n : egész {a feldolgozandó sorozat elemszáma} x : tömb(1..n:h-elemtipus) {a feldolgozandó sorozat elemei} MAX : egész {a maximális értékű elem sorszáma} MAXERT :G-elemtípus {a maximális érték}

Programozási tételek egymásra építése Másolás_maximumkiválasztás(n, x, MAX, MAXERT ) MAX, MAXERT := 1, g (x (1)) for i = 2 : n if MAXERT < g (x (i)) then MAX, MAXERT := i, g (x (i)) eljárás vége