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

Slides:



Advertisements
Hasonló előadás
Deduktív adatbázisok.
Advertisements

Programozási tételek, és „négyzetes” rendezések
Függvények Egyenlőre csak valós-valós függvényekkel foglalkozunk.
Determinisztikus programok. Szintaxis: X : Pvalt program változók E : Kifkifejezések B : Lkiflogikai kifejezések C : Utsutasítások.
Programozási alapismeretek 5. előadás. ELTE Szlávi - Zsakó: Programozási alapismeretek 5.2/  Programozási tételek.
Programozási alapismeretek 6. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 6.2/  Rekordok/struktúrák.
Algebrai specifikációk Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
Rekurzió (Horváth Gyula és Szlávi Péter előadásai felhasználásával)
1.) A programfejlesztés hagyományos életciklus modellje és adattípus.
4. Helyes zárójelezés algoritmusa
Minimális költségű feszítőfák
Programozási alapismeretek 4. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 4.2/  A szöveg A szöveg.
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 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.
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
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ő:
A digitális számítás elmélete
Valós számok Def. Egy algebrai struktúra rendezett test, ha test és rendezett integritási tartomány. Def. Egy (T; +,  ;  ) rendezett test felső határ.
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]
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.1/ Összegzés mátrixra Feladat: Egy mátrix elemeinek összege.
Reprezentációs függvény. Adva egy adattípus absztrakt és konkrét specifikációja: d a = ( A, F, E a ); d c = ( C, G, E c ); A = {A 0,..., A n };C = {C 0,...,
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:
ELTE Szlávi-Zsakó: Programozási alapismeretek Szlávi-Zsakó: Programozási alapismeretek 3. 1/
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
A számfogalom bővítése
C nyelv utasításai.
Előrendezéses edényrendezés – RADIX „vissza”
Ismétlés.
Kifejezések a Pascalban Páll Boglárka. Ismétlés: Ahogy algoritmikából láttuk, a kifejezések a Pascal nyelvben is operátorokból és operandusokból állnak.
Rendezések és szövegkezelő függvények
Operátorok Értékadások
Programozási alapismeretek 11. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 11.2/ Tartalom  Rendezési.
Nevezetes algoritmusok
Gráfok 1. Szlávi Péter ELTE IK Média- és Oktatásinformatika Tanszék
Koncepció: Specifikáció: e par exp i = eb imp bod ib Specifikáció elemzése: tulajdonságok felírása a koncepció alapján + tulajdonságok bizonyítása.
Copyright, 1999 © Szlávi Péter Sor típuskonstrukció Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
Copyright, 1999 © Szlávi Péter Szövegfeldolgozás 1.
BINÁRIS FA Definició: A fa olyanösszefüggő gráf, amelyben nincs kör
Az informatika logikai alapjai
File- típus-konstrukciók Szlávi Péter ELTE Informatika Szakmódszertani Csoport
Feladatok (értékadás)
Programozási alapismeretek * A Zh-írás módszertana.
Programozási alapismeretek 10. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 10.2/  Kiválogatás + összegzés.
Bináris kereső fák Itterátorok.
Algoritmusok és Adatszerkezetek Egy kifejezés lengyelformára hozása - bemutató.
Programozási alapismeretek 11. előadás
Algoritmusok és adatszerkezetek
Geometriai feladatok programozása Geometriai programozás Szlávi Péter ELTE IK Média- és Oktatásinformatika Tanszék 2010.
Copyright, 1999 © Szlávi Péter Táblázat típuskonstrukció Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
(Bináris) Kupac (heap) adattípus
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Alapvető programozási tételek megvalósítása Czigléczky Gábor 2009.
Kifejezések C#-ban.
Piros-fekete fák Beszúrás, ill. törléskor a fa elveszítheti az egyensúlyát. A piros-fekete fák: az egyensúly megtartását biztosítják. +1 bit információ.
Algoritmusok és Adatszerkezetek I.
Gráfok 2. Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
Informatikai gyakorlatok 11. évfolyam
Algoritmusok és Adatszerkezetek I.
Gráfok - 1 Definíció: Irányított gráf (digráf) G=(V,E) rendezett pár.
Adatszerkezetek -- Típusok
2-3-fák A 2-3-fa egy gyökeres fa az alábbi tulajdonságokkal:
Rekurzió 3. Szlávi Péter ELTE Informatika Szakmódszertani Csoport
Előadás másolata:

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

 Adatszerkezetek2/55 Tartalomjegyzék I. A kupac típuskonstrukció A kupac típuskonstrukcióA kupac típuskonstrukció II. A prioritási sor típuskonstrukció A prioritási sor típuskonstrukcióA prioritási sor típuskonstrukció

 Adatszerkezetek3/55 Tartalomjegyzék 0 A kupac-filozófia filozófia 1 A kupac algebrai specifikációja 1.1 Kupac-műveletek műveletek 1.2 Kupac-axiómák axiómák 2 A kupac típuskonstrukció specifikációja 2.1 A kupac exportmodulja exportmodulja 2.2 A kupac megvalósítási moduljai megvalósítási moduljaimegvalósítási moduljai I.

 Adatszerkezetek4/55 11 A Kupac-filozófia 1 A kupac olyan véges elemsokaság, amely rendelkezik az alábbi tulajdonságokkal: 1.Minden elemnek legfeljebb két rákövetkezője (leszármazottja) lehet. Azaz bináris fának tekinthető. 2.Minden részfájának gyökere kisebb (vagy egyenlő) a közvetlen leszármazottainál. 3.A kupac balról folytonos, azaz ha nem teljes a fa, akkor csak a legutolsó szintből hiányozhatnak elemek, de azok is csak a szint jobb széléről. Ezek következménye, hogy ábrázolható folytonosan is, tömbben. I. A rákövetkezés rendezési reláció, azaz „elemciklusok” nincsenek. Természetesen a nagyobb- egyenlőség ugyanígy elképzelhető. A rendezettség irány nem lényegi kérdés.

 Adatszerkezetek5/55 11 A kupac algebrai specifikációja 1.1 Kupac-műveletek 1 Típus Kupac(N,Elem): Asszociált műveletek: Létrehoz(Tömb(1..N:Elem)): Kupac [ egy Elem-sorozatból készít kupacot ] Üres: Kupac KupacHossz(Kupac): Egész [ az Elem-sorozat kezdő kupac-tulajdonságú részének a hossza ] Méret(Kupac  Tömb): Egész [ a teljes Elem-sorozat hossza ] Kupac?(Kupac  Tömb,Egész): Logikai [ rendelkezik-e a kupac-tulajdonsággal az Elem-sorozat egy adott indexű elemétől kezdődően a kupachosszig ] A csak leíró szerepű műveleteket dőlten szedtem I.

 Adatszerkezetek6/ Kupac-műveletek (folytatás) Kupacba(Kupac,Elem): Kupac  {NemDef} [az Elem-et a kupacba betesz, a kupac-tulajdonság megmarad] Kupacból(Kupac): (Kupac  Elem)  {NemDef} [a kupacból a gyökeret kiveszi, a kupac-tulajdonság megmarad] KupacRövidítés(Kupac): Kupac [a kupac első (gyökér) és utolsó elemének cseréje, majd a kupac- tulajdonság helyreállítása] Érték(Kupac  Tömb,Egész): Elem  {NemDef} [az Elem-sorozat adottadik elemének értéke] BalGyerek(Kupac,Egész): Egész  {NemDef} [a kupac adottadik elemének bal gyerekének indexe] JobbGyerek(Kupac,Egész): Egész  {NemDef} [a kupac adottadik elemének jobb gyerekének indexe] MinGyerek(Kupac,Egész): Egész  {NemDef} [a kupac adottadik elemének kisebbik gyerekének indexe] VanGyerek?(Kupac,Egész): Logikai  {NemDef} [a kupac adottadik elemének van-e gyereke] UtolsóSzülő(Kupac): Egész  {NemDef} [a kupac utolsó gyerekkel bíró elmének indexe] A csak leíró szerepű műveleteket dőlten szedtem I.

 Adatszerkezetek7/ Kupac-axiómák 1.2 Axiómák:Jelölések: k,k’:Kupac(Elem) = Kupac-típusú objektumk,k’:Kupac(Elem) = Kupac-típusú objektum t:Tömb(1..N:Elem) = tömb típusú objektumt:Tömb(1..N:Elem) = tömb típusú objektum i,j:Egész = tömb-indexeki,j:Egész = tömb-indexek 1 o Létrehoz – axióma k=Létrehoz(t)   i  [1..N]:  j  [1..N]: t(i)=Érték(k,j)  KupacHossz(k)=N  Méret(k)=N  Kupac?(k,1) 2 o Üres – axióma k=Üres  KupacHossz(k)=0  Méret(k)=N I.

 Adatszerkezetek8/ Kupac-axiómák (folytatás) o Kupac-tulajdonság – axióma Kupac?(k,i)  i>KupacHossz(k)  i  UtolsóSzülő(k) [  KupacHossz(k)]  Érték(k,i)  Érték(MinGyerek(k,i))  Kupac?(k,BalGyerek(k,i))  Kupac?(k,JobbGyerek(k,i)) 1.állítás: Az üres kupac kupac-tulajdonságú  j  1: Kupac?(Üres,j) Biz.: 2 o - és 3 o -ból következik 2.állítás: A kupac-tulajdonság öröklése Kupac?(k,i)   j>i: Kupac?(k,j) Biz.: 3 o -ból következik I.

 Adatszerkezetek9/ Kupac-axiómák (folytatás) o Méret – axióma  o  Művelet Kupac : k’=o(k)  Méret(k’)=Méret(k)=N 5 o Kupacba – axióma KupacHossz(k)<N  k’=Kupacba(k,e)  KupacHossz(k’)=KupacHossz(k)+1   i  [1..KupacHossz(k)]: Érték(k,i)  k’  e  k’  Kupac?(k’,1)  KupacHossz(k)=N  Kupacba(k,e)=NemDef I.

 Adatszerkezetek10/ Kupac-axiómák (folytatás) o Kupacból – axióma KupacHossz(k)>0  (k’,e)=Kupacból(k)  e=Érték(k,1)  KupacHossz(k’)=KupacHossz(k)–1   i  [2..KupacHossz(k)]: Érték(k,i)  k’  Kupac?(k’,1)  KupacHossz(k)=0  Kupacból(k)=NemDef 7 o KupacRövidítés – axióma k’=KupacRövidítés(k)  Érték(k’,KupacHossz(k))=Érték(k,1)  KupacHossz(k’)=KupacHossz(k)–1   i  [2..KupacHossz(k)]: Érték(k,i)  k’  Kupac?(k’,1) I.

 Adatszerkezetek11/ Kupac-axiómák (folytatás) o Gyerek – axióma i  [1..UtolsóSzülő(k)]  VanGyerek?(k,i)  JobbGyerek(k,i)  KupacHossz(k)  Érték(BalGyerek(k,i))  Érték(JobbGyerek(k,i))  MinGyerek(k,i)=BalGyerek(k,i)  Érték(BalGyerek(k,i))>Érték(JobbGyerek(k,i))  MinGyerek(k,i)=JobbGyerek(k,i)  JobbGyerek(k,i)>KupacHossz(k)  MinGyerek(k,i)=BalGyerek(k,i)  i  (UtolsóSzülő(k)..KupacHossz(k)]   VanGyerek?(k,i)  … I.

 Adatszerkezetek12/55 2 A kupac típuskonstrukció specifikációja 2.1 A kupac exportmodulja ExportModul Kupac(Konstans N:Egész, Típus TElem): Típus TTömb=Tömb(1..N:TElem) Típus TTömb=Tömb(1..N:TElem) Eljárás Létrehoz(Konstans t:TTömb, Változó k:Kupac) Eljárás Létrehoz(Konstans t:TTömb, Változó k:Kupac) Eljárás Üres(Változó k:Kupac) Eljárás Üres(Változó k:Kupac) Függvény KupacHossz(Konstans k:Kupac):Egész Függvény KupacHossz(Konstans k:Kupac):Egész Függvény Méret(Konstans k:Kupac):Egész Függvény Méret(Konstans k:Kupac):Egész Függvény Kupac?(Konstans k:Kupac, i:Egész):Logikai Függvény Kupac?(Konstans k:Kupac, i:Egész):Logikai Függvény Kupacba(Változó k:Kupac, Konstans e:TElem) Függvény Kupacba(Változó k:Kupac, Konstans e:TElem) Függvény Kupacból(Változó k:Kupac, e:TElem) Függvény Kupacból(Változó k:Kupac, e:TElem) Meg kell gondolni az operátorok ef/uf-ét az axiómák alapján! I.

 Adatszerkezetek13/ A kupac exportmodulja (folytatás) Eljárás KupacRövidítés(Változó k:Kupac) Eljárás KupacRövidítés(Változó k:Kupac) Függvény Érték(Változó k:Kupac, Konstans i:Egész):TElem Függvény Érték(Változó k:Kupac, Konstans i:Egész):TElem Függvény BalGyerek(Változó k:Kupac, Konstans i:Egész):Egész Függvény BalGyerek(Változó k:Kupac, Konstans i:Egész):Egész Függvény JobbGyerek(Változó k:Kupac, Konstans i:Egész):Egész Függvény JobbGyerek(Változó k:Kupac, Konstans i:Egész):Egész Függvény MinGyerek(Változó k:Kupac, Konstans i:Egész):Egész Függvény MinGyerek(Változó k:Kupac, Konstans i:Egész):Egész Függvény VanGyerek?(Változó k:Kupac, Konstans i:Egész):Logikai Függvény VanGyerek?(Változó k:Kupac, Konstans i:Egész):Logikai I.

 Adatszerkezetek14/ A kupac exportmodulja (folytatás) Függvény UtolsóSzülő(Konstans k:Kupac):Egész Függvény UtolsóSzülő(Konstans k:Kupac):Egész Függvény Hibás?(Változó k:Kupac):Logikai Függvény Hibás?(Változó k:Kupac):LogikaiVáltozó Modul vége. I.

 Adatszerkezetek15/55 22 A kupac típuskonstrukció specifikációja 2.2. A kupac megvalósítási modulja 2 Egyetlen „értelmes” ábrázolás van: a folytonos, a tömbre építkező. Modul Kupac(Konstans N:Egész, Típus TElem): Reprezentáció [Típus TTömb=Tömb(1..N:TElem)] Változó elemek:TTömb hossz,maxHossz:0..N hiba:Logikai I.

 Adatszerkezetek16/ A kupac megvalósítási modulja (folytatás) Implementáció Eljárás Létrehoz(Konstans t:TTömb, Változó k:Kupac): Változó j:Egész elemek:=t; hossz:=N; maxHossz:=N; hiba:=Hamis Ciklus j=UtolsóSzülő(k)-től 1-ig -1-esével GyökérHelyre(k,j) Ciklus vége elemek:=t; hossz:=N; maxHossz:=N; hiba:=Hamis Ciklus j=UtolsóSzülő(k)-től 1-ig -1-esével GyökérHelyre(k,j) Ciklus vége Eljárás vége. Eljárás Üres(Változó k:Kupac): hossz:=0 maxHossz:=N hiba:=Hamis Eljárás vége. Eljárás GyökérHelyre(Változó k:Kupac, gyökér:Egész): Változó szülő, gyerek:Egész szülő:=gyökér; gyerek:=MinGyerek(k,szülő) Ciklus amíg VanGyerek?(k,szülő) és Érték(k,szülő)>Érték(k,gyerek) Csere(k,szülő,gyerek); szülő:=gyerek gyerek:=MinGyerek(k,gyerek) Ciklus vége Eljárás vége. szülő:=gyökér; gyerek:=MinGyerek(k,szülő) Ciklus amíg VanGyerek?(k,szülő) és Érték(k,szülő)>Érték(k,gyerek) Csere(k,szülő,gyerek); szülő:=gyerek gyerek:=MinGyerek(k,gyerek) Ciklus vége Eljárás vége. Lokális eljárás L. A példát! példá L. A példát! példá I.

 Adatszerkezetek17/ A kupac megvalósítási modulja (folytatás) Kiinduló állapot „fás” képe:Kiinduló állapot „fás” képe: A kupacosítandó sorozat A kupacosítás (Létrehozás lépései):A kupacosítás (Létrehozás lépései): I.

 Adatszerkezetek18/ A kupac megvalósítási modulja (folytatás) Íme a kupac! I.

 Adatszerkezetek19/ A kupac megvalósítási modulja (folytatás) Függvény Kupac?(Konstans k:Kupac, i:Egész):Logikai … hf … … hf … Függvény vége. Függvény KupacHossz(Konstans k:Kupac):Egész KupacHossz:=hossz KupacHossz:=hossz Függvény vége. Függvény Méret(Konstans k:Kupac):Egész Méret:=maxHossz Méret:=maxHossz Függvény vége. Függvény Érték(Változó k:Kupac, Konstans i:Egész):TElem [Ef: i  [1..maxHossz]] Érték:=elemek(i) Érték:=elemek(i) Függvény vége. I.

 Adatszerkezetek20/ A kupac megvalósítási modulja (folytatás) Eljárás Kupacba(Változó k:Kupac, Konstans e:TElem): [Ef: hossz<maxHossz] Változó j:Egész [új elem a végére:] hossz:+1; elemek(hossz):=e [a kupac-tulajdonság helyreállítása:] Ciklus j=UtolsóSzülő(k)-től 1-ig -1-esével GyökérHelyre(k,j) Ciklus vége Eljárás vége. Eljárás Kupacból(Változó k:Kupac, e:TElem): [Ef: hossz>0] e:=elemek(1); KupacRövidítés(k) e:=elemek(1); KupacRövidítés(k)KupacRövidítés Eljárás vége. L. A Létrehozás-nál! Létrehozás L. A Létrehozás-nál! Létrehozás L. A példát! példá L. A példát! példá I.

 Adatszerkezetek21/ A kupac megvalósítási modulja (folytatás) Elemkivétel: Kupacból(  [1,2,6,3,4,7,8,5] ,  e)Elemkivétel: Kupacból(  [1,2,6,3,4,7,8,5] ,  e) „Utolsó előre fuss!” Előrehozás + kupacosítás:Előrehozás + kupacosítás: Elemkiolvasás I.

 Adatszerkezetek22/ A kupac megvalósítási modulja (folytatás) Függvény BalGyerek(Változó k:Kupac, Konstans i:Egész):Egész [Ef: i  [1..hossz Div 2]] BalGyerek:=i*2 BalGyerek:=i*2 Függvény vége. Függvény JobbGyerek(Változó k:Kupac, Konstans i:Egész):Egész [Ef: i  [1..hossz Div 2]] JobbGyerek:=i*2+1 JobbGyerek:=i*2+1 Függvény vége. L. Az UtolsóSzülő-nél! UtolsóSzülő L. Az UtolsóSzülő-nél! UtolsóSzülő I.

 Adatszerkezetek23/ A kupac megvalósítási modulja (folytatás) Függvény MinGyerek(Változó k:Kupac, Konstans i:Egész):Egész [Ef: i  [1..hossz Div 2]] Elágazás JobbGyerek(k,i)>hossz esetén MinGyerek:=BalGyerek(k,i) Érték(BalGyerek(k,i)) hossz esetén MinGyerek:=BalGyerek(k,i) Érték(BalGyerek(k,i))<Érték(JobbGyerek(k,i)) esetén MinGyerek:=BalGyerek(k,i) egyéb esetben MinGyerek:=JobbGyerek(k,i) Elágazás vége Függvény vége. I.

 Adatszerkezetek24/ A kupac megvalósítási modulja (folytatás) Függvény VanGyerek?(Változó k:Kupac, Konstans i:Egész):Logikai [Ef: i  [1..hossz]] VanGyerek?:=i*2[=BalGyerek]  hossz Függvény vége. Függvény UtolsóSzülő(Konstans k:Kupac):Egész [Ef: i  [1..hossz]] UtolsóSzülő:=hossz Div 2 Függvény vége. Függvény Hibás?(Változó k:Kupac):Logikai … hf … Változó Függvény vége. I.

 Adatszerkezetek25/ A kupac megvalósítási modulja (folytatás) Eljárás KupacRövidítés(Változó k:Kupac): Csere(k,hossz,1); hossz:-1; GyökérHelyre(k,1) GyökérHelyre Eljárás vége. Inicializálás Inicializálás Hossz:=0; maxHossz:=N; hiba:=Hamis Modul vége. Eljárás Csere(Változó k:Kupac, i,j:Egész): Változó cs:TElem cs:=elemek(i); elemek(i):=elemek(j); elemek(j):=cs cs:=elemek(i); elemek(i):=elemek(j); elemek(j):=cs Eljárás vége. Lokális eljárás I.

 Adatszerkezetek26/55 Tartalomjegyzék 1 A prioritási sor algebrai specifikációja algebrai specifikációjaalgebrai specifikációja 1.1 Prioritási sor-műveletek műveletek 1.2 Prioritási sor-axiómák axiómák 2 A prioritási sor típuskonstrukció specifikációja típuskonstrukció specifikációjatípuskonstrukció specifikációja 2.1 A prioritási sor exportmodulja exportmodulja 2.2 A prioritási sor megvalósítási moduljai megvalósítási moduljaimegvalósítási moduljai Prioritás-szerint rendezett (folytonos ) ábrázolás Prioritás-szerint rendezett (folytonos ) ábrázolásPrioritás-szerint rendezett (folytonos ) ábrázolás Időrendben rendezett (folytonos ) ábrázolás Időrendben rendezett (folytonos ) ábrázolásIdőrendben rendezett (folytonos ) ábrázolás Kupacos ábrázolás Kupacos ábrázolásKupacos ábrázolás 3 Alkalmazási példák példák II.

 Adatszerkezetek27/55 11 A prioritási sor algebrai specifikációja 1.1 Prioritási sor-műveletek 1 Típus PrSor(Elem,Prioritás): Asszociált műveletek: Üres: PrSor Üres?(PrSor): Logikai Tele?(PrSor): Logikai Első(PrSor): (Elem  Prioritás)  {NemDef} Sorba(PrSor,Elem,Prioritás): PrSor  {NemDef} Sorból(PrSor): (PrSor  Elem  Prioritás)  {NemDef} SorHossz(PrSor): Egész II.

 Adatszerkezetek28/ Prioritási sor-axiómák 1.2 Axiómák: 1 o Az Üres prioritási sor üres. s=Üres  Üres?(s)  SorHossz(s)=0 2 o Az a prioritási sor, amelyben legalább egy elem van, az nem üres; a sorba tétel során a sor hossza eggyel nő.  Tele?(s)   Üres?(Sorba(s,e,p))  SorHossz(Sorba(s,e,p))=SorHossz(s)+1 3a o Az üres prioritási sornak nincs első eleme. Első?(Üres)=NemDef 3b o Az Üres prioritási sorból nem lehet kivenni elemet. Sorból(Üres)=NemDef 3c o A tele prioritási sorba nem lehet további elemet betenni. Tele?(s)  Sorba(s,e,p)=NemDef II.

 Adatszerkezetek29/ Prioritási sor-axiómák (folytatás) 4 o A prioritási sor első eleme a legnagyobb prioritásúak közül a legrégebben betett elem. Üres?(s)   Tele?(s)  Első(Sorba(s,e,p))=(e,p)  Üres?(s)   Tele?(s)  s’=Sorba(s,e,p)  ( Első(s).Pr  p  Első(s’)=Első(s) )  ( Első(s).Pr<p  Első(Sorba(s,e,p))=(e,p) )  SorHossz(s’)=SorHossz(s)+1.Pr II.

 Adatszerkezetek30/ Prioritási sor-axiómák (folytatás) 5 o A prioritási sorból az első elemet lehet kivenni (a többi nem változik). Üres?(s)   Tele?(s)  Sorból(Sorba(s,e,p))=(s,e,p)  Üres?(s)   Tele?(s)  Sorból(s)=(s’,e’,p’)  (e’,p’)=Első(s)  ( Első(s).Pr<p  s=Sorból(Sorba(s,e,p)).Sor )  ( Első(s).Pr  p  Sorba(s’,e,p)=Sorból(Sorba(s,e,p)).Sor ).Sor Állítás: a Sorból művelet után eggyel csökkent a prioritási sor hossza.  Üres?(s)  SorHossz(Sorból(s).Sor)=SorHossz(s)–1 Biz.: 2 o & 5 o –ből következik. II.

 Adatszerkezetek31/55 2 A prioritási sor típuskonstrukció specifikációja 2.1 A prioritási sor exportmodulja ExportModul PrSor(Típus TElem: Típus TPrior): Eljárás Üres(Változó s:PrSor) Eljárás Üres(Változó s:PrSor) Függvény Üres?(Konstans s:PrSor): Logikai Függvény Üres?(Konstans s:PrSor): Logikai Függvény Tele?(Konstans s:PrSor): Logikai Függvény Tele?(Konstans s:PrSor): Logikai Függvény ElsőElem(Változó s:PrSor): TElem Függvény ElsőElem(Változó s:PrSor): TElemVáltozó Függvény ElsőPrioritás(Változó s:PrSor): TPrior Függvény ElsőPrioritás(Változó s:PrSor): TPrior Eljárás Sorba(Változó s:PrSor, Konstans e:TElem, p:TPrior) Eljárás Sorba(Változó s:PrSor, Konstans e:TElem, p:TPrior) Függvény SorHossz(Konstans s:PrSor): Egész Függvény SorHossz(Konstans s:PrSor): Egész Meg kell gondolni az operátorok ef/uf-ét az axiómák alapján! II.

 Adatszerkezetek32/ A prioritási sor exportmodulja (folytatás) Eljárás Sorból(Változó s:PrSor, e:TElem, p:TPrior) Eljárás Sorból(Változó s:PrSor, e:TElem, p:TPrior) Infix Operátor Azonos?(Konstans s1,s2:PrSor):Logikai Infix Operátor Azonos?(Konstans s1,s2:PrSor):Logikai Másnéven s1=s2 Másnéven s1=s2 Infix Operátor LegyenEgyenlő(Változó s1:PrSor, Konstans s2:PrSor) Másnéven s1:=s2 Infix Operátor LegyenEgyenlő(Változó s1:PrSor, Konstans s2:PrSor) Másnéven s1:=s2 Operátor Kiírás(Konstans s:PrSor) Másnéven Ki: s Operátor Kiírás(Konstans s:PrSor) Másnéven Ki: s Operátor Beolvasás(Változó s:PrSor) Másnéven Be: s Operátor Beolvasás(Változó s:PrSor) Másnéven Be: s Függvény Hibás?(Változó s:PrSor): Logikai Függvény Hibás?(Változó s:PrSor): LogikaiVáltozó Modul vége. II.

 Adatszerkezetek33/55 22 A prioritási sor típuskonstrukció specifikációja 2.2. A prSor megvalósítási moduljai Prioritás-szerint rendezett (folytonos ) ábrázolás moduljai 2moduljai Modul PrSor(Típus TElem: Típus TPrior): Reprezentáció Konstans MaxHossz: Egész(???) Típus TPrElem=Rekord(elem: TElem, pr: TPrior) PrElemek=Tömb(1..MaxHossz: TPrElem) [TípusInvariáns: növekvően…] Változó se: PrElemek eleje, vége, hossz : 0..MaxHossz hiba: Logikai II.

 Adatszerkezetek34/ Prioritás-szerint rendezett (folytonos ) ábrázolás (folytatás) Implementáció Eljárás Üres(Változó s:PrSor): eleje:=1; vége:=1; hossz:=0; hiba:=Hamis Eljárás vége. Függvény Üres?(Konstans s:PrSor): Logikai Üres?:=hossz=0 Függvény vége. Függvény Tele?(Konstans s:PrSor): Logikai Tele?:= hossz=MaxHossz Tele?:= hossz=MaxHossz Függvény vége. Függvény ElsőElem(Változó s:PrSor): TElem Ha hossz  0 akkor ElsőElem:=se(eleje).elem különben hiba:=Igaz Ha hossz  0 akkor ElsőElem:=se(eleje).elem különben hiba:=Igaz Függvény vége. II.

 Adatszerkezetek35/ Prioritás-szerint rendezett (folytonos ) ábrázolás (folytatás) Függvény ElsőPrioritás(Változó s:PrSor): TPrior Ha hossz  0 akkor ElsőPrioritás:=se(eleje).pr különben hiba:=Igaz Függvény vége. Eljárás Sorba(Változó s:PrSor, Konstans e:TElem, p:TPrior): Ha hossz<MaxHossz akkor Ha hossz=0 akkor hely:=eleje különben Helykeresés(eleje,vége,hely,p) Eltolás(hely,vége) Elágazás vége se(hely).elem:=e; se(hely).pr:=p vége:  1; hossz:+1...  II.

 Adatszerkezetek36/ Prioritás-szerint rendezett (folytonos ) ábrázolás (folytatás)... különben hiba:=Igaz Elágazás vége Eljárás vége.... különben hiba:=Igaz Elágazás vége Eljárás vége. Eljárás Helykeresés(Konstans eleje,vége:0..MaxHossz, Változó hely: 0..MaxHossz, Konstans p:TPrior): hely:=eleje Ciklus amíg hely  vége  1 és se(hely).pr  p hely:  1 Ciklus vége [hely  vége  1 és se(hely).pr<p vagy hely=vége  1  TípusInvariáns] Eljárás vége. hely:=eleje Ciklus amíg hely  vége  1 és se(hely).pr  p hely:  1 Ciklus vége [hely  vége  1 és se(hely).pr<p vagy hely=vége  1  TípusInvariáns] Eljárás vége.TípusInvariáns II.

 Adatszerkezetek37/ Prioritás-szerint rendezett (folytonos ) ábrázolás (folytatás) Eljárás Eltolás(Konstans hely,vége:0..MaxHossz): Változó i:Egész i:=vége Ciklus amíg i  hely  1 se(i  1):=se(i); i:  1 Ciklus vége Eljárás vége. i:=vége Ciklus amíg i  hely  1 se(i  1):=se(i); i:  1 Ciklus vége Eljárás vége. Eljárás Sorból(Változó s:PrSor, e:TElem, p:TPrior): Ha hossz>0 akkor p:=se(eleje).pr; e:=se(eleje).elem eleje:  1; hossz:-1 különben hiba:=Igaz Elágazás vége Eljárás vége. II.

 Adatszerkezetek38/ Prioritás-szerint rendezett (folytonos ) ábrázolás (folytatás) Függvény SorHossz(Konstans s:Sor): Egész SorHossz:=hossz Függvény vége. Függvény Hibás?(Változó s:PrSor): Logikai Hibás?:=hiba; hiba:=Hamis Függvény vége. Infix Operátor Azonos?(Konstans s1, s2:PrSor):Logikai Másnéven s1=s2 ??? Operátor vége. Infix Operátor LegyenEgyenlő(Változó s1:PrSor, Konstans s2:PrSor) Másnéven s1:=s2 Infix Operátor Azonos?(Konstans s1, s2:PrSor):Logikai Másnéven s1=s2 ??? Operátor vége. Infix Operátor LegyenEgyenlő(Változó s1:PrSor, Konstans s2:PrSor) Másnéven s1:=s2??? ??? Operátor vége. ??? Operátor vége.??? II.

 Adatszerkezetek39/ Prioritás-szerint rendezett (folytonos ) ábrázolás (folytatás) Operátor Kiírás(Konstans s:PrSor) Másnéven Ki: s … Operátor vége. Operátor Kiírás(Konstans s:PrSor) Másnéven Ki: s … Operátor vége. Operátor Beolvasás(Változó s:PrSor) Másnéven Be: s … Operátor vége. Inicializálás Inicializálás eleje:=1; vége:=1; hossz:=0; hiba:=Hamis Modul vége. II.

 Adatszerkezetek40/55 22 A prioritási sor típuskonstrukció specifikációja 2.2. A prSor meglósítási moduljai Időrendben rendezett (folytonos ) ábrázolás 2 Modul PrSor(Típus TElem: Típus TPrior): Reprezentáció … ugyanaz, mint ben II.

 Adatszerkezetek41/ Időrendben rendezett (folytonos ) ábrázolás (folytatás) Eljárás Üres(Változó s:PrSor):...ugyanaz, mint ben Eljárás vége Függvény Üres?(Konstans s:PrSor): Logikai...ugyanaz, mint ben Függvény vége Függvény Tele?(Konstans s:PrSor): Logikai...ugyanaz, mint ben Függvény vége Függvény ElsőElem(Változó s:PrSor): TElem Ha hossz  0 akkor ElsőElem:=se(Max(s)).eleje különben hiba:=Igaz Függvény vége. II.

 Adatszerkezetek42/ Időrendben rendezett (folytonos ) ábrázolás (folytatás) Függvény Max(Változó s:PrSor): 1..MaxHossz i:=eleje; m:=i Ciklus j=1-től hossz-1-ig i:  1; Ha se(i).pr>se(m).pr akkor m:=i Ciklus vége Max:=m Függvény vége. Függvény ElsőPrioritás(Változó s:PrSor): TPrior Ha hossz  0 akkor ElsőPrioritás:=se(Max(s)).pr különben hiba:=Igaz Függvény vége. Eljárás Sorba(Változó s:PrSor, Konstans e:TElem, p:TPrior): Ha hossz<MaxHossz akkor se(vége).pr:=p; se(vége):=e; hossz:+1; vége:  1  II.

 Adatszerkezetek43/ Időrendben rendezett (folytonos ) ábrázolás (folytatás) különben hiba:=Igaz Elágazás vége Eljárás vége. különben hiba:=Igaz Elágazás vége Eljárás vége. Eljárás Sorból(Változó s:PrSor, e:TElem, p:Priotitás): Változó maxI:Egész Ha hossz>0 akkor maxI:=Max(s); e:=se(maxI).elem; p:=se(maxI).pr; Rátolás(maxI,vége); hossz:-1; vége:  1 különben hiba:=Igaz Elágazás vége Eljárás vége. Függvény Hibás?(Változó s:PrSor): Logikai...ugyanaz, mint ben Függvény vége. 2.2.1 2.2.1 Hf. II.

 Adatszerkezetek44/ Időrendben rendezett (folytonos ) ábrázolás (folytatás) Infix Operátor Azonos?(Konstans s1, s2:PrSor):Logikai … ugyanaz, mint ben... Operátor vége. Infix Operátor Azonos?(Konstans s1, s2:PrSor):Logikai … ugyanaz, mint ben... Operátor vége. Infix Operátor LegyenEgyenlő(Változó s1:PrSor, Konstans s2:PrSor) … ugyanaz, mint ben... Operátor vége. Operátor Kiírás(Konstans s:PrSor) … ugyanaz, mint ben... Operátor vége. Operátor Kiírás(Konstans s:PrSor) … ugyanaz, mint ben... Operátor vége. Operátos Beolvasás(Változó s:PrSor) … ugyanaz, mint ben... Operátor vége. Inicializálás … ugyanaz, mint ben... … ugyanaz, mint ben Modul vége. II.

 Adatszerkezetek45/55 22 A prioritási sor típuskonstrukció specifikációja 2.2. A prSor meglósítási moduljai Kupacos ábrázolás 2 Modul PrSor(Típus TElem: Típus TPrior): Reprezentáció Konstans MaxHossz: Egész(???) Típus TPrElem=Rekord(elem: TElem, pr: TPrior) TPrElemek=Kupac(MaxHossz, TPrElem) Változó ke: TPrElemek Változó ke: TPrElemek II.

 Adatszerkezetek46/ Kupacos ábrázolás (folytatás) Implementáció Eljárás Üres(Változó s:PrSor): Üres(ke) Eljárás vége. Függvény Üres?(Konstans s:PrSor): Logikai Üres?:=KupacHossz(ke)=0 Függvény vége. Függvény Tele?(Konstans s:PrSor): Logikai Tele?:=KupacHossz(ke)=MaxHossz Tele?:=KupacHossz(ke)=MaxHossz Függvény vége. II.

 Adatszerkezetek47/ Kupacos ábrázolás (folytatás) Függvény ElsőElem(Változó s:PrSor): TElem Ha KupacHossz(ke)  0 akkor ElsőElem:=Érték(ke,1).elem különben hiba:=Igaz Elágazás vége Ha KupacHossz(ke)  0 akkor ElsőElem:=Érték(ke,1).elem különben hiba:=Igaz Elágazás vége Függvény vége. Függvény ElsőPrioritás(Változó s:PrSor): TPrior Ha KupacHossz(ke)  0 akkor ElsőPrioritás:=Érték(ke,1).pr különben hiba:=Igaz Elágazás vége Függvény vége. II.

 Adatszerkezetek48/ Kupacos ábrázolás (folytatás) Eljárás Sorba(Változó s:PrSor, Konstans e:TElem, p:TPrior): Ha KupacHossz(ke)<MaxHossz akkor Kupacba(ke,TPrElem(e,p)) különben hiba:=Igaz Elágazás vége Eljárás vége. Eljárás Sorból(Változó s:PrSor, e:TElem, p:TPrior): Változó ep:TPrElem Ha KupacHossz(ke)>0 akkor Kupacbol(ke,ep) e:=ep.elem; p:=ep.pr különben hiba:=Igaz Eljárás vége. II.

 Adatszerkezetek49/ Kupacos ábrázolás (folytatás) Függvény SorHossz(Konstans s:Sor): Egész SorHossz:=KupacHossz(ke) Függvény vége. Függvény Hibás?(Változó s:PrSor): Logikai Hibás?:=Hibás?(ke) Függvény vége. … hf … … hf … Inicializálás Inicializálás Üres(ke) Üres(ke) Modul vége. II.

 Adatszerkezetek50/55 33 Alkalmazási példák Megszakítási rendszerMegszakítási rendszer 3.2 Mindennapok prioritási soraiMindennapok II.

 Adatszerkezetek51/ Megszakítási rendszer 3.1 A számítógép az esetleg konkuráló (egyidejűleg érkező) megszakításokat egy prioritási sorba gyűjti, majd ennek sorrendjében hajtja végre az egyes megszakításokhoz rendelt rutinokat... II.

 Adatszerkezetek52/ Mindennapok prioritási sorai 3.2 Az Élet „dezertörei” mindenki által kellően átélt példákkal illusztrálják a prioritási sorok „létjogosultságát”, de legalábbis létezését. II.

 Adatszerkezetek53/55 Megjegyzés -- Változó A „Változó”-ság oka: valamilyen hiba lehetősége fönnáll (üres vagy tele a sor), s ennek visszajelzésére a „hiba” mező változhat.valamilyen hiba lehetősége fönnáll (üres vagy tele a sor), s ennek visszajelzésére a „hiba” mező változhat. Vagy valamely operáció (l. Hiba függvény) kifejezetten állítja.Vagy valamely operáció (l. Hiba függvény) kifejezetten állítja.

 Adatszerkezetek54/55 Megjegyzés -- Tele? Ez a furcsaság azt fejezi ki, hogy a memória akkor is elfogyhat, amikor az adott sor első elemét igyekeznénk beletenni. Ez a furcsaság azt fejezi ki, hogy a memória akkor is elfogyhat, amikor az adott sor első elemét igyekeznénk beletenni.

 Adatszerkezetek55/55 Megjegyzés -- ciklikus növelés A rövidség kedvéért bevezetjük ciklikus növelés, illetve csökkentés műveleteket.  1:{1..MaxHossz}  {1..MaxHossz} x  1 := (x Mod MaxHossz)+1,  1:{1..MaxHossz}  {1..MaxHossz} x  1 := (x  1+MaxHossz) Mod MaxHossz

 Adatszerkezetek56/55 Megjegyzés -- Azonosság? „s1=s2” értelmezési lehetőségek: –„tökéletesen” azonos állapot, azaz s1.eleje=s2.eleje és s1.vége=s2.vége (értékmegosztás esetén  azonos elemek) –„lényegi” azonosság, azaz azonos számú és értékű elemek.

 Adatszerkezetek57/55 Megjegyzés -- Értékadás „s1:=s2” értelmezési lehetőségek: –„tökéletesen” azonos állapot létrehozása, azaz s1.eleje:=s2.eleje; s1.vége:=s2.vége (értékmegosztás esetén  azonos elemek) –értékmásolás, azaz s1 minden elemének s2-másolatelem létrehozása.

 Adatszerkezetek58/55 Megjegyzés -- Prioritás Az elemek rendezésére szolgáló többletinfor- máció. Infix Operátor  (TPrior,TPrior): Logikai Megvalósítása: az elem egy „rendezett” mezője,az elem egy „rendezett” mezője, az elemen értelmezett valamilyen alkalmas rendezett értéket szolgáltató függvény.az elemen értelmezett valamilyen alkalmas rendezett értéket szolgáltató függvény. II.II.