Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Adatfeldolgozás 2. Szlávi Péter

Hasonló előadás


Az előadások a következő témára: "Adatfeldolgozás 2. Szlávi Péter"— Előadás másolata:

1 Adatfeldolgozás 2. Szlávi Péter
ELTE Informatika Szakmódszertani Csoport Copyright, 1999 © Szlávi Péter

2 Tartalom 1. Adatfeldolgozás problémája, alapfogalmak
1.1 Adatfeldolgozás típusfeladatai 1.2 Elemenkénti feldolgozhatóság 1.3 A Z=F(X) tétel 1.4 Típusfinomítás, struktúramegfeleltetés 2. Struktúramegfeleltetés konfliktusai 2.1 Tagolási konfliktus 2.2 Összefonódási konfliktus 2.3 Rendezetlenségi konfliktus 3. Időszerűsítés 3.1 Megoldása a Z=F(x) tétel alapján 3.2 Megoldása összefuttatással Adatfedolgozás

3 Tartalom 4. Külső rendezések 4.1 Négy munkafájlos rendezés
4.2 Három munkafájlos rendezés 4.3 Prioritási soros rendezés Adatfedolgozás

4 2. Struktúramegfeleltetés konfliktusai
Mikor van „konfliktus”? Ha nem egyesíthető természetes módon szuperstruktúrák hierarchiájává a bemeneti és kimeneti adatok finomítás-struktúrája. Konfliktus fajták: tagolási összefonódási rendezetlenségi Adatfedolgozás

5 2. Struktúramegfeleltetés konfliktusai (folytatás)
Tagolási konfliktus: a lényeg: általános megoldás: virtuális típus bevezetése Adatfedolgozás

6 2. Struktúramegfeleltetés konfliktusai (folytatás)
Összefonódási konfliktus: a lényeg: általános megoldás: szétválogatás Adatfedolgozás

7 2. Struktúramegfeleltetés konfliktusai (folytatás)
Speciális összefonódási konfliktus: a lényeg: a két „keveredő” sorozat elemeit egymás mögé kell elhelyezni megoldás: kiválogatás (X) + kiválogatvaHozzáírás(Y) (egymásutánírás) Adatfedolgozás

8 2. Struktúramegfeleltetés konfliktusai (folytatás)
Speciális összefonódási konfliktus: a lényeg: a két párosan „keveredő” sorozat elemeit csak a második megérkezésekor lehet feldolgozni (előzés nincs!) megoldás: szétválogatás + párosítás/másolás (szétválogatás:sorokban várakoztatás + másolás) Adatfedolgozás

9 2. Struktúramegfeleltetés konfliktusai (folytatás)
Speciális összefonódási konfliktus: a lényeg: a két egykén vagy párosan „keveredő” sorozat elemeit csak a második megérkezésekor lehet feldolgozni, de a követési távolság (ismert) nem nagy (a pár része az elsőnek, előzés van; pl. hálózaton a csomagok). megoldás: pufferbe másolás + időszerűsítés Adatfedolgozás

10 2. Struktúramegfeleltetés konfliktusai (folytatás)
Rendezetlenségi konfliktus: a lényeg: általános megoldás: (külső) rendezés Adatfedolgozás

11 2. Struktúramegfeleltetés konfliktusai (folytatás)
Speciális rendezetlenségi konfliktus: a lényeg: fordított sorrend megoldás: (külső) „veremkezelés” Adatfedolgozás

12 2. Struktúramegfeleltetés konfliktusai (folytatás)
Speciális rendezetlenségi konfliktus: a lényeg: csoportokban rossz sorrendben, de a csoportok helyes sorrendben (a csoportméret ismert, nem túl nagy). megoldás: pufferbe másolás + belső rendezés Adatfedolgozás

13 2.1 Tagolási konfliktus Feloldás: a típusok „összebékítése” virtuális típus(ok) bevezetésével. Típusmódosítás: Reprezentációmódosítás Implementálás Virtuális elem olvasása (bemeneti oldalon) Virtuális elem írása (kimeneti oldalon) Sokszor még: nyitás és zárás „szertartása”, a vég érzékelése is. Adatfedolgozás

14 2.1 Tagolási konfliktus (folytatás)
Példa: Fájl nyomtatása lapozottan (fej=Fájlnév, láb=lapsorszám). Megoldás: Típus Bemenet=File(TElem) Kimenet=File(TLap) TElem=?  TLap=Rekord( fej: TFej törzs: TSorok láb: TLáb) Konfliktus!!! Feloldása: virtuális típus a bemeneti oldalon. Reprezentáció: Bemenet’=File(VLap) VLap=TLapnyiDbElem  TUtolsóLap [Unió] Az világos, hogy TLapnyiDbElem és TUtolsóLap  TSorok Adatfedolgozás

15 2.1 Tagolási konfliktus (folytatás)
Implementáció: Konstans DB:Egész(?) Típus TSorok=Tömb(1..DB:TSor) TSor= … sor … Eljárás VLapOlvasás(Változó X:Bemenet, s:TSorok): i:=0 Ciklus amíg i<DB és nem Vége?(X) Olvas(X,adat); i:+1; s(i):=f(adat) Ciklus vége Ciklus j=i+1-től DB-ig s(j):=ÜresSor Ciklus vége Eljárás vége. f: TElemTSor A maradék kitöltése. Világos utalás arra, hogy a VLap unióként lett definiálva, ti. i<DB feltétel mellett jelent egyáltalán végrehajtást. Adatfedolgozás

16 2.1 Tagolási konfliktus (folytatás)
A Kimenet típus implementálandó, hiszen TLap típus nem standard típus. Implementáció: Eljárás LapÍrás(Változó Z:SzövegFile Konstans s:TSorok): FejlécNyomtatás Ciklus i=1-től DB-ig SorÍr(Z,s(i)) Ciklus vége LáblécNyomtatás [lapsz:+1 és kiírás] Eljárás vége. A teljes feladat megoldása: Nyit(X,…); Nyitás(Z) [lapsz:=0] Ciklus amíg nem Vége?(X) VLapOlvasás(X,sor); LapÍrás(Z,sor) Ciklus vége Zár(X); Zár(Z) TLap=Rekord( fej: TFej törzs: TSorok láb: TLáb) Hf Hf Hf Adatfedolgozás

17 2.1 Tagolási konfliktus (folytatás)
Példa: SzövegFile sorokra tördelése (szó nem törhet el; végjelek nincsenek a szövegben). Megoldás: Típus Bemenet=File(Karakter) Kimenet=File(TSor) Karakter  TSor=(Szó x SzóElválasztó)* Szó=(Karakter\{‘ ‘}\VégJelek)* SzóElválasztó={‘ ‘}* Konfliktus!!! Feloldása: virtuális típus a bemeneti oldalon. Reprezentáció: Bemenet’=File(TSor) TSor=(Szó  SzóElválasztó)* [Típusinvariáns: s:TSor  Hossz(s)SorHossz] Kimenet  File(Karakter)  SzövegFile Adatfedolgozás

18 2.1 Tagolási konfliktus (folytatás)
Implementáció: Típus TSor=Szöveg [Típusinvariáns: …] Konstans MaxSHossz:Egész(?) [Sorhossz] Előreolvasási technika!!! Változó szó,elv:Szöveg [előreolvasott szó/elv.] Eljárás SorNyitás(Változó X:Bemenet): Nyit(X,…) SzóOlvasás(X,szó,elv) [Vége?(X)  szó/elv=’’] Eljárás vége. Elvárás a majdan megírandó SzóOlvasás eljáráshoz! Adatfedolgozás

19 2.1 Tagolási konfliktus (folytatás)
Eljárás SorOlvasás(Változó X:Bemenet, sor:TSor): sor:=’’ [szó+elv előreolvasva] Ciklus amíg nem Vége?(X) és Hossz(sor)+Hossz(szó+elv)MaxSHossz sor:+szó+elv SzóOlvasás(X,szó,elv) Ciklus vége Ha Hossz(sor)+Hossz(szó)MaxSHossz akkor sor:+szó SzóOlvasás(X,szó,elv) [Vége?(X)  szó/elv=’’] Elágazás vége Eljárás vége. Elvárás a majdan megírandó SzóOlvasás eljáráshoz! Elválasztók a sor végéről elhagyhatók Adatfedolgozás

20 2.1 Tagolási konfliktus (folytatás)
Eljárás SzóOlvasás(Változó …): … Eljárás SorZárás(Változó …): … A Kimenet típus könnyen implementálható, hiszen a TSor típus, bár nem „standard” típus, de Szöveg leszár- mazott. Implementáció: Eljárás SorÍrás(Változó Z:SzövegFile Konstans s:TSor): SorÍr(Z,s) Eljárás vége. Hf Hf TSor=(Szó x SzóElválasztó)* Szöveg Hf a kimeneti típushoz tartozó többi művelet.  Adatfedolgozás

21 2.1 Tagolási konfliktus (folytatás)
A teljes feladat megoldása: SorNyitás(X); Nyit(Z,…) Ciklus amíg nem Vége?(X) SorOlvasás(X,sor); SorÍrás(Z,sor) Ciklus vége SorZárás(X); Zár(Z) Adatfedolgozás

22 2.2 Összefonódási konfliktus
A probléma: Két vagy több sorozat keveredése úgy, hogy a részso- rozatok elemei a feldolgozásnak megfelelő sorrendben vannak. (A feldolgozáshoz a részsorozatok azonos sorszámú elemei alkotnak „egységet”.) Feloldás: Szétválogatás, majd „párhuzamos” feldolgozás. Speciális feladatok: Szétválogatás és egymásutánírás Szétválogatás és párosítás Szétválogatás és időszerűsítés Adatfedolgozás

23 2. 2 Összefonódási konfliktus (folytatás) 2. 2
2.2 Összefonódási konfliktus (folytatás) Szétválogatás és egymásutánírás Példa: Egy egyirányú utcában két jelzőlámpánál figyelik az átha- ladó autókat: mikor haladt át a lámpánál. Az adatok meg- figyelési idő szerinti sorrendben érkeznek. N db autót fi- gyeltek meg. Csoportosítsuk az adatokat, hogy az első lámpánál történt megfigyelések –időbeli sorrendjüket megtartva– előzzék meg a második lámpánál megfigyelt adatokat. (Az utcában előzés nincs.) Megoldás: Típus Bemenet=File(Forgalom) Kimenet=File(Forgalom) [Idő szerint rendezve] [Lámpa+Idő szerint rendezve] Forgalom=Rekord Forgalom=Rekord (Lámpa:{1,2} (Lámpa:{1,2} Idő:Egész) Idő:Egész) Adatfedolgozás

24 2. 2 Összefonódási konfliktus (folytatás) 2. 2
2.2 Összefonódási konfliktus (folytatás) Szétválogatás és egymásutánírás Eljárás ForgalomCsoportosítás(Változó X:Bemenet Z:Kimenet): Változó Y:File(Forgalom) [segédfájl] adat:Forgalom Nyit(X,…); Nyit(Y,…); Nyit(Z,…) i:=0 Ciklus amíg i<N Olvas(X,adat) Ha adat.lámpa=1 akkor Ír(Z,adat); i: különben Ír(Y,adat) Ciklus vége Zár(Y); Nyit(Y,…) Ciklus amíg nem Vége?(Y) Olvas(Y,adat); Ír(Z,adat) Ciklus vége Ciklus amíg nem Vége?(X) Olvas(X,adat); Ír(Z,adat) Ciklus vége Zár(X); Zár(Z); Zár(Y) Eljárás vége. Z(xX| x.lámpa=1) Y(xX| x.lámpa=2  x.idő<zN.idő) Az első lámpával végeztünk, a má-sodik eddigi adatai az eredménybe má-solhatók. Z+Y Z+(xX| x.lámpa=2  x.idő>zN.idő) X-ben már csak a második lámpa ada-tai maradhattak, egy-szerűen másolhatók. Adatfedolgozás

25 Egy alkalmas „belső állapotváltozás” tipizálása:
2.2 Összefonódási konfliktus (folytatás) Szétválogatás és párosítás 1. példa: Egy vasútvonal két állomásán egy nap feljegyeztük, az ösz- szes egyik irányba áthaladó vonat indulási, illetve érkezési idejét (idő szerinti sorrendben). Adjuk meg az áthaladt vo- natok menetidőit a két állomás között! (Nincs előzés.) Megoldás: Típus Bemenet=File(Állomás) Kimenet=File(Vonat) Állomás=Rekord Vonat=Egész [menetidő] (sorszám:{1,2},idő:TIdő) Egy alkalmas „belső állapotváltozás” tipizálása: Bemenet=File(Állomás)TSor Kimenet=File(Vonat)TSor Állomás=Rekord Vonat=Egész (sorszám:{1,2},idő:TIdő) TSor=Sor(Vonat [1. idő]) TSor=Sor(Vonat [1. idő]) Miért nem kell vonatazonosító? Miért nem kell vonatazonosító? Adatfedolgozás

26 Két tipikus állapotváltozás: Előtte Utána
2.2 Összefonódási konfliktus (folytatás) Szétválogatás és párosítás Két tipikus állapotváltozás: Előtte Utána BeFile  TSor  KiFile BeFile  TSor  KiFile ((1,x),(y,z),...) (s1,...,su) (v1,...,vk) ® ((y,z),...) (s1,...,su,x) (v1,...,vk) ((2,x),(y,z),...) (s1,...,su) (v1,...,vk) ® ((y,z),...) (s2,...,su) (v1,...,vk,x–s1) Eljárás Vonatidők(Változó X:Bemenet,V:Kimenet): … [fájlnyitások] SorInicializálás Ciklus amíg nem Vége?(X) Olvas(X,adat) Ha adat.sorszám=1 akkor Sorba(adat.idő) különben Sorból(t) Ír(V,adat.idő-t) Ciklus vége … [fájlzárások] Eljárás vége. Adatfedolgozás

27 2. 2 Összefonódási konfliktus (folytatás) 2. 2
2.2 Összefonódási konfliktus (folytatás) Szétválogatás és párosítás 2. példa: Egy vasútvonal két állomásán egy nap feljegyeztük, az ösz- szes, mindkét irányba áthaladó vonat indulási, illetve érke- zési idejét (idő szerinti sorrendben). Adjuk meg az áthaladt vonatok menetidőit a két állomás között! (Előzés nincs, csak egy sínpár van.) Megoldás: Az „extraprobléma”, hogy nem 2, hanem 4 részsorozat ke- veredik ((oda+vissza)*(indulás+érkezés)). Ötlet: azt kell vissza- tartani, amelyikben előbbre haladtunk, azaz érzékelni kell, hogy ez melyik. Ciklus amíg nem Vége?(X) Olvas(X,adat) Ha SorÜres? akkor tip:=adat.sorszám Ha adat.sorszám=tip akkor Sorba(adat.idő) különben Sorból(t) Ír(V,adat.idő-t) Ciklus vége Adatfedolgozás

28 Egy alkalmas „belső állapotváltozás” tipizálása:
2.2 Összefonódási konfliktus (folytatás) Szétválogatás és időszerűsítés 1. példa: Egy számítógéphálózaton az üzeneteket csomagokra bontva kül- dik. Minden csomag tartalmaz (a csomagsorszám mellett) egy ellenőrző összeget. Ha a vevő valamelyiket hibásnak találja, ak- kor annak megismétlését kéri a küldőtől. A csomagok jó sorrend- ben érkeznek (a javítók is egymáshoz képest). A vevő feladata az üzenetek csomagjainak javítások utáni helyes sorrendbe állítása. Megoldás: (az előzőhöz hasonlóan) Egy alkalmas „belső állapotváltozás” tipizálása: Bemenet=File(Üzenet)TSor Kimenet=File(Üzenet)TSor Üzenet=Rekord Üzenet=Rekord (sorsz:Egész (sorsz:Egész tart:Szöveg,ell:TEll) tart:Szöveg,ell:TEll) TSor=Sor(Üzenet) TSor=Sor(Üzenet) Adatfedolgozás

29 Tipikus állapotváltozások: Előtte Utána
2.2 Összefonódási konfliktus (folytatás) Szétválogatás és időszerűsítés (i:Egész /jó-e:{,}) az i. csomag jó-e Tipikus állapotváltozások: Előtte Utána BeFile  TSor  KiFile BeFile  TSor  KiFile ((i/),x2,...) (x2,...) () ® () (z1,...,zk) (z1,...,zk,(i/)) ((i/),x2,...) (x2,...) ((i/),se,...su,(j/),...) ® ((j/),...) (z1,...,zk) (z1,...,zk,(i/),se,...,su) ((i/),x2,,...) (x2,...) ((j/),...,sm) ij (i>j) ® ((j/),…,sm,(i/)) (z1,...,zk) (z1,...,zk) ((i/),x2,...) (x2,...) (...,sm) i(...,sm) ® (…,sm,(i/)) (z1,...,zk) (z1,...,zk) ((i/),x2,...) (x2,...) (...,sm) i(...,sm) ® (…,sm) (z1,...,zk) (z1,...,zk) jók jók Adatfedolgozás

30 2. 2 Összefonódási konfliktus (folytatás) 2. 2
2.2 Összefonódási konfliktus (folytatás) Szétválogatás és időszerűsítés Eljárás Üzenetek(Változó X:Bemenet, V:Kimenet): … [fájlnyitások] SorInicializálás(s) Ciklus amíg nem Vége?(X) Olvas(X,a) Ha a.ell= akkor JóÜz(a,s,V) különben HibásÜz(s,a) Ciklus vége … [fájlzárások] Eljárás vége. Eljárás JóÜz(Konst. ad:Üzenet, Vált. s:TSor,V:Kimenet): Elágazás Üres?(s) esetén Ír(V,ad) ad.sorsz=Első(s).sorsz [azaz javító csomag] esetén Sorból(s,x); Ír(V,ad) SorÜrítés(s,V) egyéb esetben Sorba(s,ad) Elágazás vége Az ‘a’ megfelelő? Adatfedolgozás

31 Az ‘Első(s)’ megfelelő?
2.2 Összefonódási konfliktus (folytatás) Szétválogatás és időszerűsítés Eljárás HibásÜzenet(Vált. s:TSor, Konst. ad:Üzenet): Ha ad.sorszÏs akkor Sorba(s,ad) IsmétlésKérés(ad.sorsz) Eljárás vége. Eljárás SorÜrítés(Változó s:TSor, V:Kimenet): Ciklus amíg nem Üres?(s) és Első(s).ell= Sorból(s,ad); Ír(V,ad) Ciklus vége Az ‘Első(s)’ megfelelő? Adatfedolgozás

32 Egy alkalmas „belső állapotváltozás” tipizálása:
2.2 Összefonódási konfliktus (folytatás) Szétválogatás és időszerűsítés 2. példa: … mint előbb, de a csomagok sorrendje is megváltozhat ... Megoldás: (az előzőhöz hasonlóan) Egy alkalmas „belső állapotváltozás” tipizálása: Bemenet=File(Üzenet)TSor Kimenet=File(Üzenet)TSor Üzenet=Rekord Üzenet=Rekord (sorsz:Egész (sorsz:Egész tart:Szöveg,ell:TEll) tart:Szöveg,ell:TEll) TSor=PrSor(Üzenet) TSor=PrSor(Üzenet) További ötlet: … ha jön egy új csomag, akkor a prioritási sorba beillesztjük őt, a sor elején levő jókat lehet kiszedni… Adatfedolgozás

33 2.3 Rendezetlenségi konfliktus
A probléma: A sorozat elemeinek rossz sorrendje. Feloldás: Rendezés. Speciális feladatok: Megfordítás Részleges rendezetlenség Adatfedolgozás

34 2.3 Rendezetlenségi konfliktus (folytatás) 2.3.1 Megfordítás
A probléma: A bemenet pontosan ellenkező sorrendű, mint a –kí- vánatos– kimenet. A megoldás: Veremként „működő” fájl. Modul FVerem(Típus TElem): Reprezentáció Változó f:DirektFile(TElem) Implemetáció Eljárás Üres(Változó v:Verem) Verembe(Változó v:Verem Konstans e:TElem) … Függvény Üres?(Konstans v:Verem): Logikai Inicializálás … Modul vége. Típus TElem=? Eljárás Megfordít (Változó X:Bemenet Y:Kimenet): Változó v:FVerem(TElem) … [fájlnyitások] Üres(v) Ciklus amíg nem Vége?(X) Olvas(X,adat); Verembe(v,adat) Ciklus vége Ciklus amíg nem Üres?(v) Veremből(v,adat); Ír(Y,adat) Ciklus vége … [fájlzárások] Eljárás vége. Adatfedolgozás

35 2.3 Rendezetlenségi konfliktus (folytatás) 2.3.1 Megfordítás
Egy másik megoldás: Memóriabeli verem+szekvenciális fájl. Modul FVerem(Típus TElem): Reprezentáció Változó v:Verem(TElem) [memóriában] f:SzekvFile(TElem) Implemetáció Eljárás Üres(Változó v:Verem) Verembe(Változó v:Verem Konstans e:TElem) … Függvény Üres?(Konstans v:Verem): Logikai Inicializálás … Modul vége. Típus TElem=? Eljárás Megfordít (Változó X:Bemenet Y:Kimenet): Változó v:FVerem(TElem) … [fájlnyitások] Üres(v) … hf. … [fájlzárások] Eljárás vége. Ötlet: amikor a memóriabeli verem betelik, akkor egy szekvenciális fájlba mint futamot írjuk ki (értsd: egy futam=egy fájl  több fájl; „szabályos” nevek- kel: pl. VeremXXXX.dat, X=számjegy.)… Adatfedolgozás

36 2. 3 Rendezetlenségi konfliktus (folytatás) 2. 3
2.3 Rendezetlenségi konfliktus (folytatás) Részleges rendezetlenség A probléma: A bemeneti adatok (memóriában tartható, de nem ismert elemszámú) csoportokat alkotnak. A csoportok egymásután helyes sorrendben vannak, de csoporton belül rendezetlenül. Rendezzük az egészet! Típus TElem=? Eljárás CsoportosanRendez (Változó X:Bemenet Y:Kimenet): Változó t:Tömb(1..MaxN:TElem) e:TElem [előreolvasott] … [fájlnyitások] … hf. … [fájlzárások] Eljárás vége. Ötlet: előreolvasási technikával csoportonként (t,e)- be olvassuk, t-ben rendezzük, majd kiírjuk. Az ol- vasás és rendezés egyszerre is végezhető a „beszú- rásos rendezés” elvével. Adatfedolgozás


Letölteni ppt "Adatfeldolgozás 2. Szlávi Péter"

Hasonló előadás


Google Hirdetések