Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
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: TElemTSor 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(xX| x.lámpa=1) Y(xX| 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+(xX| 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) ij (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
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.