Copyright, 1999 © Szlávi Péter Táblázat típuskonstrukció Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék

Slides:



Advertisements
Hasonló előadás
T ESZTELÉS. C ÉLJA Minél több hibát találjunk meg! Ahhoz, hogy az összes hibát fölfedezzük, kézenfekvőnek tűnik a programot az összes lehetséges bemenő.
Advertisements

Nevezetes algoritmusok
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Adatelemzés számítógéppel
Programozási tételek, és „négyzetes” rendezések
Matematika és Tánc Felkészítő tanár: Komáromi Annamária
Adatszerkezetek Az adatokat két fő csoportra oszthatjuk: egyszerű és összetett adatok.  Az egyszerű adatot egy érték jellemez, tovább nem bontható. (szám,
Programozási alapismeretek 5. előadás. ELTE Szlávi - Zsakó: Programozási alapismeretek 5.2/  Programozási tételek.
Algebrai specifikációk Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
INFOÉRA Kombinatorikai algoritmusok (Horváth Gyula és Szlávi Péter előadásai felhasználásával) Juhász István-Zsakó László: Informatikai.
Rekurzió (Horváth Gyula és Szlávi Péter előadásai felhasználásával)
Algoritmizálás, adatmodellezés tanítása 4. előadás
Prímtesztelés Témavezető: Kátai Imre Komputeralgebra Tanszék Nagy Gábor:
Copyright, 2009 © Szlávi Péter A kupac és a prioritási sor típuskonstrukciók Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
Minimális költségű feszítőfák
4. VÉGES HALMAZOK 4.1 Alaptulajdonságok
Programozási alapismeretek 7. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás2/  Sorozatszámítás.
Programozási alapismeretek 3. előadás
Programozási alapismeretek
Programozási alapismeretek 10. előadás
Programozási alapismeretek 5. előadás. ELTE 2/  Programozási tételek – a lényeglényeg  Sorozatszámítás Sorozatszámítás.
Programozási alapismeretek 11. előadás. ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 11.2/ Tartalom.
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.
1 Hash-elés. 2 Mi a hash-elés? Gyorsan teszi lehetővé a keresést, törlést, beszúrást, módosítást Nem szükséges az elemek rendezettsége Nincsenek rendezéshez.
Egydimenziós tömbök. Deklarálás: var valtozónév:array[kezdőérték..végsőérték]of típus; type típusnév = array [kezdőérték..végsőérték] of típus; var valtozónév:
Gombkötő Attila Lineáris egyenlet.
Készítette: Pető László
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Fák, bináris fák INFOÉRA Ez így 60 perc.
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.1/ Keresés Specifikáció:  Bemenet: N:Egész, X:Tömb[1..N:Valami]
Szlávi Péter ELTE IK Média- és Oktatásinformatika Tanszék 2010 Kombinatorikai algoritmusok.
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.1/ Sorozatszámítás Specifikáció (a végleges) :  Bemenet:
2. A rekurzió mint típuskonstrukció Szlávi Péter ELTE Média- és Oktatásinformatikai Tanszék
Copyright, 1999 © Szlávi Péter Prioritási sor típuskonstrukció Szlávi Péter ELTE Informatika Szakmódszertani Csoport
Copyright, 1999 © Szlávi Péter Verem típuskonstrukció Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
„Országos” feladat. Feladat: Egy tetszőleges, színes országokat tartalmazó térképen akar eljutni egy kommandós csapat egy országból egy másikba. Viszont.
Ismétlés.
Adatszerkezetek 1. előadás
Egyirányban láncolt lista
Algoritmus szerkezetek
Programozási alapismeretek 11. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 11.2/ Tartalom  Rendezési.
Nevezetes algoritmusok
Copyright, 1999 © Szlávi Péter Sor típuskonstrukció Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
Egyenesvonalú (lineáris) adatszerkezetek
Adatbázisok tervezése, megvalósítása és menedzselése
1. MATEMATIKA ELŐADÁS Halmazok, Függvények.
Copyright, 1999 © Szlávi Péter Szövegfeldolgozás 1.
File- típus-konstrukciók Szlávi Péter ELTE Informatika Szakmódszertani Csoport
Feladatok (értékadás)
Adatbáziskezelés. Adat és információ Információ –Új ismeret Adat –Az információ formai oldala –Jelsorozat.
Programozási alapismeretek 10. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 10.2/  Kiválogatás + összegzés.
Diszjunkt halmazok adatszerkezete A diszjunkt halmaz adatszerkezet diszjunkt dinamikus halmazok S={S 1,…,S n } halmaza. Egy halmazt egy képviselője azonosít.
Programozási alapismeretek 11. előadás
Algoritmusok és adatszerkezetek
Memóriakezelés feladatok Feladat: 12 bites címtartomány. 0 ~ 2047 legyen mindig.
Összeállította: Gergely János
Fájlszervezés Adatbázisok tervezése, megvalósítása és menedzselése.
NJSzT Nemes Tihamér Országos Középiskolai Sámítástechnikai Tanulmányi Verseny.
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Alapvető programozási tételek megvalósítása Czigléczky Gábor 2009.
Nevezetes algoritmusok
Halmazműveletek.
Algoritmusok és Adatszerkezetek I.
INFOÉRA Halmazok Juhász István-Zsakó László: Informatikai képzések a ELTE-n.
Gráfok 2. Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
Informatikai gyakorlatok 11. évfolyam
Adatszerkezetek -- Típusok
Algoritmusok és Adatszerkezetek I.
Rekurzió 3. Szlávi Péter ELTE Informatika Szakmódszertani Csoport
Programozási tételek.
Előadás másolata:

Copyright, 1999 © Szlávi Péter Táblázat típuskonstrukció Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék

 Programozásmódszertan2/45 Tartalomjegyzék 0 Bevezetés 1 A táblázat algebrai specifikációja algebrai specifikációjaalgebrai specifikációja 1.1 Táblázat-műveletek Táblázat-műveletek 1.2 Táblázat-axiómák Táblázat-axiómák 2 A táblázat típuskonstrukció specifikációja típuskonstrukció specifikációjatípuskonstrukció specifikációja 2.1 A táblázat exportmodulja exportmodulja 2.2 A táblázat megvalósítási moduljai megvalósítási moduljaimegvalósítási moduljai 3 Lineáris táblázat Lineáris táblázatLineáris táblázat 4 Alkalmazás: rendezés kulcstranszformációval Alkalmazás: rendezés kulcstranszformációvalAlkalmazás: rendezés kulcstranszformációval

 Programozásmódszertan3/45 00 Bevezetés Lényeg…a hatékony keresés 0 Kulcs az azonosítás alapjaKulcs az azonosítás alapja Keresések – adatszerkezetek –„Totális” információ – Halmaz  „direkt” hozzáférés  Van-e? –„Parciális” információ – Sorozatfélék  „szekvenciális” hozzáférés  Van-e? / Melyik az?  „Totális” információ Cél:Cél: –„direkt” hozzáférés –„parciális” információ

 Programozásmódszertan4/45 00 Bevezetés (folytatás) Lényeg… a hatékony keresés 0 MódszerSorozatféleSpeciális Hasonlítás-szám T L F s F d feltétel sikeres sikertelen T L F s F d feltétel sikeres sikertelen Lineáris keresés I I I I — N/2 N Lineáris kiválasztás I I I I  a keresett N/2 — Lineáris gyakoriság sze- keresés I I I I rint rendezve (N+2)/3 N Logaritmikus keresés I N N Irendezettség [lb(N)]-1 [lb(N)]+1 Fibonacci Fibonacci keresés I N N Irendezettség [lb(N)]+1 Fibonacci Interpolációs Interpolációs keresés I N N Irendezettség lb(lb(N)) lb(N) Interpolációs T=Tömb; L=Lista; F s =Szekvenciális file; F d =Direkt file lb(x)= log 2 (x) Demo

 Programozásmódszertan5/45 00 Bevezetés (folytatás) Lényeg… a hatékony keresés 0 Ötlet a cél megvalósításához:Ötlet a cél megvalósításához: –Reprezentáció = „direkt-címezhető”, indexelhető struktúra (pl. tömb, direktfile) –Implementáció = alkalmas „Kulcs  Index” függvény

 Programozásmódszertan6/45 00 Bevezetés (folytatás) Kulcstranszformációs függvény 0 Kulcstranszformációs ( index- / hash- / „hasító” ) függvény: h : K  I, ahol K = kulcshalmaz (ahova képez a kulcsfüggvény, ami az egyes elemekhez hozzárendeli azt az információt, a kulcsot, amely alapján kikereshető a táblázatból). K= II K II I = indexhalmaz (amellyel a reprezentációbeli a tömböt in- dexelni fogjuk). M= II I II, I ={0..M-1}, Megjegyzendő: a kulcsfüggvény  kulcstranszformációs (hash) függvény! (Lásd itt.) itt

 Programozásmódszertan7/45 00 Bevezetés (folytatás) Kulcstranszformációs függvény – problémák 0 1. Az egyértelműség és ára: Olyan függvényt találni, amely K (adott) kulcsot M indexre egyértelműen képez le (K  M) :Olyan függvényt találni, amely K (adott) kulcsot M indexre egyértelműen képez le (K  M) : eséllyel lehet. „tele tábla” esetén (K=M) ez az esély:„tele tábla” esetén (K=M) ez az esély: Pl. születésnap-paradoxon: ha 23 ember összegyűlik ünnepelni, akkor ~0,5073 annak a sansza, hogy lesz közöttük legalább kettő, aki azonos napon született. (Az aktuális [1999-ben] évfolyam- létszámmal, a 103-mal: ~0, , azaz „kémikusul mondva” 6 kilences pontossággal biztos esemény: K=103, M=365.) születésnap-paradoxonszületésnap-paradoxon M helyre K valamit ismétlés nélkül téve M helyre K valamit ismétlést is megengedve téve Prog- ram

 Programozásmódszertan8/45 00 Bevezetés (folytatás) Kulcstranszformációs függvény – problémák 0 Az elvárások gyengítése a kulcstranszformációs függvénnyel szemben: legyen K a lehetséges kulcsok halmaza ( eddig a ténylegesen előfordultakat jelöltük így ),legyen K a lehetséges kulcsok halmaza ( eddig a ténylegesen előfordultakat jelöltük így ), értékkészlete a teljes I ={0..M–1} halmaz,értékkészlete a teljes I ={0..M–1} halmaz, véletlenszerűen szórja szét (még a közel azonos) kulcsokat (is)véletlenszerűen szórja szét (még a közel azonos) kulcsokat (is)  egyenletesség, kevés ütközést produkáljon,kevés ütközést produkáljon, egyszerűen kiszámolható legyen.egyszerűen kiszámolható legyen. Lemondunk az egyértelműség mindenáron teljesítéséről.

 Programozásmódszertan9/45 00 Bevezetés (folytatás) Kulcstranszformációs függvény – problémák 0 2. A nem egyértelműség következménye: a kulcsütközés Mi az esélye ( véletlenszerű választás esetén ) a „jó” hely választásnak az i. alkalommal? Ha K  M, akkor ( egyenletesség esetén pontosan, egyébként átlagosan ) K/M „szinonima” (= az ugyanoda leképezett kulcsok egymás szinonimái ). P 1 =P(1. elem nem ütközik)=1 P 2 =P(2. elem nem ütközik  1. elemig nem volt ütközés)= =…

 Programozásmódszertan10/45 00 Bevezetés (folytatás) Kulcstranszformációs függvény – problémák 0 P 3 =P(3. elem nem ütközik  2. elemig nem volt ütközés)= =… P N =P(N. elem nem ütközik  N-1. elemig nem volt ütközés)= = P(ütközés n.-ig)=1–P 1 *P 2 *...*P n = = =  (M«K)

 Programozásmódszertan11/45 00 Bevezetés (folytatás) Kulcstranszformációs függvény – problémák 0 P(ütközés n.-ig)=1–P 1 *P 2 *...*P n  (M«K) Számoljunk, mit is jelent ez pl. M=10-ig!

 Programozásmódszertan12/45 00 Bevezetés (folytatás) Kulcstranszformációs függvények definiálása 0 a) Osztó módszer a) Osztó módszer h (k):=k Mod M, k  Z b) Szorzó módszer b) Szorzó módszer h (k):=Közepe m (A*k), k  Z c) Számjegyes módszer d) Jel-kód módszerek

 Programozásmódszertan13/45 00 Bevezetés (folytatás) Kulcsütközés feloldási módszerei 0 a) Túlcsordulási terület módszere b) Láncolt altáblák módszere c) Lineárisan szétszórt altáblák vagy nyílt címzés módszer d) Másodlagos kulccsal, más néven kettős hash-eléssel e) Hierarchikus módszer f) Blokkolt altáblák, láncolt blokkokkal

 Programozásmódszertan14/45 11 A táblázat algebrai specifikációja 1.1 Táblázat-műveletek 1 Típus Táblázat(Kulcs fv (Elem):Kulcs, Méret:Egész :Elem): Típus Táblázat(Kulcs fv (Elem):Kulcs, Méret:Egész : Elem): Asszociált műveletek: Üres: Táblázat Beilleszt(Táblázat,Elem): Táblázat  {NemDef} Töröl(Táblázat,Kulcs): Táblázat  {NemDef} Keres(Táblázat,Kulcs): Elem  {NemDef} ElemSzám(Táblázat): Egész

 Programozásmódszertan15/45 11 A táblázat algebrai specifikációja 1.1 Táblázat-műveletek 1 További lehetséges táblázatművelet: Tele?(Táblázat): Logikai A bejáráshoz (lineáris táblázat): Első(Táblázat): Táblázat  Elem  {NemDef} Utolsó(Táblázat): Táblázat  Elem  {NemDef} Következő(Táblázat): Táblázat  Elem  {NemDef} Előző(Táblázat): Táblázat  Elem  {NemDef}

 Programozásmódszertan16/ Táblázat-axiómák 1.2 Axiómák: 1 o Üres táblázat minden eleme nem definiált értékű, és 0 az elemszám. ElemSzám(Üres)=0  Keres(Üres,k)=NemDef  Töröl(Üres,k)=NemDef  … 2 o Ha van még hely, akkor elem beszúrható és az elemszám eggyel nő, kivéve, ha ugyanilyen kulcsút már tartalmaz a táblázat.  Tele?(t)  Kulcs fv (e)=Kulcs fv (e * )  Beilleszt(Beilleszt(t,e),e * )=NemDef   Tele?(t)  Beilleszt(t,e)=t *  NemDef  ElemSzám(t * )=ElemSzám(t)+1 A speciális műveleteket most nem axiomatizáljuk.

 Programozásmódszertan17/ Táblázat-axiómák (folytatás) 3 o Létező elem törölhető, és az elemszám eggyel csökken; nem létező törlése nem definiált. Keres(t,k)=e  Töröl(t,k)=t’  ElemSzám(t’)=ElemSzám(t)-1 Keres(t,k)=NemDef  Töröl(t,k)=NemDef Keres(t,k)=NemDef  Töröl(t,k)=NemDef 4 o Ha van keresett kulcsú elem a táblázatban, akkor az kikereshető.  Beilleszt(t,e)=t’  Keres(t’,Kulcs fv (e))=e

 Programozásmódszertan18/45 22 A táblázat típuskonstrukció specifikációja 2.1 A táblázat exportmodulja 2 ExportModul Táblázat(Függvény Kulcs(TElem):TKulcs, Konstans Méret:Egész : Típus TElem): Eljárás Üres(Változó t:Táblázat) Eljárás Beilleszt(Változó t:Táblázat, Konstans e:TElem) Eljárás Töröl(Változó t:Táblázat, Konstans k:TKulcs) Eljárás Keres(Változó t:Táblázat, Konstans k:TKulcs, Változó e:TElem) Meg kell gondolni az operátorok ef/uf-ét az axiómák alapján! Lásd a deklarációs példát!példát Lásd a deklarációs példát!példát

 Programozásmódszertan19/ A táblázat exportmodulja (folytatás) Függvény ElemSzám(Konstans t:Táblázat): Egész Függvény Hibás?(Konstans t:Táblázat): Logikai Eljárás ÚjraSzervez(Változó t:Táblázat) ÚjraSzervez Modul vége.

 Programozásmódszertan20/45 22 A táblázat típuskonstrukció specifikációja 2.2. A táblázat megvalósítási moduljai Túlcsordulási terület módszere moduljai 2moduljai Modul Táblázat(Függvény Kulcs(TElem):TKulcs, Konstans Méret:Egész : Típus TElem): Reprezentáció Reprezentáció Konstans TúlcsMéret:Egész(?) [pl. Méret?] Típus TElemJellemző=(Üres,Foglalt,Törölt) TTáblaElem=Rekord(elem:TElem, attri:TElemJellemző) TTábla=Tömb(0..Méret-1:TTáblaElem) TTulcsTer=Tömb(0..TúlcsMéret-1:TElem) Változó ft:TTábla, tt:TTulcsTer [„fő”-, túlcsordulási tábla] db,ttdb:Egész [össz-elemszám, tt kitöltöttsége] hiba:Logikai Meggondolandó, hogy a Tábla és a TTulcsTer össz-mérete legyen Méret-nyi.

 Programozásmódszertan21/ Túlcsordulási terület módszere (folytatás) Implementáció Implementáció Eljárás Beilleszt(Változó t:Táblázat, Konstans e:TElem): Beilleszt Változó k:TKulcs, kk:0..Méret-1 van:Logikai, melyik:Egész k:=Kulcs fv (e); kk:=Hash(k) Elágazás ft(kk).attri  {Üres,Törölt} esetén ft(kk):=TTáblaElem(e,Foglalt); db:+1 Kulcs fv (ft(kk).elem)  k esetén LineárisKeresés(tt,k,van,melyik) Ha van vagy ttdb=TulcsMéret-1 akkor hiba:=Igaz különben db:+1; tt(ttdb):=e; ttdb:+1 Elágazás vége egyébként hiba:=Igaz Elágazás vége Eljárás vége. Változó k:TKulcs, kk:0..Méret-1 van:Logikai, melyik:Egész k:=Kulcs fv (e); kk:=Hash(k) Elágazás ft(kk).attri  {Üres,Törölt} esetén ft(kk):=TTáblaElem(e,Foglalt); db:+1 Kulcs fv (ft(kk).elem)  k esetén LineárisKeresés(tt,k,van,melyik) Ha van vagy ttdb=TulcsMéret-1 akkor hiba:=Igaz különben db:+1; tt(ttdb):=e; ttdb:+1 Elágazás vége egyébként hiba:=Igaz Elágazás vége Eljárás vége. Szerepel-e már k-kulcsú a tt-ben L. A 2. axiómát! L. A 2. axiómát!

 Programozásmódszertan22/ Túlcsordulási terület módszere (folytatás) Eljárás Töröl(Változó t:Táblázat, Konstans k:TKulcs): Változó kk:0..Méret-1 van:Logikai, melyik:Egész kk:=Hash(k) Ha ft(kk).attri  Üres akkor Ha Kulcs fv (ft(kk).elem)  k akkor [a tulcs.területen] LineárisKeresés(tt,k,van,melyik) Ha van akkor ttdb:-1; tt(melyik):=tt(ttdb); db:-1 különben hiba:=Igaz különben [a főtáblában] ft(kk).attri:=Törölt; db:-1 Elágazás vége különben [nem létező elem nem törölhető] hiba:=Igaz Elágazás vége Eljárás vége. L. A 3. axiómát! L. A 3. axiómát!

 Programozásmódszertan23/ Túlcsordulási terület módszere (folytatás) Eljárás Töröl(Változó t:Táblázat, Konstans k:TKulcs): Változó kk:0..Méret-1 van:Logikai, melyik:Egész; te:TTablaElem kk:=Hash(k); te:=ft(kk) Elágazás te.attri=Üres vagy te.attri=Törölt és Kulcs fv (te.elem)=k esetén hiba:=Igaz [ nem létező elem nem törölhető! ] Kulcs fv (te.elem)=k esetén [ főtáblából törölhető ] ft(kk).attri:=Törölt; db:-1 egyéb esetben [ tán a túlcsordulási területen? ] LineárisKeresés(tt,k,van,melyik) Ha van akkor ttdb:-1; tt(melyik):=tt(ttdb); db:-1 különben hiba:=Igaz Elágazás vége Eljárás vége. L. A 3. axiómát! L. A 3. axiómát!

 Programozásmódszertan24/ Túlcsordulási terület módszere (folytatás) Eljárás Keres(Változó t:Táblázat, Konstans k:TKulcs Változó e:TElem): Változó kk:0..Méret-1 melyik:Egész van:Logikai kk:=Hash(k) Elágazás ft(kk).attri=Üres esetén van:=Hamis Kulcs fv (ft(kk).elem)=k esetén van:=ft(kk).attri=Foglalt Ha van akkor e:=ft(kk).elem egyéb esetben LineárisKeresés(tt,k,van,melyik) Ha van akkor e:=tt(melyik) Elágazás vége Ha nem van akkor hiba:=Igaz Eljárás vége.... L. a 4. axiómát! L. a 4. axiómát!

 Programozásmódszertan25/ A táblázat megvalósítási moduljai Láncolt altáblák módszere moduljai Modul Táblázat(Függvény Kulcs(TElem):TKulcs, Konstans Méret:Egész : Típus TElem): Reprezentáció Reprezentáció Típus TTábla=Tömb(0..Méret-1:Lista(TElem) [ láncolt lista ]) Változó tab:TTábla hiba:Logikai db:Egész [ az elemek száma ]

 Programozásmódszertan26/ Láncolt altáblák módszere (folytatás) Implementáció Implementáció Eljárás Beilleszt(Változó t:Táblázat, Konstans e:TElem): Változó kk:0..Méret-1 van:Logikai kk:=Hash(Kulcs fv (e)); van:=Eldöntés(tab(kk),Kulcs fv (e)) Ha van akkor hiba:=Igaz különben db:+1; BeszúrMögé(tab(kk),e) Eljárás vége. Beilleszt Eljárás Töröl(Változó t:Táblázat, Konstans k:TKulcs): Változó kk:0..Méret-1 van:Logikai kk:=Hash(k) van:=Eldöntés(tab(kk),k) Ha van akkor db:-1; Kihagy(tab(kk)) különben hiba:=Igaz Eljárás vége. Van-e már k-kulcsú a tab(kk)-ban L. A 2. axiómát! L. A 2. axiómát! L. A 3. axiómát! L. A 3. axiómát!

 Programozásmódszertan27/ Láncolt altáblák módszere (folytatás) Eljárás Keres(Változó t:Táblázat, Konstans k:TKulcs Változó e:TElem): Változó kk:0..Méret-1; van:Logikai kk:=Hash(k); van:=Hamis Ha nem Üres?(tab(kk)) akkor Elsőre(tab(kk)) Ciklus amíg nem UtolsóE?(tab(kk)) és Kulcs fv (ElemÉrték(tab(kk)))  k Következőre(tab(kk)) Ciklus vége Ha Kulcs fv (ElemÉrték(tab(kk)))=k akkor e:=ElemÉrték(tab(kk)); van:=Igaz Elágazás vége Ha nem van akkor hiba:=Igaz Eljárás vége. … L. a 4. axiómát! L. a 4. axiómát!

 Programozásmódszertan28/ A táblázat megvalósítási moduljai Lineárisan szétszórt altáblák módszere moduljai Modul Táblázat(…): … Reprezentáció Reprezentáció Típus TElemJellemző=(Üres,Foglalt,Törölt) TTáblaElem=Rekord(elem:TElem, attri:TElemJellemző) TTábla=Tömb(0..Méret-1:TTáblaElem) Változó tab:TTábla hiba:Logikai db:Egész [ az elemek száma ] Implementáció Eljárás Beilleszt(Változó t:Táblázat, Konstans e:TElem): Változó k:TKulcs, kk:0..Méret-1 van:Logikai, melyik:Egész k:=Kulcs Fv (e); kk:=Hash(k) Beilleszt L. A 2. axiómát! L. A 2. axiómát!

 Programozásmódszertan29/ Lineárisan szétszórt altáblák módszere Ha tab(kk).attri=Üres akkor tab(kk):=TáblaElem(e,Foglalt); db:+1 különbenLineárisKeresés(tab,kk,k,van,melyik) Ha van és tab(melyik).attri=Foglalt akkor hiba:=Igaz különben HelyKeresés(tab,kk,van,melyik) Ha van akkor tab(melyik):=TáblaElem(e,Foglalt) db:+1 különben hiba:=igaz Elágazás vége Elágazás vége Elágazás vége Eljárás vége. Ha tab(kk).attri=Üres akkor tab(kk):=TáblaElem(e,Foglalt); db:+1 különbenLineárisKeresés(tab,kk,k,van,melyik) Ha van és tab(melyik).attri=Foglalt akkor hiba:=Igaz különben HelyKeresés(tab,kk,van,melyik) Ha van akkor tab(melyik):=TáblaElem(e,Foglalt) db:+1 különben hiba:=igaz Elágazás vége Elágazás vége Elágazás vége Eljárás vége. Egy k-kulcsú keresése kk-tól ciklikusan Üres-ig. Üres vagy Törölt keresése kk-tól ciklikusan.

 Programozásmódszertan30/ Lineárisan szétszórt altáblák módszere Eljárás Töröl(Változó t:Táblázat, Konstans k:TKulcs): Változó kk:0..Méret-1 van:Logikai, melyik:Egész kk:=Hash(k) Ha tab(kk).attri=Üres akkor hiba:=Igaz különben LineárisKeresés(tab,kk,k,van,melyik) Ha van és tab(melyik).attri=Foglalt akkor tab(melyik).attri:=Törölt; db:-1 különben hiba:=Igaz Elágazás vége Eljárás vége. Egy k-kulcsú keresése kk-tól ciklikusan Üres-ig. L. A 3. axiómát! L. A 3. axiómát!

 Programozásmódszertan31/ Lineárisan szétszórt altáblák módszere Eljárás Keres(Változó t:Táblázat, Konstans k:TKulcs Változó e:TElem): Változó kk:0..Méret-1 melyik:Egész van:Logikai kk:=Hash(k) Ha tab(kk).attri=Üres akkor van:=Hamis különben LineárisKeresés(tab,kk,k,van,melyik) Ha van és tab(melyik).attri=Foglalt akkor e:=tab(melyik).elem különben van:=Hamis [ha nincs, v. Törölt] Elágazás vége Ha nem van akkor hiba:=Igaz Eljárás vége.... Egy k-kulcsú keresése kk-tól ciklikusan Üres-ig. L. a 4. axiómát! L. a 4. axiómát!

 Programozásmódszertan32/45 33 Lineáris táblázat 3.1 Algebrai specifikáció (részlet) 3 Kiegészítő műveletek: Első(Táblázat): Táblázat  TElem  {NemDef} Utolsó(Táblázat): Táblázat  TElem  {NemDef} Előző(Táblázat): Táblázat  TElem  {NemDef} Következő(Táblázat): Táblázat  TElem  {NemDef} Axiómák:... hf.

 Programozásmódszertan33/45 33 Lineáris táblázat 3.2 Exportmodul (részlet) 3 Függvény Első(Változó t:Táblázat): TElem [A tábla első elemét adja, ha üres, akkor sikertelen.] Függvény Utolsó(Változó t:Táblázat): TElem [A tábla utolsó elemét adja, ha üres, akkor sikertelen.] Függvény Előző(Változó t:Táblázat): TElem [Szekvenciálisan az aktuálisat megelőző elemet adja, ha nincs ilyen, akkor sikertelen.] Függvény Következő(Változó t:Táblázat): TElem [Szekvenciálisan az aktuálisat követő elemet adja, ha nincs ilyen, akkor sikertelen.]... hf: ef/uf és a modulja

 Programozásmódszertan34/45 44 Alkalmazás: rendezés kulcstranszformációval 4 A rendező algoritmusok többsége (így pl. a beillesztéses is) kedvező hasonlítás-/mozgatás-számmal képes ren- dezni a „majdnem rendezett” sorozatokat. Alkalmas (=rendezéstartó) kulcstranszformációs-függ- vénnyel elérhető, hogy a nem túl speciális eloszlású elemeket tartalmazó rendezendő sorozat elemeit a körülbelüli rendezett helyére illessze. rendezendő sorozat: X:Tömb(1..N:TElem) Kulcsfüggvény: Kulcs fv (x):=x, azaz identikus függvény (Id:TElem  TElem  TKulcs=TElem ) Kulcstranszformációs függvény (h):  k 1,k 2 :TKulcs: k 1 <k 2  h(k 1 )  h(k 2 ) „közbülső” táblázat: t:Táblázat(Id,Méret:TElem)

 Programozásmódszertan35/45 44 Rendezés kulcstranszformációval (folytatás) 4 Kihasználjuk, hogy ismert (lineárisan szétszórt altáblák) a táblázat ábrázolása, és a h rendezéstartó voltát. lineárisan szétszórt altábláklineárisan szétszórt altáblák Típus TRendezendő=Tömb(1..N:TElem) Eljárás Rendezés(Változó X:TRendezendő): Változó t:Táblázat(Id,Méret:TElem); db:Egész Üres(t) Ciklus i=1-től N-ig Beilleszt(t,X(i)) Ciklus vége db:=0 Ciklus i=0-tól Méret-1-ig Ha t.tab(i).attri=Foglalt akkor Helyére(X,db,t.tab(i).elem); db:+1 Ciklus vége Eljárás vége. Ennyi elem van már a helyén X-ben.

 Programozásmódszertan36/45 Eljárás Helyére(Változó X:TRendezendő, db:Egész, Konstans elem:TElem): Változó j:Egész j:=db Ciklus amíg j>0 és X(j)>elem X(j+1):=X(j); j:-1 Ciklus vége X(j+1):=elem Eljárás vége. Hf meggondolni: lineáris táblázattal hogyan lehet a rende- zést megvalósítani (tehát a reprezentációt ismeretlennek feltéve). 44 Rendezés kulcstranszformációval (folytatás) 4

 Programozásmódszertan37/45 44 Rendezés kulcstranszformációval (folytatás) 4 Helyremozgatások száma többlethely/elemszámN=1000 elemN=2000 elem többlethely/elemszámN=1000 elemN=2000 elem +0% 21.8*N 36.5*N +25% 3.47*N 2.94*N +50% 1.74*N 1.08*N +75% 1.38*N 0.92*N +100% 1.02*N 0.76*N

 Programozásmódszertan38/45 Megjegyzés – Fibonacci keresés Lényegében logaritmikus keresés, de nem felezi az intervallumot, hanem aranymetszi, azaz mivel a vizsgált intervallum mindig Fibonacci szám hosszúságú, ezért ezt fölbontja két, egymást kö- vető Fibonacci szám hosszúságú részintervallum- ra, s ezek egyikében folytatja a keresést. A na- gyobb hatékonyság elsősorban annak köszönhető, hogy az intervallumosztást kivonással, s nem osztással végzi el.

 Programozásmódszertan39/45 Megjegyzés – Interpolációs keresés Alapötlete ennek is a részekre osztás, de sem nem közé- pen, sem nem aranymetszéssel, hanem a keresett elem tartalma alapján várható helyen. Az [A..F] intervallum osztópontja a k keresési kulcs esetén: Alapötlete ennek is a részekre osztás, de sem nem közé- pen, sem nem aranymetszéssel, hanem a keresett elem tartalma alapján várható helyen. Az [A..F] intervallum osztópontja a k keresési kulcs esetén: Ez csak aszimptotikusan igaz, sőt a bonyolultabb szá- mítás is csökkenti a hatékonyságot. Világos, hogy a kulcs szám kell legyen, azaz k,k A,k F :Egész

 Programozásmódszertan40/45 Megjegyzés – Újraszervez Ennek a tisztán technikai jellegű eljárásnak csak bizonyos ábrázolás esetén lesz értelme. Célja racionálisabbá szervezni a táblázatot (rövidíteni a keresési időt).

 Programozásmódszertan41/45 Megjegyzés – Kulcs és Kulcstranszformációs függvény Elemek halmaza Kulcsok halmaza Indexek halmaza Kulcs Hash

 Programozásmódszertan42/45 Megjegyzés – Táblázatdeklarációs példa Típus TNév=…, TCím=… TElem=Rekord(név:TNév,lakcím:TCím,…) TKulcsFv=Függvény(TElem):TNév Függvény Neve(Konstans e:TElem):TNév Neve:=e.név Függvény vége. Típus TNyilvTart=Táblázat(Neve,1000:TElem) Változó nyt:TNyilvTart

 Programozásmódszertan43/45 Megjegyzés – Túlcsordulási terület tt: 0e’ … …… TúlcsMéret-1… ft:elemattri 0 …eFoglalt Méret-1--Üres Hash(Kulcs(e”)) ttDb ttDb e”

 Programozásmódszertan44/45 Megjegyzés – Láncolt altáblák tab: 0 … Méret-1 Hash(Kulcs(e”)) ee’e” Kulcs(e)  Kulcs(e’)  Hash(Kulcs(e))=Hash(Kulcs(e’)) Kulcs(e)  Kulcs(e”)  Kulcs(e’)  Kulcs(e”)  Hash(Kulcs(e))=Hash(Kulcs(e’))=Hash(Kulcs(e”))

 Programozásmódszertan45/45 Megjegyzés – Lineárisan szétszórt altáblák Hash(Kulcs(e”)) ……… …– nem Foglalt … Méret-1…… tab:elemattri 0 …eFoglalt …e’Foglalt

 Programozásmódszertan46/45 Megjegyzés – Lineárisan szétszórt altáblák ……… …e”Foglalt … Méret-1…… Hash(Kulcs(e”)) tab:elemattri 0 …eFoglalt …e’Foglalt