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

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

Hasonló előadás


Az előadások a következő témára: "Copyright, 1999 © Szlávi Péter Táblázat típuskonstrukció Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék"— Előadás másolata:

1

2 Copyright, 1999 © Szlávi Péter Táblázat típuskonstrukció Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék szlavip@elte.hu http://people.inf.elte.hu/szlavi/ szlavip@elte.hu http://people.inf.elte.hu/szlavi/

3  99.03.04.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

4  99.03.04.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ó

5  99.03.04.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

6  99.03.04.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

7  99.03.04.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

8  99.03.04.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,999 999 884, 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

9  99.03.04.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.

10  99.03.04.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)= =…

11  99.03.04.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)

12  99.03.04.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!

13  99.03.04.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

14  99.03.04.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

15  99.03.04.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

16  99.03.04.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}

17  99.03.04.Programozásmódszertan16/45 1.21.2 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.

18  99.03.04.Programozásmódszertan17/45 1.2 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

19  99.03.04.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

20  99.03.04.Programozásmódszertan19/45 2.1 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.

21  99.03.04.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 2.2.1 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.

22  99.03.04.Programozásmódszertan21/45 2.2.1 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!

23  99.03.04.Programozásmódszertan22/45 2.2.1 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!

24  99.03.04.Programozásmódszertan23/45 2.2.1 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!

25  99.03.04.Programozásmódszertan24/45 2.2.1 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!

26  99.03.04.Programozásmódszertan25/45 2.2. A táblázat megvalósítási moduljai 2.2.2 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 ]

27  99.03.04.Programozásmódszertan26/45 2.2.2 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!

28  99.03.04.Programozásmódszertan27/45 2.2.2 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!

29  99.03.04.Programozásmódszertan28/45 2.2. A táblázat megvalósítási moduljai 2.2.3 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!

30  99.03.04.Programozásmódszertan29/45 2.2.3 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.

31  99.03.04.Programozásmódszertan30/45 2.2.3 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!

32  99.03.04.Programozásmódszertan31/45 2.2.3 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!

33  99.03.04.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.

34  99.03.04.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

35  99.03.04.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)

36  99.03.04.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.

37  99.03.04.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

38  99.03.04.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

39  99.03.04.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.

40  99.03.04.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

41  99.03.04.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).

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

43  99.03.04.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

44  99.03.04.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”

45  99.03.04.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”))

46  99.03.04.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

47  99.03.04.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


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

Hasonló előadás


Google Hirdetések