Programozási alapismeretek 11. előadás

Hasonló dokumentumok
Tartalom. Programozási alapismeretek. 11. előadás

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

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

Informatikai tehetséggondozás:

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

Rendezések. Összehasonlító rendezések

Egyszerű programozási tételek

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

Haladó rendezések. PPT 2007/2008 tavasz.

PROGRAMOZÁSI TÉTELEK

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

PROGRAMOZÁSI NYELVEK (GYAKORLAT)

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

Gyakorló feladatok ZH-ra

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

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

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

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

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

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

Programozási alapismeretek 3. előadás

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

Programozási segédlet

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

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

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

Dokumentáció az 1. feladatsorhoz (egyszerű, rövidített kivitelben)

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

Informatikai tehetséggondozás:

RENDEZÉSEK, TOVÁBBI PROGRAMOZÁSI TÉTELEK

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

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

15. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: január 30.

Programozás II. előadás

Programozási alapismeretek 1. előadás

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

Felvételi tematika INFORMATIKA

PROGRAMOZÁS tantárgy. Gregorics Tibor egyetemi docens ELTE Informatikai Kar

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

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

VÉLETLEN PERMUTÁCIÓ ELŐÁLLÍTÁSA

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

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

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

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

Algoritmuselmélet 2. előadás

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés

Operációs rendszerek 1.

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

8. Mohó algoritmusok Egy esemény-kiválasztási probléma. Az esemény-kiválasztási probléma optimális részproblémák szerkezete

Adatbázis rendszerek Gy: Algoritmusok C-ben

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

Gyakorlatok. P (n) = P (n 1) + 2P (n 2) + P (n 3) ha n 4, (utolsó lépésként l, hl, u, hu-t léphetünk).

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

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

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

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés. Szekvenciális fájlkezelés Fájlok használata

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

Algoritmusok helyességének bizonyítása. A Floyd-módszer

Egyszerű programozási tételek

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

PROGRAMOZÁSMÓDSZERTAN

14. Mediánok és rendezett minták

2. Készítsen awk szkriptet, amely kiírja az aktuális könyvtár összes alkönyvtárának nevét, amely februári keltezésű (bármely év).

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

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Dinamikus programozás II.

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

INFORMATIKA javítókulcs 2016

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

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

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

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

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.

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

A valós számok halmaza

PFW Programing Fundamentals Wizard

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

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

ELEMI PROGRAMOZÁSI TÉTELEK

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

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

Összetett programozási tételek

KOVÁCS BÉLA, MATEMATIKA I.

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

Számjegyes vagy radix rendezés

Bevezetés a programozásba. 5. Előadás: Tömbök

A rendezési algoritmusok tanításának céljai és módszerei

Szerző Lővei Péter LOPSAAI.ELTE IP-08PAEG/25 Daiki Tennó

10. gyakorlat Struktúrák, uniók, típusdefiníciók

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

Bevezetés az informatikába

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

1 Rendszer alapok. 1.1 Alapfogalmak

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.

Kiegészítő részelőadás 1. Az algoritmusok hatékonyságának mérése

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

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

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

Átírás:

Programozási alapismeretek 11. előadás

Tartalom Rendezési feladat specifikáció Egyszerű cserés rendezés Minimum-kiválasztásos rendezés Buborékos rendezés Javított buborékos rendezés Beillesztéses rendezés Javított beillesztéses rendezés Szétosztó rendezés Számlálva szétosztó rendezés Rendezések hatékonysága idő Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 2/30

Rendezési feladat Specifikáció: Bemenet: N Egész, X Tömb[1..N:Valami] Kimenet: X Tömb[1..N:Valami] Előfeltétel: N 0 Utófeltétel: RendezettE(X ) és X Permutáció(X) Jelölések: o o o X : az X kimeneti (megálláskori) értéke RendezettE(X): X rendezett-e? X Permutáció(X): X az X elemeinek egy permutációja-e? Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 3/30

Rendezések (fontos új fogalmak, jelölések) Aposztróf a specifikációban: Ha egy adat előfordul a bemeneten és kimeneten is, akkor az UF-ben együtt kell előfordulnia az adat bemenetkori és kimenetkori értéke. Megkülönböztetésül a kimeneti értéket megaposztrofáljuk. Pl.: Z :=a Z kimeneti (megálláskori) értéke. Rendezett-e predikátum: RendezettE(Z): i(1 i N 1): Z[i] Z[i+1] Permutációhalmaz: Permutáció(Z):= a Z elemeinek összes permutációját tartalmazó halmaz. Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 4/30

Egyszerű cserés rendezés A lényeg: Hasonlítsuk az első elemet az összes mögötte levővel, s ha kell, cseréljük meg! Ezután ugyanezt csináljuk a második elemre! Végül az utolsó két elemre! A minimum az alsó végére kerül. A pirossal jelöltek már a helyükön vannak Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 5/30

Egyszerű cserés rendezés Elem-csere Algoritmus: i=1..n 1 j=i+1..n X[i]>X[j] S:=X[i] X[i]:=X[j] X[j]:=S I Hasonlítások száma: 1+2+..+N 1= Mozgatások száma: 0 3 N N N 1 2 N 1 2 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 6/30 N Változó i,j:egész S:Valami

Minimum-kiválasztásos rendezés A lényeg: Vegyük az első elem és a mögöttiek minimumát, s cseréljük meg az elsővel (ha kell)! Ezután ugyanezt csináljuk a második elemre! Végül az utolsó két elemre! A minimum az alsó végére kerül. A pirossal jelöltek már a helyükön vannak Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 7/30

Minimum-kiválasztásos rendezés Minimumkiválasztás az i.-től Elem-csere Algoritmus: i=1..n 1 MinI:=i j=i+1..n X[MinI]>X[j] I MinI:=j S:=X[i] X[i]:=X[MinI] X[MinI]:=S Hasonlítások száma: 1+2+..+N 1= Mozgatások száma: 3 (N 1) N N Változó MinI, i,j:egész S:Valami N 1 2 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 8/30

Buborékos rendezés A lényeg: Hasonlítsunk minden elemet a mögötte levővel, s ha kell, cseréljük meg! Ezután ugyanezt csináljuk az utolsó elem nélkül! Végül az első két elemre! A maximum a felső végére kerül. A többiek is tartanak a helyük felé. A pirossal jelöltek már a helyükön vannak Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 9/30

Buborékos rendezés Elem-csere Algoritmus: i=n..2, -1-esével j=1..i 1 X[j]>X[j+1] S:=X[j] X[j]:=X[j+1] X[j+1]:=S I Hasonlítások száma: 1+2+..+N 1= N N 1 Mozgatások száma: 0 3 N 2 N Változó i,j:egész S:Valami N 1 2 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 10/30

Javított buborékos Megfigyelések: rendezés Ha a belső ciklusban egyáltalán nincs csere, akkor be lehetne fejezni a rendezést. Ha a belső ciklusban a K. helyen van az utolsó csere, akkor a K+1. helytől már biztosan jó elemek vannak, a külső ciklusváltozóval többet is léphetünk. Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 11/30

Az utolsó cserehely feljegyzése Javított buborékos Átírás amíg -os ciklussá Algoritmus: rendezés i:=n i 2 cs:=0 j=1..i 1 X[j]>X[j+1] I S:=X[j] X[j]:=X[j+1] X[j+1]:=S cs:=j i:=cs N Változó cs, i,j:egés S:Valam Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 13/30

Beillesztéses rendezés A lényeg: Egy elem rendezett. A másodikat vagy mögé, vagy elé tesszük, így már ketten is rendezettek. Az i-ediket a kezdő, i 1 rendezettben addig hozzuk előre cserékkel, amíg a helyére nem kerül; így már i darab rendezett lesz. Az utolsóval ugyanígy! Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 14/30

Beillesztéses rendezés Elem-csere Algoritmus: i=2..n j:=i 1 j>0 és X[j]>X[j+1] S:=X[j] X[j]:=X[j+1] X[j+1]:=S j:=j 1 N 1 Hasonlítások száma: N 1 N 2 N 1 Mozgatások száma: 0 3 N 2 Változó i,j:egész S:Valami Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 15/30

Javított beillesztéses rendezés A lényeg: Egy elem rendezett. A másodikat vagy mögé, vagy elé tesszük, így már ketten is rendezettek. Az i-ediknél a nála kisebbeket tologassuk hátra, majd illesszük be eléjük az i-ediket; így már i darab rendezett lesz. Az utolsóval ugyanígy! Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 16/30

Elem-mozgatás, nem csere! Javított beillesztéses Algoritmus: rendezés i=2..n S:=X[i] j:=i 1 j>0 és X[j]>s X[j+1]:=X[j] j:=j 1 X[j+1]:=S N 1 Hasonlítások száma: N 1 N 2 Mozgatások száma: 2 (N 1) (N 4) Változó i,j:egész S:Valami N 1 2 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 17/30

Szétosztó rendezés A lényeg: Ha a rendezendő sorozatról speciális tudásunk van, akkor megpróbálkozhatunk más módszerekkel is. Specifikáció rendezés N lépésben: Bemenet: N Egész, X Tömb[1..N:Egész] Kimenet: Y Tömb[1..N:Egész] Előfeltétel: N 0 és X Permutáció(1,,N) Utófeltétel: RendezettE(Y) és Y Permutáció(X) Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 18/30

Szétosztó rendezés Algoritmus: i=1..n Y[X[i]]:=X[i] Persze ehelyett írhattuk volna: Y[i]:=i! Azaz a feladat akkor érdekes, ha pl. X[i] egy rekord, aminek az egyik mezője az 1 és N közötti egész szám: X,Y Tömb[1..N:Rekord(kulcs:1..N, )] Algoritmus: i=1..n Y[X[i].kulcs]:=X[i] Változó i:egész Változó i:egész Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 19/30

Számlálva szétosztó rendezés Előfeltétel: a rendezendő értékek 1 és M közötti egész számok, ismétlődhetnek. Specifikáció: Bemenet: N,M Egész, X Tömb[1..N:Egész] Kimenet: Y Tömb[1..N:Egész] Előfeltétel: N 0 és M 1 és i(1 i N): 1 X[i] M Utófeltétel: RendezettE(Y) és Y Permutáció(X) Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 20/30

Számlálva szétosztó rendezés A lényeg: Első lépésben számláljuk meg, hogy melyik értékből hány van a rendezendő sorozatban! Ezután adjuk meg, hogy az első i értéket hova kell tenni: ez pontosan az i-nél kisebb számok száma a sorozatban +1! Végül nézzük végig újra a sorozatot, s az i értékű elemet tegyük a helyére, majd módosítsunk: az első i értékű elemet ettől kezdve eggyel nagyobb helyre kell tenni. Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 21/30

Számlálva szétosztó Algoritmus: rendezés Db[1..M]:=0 [Db[i]: hány darab van i-ből?] i=1..n Db[X[i]]:=Db[X[i]]+1 Első[1]:=1 i=2..m Első[i]:=Első[i 1]+Db[i 1] [Első[i]: hol az i. elsője?] i=1..n Y[Első[X[i]]]:=X[i] Első[X[i]]:=Első[X[i]]+1 Mozgatások száma: N Additív műveletek száma: 3 M 3+2 N Változó i:egés Db, Első:T Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 22/30

Számláló rendezés A lényeg: Ha nem megy a szétosztó rendezés (ismeretlen az M), akkor segítsünk magunkon, először számláljunk ( sorrendet ), azután osszunk szét! Ehhez használhatjuk a legegyszerűbb, cserés rendezés elvét. Jelentse Db[i] az i. elemnél kisebb, vagy az i.- kel egyenlő, de tőle balra levő elemek számát! A Db[i]+1 használható az i. elemnek a rendezett sorozatbeli indexeként. Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 23/30

Számláló rendezés Algoritmus: Db[1..N]:=0 i=1..n 1 j=i+1..n I X[i]>X[j] Db[i]:=Db[i]+1 Db[j]:=Db[j]+1 Y[Db[i]+1]:=X[i] i=1..n N Hasonlítások száma: 1+2+..+N 1= 2 Mozgatások száma: N Additív műveletek száma: hasonlítások száma Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 24/30 N Válto i,j:e Db: N 1

Rendezések hatékonysága N 2 idejű rendezések: Egyszerű cserés rendezés Minimum-kiválasztásos rendezés Buborékos rendezés Javított buborékos rendezés Beillesztéses rendezés Javított beillesztéses rendezés Számláló rendezés Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 25/30

Rendezések hatékonysága N (N+M) idejű rendezések: (de speciális feltétellel) Szétosztó rendezés Számlálva szétosztó rendezés Kitekintés: (Algoritmusok tantárgy) Lesznek N log(n) idejű rendezések. Nem lehet N log(n)-nél jobb általános rendezés! http://cow.ceng.metu.edu.tr/courses/download_c oursefile.php?id=5451 http://www.sorting-algorithms.com/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 26/30

Az évfolyamzh Tudnivalók: a main.cpp fájlt egy web-es felületen kell beküldeni (akár többször is!) és ott lehet megnézni a kapott értékelést; ide a zh-t író az EHA-kódjával (pontosabban a laborokban érvényes kódjával) léphet majd be a saját jelszavával; a program standard inputról olvas, standard outputra ír, a tesztelést be- és kimenet átirányítással oldjuk meg; a bemenet biztosan helyes, ellenőrizni nem kell; a kimenetre csak az eredményeket szabad kiírni, semmi egyebet nem; a bemenet és a kimenet szintaxisa és sorrendje is rögzített, attól eltérni nem szabad. Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 27/30

Edzeni való: Az évfolyamzh A zh-ra technikailag fel lehet készülni az alábbi linken keresztül: http://biro.inf.elte.hu/progalap/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 28/30

Az évfolyamzh Edzeni való: Néhány, jellegzetes lépés: Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. 29/30

Programozási alapismeretek 11. előadás vége