Programozsi alapismeretek 12 elads Programozsi alapismeretek 12 elads

  • Slides: 35
Download presentation
Programozási alapismeretek 12. előadás

Programozási alapismeretek 12. előadás

Programozási alapismeretek 12. előadás Ø Tapasztalatok ELTE a rendezésről Ø Keresés rendezett sorozatban Ø

Programozási alapismeretek 12. előadás Ø Tapasztalatok ELTE a rendezésről Ø Keresés rendezett sorozatban Ø Rendezettek uniója Ø Rendezettek összefésülése Ø Kiválogatás helyben Ø Szétválogatás helyben Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Tapasztalatok a rendezésről ØA ELTE rendezési algoritmusok eredménye egy rendezett sorozat. Vajon lehet-e a

Tapasztalatok a rendezésről ØA ELTE 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? Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Keresés rendezett sorozatban Feladat: Egy Y értéket keresünk egy rendezett X sorozatban. Specifikáció: ELTE

Keresés rendezett sorozatban Feladat: Egy Y értéket keresünk egy rendezett X sorozatban. Specifikáció: ELTE Ø Bemenet: T-tulajdonság: T(v): =(v=Y) N: Egész, Y: Valami X: Tömb[1. . N: Valami] Konkretizáljuk! Ø Kimenet: Van: Logikai, S: Egész Legyen növekvő! Ø Előfeltétel: N 0 és Rendezett. E(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ő): Rendezett. E(X[1. . N]): = i(1 i<N): X[i] X[i+1] Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Keresés rendezett sorozatban Ötlet: ELTE Ha már a keresett elem értékénél nagyobb-nál tartunk, akkor

Keresés rendezett sorozatban Ötlet: ELTE Ha már a keresett elem értékénél nagyobb-nál tartunk, akkor biztos nem lesz a sorozat-ban, megállhatunk. i: =1 i N és X[i]<Y i: =i+1 Van: = i N és X[i]=Y Észrevétel: Van megoldás megálltunk keresés köz-ben, mégpedig azért, mert megtaláltuk a keresett értéket. Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Keresés rendezett sorozatban Specifikáció: Ø Bemenet: ELTE N: Egész, Y: Valami X: Tömb[1. .

Keresés rendezett sorozatban Specifikáció: Ø Bemenet: ELTE N: Egész, Y: Valami X: Tömb[1. . N: Valami] Ø Kimenet: Van: Logikai, S: Egész Ø Előfeltétel: N 0 és Rendezett. E(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! Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Keresés rendezett sorozatban Algoritmus: ELTE E: =1 U: =N S: =(E+U) div 2 X[S]>Y

Keresés rendezett sorozatban Algoritmus: ELTE E: =1 U: =N S: =(E+U) div 2 X[S]>Y X[S]<Y U: =S– 1 E: =S+1 E U és X[S] Y Van: =X[S]=Y Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. ØItt akkor van megoldás, ha megtaláltuk a keresett érték valamelyikét. /35

Keresés rendezett sorozatban Kérdések: Ø Ha ELTE több egyforma elem is van a sorozatban,

Keresés rendezett sorozatban Kérdések: Ø Ha ELTE 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? Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Rendezettek uniója Összefuttatás. Feladat: Adott két rendezett halmaz, adjuk meg az uniójukat! ELTE Specifikáció:

Rendezettek uniója Összefuttatás. Feladat: Adott két rendezett halmaz, adjuk meg az uniójukat! ELTE Specifikáció: Ø Bemenet: N, M: Egész, X: Tömb[1. . N: Valami], Y: Tömb[1. . M: Valami] N+M Ø Kimenet: Db: Egész, Z: Tömb[1. . Db: Valami] Ø Előfeltétel: N, M 0 és Halmaz. E(X) és Halmaz. E(Y) és Rendezett. E(X) és Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Rendezettek uniója Ø Utófeltétel: ELTE és i(1≤i≤Db): Z[i] X vagy Z[i] Y és Halmaz.

Rendezettek uniója Ø Utófeltétel: ELTE és i(1≤i≤Db): Z[i] X vagy Z[i] Y és Halmaz. E(Z) és Rendezett. E(Z) Ø Definíció (emlékeztető): Halmaz. E(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 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Rendezettek uniója Algoritmus elé: Ø Amíg van mit hasonlítani: ELTE Ø Ha már nincs

Rendezettek uniója Algoritmus elé: Ø Amíg van mit hasonlítani: ELTE Ø Ha már nincs mit hasonlítani: Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Rendezettek uniója Algoritmus 1: i: =1 j: =1 Db: =0 ELTE i N és

Rendezettek uniója Algoritmus 1: i: =1 j: =1 Db: =0 ELTE 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 … Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Rendezettek uniója … i N ELTE Db: =Db+1 Z[Db]: =X[i] i: =i+1 j M

Rendezettek uniója … i N ELTE Db: =Db+1 Z[Db]: =X[i] i: =i+1 j M 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! Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Rendezettek uniója Algoritmus 2: i: =1 j: =1 Db: =0 X[N+1]: =+ Y[M+1]: =+

Rendezettek uniója Algoritmus 2: i: =1 j: =1 Db: =0 X[N+1]: =+ Y[M+1]: =+ ELTE … és utoljára? Z[Db]: =+ 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 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Rendezettek uniója Algoritmus 2 javítása: ELTE i: =1 j: =1 Db: =0 X[N+1]: =+

Rendezettek uniója Algoritmus 2 javítása: ELTE 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 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Rendezettek uniója Kérdések: Ø Jobb ELTE lett ez a módszer az előzőnél? Hány lépés

Rendezettek uniója Kérdések: Ø Jobb ELTE lett ez a módszer az előzőnél? Hány lépés alatt kapjuk meg a megoldást? Ø 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). Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Rendezettek összefésülése Feladat: Adott két rendezett sorozat, adjuk meg az összefésülésüket! ELTE Specifikáció: Ø

Rendezettek összefésülése Feladat: Adott két rendezett sorozat, adjuk meg az összefésülésüket! ELTE 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 Rendezett. E(X) és Rendezett. E(Y) Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Rendezettek összefésülése Ø Utófeltétel: Z Permutáció(X+Y) és Rendezett. E(Z) Ötlet: ELTE A megoldás olyan,

Rendezettek összefésülése Ø Utófeltétel: Z Permutáció(X+Y) és Rendezett. E(Z) Ötlet: ELTE A megoldás olyan, mint az összefuttatás, csak az egyforma elemeket is berakjuk az eredménybe. Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Rendezettek összefésülése Algoritmus: ELTE i: =1 j: =1 Db: =0 X[N+1]: =+ Y[M+1]: =+

Rendezettek összefésülése Algoritmus: ELTE 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] I N Z[Db]: =X[i] Z[Db]: =Y[j] i: =i+1 j: =j+1 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Kiválogatás helyben Specifikáció: Ø Bemenet: ELTE N: Egész, X: Tömb[1. . N: Valami]Csak érték

Kiválogatás helyben Specifikáció: Ø Bemenet: ELTE N: Egész, X: Tömb[1. . N: Valami]Csak érték lehet! Ø 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]) Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Kiválogatás helyben Algoritmus: Db: =0 ELTE i=1. . N T(X[i]) I Db: =Db+1 X[Db]:

Kiválogatás helyben Algoritmus: Db: =0 ELTE i=1. . N T(X[i]) I Db: =Db+1 X[Db]: =X[i] N Megjegyzés: Itt olyan helyre tesszük a kiválogatott elemet, amire már nincs szükségünk. Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Szétválogatás helyben Specifikáció: Ø Bemenet: ELTE N: Egész, X: Tömb[1. . N: Valami] Ø

Szétválogatás helyben Specifikáció: Ø Bemenet: ELTE 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 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Szétválogatás helyben Algoritmikus ötlet: 1. Vegyük ELTE ki a sorozat első elemét: Oxxxxxx 2.

Szétválogatás helyben Algoritmikus ötlet: 1. Vegyük ELTE ki a sorozat első elemét: Oxxxxxx 2. Keresünk hátulról egy elemet, amit előre kell tennünk (mert T tulajdonságú): Oxxxxxx 3. A megtalált elemet tegyük az előbb keletke-zett lyukba: xxxxxx. Oxxxxx Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

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

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: xxxxxx. Oxxxxx ELTE 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. Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Szétválogatás helyben Algoritmus: e: =1 u: =N Y: =X[e] ELTE e<u Hátulról. Keres(e, u,

Szétválogatás helyben Algoritmus: e: =1 u: =N Y: =X[e] ELTE e<u Hátulról. Keres(e, u, Van) Van I X[e]: =X[u] e: =e+1 Elölről. Keres(e, u, Van) Van I X[u]: =X[e] u: =u– 1 … Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. N N /35

Szétválogatás helyben … X[e]: =Y ELTE I T(Y) Db: =e– 1 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek

Szétválogatás helyben … X[e]: =Y ELTE I T(Y) Db: =e– 1 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. N /35

Szétválogatás helyben Elölről. Keres(e, u: Egész, Van: Logikai ) ELTE e<u és T(X[e]) e:

Szétválogatás helyben Elölről. Keres(e, u: Egész, Van: Logikai ) ELTE e<u és T(X[e]) e: =e+1 Van: =e<u Hátulról. Keres(e, u: Egész, Van: Logikai) e<u és nem T(X[u]) u: =u– 1 Van: =e<u Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Hatékonyságvizsgálat táblázatkezelővel Ötlet: 1. A ELTE táblázatkezelők importálnak sokféle formátumú fájl, pl. CSVformátumút. 2.

Hatékonyságvizsgálat táblázatkezelővel Ötlet: 1. A ELTE táblázatkezelők importálnak sokféle formátumú fájl, pl. CSVformá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. Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Hatékonyságvizsgálat táblázatkezelővel Példafeladat: Az unió és az összefuttatás tételek haté-konyságának összevetése. ELTE Hatékonysági „dimenzió”:

Hatékonyságvizsgálat táblázatkezelővel Példafeladat: Az unió és az összefuttatás tételek haté-konyságának összevetése. ELTE Hatékonysági „dimenzió”: tömbbeli elemek összehasonlításszá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)→h. Dbunió, (N, M)→h. Dbösszefuttatás Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

Hatékonyságvizsgálat táblázatkezelővel Megoldásvázlat: 1. Mindkét ELTE algoritmusban számoljuk a tömb-elemösszehasonlításokat (mérjük az időt). 2.

Hatékonyságvizsgálat táblázatkezelővel Megoldásvázlat: 1. Mindkét ELTE 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 Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

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 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 ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

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 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 ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

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 ELTE Horváth-Papné-Szlávi-Zsakó:

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 ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

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 ELTE Horváth-Papné-Szlávi-Zsakó:

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 ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 12. /35

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

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