Szmtgpes Gondolkods RENDEZSEK Tartalom Rendezsi feladat specifikci Algoritmusok

  • Slides: 37
Download presentation
Számítógépes Gondolkodás RENDEZÉSEK

Számítógépes Gondolkodás RENDEZÉSEK

Tartalom Ø Rendezési feladat – specifikáció Ø Algoritmusok o o o o o Egyszerű

Tartalom Ø Rendezési feladat – specifikáció Ø Algoritmusok o o o o o 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 Számláló rendezés Ø Rendezések hatékonysága – idő

Rendezési feladat Specifikáció: Bemenet: N N, X HN ≤: H H L Kimenet: X’

Rendezési feladat Specifikáció: Bemenet: N N, X HN ≤: H H L Kimenet: X’ HN Előfeltétel: Rendezés(≤) és Rendezett. E≤(H) Utófeltétel: Rendezett. E≤(X’) és X’ Permutáció(X) Jelölések: X’: az X kimeneti (megálláskori) értéke o Rendezett. E≤(X/H): X/H rendezett-e a ≤-ra? o o X’ Permutáció(X): X’ az X elemeinek egy permutációja-e?

Rendezések (fontos új fogalmak, jelölések) Aposztróf a specifikációban: Ha egy adat előfordul a bemeneten

Rendezések (fontos új fogalmak, jelölések) Aposztróf a specifikációban: Ha egy adat előfordul a bemeneten és kimene-ten is, akkor az UF-ben együtt kell előfordul-nia 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. A ≤ reláció rendezés, ha 1. reflexiv: h H: h≤h 2. antiszimmetrikus: h, i H: h≤i és i≤h h=i tranzitív: h, i, j H: h≤i és i≤j h≤j 3.

Rendezések (fontos új fogalmak, jelölések) H (teljesen) rendezett halmaz: Rendezett. E(H): = h, i

Rendezések (fontos új fogalmak, jelölések) H (teljesen) rendezett halmaz: Rendezett. E(H): = h, i H: h≤i vagy i≤h Rendezett sorozat: Rendezett. E(Z): = i(1≤i≤N– 1): Zi≤Zi+1 Permutációhalmaz: Permutáció(Z): =a Z HN sorozat elemeinek összes permutációját tartalmazó halmaz; amelynek tehát egyik eleme a kívánt rendezettségű sorozat…

Egyszerű cserés rendezés A lényeg: Hasonlítsuk az első ele-met az összes mögötte levővel, s

Egyszerű cserés rendezés A lényeg: Hasonlítsuk az első ele-met az összes mögötte levővel, s ha A minimum az kell, cse-réljük meg! „alsó” végére kerül. Ezután ugyanezt csináljuk a második elem-re! A pirossal jelöltek már a helyükön vannak … vannak Végül az utolsó két elemre!

Egyszerű cserés rendezés Algoritmus: Elem-csere Egyszerű cserés rendezés: Változó i, j: Egész S: TH

Egyszerű cserés rendezés Algoritmus: Elem-csere Egyszerű cserés rendezés: Változó i, j: Egész S: TH Ciklus i=1 -től N-1 -ig Ciklus j=i+1 -től N-ig Ha X[i]>X[j] akkor S: =X[i]; X[i]: =X[j]; X[j]: =S Elágazás vége Ciklus vége Eljárás vége. Hasonlítások Mozgatások száma: 1+2+. . +N– 1= száma: 0 …

Egyszerű cserés rendezés Algoritmus: Változó i, j: Egész S: TH Elem-csere Hasonlítások Mozgatások 2021.

Egyszerű cserés rendezés Algoritmus: Változó i, j: Egész S: TH Elem-csere Hasonlítások Mozgatások 2021. 10. 27. 10: 05 8/ 36 száma: 1+2+. . +N– 1= száma: 0 … Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. előadás

Minimum-kiválasztásos rendezés. A lényeg: Határozzuk meg az 1. . N elemek minimumát, s cseréljük

Minimum-kiválasztásos rendezés. A lényeg: Határozzuk meg az 1. . N elemek minimumát, s cseréljük meg az 1. -vel! Ezután ugyanezt tegyük a 2. . N elemre! … Végül az utolsó két (N– 1. . N) elemre! A minimum az „alsó” végére kerül. A pirossal jelöltek már a helyükön vannak

Minimum-kiválasztásos rendezés. Algoritmus: Minimum-kiválasztásos rendezés: Minimumkiválasztás az i. -től Elem-csere Változó Min. I, i,

Minimum-kiválasztásos rendezés. Algoritmus: Minimum-kiválasztásos rendezés: Minimumkiválasztás az i. -től Elem-csere Változó Min. I, i, j: Egész S: TH Ciklus i=1 -től N-1 -ig Min. I: =i Ciklus j=i+1 -től N-ig Ha X[Min. I]>X[j] akkor Min. I: =j Ciklus vége S: =X[Min. I]; X[Min. I]: =X[i]; X[i]: =S Ciklus vége Eljárás vége. Hasonlítások száma: 1+2+. . +N– 1= Mozgatások száma: 3 (N– 1)

Minimum-kiválasztásos rendezés. Algoritmus: Minimumkiválasztás az i. -től Elem-csere Hasonlítások Mozgatások 2021. 10. 27. 10:

Minimum-kiválasztásos rendezés. Algoritmus: Minimumkiválasztás az i. -től Elem-csere Hasonlítások Mozgatások 2021. 10. 27. 10: 05 száma: 1+2+. . +N– 1= száma: 3 (N– 1) Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. előadás 11 /36 Változó Min. I, i, j: Egész S: TH

Buborékos rendezés A lényeg: Hasonlítsunk minden elemet a mögötte levővel, s ha kell, cserél

Buborékos rendezés A lényeg: Hasonlítsunk minden elemet a mögötte levővel, s ha kell, cserél -jük meg! Ezután ugyanezt csináljuk az utolsó elem nélkül! … Végül az első két elem-re! 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

Buborékos rendezés Algoritmus: Buborékos rendezés: Elem-csere Változó i, j: Egész S: TH Ciklus i=N-től

Buborékos rendezés Algoritmus: Buborékos rendezés: Elem-csere Változó i, j: Egész S: TH 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 S: =X[j]; X[j]: =X[j+1]; X[j+1]: =S Elágazás vége Ciklus vége Eljárás vége. Hasonlítások Mozgatások száma: 1+2+. . +N– 1= száma: 0 …

Buborékos rendezés Algoritmus: Változó i, j: Egész S: TH Elem-csere Hasonlítások Mozgatások 2021. 10.

Buborékos rendezés Algoritmus: Változó i, j: Egész S: TH Elem-csere Hasonlítások Mozgatások 2021. 10. 27. 10: 06 14 /36 száma: 1+2+. . +N– 1= száma: 0 … Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. előadás

Javított buborékos rendezés Megfigyelések: Ha a belső ciklusban egyáltalán nincs csere, akkor be lehetne

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 biz-tosan jó elemek vannak, a külső ciklusvál-tozóval többet is léphetünk.

Javított buborékos rendezés Az utolsó cserehely feljegyzése Átírás ‘amíg’-os ciklussá Algoritmus: Javított buborékos rendezés:

Javított buborékos rendezés Az utolsó cserehely feljegyzése Átírás ‘amíg’-os ciklussá Algoritmus: Javított buborékos rendezés: Változó cs, i, j: Egész S: TH i: =N Ciklus amíg i≥ 2 cs: =0 Ciklus j=1 -től i-1 -ig Ha X[j]>X[j+1] akkor S: =X[j]; X[j]: =X[j+1]; X[j+1]: =S cs: =j Elágazás vége Ciklus vége i: =cs Ciklus vége Eljárás vége.

Javított buborékos rendezés Algoritmus: Az utolsó cserehely feljegyzése Átírás ‘amíg’-os ciklussá 2021. 10. 27.

Javított buborékos rendezés Algoritmus: Az utolsó cserehely feljegyzése Átírás ‘amíg’-os ciklussá 2021. 10. 27. 10: 06 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. előadás 17 /36 Változó cs, i, j: Egész S: TH

Beillesztéses rendezés A lényeg: Egy elem rendezett. A másodikat vagy mögé, vagy elé tesszük,

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! 18 /37

Beillesztéses rendezés Algoritmus: Beillesztéses rendezés: Elem-csere Változó i, j: Egész S: TH Ciklus i=2

Beillesztéses rendezés Algoritmus: Beillesztéses rendezés: Elem-csere Változó i, j: Egész S: TH Ciklus i=2 -től N-ig j: =i-1 Ciklus amíg j>0 és X[j]>X[j+1] S: =X[j]; X[j]: =X[j+1]; X[j+1]: =S j: =j-1 Ciklus vége Eljárás vége. Ø Hasonlítások Ø Mozgatások száma: N– 1 … száma: 0 …

Beillesztéses rendezés Algoritmus: Elem-csere Ø Hasonlítások Ø Mozgatások 2021. 10. 27. 10: 06 száma:

Beillesztéses rendezés Algoritmus: Elem-csere Ø Hasonlítások Ø Mozgatások 2021. 10. 27. 10: 06 száma: N– 1 … száma: 0 … Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. előadás 20 /36 Változó i, j: Egész S: TH

Javított beillesztéses rendezés A lényeg: Egy elem rendezett. A másodikat vagy mögé, vagy elé

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 nagyobbakat 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!

Javított beillesztéses rendezés Algoritmus: Javított beillesztéses rendezés: Változó i, j: Egész S: TH Ciklus

Javított beillesztéses rendezés Algoritmus: Javított beillesztéses rendezés: Változó i, j: Egész S: TH Ciklus i=2 -től N-ig S: =X[i]; j: =i-1 Elem-mozgatás, nem csere! csere Ciklus amíg j>0 és X[j]>X[j+1]: =X[j]; j: =j-1 Ciklus vége X[j+1]: =S Ciklus vége Eljárás vége. Ø Hasonlítások Ø Mozgatások száma: N– 1 … száma: 2 (N– 1) …

Javított beillesztéses rendezés Algoritmus: Elem-mozgatás, nem csere! csere Ø Hasonlítások Ø Mozgatások 2021. 10.

Javított beillesztéses rendezés Algoritmus: Elem-mozgatás, nem csere! csere Ø Hasonlítások Ø Mozgatások 2021. 10. 27. 10: 06 száma: N– 1 … száma: 2 (N– 1) … Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. előadás 23 /36 Változó i, j: Egész S: TH

Szétosztó rendezés A lényeg: Ha a rendezendő sorozatról speciális tudásunk van, akkor megpróbálkozhatunk más

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 N, X ZN Kimenet: Y ZN Előfeltétel: Utófeltétel: X Permutáció(1, …, N) Rendezett. E(Y) és Y Permutáció(X)

Szétosztó rendezés Algoritmus: Szétosztó rendezés: Változó i: Egész Ciklus i=2 -től N-ig Y[X[i]]: =X[i]

Szétosztó rendezés Algoritmus: Szétosztó rendezés: Változó i: Egész Ciklus i=2 -től N-ig Y[X[i]]: =X[i] Ciklus vége Eljárás vége. ezt írhattuk volna így is: Y[i]: =i! Azaz a feladat akkor érdekes, ha X[i] egy rekordként ábrázolható, amelynek csak rekord egyik mezője (kulcsa) az 1 és N közötti egész szám: X, Y: Tömb[1. . N: Rekord(kulcs: 1. . N, …)] Ø Persze Y[X[i]. kulcs]: =X[i] Algoritmus-részlet:

Szétosztó rendezés Algoritmus: 26 /36 Változó i: Egész ezt írhattuk volna így is: Y[i]:

Szétosztó rendezés Algoritmus: 26 /36 Változó i: Egész ezt írhattuk volna így is: Y[i]: =i! Azaz a feladat akkor érdekes, ha X[i] egy rekordként ábrázolható, amelynek csak rekord egyik mezője (kulcsa) az 1 és N közötti egész szám: X, Y: Tömb[1. . N: Rekord(kulcs: 1. . N, …)] Ø Persze Algoritmus: 2021. 10. 27. 10: 06 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. előadás Változó i: Egész

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.

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 N, X ZN Kimenet: Y ZN Előfeltétel: M 1 és i(1 i N): 1 Xi M Utófeltétel: Rendezett. E(Y) és Y Permutáció(X)

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

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, helyére majd módo-sítsunk: az első i értékű elemet ettől kezdve eggyel nagyobb helyre kell tenni.

Számlálva szétosztó rendezés Algoritmus: Számlálva szétosztó rendezés: Db[i]: hány darab van i-ből? Első[i]: hol

Számlálva szétosztó rendezés Algoritmus: Számlálva szétosztó rendezés: Db[i]: hány darab van i-ből? Első[i]: hol az i. elsője? Változó i: Egész Db, Első: Tömb[1. . Max. N: TH] DB[1. . M]: =0 Ciklus i=1 -től N-ig Db[X[i]]: =Db[X[i]]+1 Ciklus vége Első[1]: =1 Ciklus i=2 -től M-ig Első[i]: =Első[i-1]+Db[i-1] Ciklus vége …

Számlálva szétosztó rendezés Db[i]: hány darab van i-ből? Algoritmus: 30 /36 Változó i: Egész

Számlálva szétosztó rendezés Db[i]: hány darab van i-ből? Algoritmus: 30 /36 Változó i: Egész Db, Első: Tömb[…] Első[i]: hol az i. elsője? Ø Mozgatások száma: N Ø Additív műveletek száma: 3 M– 3+2 N 2021. 10. 27. 10: 06 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11. előadás

Számlálva szétosztó rendezés Algoritmus: … Ciklus i=1 -től N-ig Y[Első[X[i]]]: =X[i] Első[X[i]]: =Első[X[i]]+1 Ciklus

Számlálva szétosztó rendezés Algoritmus: … Ciklus i=1 -től N-ig Y[Első[X[i]]]: =X[i] Első[X[i]]: =Első[X[i]]+1 Ciklus vége Eljárás vége. Ø Mozgatások száma: N Ø Additív műveletek száma: 3 M– 3+2 N Az alaphalmaz a Z, így a többi értékadást –mint mozgatást– is beleszámíthatjuk! Ø Mozgatások száma: N+1+M+2 N=M+3 N Ø Additív műveletek száma: 3 M– 3+2 N

Számláló rendezés A lényeg: Ha nem megy a szétosztó rendezés (ismeretlen az M, vagy

Számláló rendezés A lényeg: Ha nem megy a szétosztó rendezés (ismeretlen az M, vagy » N 2), akkor először számláljunk (hatá-rozzuk meg a sorrendet), csak azután osszunk szét (tegyünk helyre…)! Ehhez használhatjuk a legegyszerűbb cserés rendezés elvét. Jelentse Db[i] az i. elemnél kisebb, kisebb vagy az i. -kel egyenlő, egyenlő de tőle balra levő elemek számát! számát ↓ A Db[i]+1 használható az i. elemnek a rende-zett sorozatbeli indexeként. indexe

Számláló rendezés Algoritmus: Az egyszerű cserés rendezés elvén működő számlálás. Számláló rendezés: Változó i,

Számláló rendezés Algoritmus: Az egyszerű cserés rendezés elvén működő számlálás. Számláló rendezés: Változó i, j: Egész Db: Tömb[1. . Max. N: TH] DB[1. . M]: =0 Ciklus i=1 -től N-1 -ig Ciklus j=i+1 -től N-ig Ha X[i]>X[j] akkor Db[i]: =Db[i]+1 különben Db[j]: =Db[j]+1 Ciklus vége Ciklus i=1 -től N-ig Y[Db[i]+1]: =X[i] Ciklus vége Eljárás vége.

Számláló rendezés Algoritmus: Számláló rendezés: Változó i, j: Egész Db: Tömb[1. . Max. N:

Számláló rendezés Algoritmus: Számláló rendezés: Változó i, j: Egész Db: Tömb[1. . Max. N: TH] DB[1. . M]: =0 Ciklus i=1 -től N-1 -ig Ciklus j=i+1 -től N-ig Ha X[i]>X[j] akkor Db[i]: =Db[i]+1 különben Db[j]: =Db[j]+1 Ciklus vége Ciklus i=1 -től N-ig Y[Db[i]+1]: =X[i] : = Ciklus vége Eljárás vége. Ø Hasonlítások száma: 1+2+. . +N– 1= Ø Mozgatások száma: N Ø Additív műveletek száma: ~hasonlítások

Számláló rendezés Algoritmus: Az egyszerű cserés rendezés elvén működő számlálás. Ø Hasonlítások 2021. 10.

Számláló rendezés Algoritmus: Az egyszerű cserés rendezés elvén működő számlálás. Ø Hasonlítások 2021. 10. 27. 10: 06 35 /36 Változó i, j: Egész Db: Tömb[… száma: 1+2+. . +N– 1= Ø 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. előadás

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

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

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

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: Lesznek N log(N) idejű rendezések. Nem lehet N log(N)-nél jobb általános rendezés! https: //www. youtube. com/watch? v=ZZu. D 6 i. Ue 3 P c http: //www. sorting-algorithms. com/