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

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

Programozási alapismeretek 11. 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

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

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

PROGRAMOZÁSI NYELVEK (GYAKORLAT)

Programozási segédlet

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

PROGRAMOZÁSI TÉTELEK

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

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

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

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

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

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

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

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

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

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

Kombinatorikai algoritmusok

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

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

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

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

Egyszerű programozási tételek

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

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

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

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

Visszalépéses kiválogatás

Informatikai tehetséggondozás:

Adatszerkezetek II. 10. előadás

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

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

Egyszerű programozási tételek

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

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

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

Bevezetés a programozásba I 3. gyakorlat. PLanG: Programozási tételek. Programozási tételek Algoritmusok

Adatbázis rendszerek Gy: Algoritmusok C-ben

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

Összetett programozási tételek

Multihalmaz, intervallumhalmaz

Informatikai tehetséggondozás:

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

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

Programozás II. előadás

Bevezetés a programozásba I.

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

Egyszerű programozási tételek

Informatikai tehetséggondozás:

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

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

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

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

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

Objektum Orientált Programozás VII.

Felvételi tematika INFORMATIKA

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

Informatikai tehetséggondozás:

Informatikai tehetséggondozás:

Algoritmuselmélet 2. előadás

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

Adatszerkezetek II. 6. előadás

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

Dinamikus programozás II.

Programozási tételek. Jegyzet. Összeállította: Faludi Anita 2012.

ELEMI PROGRAMOZÁSI TÉTELEK

Informatikai tehetséggondozás:

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

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

Disztribúciós feladatok. Készítette: Dr. Ábrahám István

ALGORITMUSOK ÉS PROBLÉMAOSZTÁLYOK (1. előadás)

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.

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

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

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

A 2016/2017 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

Bevezetés a programozásba I.

Algoritmusok és adatszerkezetek gyakorlat 09 Rendezések

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

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

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

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

Rekurzív algoritmusok

Gyakorló feladatok ZH-ra

Programozási alapismeretek 3. előadás

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

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

Programozási alapismeretek 1. előadás

Informatikai tehetséggondozás:

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

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs

Térinformatikai algoritmusok Elemi algoritmusok

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

Programozási tételek. Elemi programozási tételek. (Sorozathoz érték rendelése)

Átírás:

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

Rendezések Bemenet: N: Egész, X: Tömb(1..N: Egész) Kimenet: X: Tömb(1..N: Egész) Előfeltétel: Utófeltétel: Rendezett(X) és X=permutáció(X ) Az eredmény a bemenet egy permutációja. Rendezett(X): i(1 i N-1): X[i] X[i+1] Zsakó László: Közismereti informatika I. 2

Egyszerű cserés rendezés 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 elejére kerül. Zsakó László: Közismereti informatika I. 3

Egyszerű cserés rendezés Rendezés: Ciklus i=1-től N-1-ig Ciklus j=i+1-től N-ig Ha X[i]>X[j] akkor Csere(X[i],X[j]) Eljárás vége. Hasonlítások száma: 1+2+..+N-1= N N 1 N 1 2 Mozgatások száma: 0 3 N 2 Zsakó László: Közismereti informatika I. 4

Minimumkiválasztásos rendezés Vegyük az első elem mögöttiek minimumát, s cseréljük meg az elsővel! Ezután ugyanezt csináljuk a második elemre! Végül az utolsó két elemre! Zsakó László: Közismereti informatika I. 5

Minimumkiválasztásos rendezés Rendezés: Ciklus i=1-től N-1-ig Min:=i Ciklus j=i+1-től N-ig Ha X[j]<X[Min] akkor Min:=j Csere(X[i],X[Min]) Eljárás vége. Hasonlítások száma: 1+2+..+N-1= Mozgatások száma: 3*(N-1) N N 1 2 Zsakó László: Közismereti informatika I. 6

Buborékos rendezés 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 végére kerül. A többbiek is tartanak a helyük felé. Zsakó László: Közismereti informatika I. 7

Buborékos rendezés Rendezés: Ciklus i=n-től 2-ig -1-esével Ciklus j=1-től i-1-ig Ha X[j]>X[j+1] akkor Csere(X[j],X[j+1]) Eljárás vége. Hasonlítások száma: 1+2+..+N-1= N N 1 2 Mozgatások száma: 0 N 1 3 N 2 Zsakó László: Közismereti informatika I. 8

Javított buborékos rendezés Megfigyelések: 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. Zsakó László: Közismereti informatika I. 9

Javított buborékos rendezés Rendezés: i:=n Ciklus amíg i>1 cs:=0 Ciklus j=1-től i-1-ig Ha X[j]>X[j+1] akkor Csere(X[j],X[j+1]) cs:=j i:=cs Eljárás vége. Zsakó László: Programozási alapismeretek 10

Rendezések Mit tudunk az eddigi módszerekről? A külső ciklus egy lefutása alatt legalább 1 elem a végleges helyére kerül. (Azaz például azonnal kiírhatnánk az eredménybe.) A külső ciklus egy lefutásához már ismernünk kell az összes elemet. Zsakó László: Közismereti informatika I. 11

Beillesztéses rendezés Egy elem mindig rendezett. A másodikat vagy mögé, vagy elé tesszük. Az i-ediket az addigiak mögé tesszük, majd addig hozzuk előre, amíg a helyére nem kerül. Az utolsóval ugyanígy! X A megoldás: Keresés tétel közben cserélgetünk Zsakó László: Közismereti informatika I. 12

Beillesztéses rendezés Rendezés: Ciklus i=2-től N-ig j:=i-1 Ciklus amíg j>0 és X[j]>X[j+1] Csere(X[j],X[j+1]); j:=j-1 Eljárás vége. Hasonlítások száma: N-1 N N 1 2 N 1 Mozgatások száma: 0 3 N 2 Zsakó László: Közismereti informatika I. 13

Javított beillesztéses rendezés Egy elem mindig rendezett. A másodikat vagy mögé, vagy elé tesszük. Az i-ediknél kisebbeket tologassuk hátra, majd illesszük be eléjük az i-ediket! Az utolsóval ugyanígy! X A megoldás: Keresés tétel közben tologatunk. Zsakó László: Közismereti informatika I. 14

Javított beillesztéses rendezés Rendezés: Ciklus i=2-től N-ig j:=i-1; s:=x[i] Ciklus amíg j>0 és X[j]>s X[j+1]:=X[j]; j:=j-1 X[j+1]:=s Eljárás vége. Hasonlítások száma: N-1 Mozgatások száma: 2*(N-1) N N 1 2 ( N 1) N 1 2 Zsakó László: Közismereti informatika I. 15

Rendezések Mit tudunk a két beillesztéses rendezés változatról? A külső ciklus utolsó lefutására kerül minden elem a végleges helyére. A külső ciklus egy lefutásához elég ismernünk a következő elemet. (Azaz most például beolvasás közben is végezhetnénk a rendezést.) Zsakó László: Közismereti informatika I. 16

Szétosztó rendezés Ha a rendezendő sorozatról speciális tudásunk van, akkor próbálkozhatunk más módszerekkel is. 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: X=permutáció(1,,N) Utófeltétel: Rendezett(Y) és Y=permutáció(X) Zsakó László: Közismereti informatika I. 17

Szétosztó rendezés Rendezés: Ciklus i=1-től N-ig Y[X[i]]:=X[i] Eljárás vége. Persze ehelyett írhattuk volna: Y[i]:=i!!! Zsakó László: Közismereti informatika I. 18

Szétosztó rendezés 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: Y: Tömb(1..N: Rekord(kulcs: Egész, )) Rendezés: Ciklus i=1-től N-ig Y[X[i].kucs]:=X[i] Eljárás vége. Zsakó László: Közismereti informatika I. 19

Számlálva szétosztó rendezés Most azt tételezzük fel, hogy a rendezendő értékek tetszőleges 1 és M közötti egész számok (vagy azzá transzformálhatók). Bemenet: N,M: Egész, X: Tömb(1..N: Egész) Kimenet: Y: Tömb(1..N: Egész) Előfeltétel: i(1 i N): 1 X[i] M Utófeltétel: Rendezett(Y) és Y=permutáció(X) Zsakó László: Közismereti informatika I. 20

Számlálva szétosztó rendezés Első lépésben számoljuk meg, hogy melyik értékből hány van a rendezendő sorozatban! Rendezés: Db:=(0,,0) Ciklus i=1-től N-ig Ha X[i]=1 akkor Db[1]:=Db[1]+1 Ha X[i]=1 akkor Db[1]:=Db[1]+1 Amennyi az X[i], annyiadik számlálót növeljük: elágazás helyett indexelés! Zsakó László: Közismereti informatika I. 21

Számlálva szétosztó rendezés Rendezés: Db:=(0,,0) Ciklus i=1-től N-ig Db[X[i]]:=Db[X[i]]+1 Ezután adjuk meg, hogy az utolsó i értéket hova kell tenni! Ez pontosan az i-nél kisebb vagy egyenlő számok száma a sorozatban! Zsakó László: Közismereti informatika I. 22

Számlálva szétosztó rendezés ut[1]:=db[1] Ciklus i=2-től M-ig ut[i]:=ut[i]+db[i] 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 utolsó i értékű elemet ettől kezdve eggyel kisebb helyre kell tenni. Zsakó László: Közismereti informatika I. 23

Számlálva szétosztó rendezés Ciklus i=1-től N-ig Y[ut[X[i]]]:=X[i] ut[x[i]]:=ut[x[i]]-1 Eljárás vége. Mozgatások száma: N Összeadások száma: M+2*N Zsakó László: Közismereti informatika I. 24

Számláló rendezés Ha nem megy a szétosztó rendezés, akkor segítsünk magunkon, először számoljunk, 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.-től balra levő, vele egyenlő elemek számát! Zsakó László: Közismereti informatika I. 25

Számláló rendezés Rendezés: Db:=(0,,0) Ciklus i=1-től N-1-ig Ciklus j=i+1-től N-ig Ha X[i]>X[j] akkor Db[j]:=Db[j]+1 különben Db[i]:=Db[i]+1 Ciklus i=1-től N-ig Y[Db[X[i]]:=X[i] Eljárás vége. Hasonlítások száma: 1+2+..+N-1= Mozgatások száma: N N N 1 2 Zsakó László: Közismereti informatika I. 26

Rendezések N 2 idejű rendezések: Egyszerű cserés rendezés Minimumkivá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 Zsakó László: Közismereti informatika I. 27

Rendezések N (N+M) idejű rendezések: (de speciális elő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! Zsakó László: Közismereti informatika I. 28

Közismereti informatika 4. előadás vége.