Programozási alapismeretek 12. előadás
ELTE Tapasztalatok a rendezésről Tapasztalatok a rendezésről Keresés rendezett sorozatban Keresés rendezett sorozatban Rendezettek uniója Rendezettek uniója Rendezettek összefésülése Rendezettek összefésülése Kiválogatás helyben Kiválogatás helyben Szétválogatás helyben Szétválogatás helyben Programozási alapismeretek 12. előadás Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. 2/
ELTE Tapasztalatok a rendezésről A rendezési algoritmusok eredménye egy rendezett sorozat. Vajon lehet-e a korábban megismert feladatokat más- képp megoldani, ha a bemenetük rende- zett? A rendezési algoritmusok többsége „helyben” rendez. Vannak-e más, „helyben” működő algoritmusok? 3/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Keresés rendezett sorozatban Feladat: Egy Y értéket keresünk egy rendezett X sorozatban. Specifikáció: Bemenet: N:Egész, Y:Valami X:Tömb[1..N:Valami] Kimenet: Van:Logikai, S:Egész Előfeltétel: N 0 és RendezettE(X) Utófeltétel: Van= i(1 i N): X[i]=Y és Van 1 S N és X[S]=Y Definíció (emlékeztető) : RendezettE(X[1..N]):= i(1 i<N): X[i] X[i+1] T-tulajdonság:T(v):=(v=Y) Konkretizáljuk! Legyen növekvő! 4/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Keresés rendezett sorozatban Észrevétel: Van megoldás megálltunk keresés köz- ben, mégpedig azért, mert megtaláltuk a keresett értéket. i:=1 i N és X[i]<Y i:=i+1 Van:= i N és X[i]=Y Ötlet: Ha már a keresett elem értékénél nagyobb- nál tartunk, akkor biztos nem lesz a sorozat- ban, megállhatunk. 5/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Keresés rendezett sorozatban Specifikáció: Bemenet: N:Egész, Y:Valami X:Tömb[1..N:Valami] Kimenet: Van:Logikai, S:Egész Előfeltétel: N 0 és RendezettE(X) Utófeltétel: Van= i(1 i N): X[i]=Y és Van 1 S N és X[S]=Y Ötlet: Először a középső elemmel hasonlítsunk! Ha nem a keresett, akkor vagy előtte, vagy mögötte kell tovább keresni! 6/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Keresés rendezett sorozatban Itt akkor van megoldás, ha megtaláltuk a keresett érték valamelyikét. E:=1 U:=N S:=(E+U) div 2 X[S]>YX[S]<Y U:=S – 1E:=S+1 E U és X[S] Y Van:=X[S]=Y Algoritmus: 7/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Keresés rendezett sorozatban Kérdések: Ha több egyforma elem is van a sorozatban, akkor ez a módszer melyiket találja meg? Hogyan lehetne az összes Y-értékű elemet megtalálni? Hány lépés alatt találjuk meg a keresett elemet? 8/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Rendezettek uniója Feladat: Adott két rendezett halmaz, adjuk meg az uniójukat! unió Specifikáció: Bemenet: N,M:Egész, X:Tömb[1..N:Valami], Y:Tömb[1..M:Valami] Kimenet: Db:Egész, Z:Tömb[1..Db:Valami] Előfeltétel: N,M 0 és HalmazE(X) és HalmazE(Y) és RendezettE(X) és RendezettE(Y) Összefuttatás. N+M 9/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Rendezettek uniója Utófeltétel: és i(1≤i≤Db): Z[i] X vagy Z[i] Y és HalmazE(Z) és RendezettE(Z) Definíció (emlékeztető) : HalmazE(X[1..N]):= i j [1..N]: X[i] X[j] Ötlet: Az eredmény első eleme vagy az X, vagy az Y első eleme lehet. A kettő közül a rendezett- ség szerintit tegyük az eredménybe, majd a maradékra ugyanezt az elvet alkalmazhatjuk. 10/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Rendezettek uniója Algoritmus elé: Amíg van mit hasonlítani: Ha már nincs mit hasonlítani: 11/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Rendezettek uniója i:=1 j:=1 Db:=0 i N és j M Db:=Db+1 X[i]<Y[j]X[i]=Y[j]X[i]>Y[j] Z[Db]:=X[i] Z[Db]:=Y[j] i:=i+1 j:=j+1 … Algoritmus 1 : 12/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Rendezettek uniója … iNiN Db:=Db+1 Z[Db]:=X[i] i:=i+1 jMjM Db:=Db+1 Z[Db]:=Y[j] j:=j+1 Ha az X és Y utolsó elemei egyenlők, ak- kor ez a két ciklus nem kellene! 13/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Rendezettek uniója i:=1 j:=1 Db:=0 X[N+1]:=+ Y[M+1]:=+ i N+1 és j M+1 Db:=Db+1 X[i]<Y[j]X[i]=Y[j]X[i]>Y[j] Z[Db]:=X[i] Z[Db]:=Y[j] i:=i+1 j:=j+1 Algoritmus 2 : … és utoljára? Z[Db]:=+ 14/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Rendezettek uniója i:=1 j:=1 Db:=0 X[N+1]:=+ Y[M+1]:=+ i<N+1 vagy j<M+1 Db:=Db+1 X[i]<Y[j]X[i]=Y[j]X[i]>Y[j] Z[Db]:=X[i] Z[Db]:=Y[j] i:=i+1 j:=j+1 Algoritmus 2 javítása : 15/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Rendezettek uniója Kérdések: Jobb lett ez a módszer az előzőnél? Hány lépés alatt kapjuk meg a megoldást? Jobb Meg lehetne ugyanezt tenni a metszettel is? Tapasztalat: ez a módszer a kimenet szerint halad egye- sével és nem a bemenet szerint (mint a ko- rábbiak). 16/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Rendezettek összefésülése Feladat: Adott két rendezett sorozat, adjuk meg az összefésülésüket! Specifikáció: Bemenet: N,M:Egész, X:Tömb[1..N:Valami], Y:Tömb[1..M:Valami] Kimenet: Z:Tömb[1..N+M:Valami] Előfeltétel: N,M 0 és RendezettE(X) és RendezettE(Y) 17/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Rendezettek összefésülése Utófeltétel: Z Permutáció(X+Y) és RendezettE(Z) Ötlet: A megoldás olyan, mint az összefuttatás, csak az egyforma elemeket is berakjuk az eredménybe. 18/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Rendezettek összefésülése i:=1 j:=1 Db:=0 X[N+1]:=+ Y[M+1]:=+ i<N+1 vagy j<M+1 Db:=Db+1 X[i] Y[j] Z[Db]:=X[i]Z[Db]:=Y[j] i:=i+1j:=j+1 NI Algoritmus: 19/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Kiválogatás helyben Specifikáció: Bemenet: N:Egész, X:Tömb[1..N:Valami] Kimenet: Db:Egész, X’:Tömb[1..N:Valami] Előfeltétel: N 0 Utófeltétel: és X’[1..Db] X és i (1≤i≤Db): T(X’[i]) 20/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. Csak érték lehet!
ELTE Kiválogatás helyben Megjegyzés: Itt olyan helyre tesszük a kiválogatott elemet, amire már nincs szükségünk. Db:=0 i=1..N T(X[i]) Db:=Db+1 X[Db]:=X[i] I N Algoritmus: 21/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Szétválogatás helyben Specifikáció: Bemenet: N:Egész, X:Tömb[1..N:Valami] Kimenet: Db:Egész, X’:Tömb[1..N:Valami] Előfeltétel: N 0 Utófeltétel: Db= és X’ Permutáció(X) és i (1≤i≤Db): T(X’[i]) és i (Db+1≤i≤N): nem T(X’[i]) Definíció (emlékeztető) : Permutáció(Z):= Z elemeinek összes per- mutációjának halmaza 22/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Szétválogatás helyben Algoritmikus ötlet: 1. Vegyük ki a sorozat első elemét: O x x x x x x x x x x x x 2. Keresünk hátulról egy elemet, amit előre kell tennünk (mert T tulajdonságú): O x x x x x x x x x x x x 3. A megtalált elemet tegyük az előbb keletke- zett lyukba: x x x x x x O x x x x x 23/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Szétválogatás helyben 4. Most keletkezett egy lyuk hátul, az előbb be- töltött lyuktól indulva elölről keressünk hátra teendő elemet: x x x x x x O x x x x x 5. A megtalált elemet tegyük a hátul levő lyukba, majd újra hátulról kereshetünk! 6. … 7. Befejezzük a keresést, ha valahonnan elértük a lyukat, majd erre a helyre a kivettet vissza- tesszük. 24/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Szétválogatás helyben e:=1 u:=N Y:=X[e] e<u HátulrólKeres(e,u,Van) Van X[e]:=X[u] e:=e+1 ElölrőlKeres(e,u,Van) Van X[u]:=X[e] u:=u–1 … I N NI Algoritmus: 25/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Szétválogatás helyben … X[e]:=Y T(Y) Db:=e Db:=e – 1 NI 26/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Szétválogatás helyben ElölrőlKeres(e,u:Egész,Van:Logikai) e<u és T(X[e]) e:=e+1 Van:=e<u HátulrólKeres(e,u:Egész,Van:Logikai) e<u és nem T(X[u]) u:=u–1 Van:=e<u 27/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Hatékonyságvizsgálat táblázatkezelővel Ötlet: 1. A táblázatkezelők importálnak sokféle formátumú fájl, pl. CSV-formátumút. 2. A Comma Separated Value (CSV) = egy „mezei” text fájl, amelyben minden önálló ( cellában tárolandó ) adatot pontosvessző követ. 3. Egyszerű olyan C++ programot írni, amely a táblázatolandó adatokat „CSV- esítve” ír text fájlba. 28/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Hatékonyságvizsgálat táblázatkezelővel Példafeladat: Az unió és az összefuttatás tételek haté- konyságának összevetése. Hatékonysági „dimenzió”: tömbbeli elemek összehasonlítás-száma, esetleg futási ideje Összefüggést keresünk a bemeneti soro- zathossz és hasonlítás-szám között: (N,M)→hDb unió, (N,M)→hDb összefuttatás … 29/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Hatékonyságvizsgálat táblázatkezelővel Megoldásvázlat: 1. Mindkét algoritmusban számoljuk a tömb- elem-összehasonlításokat (mérjük az időt). 2. Néhány ( jól kiválasztott ) N,M-elemű soro- zatra lefuttatjuk és közben számlálunk (mérünk). 3. Majd CSV-fájlba írjuk a hatékonysági ered- ményeinket. Megjegyzés: az időmérés feltétele, hogy pontosan tudjuk mérni. ( Windows-ban aggá- lyos, Unix/Linuxban OK. ) 30/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Hatékonyságvizsgálat táblázatkezelővel Egy lehetséges eredmény a táblázat- kezelőbe importálás után – unió: Numerikusan 31/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Hatékonyságvizsgálat táblázatkezelővel Egy lehetséges eredmény a táblázat- kezelőbe importálás után – unió: Grafikusan 32/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Hatékonyságvizsgálat táblázatkezelővel Egy lehetséges eredmény a táblázat-kezelőbe importálás után – összefuttatás: Numerikusan 33/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
ELTE Hatékonyságvizsgálat táblázatkezelővel Egy lehetséges eredmény a táblázat-kezelőbe importálás után – összefuttatás: Grafikusan 34/ Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12.
Programozási alapismeretek 12. előadás vége