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

INFOÉRA 2006 2006.11.18 Halmazok Juhász István-Zsakó László: Informatikai képzések a ELTE-n.

Hasonló előadás


Az előadások a következő témára: "INFOÉRA 2006 2006.11.18 Halmazok Juhász István-Zsakó László: Informatikai képzések a ELTE-n."— Előadás másolata:

1 INFOÉRA 2006 Halmazok Juhász István-Zsakó László: Informatikai képzések a ELTE-n

2 Zsakó László: Halmazok
INFOÉRA 2006 Halmaz féleségek 1. Halmaz (eleme, unió, metszet, halmazba, halmazból) 2. Halmaz (halmazba, K. legnagyobb eltávolítása) 3. Diszjunkt halmazfelbontás (unió, holvan) 4. Multihalmaz 5. Intervallumhalmaz Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 2

3 Zsakó László: Halmazok
INFOÉRA 2006 Halmaz típus Értékhalmaz: Az alaphalmaz (amely az Elemtípus által van meghatározva) iteráltja („mely elemek lehetnek benne a halmazban”). Az Elemtípus általában valamely véges diszkrét típus lehet, legtöbbször még az elemszámát is korlátozzák (<256). Ha nyelvi elemként nem létezik, akkor a megvalósításunkban lehet nagyobb elemszámú is. Nyelvi megvalósítás: STL – Standard Template Library Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 3

4 Zsakó László: Halmazok
INFOÉRA 2006 Halmaz típus Műveletek metszet (Ç) unió (È) különbség (–) komplemens eleme (egy elem benne van-e a halmazban) (Î) része (egyik halmaz részhalmaza-e a másiknak) (Ì, Í) Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 4

5 Zsakó László: Halmazok
INFOÉRA 2006 Halmaz típus Műveletek Halmazba (elem hozzá vétele egy halmazhoz): H:=HÈ{e} Halmazból (elem elhagyása egy halmazból): H:=H–{e} Beolvasás (halmaz beolvasása) Kiírás (halmaz kiírása), Üres (üres halmaz létrehozás eljárás), vagy Üres'Halmaztípus előre definiált konstans Üres? (logikai értékű függvény). Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 5

6 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása Elemek felsorolása Halmaz(Elemtípus)=Rekord(db: Egész, elem: Tömb(1..MaxDb:Elemtípus)) A halmaz elemeinek felsorolásával adjuk meg a halmazt, annyi elemű tömbben, ahány elemű éppen a halmaz (pontosabban az első db darab elemében). Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 6

7 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása Beolvasás(Változó a: Halmaz(Elemtípus)): Be: a.db [a halmaz elemszáma] Ciklus i=1-től a.db-ig Be: a.elem[i] Ciklus vége Eljárás vége. Műveletigény számítása: A ciklus a halmaz elemeinek számaszor fut le, azaz a futási idő a halmaz elemszámával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 7

8 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása Kiírás(Konstans a: Halmaz(Elemtípus)): Ki: a.db [a halmaz elemszáma] Ciklus i=1-től a.db-ig Ki: a.elem[i] Ciklus vége Eljárás vége. Műveletigény számítása: A ciklus a halmaz elemeinek számaszor fut le, azaz a futási idő a halmaz elemszámával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 8

9 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása Üres(Változó a: Halmaz(Elemtípus)): a.db:=0 Eljárás vége. Műveletigény számítása: Nem függ a halmaz elemszámától. Üres?(Konstans a: Halmaz(Elemtípus)): Üres?:=(a.db=0) Függvény vége. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 9

10 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása Halmazba(Változó a: Halmaz(Elemtípus), Konstans e: Elemtípus): i:=1 Ciklus amíg i≤a.db és a.elem[i]≠e i:=i+1 Ciklus vége Ha i>a.db akkor a.db:=a.db+1; a.elem[a.db]:=e Eljárás vége. Műveletigény számítása: A ciklus a halmaz elemeinek számaszor fut le, azaz a futási idő a halmaz elemszámával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 10

11 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása Halmazból(Változó a: Halmaz(Elemtípus), Konstans e: Elemtípus): i:=1 Ciklus amíg i≤a.db és a.elem[i]≠e i:=i+1 Ciklus vége Ha i≤a.db akkor a.elem[i]:=a.elem[a.db] a.db:=a.db-1 Eljárás vége. Műveletigény számítása: A ciklus a halmaz elemeinek számaszor fut le, azaz a futási idő a halmaz elemszámával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 11

12 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása eleme(Konstans e:Elemtípus,a:Halmaz(Elemtípus)): i:=1 Ciklus amíg i≤a.db és ea.elem[i] i:=i+1 Ciklus vége eleme:=i≤a.db Függvény vége. Műveletigény számítása: A ciklus a halmaz elemeinek számaszor fut le, azaz a futási idő a halmaz elemszámával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 12

13 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása része(Konstans a,b: Halmaz(Elemtípus)): i:=1 Ciklus amíg i≤a.db és eleme(a.elem[i],b) i:=i+1 Ciklus vége része:=i≤a.db Függvény vége. Műveletigény számítása: A ciklus az A halmaz elemszámaszor fut le, az eleme függvény pedig a B halmaz elemszámaszor, azaz a futási idő a két halmaz elemszámának szorzatával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 13

14 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása unió(Konstans a,b: Halmaz(Elemtípus)): c:=a Ciklus i=1-től b.db-ig Ha nem eleme(b.elem[i],a) akkor Halmazba(c,b.elem[i]) Ciklus vége unió:=c Operátor vége. Műveletigény számítása: A külső ciklus a B halmaz elemszámaszor fut le, az eleme függ vény pedig az A halmaz elemszámaszor, azaz a futási idő a két halmaz elemszámá nak szorzatával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 14

15 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása metszet(Konstans a,b: Halmaz(Elemtípus)): c.db:=0 Ciklus i=1-től a.db-ig Ha eleme(a.elem[i],b) akkor Halmazba(c,a.elem[i]) Ciklus vége metszet:=c Operátor vége. Műveletigény számítása: A ciklus az A halmaz elemszámaszor fut le, az eleme pedig leg rosszabb esetben a B halmaz elemszáma szor, azaz a futási idő a két halmaz elem számának szorzatával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 15

16 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása Megjegyzések: A megoldás alapvető problémája, hogy sehol sem ellenőrizhető, hogy a halmazban valóban csak a benne előfordulható elemek vannak. Az így ábrázolt halmazok elemtípusára semmilyen megkötést nem kell tennünk, hiszen egy tömbben bármilyen elem elhelyezhető. Arra sincs korlátozás, hogy mekkora lehet az alaphalmaz elem- száma, amiből a halmaz elemei származnak. Csak annyi a meg- kötésünk, hogy a konkrét halmazok elemszámát korlátozzuk. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 16

17 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása Bittérkép – logikai vektor Halmaz(Elemtípus)=Tömb(Min'Elemtípus Max'Elemtípus:Logikai) A halmazt {igaz,hamis} elemekből álló vektorként értelmezzük, ahol indexként használjuk az elem típusú értéket. Az ilyen halmaz mindig rendezett halmaz. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 17

18 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása Beolvasás(Változó a: Halmaz(Elemtípus)): Be: N [a halmaz elemszáma] Üres(a) Ciklus i=1-től N-ig Be: e; a[e]:=igaz Ciklus vége Eljárás vége. Műveletigény számítása: A ciklus a halmaz elemeinek számaszor fut le, azaz a futási idő a halmaz elemszámával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 18

19 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása Kiírás(Konstans a: Halmaz(Elemtípus)): Ciklus i=Min'Elemtípus-tól Max'Elemtípus-ig Ha a[i] akkor Ki: i Ciklus vége Eljárás vége. Műveletigény számítása: A ciklus a halmaz lehetséges elemeinek számaszor fut le, azaz a futási idő a halmaz elemtípusának számosságával arányos. Mi lenne, ha tárolnánk a halmaz legkisebb és legnagyobb elemét is? Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 19

20 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása Üres(Változó a: Halmaz(Elemtípus)): Ciklus i=Min'Elemtípus-tól Max'Elemtípus-ig a[i]:=hamis Ciklus vége Eljárás vége. Műveletigény számítása: A ciklus a halmaz lehetséges elemeinek számaszor fut le, azaz a futási idő a halmaz elemtípusának számosságával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 20

21 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása Üres?(Konstans a: Halmaz(Elemtípus)): i:=Min'Elemtípus Ciklus amíg i≤Max'Elemtípus és nem a[i] i:=i+1 Ciklus vége Üres?:=(i>Max'Elemtípus) Függvény vége. Műveletigény számítása: A ciklus a halmaz lehetséges elemeinek számaszor fut le, azaz a futási idő a halmaz elemtípusának számosságával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 21

22 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása Halmazba(Változó a: Halmaz(Elemtípus), Konstans e: Elemtípus): a[e]:=igaz Eljárás vége. Műveletigény számítása: Nem függ a halmaz elemszámától. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 22

23 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása Halmazból(Változó a: Halmaz(Elemtípus), Konstans e: Elemtípus): a[e]:=hamis Eljárás vége. Műveletigény számítása: Nem függ a halmaz elemszámától. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 23

24 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása eleme(Konstans e:Elemtípus,a:Halmaz(Elemtípus)): eleme:=a[e] Függvény vége. Műveletigény számítása: Nem függ a halmaz elemszámától. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 24

25 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása része(Konstans a,b: Halmaz(Elemtípus)): i:=Min'Elemtípus Ciklus amíg i≤Max'Elemtípus és nem (a[i] és nem b[i]) i:=i+1 Ciklus vége része:=i>Max'Elemtípus Függvény vége. Műveletigény számítása: A ciklus a halmaz lehetséges elemeinek számaszor fut le, azaz a futási idő a halmaz elemtípusának számosságával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 25

26 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása unió(Konstans a,b: Halmaz(Elemtípus)): Ciklus i=Min'Elemtípus-tól Max'Elemtípus-ig c[i]:=a[i] vagy b[i] Ciklus vége unió:=c Operátor vége. Műveletigény számítása: A ciklus a halmaz lehetséges elemeinek számaszor fut le, azaz a futási idő a halmaz elemtípusának számosságával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 26

27 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása metszet(Konstans a,b: Halmaz(Elemtípus)): Ciklus i=Min'Elemtípus-tól Max'Elemtípus-ig c[i]:=a[i] és b[i] Ciklus vége metszet:=c Operátor vége. Műveletigény számítása: A ciklus a halmaz lehetséges elemeinek számaszor fut le, azaz a futási idő a halmaz elemtípusának számosságával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 27

28 Halmaz típus ábrázolása
INFOÉRA 2006 Halmaz típus ábrázolása Megjegyzések: Ennél az ábrázolásnál szigorú megkötés az, hogy a halmaz lehetséges elemei indexként használhatók legyenek! Emiatt így például nem definiálható síkbeli pontok halmaza, szavak halmaza, … Ha azonban a halmaz egy véges sokaságból veszi fel az elemeit, akkor ezek egy tömbbe elhelyezhetők és a továbbiakban ezen tömb indexeivel ábrázolhatjuk a halmazt! Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 28

29 Halmazból a K. legnagyobb eltávolítása
INFOÉRA 2006 Halmazból a K. legnagyobb eltávolítása Halmazból a K. legnagyobb eltávolítása: Néhány feladatnál felmerül, hogy egy halmazból ki kell venni a K. legnagyobb elemet. Ha a halmazt rendezett sorozatként (tömb) képzeljük el, akkor a K. legnagyobb megtalálása egyetlen képlet kiszámítása, a kihagyása azonban a halmaz elemszámával arányos időben történik – el kell tolni előre a mögötte levő elemeket. Ha a halmazt listával ábrázolnánk, akkor pedig a K. legnagyobb megtalálási ideje arányos a halmaz elemszámával. Az ötlet: ábrázoljuk a halmazt bináris fával! Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 29

30 Halmazból a K. legnagyobb eltávolítása
INFOÉRA 2006 Halmazból a K. legnagyobb eltávolítása 1. A fának n levélpontja van. 2. A fának n-1 belső (nem levél) pontja van az 1..n-1 számokkal jelölve. 3. Minden belső pontnak két fia van. 4. Az a..b elemeket (leveleket) tartalmazó részfa gyökere k = (a+b)/2, bal részfája az a..k, jobb részfája pedig a k+1..b elemeket tartalmazza. 5. A fa minden p belső pontja a jobb részfájában lévő halmaz-elemek számát tartalmazza (Hány(p)). Legyen H(i) igaz, ha az i elem még a halmazban van! A {2;4;5;7;9;10} halmaz ábrázolása, ha n=10. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 30

31 Halmazból a K. legnagyobb eltávolítása
INFOÉRA 2006 Halmazból a K. legnagyobb eltávolítása Keres(k,bal,jobb): Ha bal=jobb akkor H(bal):=hamis; Keres:=bal különben s=(bal+jobb)/2 Ha Hány(s)>=k akkor Hány(s):=Hány(s) Keres:=Keres(k,s+1,jobb) különben Keres:=Keres(k-Hány(s),bal,s) Elágazások vége Függvény vége. Ez a Keres művelet O(log2n) futási idejű. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 31

32 Halmazból a K. legnagyobb eltávolítása
INFOÉRA 2006 Halmazból a K. legnagyobb eltávolítása A bináris fa „létrehozása” n elemből: (Épít(1,n)) Épít(bal,jobb): Ha bal<jobb akkor s=(bal+jobb)/ Hány(s):=jobb-s Épít(bal,s); Épít(s+1,jobb) Eljárás vége. A keresés és a létrehozás műveletekből is látszik, hogy itt a bináris fát ténylegesen nem hozzuk létre, csupán modellként használjuk a feladat megoldásában. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 32

33 Halmazból a K. legnagyobb eltávolítása
INFOÉRA 2006 Halmazból a K. legnagyobb eltávolítása A bináris fa „létrehozása” adott H-beli elemekből: Épít(bal,jobb,db): Ha bal<jobb akkor s=(bal+jobb)/ Épít(bal,s,b); Épít(s+1,jobb,j) Hány(s):=j; db:=b+j különben Ha H(bal) akkor db:=1 különben db:=0 Eljárás vége. Épít(1,n,db) Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 33

34 Halmazból a K. legnagyobb eltávolítása
INFOÉRA 2006 Halmazból a K. legnagyobb eltávolítása Halmazba egy elem beszúrása: Halmazba(bal,jobb,x): Ha bal<jobb akkor s=(bal+jobb)/ Ha x≤s akkor Halmazba(bal,s,x) különben Hány(s):=Hány(s) Halmazba(s+1,jobb,x) különben H(bal):=igaz Eljárás vége. Halmazba(1,n,8) Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 34

35 Diszjunkt halmazfelbontás
INFOÉRA 2006 Diszjunkt halmazfelbontás Sokszor lehet szükségünk egy N elemű halmaznak (amely elemeket ábrázolhatunk a sorszámaikkal) a diszjunkt halmazfelbontásaira – olyan részekre bontásra, amelyben a részeknek nincs közös elemük és minden elem benne van valamely részben. Az egyes részeket egy-egy reprezentáns elemükkel adjuk meg. Erre a halmazfelbontásra a következő műveleteket definiáljuk: egyesít(a,b) – az a, illetve b reprezentáns elemű részhalmazok összevonása holvan(a) – az a elemet tartalmazó részhalmaz reprezentánsa megadása létrehoz – az N elem N részhalmazba sorolása Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 35

36 Diszjunkt halmazfelbontás
INFOÉRA 2006 Diszjunkt halmazfelbontás Építsünk egy erdőt, amelyben azonos fában vannak az azonos részhalmazban levő elemek, a fákat pedig alulról felfelé ábrázoljuk: Ábrázolás: Egyetlen vektort használunk (szülő), amely megadja minden elemhez, hogy mely elem szerepel közvetlenül fölötte a fában. A legfelső elemekre a szülő(i) értéke legyen i! Így a Létrehoz művelet: Létrehoz: Ciklus i=1-től N-ig szülő(i):=i Ciklus vége Eljárás vége. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 36

37 Diszjunkt halmazfelbontás
INFOÉRA 2006 Diszjunkt halmazfelbontás Építsünk egy erdőt, amelyben azonos fában vannak az azonos részhalmazban levő elemek: Egyesít(1,4) hatása: Egyesít(3,4) hatása lehetne: Mi lehetne Egyesít(3,5)? Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 37

38 Diszjunkt halmazfelbontás
INFOÉRA 2006 Diszjunkt halmazfelbontás A megoldás: egyesítéskor mindkét fában menjünk a legfelső elemhez és ott hajtsuk végre az egyesítést! Egyesít(3,5) hatása: Az egyesítés előfeltétele az, hogy a két elem biztosan különböző részhalmazokba tartozzon! Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 38

39 Diszjunkt halmazfelbontás
INFOÉRA 2006 Diszjunkt halmazfelbontás Egyesít(u,v): Ciklus amíg u≠szülő(u) u:=szülő(u) Ciklus vége Ciklus amíg v≠szülő(v) v:=szülő(v) Ciklus vége Holvan(u): szülő(v):=u Ciklus amíg u≠szülő(u) Eljárás vége. u:=szülő(u) Holvan:=u Függvény vége. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 39

40 Diszjunkt halmazfelbontás
INFOÉRA 2006 Diszjunkt halmazfelbontás Amikor a fában felfelé megyünk, akkor még érdemes a megtett utat tömöríteni, azaz minden bejárt pontot a gyökérhez csatolni: Holvan(u): v:=u Ciklus amíg v≠szülő(v) v:=szülő(v) Ciklus vége Ciklus amíg u≠szülő(u) w:=szülő(u); szülő(u):=v; u:=w Holvan:=u Függvény vége. Ilyenkor az egyesítés is egyszerűbb lehet, nem kell hozzá ciklus! Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 40

41 Diszjunkt halmazfelbontás
INFOÉRA 2006 Diszjunkt halmazfelbontás Egyesítésként legfeljebb 1 távolságra vagyunk a gyökértől: Egyesít(u,v): Ha u≠szülő(u) akkor u:=szülő(u) Ha v≠szülő(v) akkor v:=szülő(v) szülő(v):=u Eljárás vége. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 41

42 Diszjunkt halmazfelbontás
INFOÉRA 2006 Diszjunkt halmazfelbontás Holvan(6) hatása A fa magassága így kisebb lehet, ami gyorsíthatja az algoritmust! Megjegyzés: a két művelet miatt hívják ezt a típust Unió-Holvan típusnak is. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 42

43 Zsakó László: Halmazok
INFOÉRA 2006 Táblázat A táblázat olyan halmazféleség, amelyben az elemeket kulcs- értékkel azonosítjuk. A szokásos halmazműveletekből azonban csak néhányat definiálunk rá: Ü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,Logikai,Elem): Elem Ez tulajdonképpen sorozatnak is felfogható lenne, ha nem sorszámmal, hanem kulccsal indexelnénk – de nincs sorrend, nincs következőre lépési lehetőség. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 43

44 Zsakó László: Halmazok
INFOÉRA 2006 Táblázat Kérdés: Lehet olyan keresés, amelynek az ideje konstans? Válasz: Igen, ha tudjuk, hogy hol van a keresett elem! A probléma: honnan tudhatnánk? Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 44

45 Zsakó László: Halmazok
INFOÉRA 2006 Táblázat A megvalósítás ötlete: vegyünk egy tömböt a táblázat elemei tárolásához, a tömb elemei rekordok, amelynek egyik mezője a rekordot egyértelműen azonosító kulcs (de lehetne kulcsot kiszámító függvény is); kell egy ún. kulcstranszformációs függvény, ami a lehetséges kulcsértékeket leképezi a tömb indextartományára; ennek a függvénynek egyértelműnek kellene lennie (azaz különböző kulcsokhoz különböző indexet rendeljen)! Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 45

46 Zsakó László: Halmazok
INFOÉRA 2006 Táblázat Születésnap-paradoxon: ha 23 ember összegyűlik ünnepelni, akkor ~0,5073 annak az esélye, hogy lesz közöttük legalább kettő, aki azonos napon született. (Pl. az 1999-es informatika tanári évfolyam-létszámmal, a 103-mal: ~0, , , azaz „kémikusul mondva” 6 kilences pontossággal biztos esemény!) Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 46

47 Zsakó László: Halmazok
INFOÉRA 2006 Táblázat Kulcstranszformációs (index-/hash-/hasító/tördelő) 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). I = indexhalmaz (amellyel a reprezentációbeli tömböt in- dexelni fogjuk). Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 47

48 Zsakó László: Halmazok
INFOÉRA 2006 Táblázat Az elvárások gyengítése a kulcstranszformációs függvénnyel szemben: legyen K a lehetséges kulcsok halmaza , é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 (egyenletesség), kevés ütközést produkáljon, egyszerűen kiszámolható legyen! Lemondunk az egyértelműség mindenáron teljesítéséről. A nem egyértelműség következménye: a kulcsütközés! Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 48

49 Zsakó László: Halmazok
INFOÉRA 2006 Táblázat Kulcstranszformációs függvény variációk: a) Osztó módszer h(k):=k Mod M {h(k):=k Div M???} b) Szorzó módszer h(k):=Közepem(A*k) (a középső m számjegy) c) Számjegyes módszer d) Jel-kód módszerek Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 49

50 Zsakó László: Halmazok
INFOÉRA 2006 Táblázat A táblázat típus megvalósítási lehetőségei: Táblázattípus=Tömb(0..Méret-1: TElem) Elemtípus=Rekord(kulcs: Kulcstípus, egyéb: ???) Függvény – Kulcs: Elemtípus → Kulcstípus Függvény – Hash: Kulcstípus → 0..Méret-1 Megjegyzés: a TElem típus megvalósítás-függő, de biztosan van benne Elemtípus típusú rész. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 50

51 Táblázat típus: lineárisan szétszórt altáblák módszere
INFOÉRA 2006 Táblázat típus: lineárisan szétszórt altáblák módszere Konstans Méret: Egész Típus TJellemző=(üres,foglalt,törölt) TElem=Rekord(elem: Elemtípus, attr:TJellemző) TTábla=Tömb(0..Méret-1:TElem) Változó tab: TTábla hiba: Logikai Megjegyzés: feltesszük, hogy van üres elem a táblázatban. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 51

52 Táblázat típus: lineárisan szétszórt altáblák módszere
INFOÉRA 2006 Táblázat típus: lineárisan szétszórt altáblák módszere A keresés elve: Ha a kiszámolt hely üres, akkor a táblában nem lehet, nem találtuk meg. Ha foglalt és ő van ott, akkor megtaláltuk. Ha törölt vagy nem ő van ott, akkor keresünk mögötte lineárisan az első üres helyig: Ha ott van, akkor megtaláltuk. Ha nincs ott, akkor nem találtuk meg. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 52

53 Táblázat típus: lineárisan szétszórt altáblák módszere
INFOÉRA 2006 Táblázat típus: lineárisan szétszórt altáblák módszere Keres(t,k,van,e): kk:=Hash(k) Ha t.tab(kk).attr=üres akkor van:=Hamis különben Ciklus amíg t.tab(kk).attr≠üres és t.tab(kk).elem.kulcs≠k kk:=(kk+1) mod Méret Ciklus vége Ha t.tab(kk).elem.kulcs=k akkor van:=igaz; e:=t.tab(kk).elem különben van:=hamis Eljárás vége. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 53

54 Táblázat típus: lineárisan szétszórt altáblák módszere
INFOÉRA 2006 Táblázat típus: lineárisan szétszórt altáblák módszere A beillesztés elve: Ha a kiszámolt hely üres vagy törölt, akkor betehető oda. Ha foglalt és nem ő van ott, akkor lineárisan keresünk helyet (üreset vagy töröltet). Megjegyzés: ellenőrizhetnénk, hogy benne volt-e a táblázatban. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 54

55 Táblázat típus: lineárisan szétszórt altáblák módszere
INFOÉRA 2006 Táblázat típus: lineárisan szétszórt altáblák módszere Beilleszt(t,e): kk:=Hash(e.kulcs) Ha t.tab(kk).attr{üres,törölt} akkor t.tab(kk):=(e,foglalt) különben kk:=(kk+1) mod Méret Ciklus amíg t.tab(kk).attr=foglalt kk:=(kk+1) mod Méret Ciklus vége t.tab(kk):=(e,foglalt) Eljárás vége. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 55

56 Táblázat típus: lineárisan szétszórt altáblák módszere
INFOÉRA 2006 Táblázat típus: lineárisan szétszórt altáblák módszere A törlés elve: Ha a kiszámolt hely üres, akkor a táblában nem lehet, a törlés hibás. Ha foglalt és ő van ott, akkor törölhető. Ha törölt vagy nem ő van ott, akkor lineárisan megkeressük: Ha ott van, törölhető. Ha nincs ott, akkor az hiba! Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 56

57 Táblázat típus: lineárisan szétszórt altáblák módszere
INFOÉRA 2006 Táblázat típus: lineárisan szétszórt altáblák módszere Töröl(t,k): kk:=Hash(k) Ha t.tab(kk).attr≠üres akkor Ha Ciklus amíg t.tab(kk).attr≠üres és t.tab(kk).elem.kulcs≠k kk:=(kk+1) mod Méret Ciklus vége Ha t.tab(kk).elem.kulcs=k akkor t.tab(kk).attr:=törölt különben t.hiba:=igaz különben t.hiba:=igaz Eljárás vége. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 57

58 Táblázat típus kiterjesztése
INFOÉRA 2006 Táblázat típus kiterjesztése Probléma: A törölt elemek elszaporodása lassítja a műveleteket. Bárhol keletkezhetnek törölt elemek. Megoldás: a táblázat időnkénti újraszervezése – a tömb (tömbök) tetszőleges sorrendű bejárásával a megtalált elemeket beillesztjük egy új táblázatba. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 58

59 Zsakó László: Halmazok
INFOÉRA 2006 Multihalmaz típus Értékhalmaz: Az alaphalmaz (amely az Elemtípus és egy darabszám által van meghatározva) iteráltja („mely elem hányszoros multiplicitással van benne a multihalmazban”). Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 59

60 Zsakó László: Halmazok
INFOÉRA 2006 Multihalmaz típus Műveletek metszet (Ç) (értékek metszete, multiplicitások minimuma) unió (È) (értékek uniója, multiplicitások összege) max (értékek uniója, multiplicitások maximuma), különbség (–) (értékek különbsége, multiplicitások különbsége; nincs benne egy elem, ha a multiplicitások különbsége 1-nél kisebb) Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 60

61 Zsakó László: Halmazok
INFOÉRA 2006 Multihalmaz típus Műveletek eleme (egy elem benne van-e a multihalmazban) (Î) benne (egy elem legalább adott multiplicitással benne van-e a multihalmazban) multiplicitás (egy elem hányszoros multiplicitással van benne a multihalmazban) része (egyik multihalmaz részhalmaza-e a másiknak) (Ì, Í) mindközös? (a két multihalmaz az elemek multiplicitásától eltekintve azonos-e) Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 61

62 Zsakó László: Halmazok
INFOÉRA 2006 Multihalmaz típus Műveletek Multihalmazba (elem hozzávétele egy multihalmazhoz): H:=HÈ{e,1} Multihalmazból (elem elhagyása egy multihalmazból): H:=H–{e,1} Beolvasás (multihalmaz beolvasása) Kiírás (multihalmaz kiírása), Üres (üres multihalmaz létrehozás eljárás), vagy Üres? (logikai értékű függvény). Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 62

63 Zsakó László: Halmazok
INFOÉRA 2006 Multihalmaz típus Példa Típus Fajta=Rekord(érték: Szöveg, multi: Egész) Állomány=Multihalmaz(Fajta) Változó A: Állomány A:=Állomány(("nyúl",3),("kecske",5)) Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 63

64 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása Elemek felsorolása Típus Halmazelem=Rekord(érték: Elemtípus, multi: Egész) Multihalmaz(Elemtípus)=Rekord(db: Egész, elem: Tömb(1..MaxDb:Halmazelem)) Egy felsorolásként adjuk meg a multihalmazt, annyi elemű tömbben, ahány elemű éppen a multihalmaz (pontosabban az első db darab elemében). Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 64

65 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása Beolvasás(Változó a: Multihalmaz(Elemtípus)): Be: a.db [a multihalmaz elemszáma] Ciklus i=1-től a.db-ig Be: a.elem[i].érték,a.elem[i].multi Ciklus vége Eljárás vége. Műveletigény számítása: A ciklus a multihalmaz elemértékeinek számaszor fut le, azaz a futási idő a multihalmaz elemszámával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 65

66 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása Kiírás(Konstans a: Multihalmaz(Elemtípus)): Ki: a.db [a multihalmaz elemszáma] Ciklus i=1-től a.db-ig Ki: a.elem[i].érték,a.elem[i].multi Ciklus vége Eljárás vége. Műveletigény számítása: A ciklus a multihalmaz elemértékeinek számaszor fut le, azaz a futási idő a multihalmaz elemszámával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 66

67 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása Üres(Változó a: Multihalmaz(Elemtípus)): a.db:=0 Eljárás vége. Műveletigény számítása: Nem függ a multihalmaz elemszámától. Üres?(konstans a: Multihalmaz(Elemtípus)): Üres?:=(a.db=0) Eljárás vége. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 67

68 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása Multihalmazba(Változó a: Multihalmaz(Elemtípus), Konstans e: Elemtípus): i:=1 Ciklus amíg i≤a.db és a.elem[i].érték≠e i:=i+1 Ciklus vége Ha i≤a.db akkor a.elem[i].multi:=a.elem[i].multi+1 különben a.db:=a.db+1; a.elem[a.db].érték:=e a.elem[a.db].multi:=1 Eljárás vége. Műveletigény számítása: Arányos a multihalmaz elemszámával. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 68

69 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása Multihalmazból(Változó a: Multihalmaz(Elemtípus), Konstans e: Elemtípus): i:=1 Ciklus amíg i≤a.db és a.elem[i].érték≠e i:=i+1 Ciklus vége Ha i≤a.db akkor Ha a.elem[i].multi=1 akkor a.elem[i]:=a.elem[a.db]; a.db:=a.db különben a.elem[i].multi:=a.elem[i].multi-1 Eljárás vége. Műveletigény számítása: Arányos a multihalmaz elemszámával. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 69

70 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása eleme(Konstans e: Elemtípus, a: Multihalmaz(Elemtípus)): i:=1 Ciklus amíg i≤a.db és ea.elem[i].érték i:=i+1 Ciklus vége eleme:=i≤a.db Függvény vége. Műveletigény számítása: Arányos a multihalmaz elemszámával. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 70

71 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása multiplicitás(Konstans e: Elemtípus, a: Multihalmaz(Elemtípus)): i:=1 Ciklus amíg i≤a.db és ea.elem[i].érték i:=i+1 Ciklus vége Ha i≤a.db akkor multiplicitás:=a.elem[i].multi különben multiplicitás:=0 Függvény vége. Műveletigény számítása: Arányos a multihalmaz elemszámával. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 71

72 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása benne(Konstans e: Halmazelem, a: Multihalmaz(Elemtípus)): i:=1 Ciklus amíg i≤a.db és e.értéka.elem[i].érték i:=i+1 Ciklus vége benne:=i≤a.db és e.multi≤a.elem[i].multi Függvény vége. Műveletigény számítása: Arányos a multihalmaz elemszámával. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 72

73 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása része(Konstans a,b: Multihalmaz(Elemtípus)) i:=1 Ciklus amíg i≤a.db és benne(a.elem[i],b) i:=i+1 Ciklus vége része:=i≤a.db Függvény vége. Műveletigény számítása: A külső ciklus az A, a benne műveletben levő belső ciklus a B multihalmaz elemszámaszor fut le, azaz a futási idő a két multi halmaz elemszáma szorzatával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 73

74 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása unió(Konstans a,b: Multihalmaz(Elemtípus)): c:=a Ciklus i=1-től b.db-ig j:=1 Ciklus amíg j≤a.db és b.elem[i].értéka.elem[j].érték j:=j Ciklus vége Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 74

75 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása Ha j>a.db akkor c.db:=c.db c.elem[c.db]:=b.elem[i] különben c.elem[j].multi:=c.elem[j].multi b.elem[i].multi Ciklus vége unió:=c Operátor vége. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 75

76 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása max(Konstans a,b: Multihalmaz(Elemtípus)): c:=a Ciklus i=1-től b.db-ig j:=1 Ciklus amíg j≤a.db és b.elem[i].értéka.elem[j].érték j:=j Ciklus vége Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 76

77 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása Ha j>a.db akkor c.db:=c.db c.elem[c.db]:=b.elem[i] különben ha b.elem[i].multi>c.elem[j].multi akkor c.elem[j].multi:=b.elem[i].multi Ciklus vége max:=c Operátor vége. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 77

78 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása metszet(Konstans a,b: Multihalmaz(Elemtípus)): c.db:=0 Ciklus i=1-tõl a.db-ig j:=1 Ciklus amíg j≤b.db és b.elem[j].értéka.elem[i].érték j:=j Ciklus vége Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 78

79 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása Ha j≤b.db akkor c.db:=c.db+1; c.elem[c.db]:=a.elem[i] Ha b.elem[j].multi<a.elem[i].multi akkor c.elem[c.db].multi:=b.elem[j].multi Ciklus vége metszet:=c Operátor vége. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 79

80 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása Darabszám vektor Multihalmaz(Elemtípus)=Tömb(Min'Elemtípus Max'Elemtípus:Egész) Vegyünk fel egy annyi elemből álló sorozatot, amennyi a multihalmaz lehetséges elem fajtáinak száma! Legyen az i. elem x értékű, ha az i. lehetséges elem x-szer van benne van a multihalmazban, illetve 0, ha nincs benne! Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 80

81 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása Beolvasás(Változó a: Multihalmaz(Elemtípus)): Be: db [a multihalmaz elemszáma] Ciklus i=1-től db-ig Be: érték,multi; a[érték]:=multi Ciklus vége Eljárás vége. Műveletigény számítása: A ciklus a multihalmaz elemértékeinek számaszor fut le, azaz a futási idő a multihalmaz elemszámával arányos. A többi elemet azonban 0-ra kell állítani, ha a nyelv nem tudja. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 81

82 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása Kiírás(Konstans a: Multihalmaz(Elemtípus)): Ciklus i=Min'Elemtípus-tól Max'Elemtípus-ig Ha a[i]>0 akkor Ki: i,a[i] Ciklus vége Eljárás vége. Műveletigény számítása: A ciklus a multihalmaz elemtípusának számosságaszor fut le, azaz a futási idő a multihalmaz elemeinek maximális számával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 82

83 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása Üres(Változó a: Multihalmaz(Elemtípus)): Ciklus i=Min'Elemtípus-tól Max'Elemtípus-ig a[i]:=0 Ciklus vége Eljárás vége. Műveletigény számítása: A ciklus a multihalmaz elemtípusának számosságaszor fut le, azaz a futási idő a multihalmaz elemeinek maximális számával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 83

84 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása Üres?(konstans a: Multihalmaz(Elemtípus)): i:=Min'Elemtípus Ciklus amíg i≤Max'Elemtípus és a[i]=0 i:=i+1 Ciklus vége Üres?:=(i>Max'Elemtípus) Eljárás vége. Műveletigény számítása: A ciklus a multihalmaz elemtípusának számosságaszor fut le, azaz a futási idő a multihalmaz elemeinek maximális számával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 84

85 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása Multihalmazba(Változó a: Multihalmaz(Elemtípus), Konstans e: Elemtípus): a[e]:=a[e]+1 Eljárás vége. Műveletigény számítása: Nem függ a multihalmaz elemszámától. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 85

86 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása Multihalmazból(Változó a: Multihalmaz(Elemtípus), Konstans e: Elemtípus): Ha a[e]>0 akkor a[e]:=a[e]-1 Eljárás vége. Műveletigény számítása: Nem függ a multihalmaz elemszámától. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 86

87 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása eleme(Konstans e: Elemtípus, a: Multihalmaz(Elemtípus)): eleme:=a[e]>0 Függvény vége. Műveletigény számítása: Nem függ a multihalmaz elemszámától. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 87

88 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása multiplicitás(Konstans e: Elemtípus, a: Multihalmaz(Elemtípus)): multiplicitás:=a[e] Függvény vége. Műveletigény számítása: Nem függ a multihalmaz elemszámától. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 88

89 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása része(Konstans a,b: Multihalmaz(Elemtípus)) i:=Min’Elemtípus Ciklus amíg i≤Max’Elemtípus és a[i]≤b[i] i:=i+1 Ciklus vége része:=i>Max’Elemtípus Függvény vége. Műveletigény számítása: A futási idő a multihalmaz elemtípusa számosságával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 89

90 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása unió(Konstans a,b: Multihalmaz(Elemtípus)): Ciklus i=Min’Elemtípus-től Max’Elemtípus-ig c[i]:=a[i]+b[i] Ciklus vége unió:=c Operátor vége. Műveletigény számítása: A futási idő a multihalmaz elemtípusa számosságával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 90

91 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása max(Konstans a,b: Multihalmaz(Elemtípus)): Ciklus i=Min’Elemtípus-től Max’Elemtípus-ig Ha a[i]≥b[i] akkor c[i]:=a[i] különben c[i]:=b[i] Ciklus vége max:=c Operátor vége. Műveletigény számítása: A futási idő a multihalmaz elemtípusa számosságával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 91

92 Multihalmaz típus ábrázolása
INFOÉRA 2006 Multihalmaz típus ábrázolása metszet(Konstans a,b: Multihalmaz(Elemtípus)): Ciklus i=Min’Elemtípus-től Max’Elemtípus-ig Ha a[i]≥b[i] akkor c[i]:=b[i] különben c[i]:=a[i] Ciklus vége metszet:=c Operátor vége. Műveletigény számítása: A futási idő a multihalmaz elemtípusa számosságával arányos. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 92

93 Intervallumhalmaz nem diszjunkt intervallumokkal
INFOÉRA 2006 Intervallumhalmaz nem diszjunkt intervallumokkal Sok esetben az intervallumhalmaz célja annak megadása, hogy mely elemek nem tartoznak egyetlen intervallumba sem, mely elemek vannak a lehető legtöbb intervallumban, ... Ábrázolás Megadhatjuk az intervallumai számát, valamint az egyes intervallumai kezdő- és végpontjait. Vehetünk egy tömböt, amit az intervallumhalmaz lehetséges elemeinek intervallumával indexelünk. A tömb minden elemében azt tároljuk, hogy az adott elem hány intervallumnak eleme. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 93

94 Intervallumhalmaz nem diszjunkt intervallumokkal
INFOÉRA 2006 Intervallumhalmaz nem diszjunkt intervallumokkal Típus IntHalmaz=Rekord( db: Egész, kezd,vég: Tömb(1..Maxdb,egész)) A halmaz beolvasása egyszerű: Be: IH.db Ciklus i=1-től IH.db-ig Be: IH.kezd[i],IH.vég[i] Ciklus vége Ha azonban ezek után arra lennénk kíváncsiak, hogy egy [a,b] intervallum mely elemei nem tartoznak egy intervallumba sem, Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 94

95 Intervallumhalmaz nem diszjunkt intervallumokkal
INFOÉRA 2006 Intervallumhalmaz nem diszjunkt intervallumokkal akkor pl. az alábbi megoldást választhatnánk: db:=0 Ciklus i=a-tól b-ig j:=1 Ciklus amíg j≤IH.db és (IH.kezd[j]>i vagy IH.vég[j]<i) j:=j+1 Ciklus vége Ha j>IH.db akkor db:=db+1 Ciklus vége A futási idő (b-a+1)* az intervallumok száma. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 95

96 Intervallumhalmaz nem diszjunkt intervallumokkal
INFOÉRA 2006 Intervallumhalmaz nem diszjunkt intervallumokkal Típus IntHalmaz=Tömb(Min’Elem..Max’Elem,egész) A halmaz beolvasása sokkal lassúbb: Be: db; IH:=(0,...,0) Ciklus i=1-től db-ig Be: kezd,vég Ciklus j=kezd-től vég-ig IH[j]:=IH[j]+1 Ciklus vége Ciklus vége Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 96

97 Intervallumhalmaz nem diszjunkt intervallumokkal
INFOÉRA 2006 Intervallumhalmaz nem diszjunkt intervallumokkal Ha azonban ezek után arra lennénk kíváncsiak, hogy egy [a,b] intervallum mely elemei nem tartoznak a halmaz egy intervallu-mába sem, akkor pl. az alábbi megoldást választhatnánk: db:=0 Ciklus i=a-tól b-ig Ha IH[i]=0 akkor db:=db+1 Ciklus vége A futási idő (b-a+1). Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 97

98 Intervallumhalmaz nem diszjunkt intervallumokkal
INFOÉRA 2006 Intervallumhalmaz nem diszjunkt intervallumokkal Sok további feladat megoldható ezzel az ábrázolással, pl: a leghosszabb intervallum, amely nem fedi át a halmaz egy intervallumát sem, egy adott elem maximum hány intervallumban lehet benne, azon intervallumok száma, amelyek maximális számú elemet tartalmaznak, azon intervallumok, amelyek elemei a halmaz pontosan egy intervallumának elemei. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 98

99 Intervallumhalmaz nem diszjunkt intervallumokkal
INFOÉRA 2006 Intervallumhalmaz nem diszjunkt intervallumokkal Ábrázolás Vehetünk egy tömböt, amit az intervallumhalmaz lehetséges elemeinek intervallumával indexelünk. A tömb minden elemében azt tároljuk, hogy az adott elem hánnyal több intervallumnak eleme, mint az előző elem. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 99

100 Intervallumhalmaz nem diszjunkt intervallumokkal
INFOÉRA 2006 Intervallumhalmaz nem diszjunkt intervallumokkal Típus IntHalmaz=Tömb(Min’Elem..Max’Elem,egész) A halmaz beolvasása úja gyors: Be: db; IH:=(0,...,0) Ciklus i=1-től db-ig Be: kezd,vég IH[kezd]:=IH[kezd]+1 IH[vég+1]:=IH[vég+1]-1 Ciklus vége Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 100

101 Intervallumhalmaz nem diszjunkt intervallumokkal
INFOÉRA 2006 Intervallumhalmaz nem diszjunkt intervallumokkal Ha azonban ezek után arra lennénk kíváncsiak, hogy egy [a,b] intervallum mely elemei nem tartoznak a halmaz egy intervallu-mába sem, akkor pl. az alábbi megoldást választhatnánk: db:=0; S:=0; Ciklus i=a-tól b-ig S:=S+IH[i] Ha S=0 akkor db:=db+1 Ciklus vége A futási idő (b-a+1). Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 101

102 Intervallumhalmaz típus ábrázolása
INFOÉRA 2006 Intervallumhalmaz típus ábrázolása Intervallumhalmaz Elemei: diszjunkt intervallumok, növekvő sorrendben. Műveletei: beolvasás, kiírás, üresre állítás, üres-e?, eleme, unió, metszet, különbség. Típus IntHalmaz=Rekord( db: Egész, kezd,vég: Tömb(1..maxdb,Egész)) Beolvasása a kezd és vég tömbök beolvasása, kiírása pedig ezen tömbök kiírása. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 102

103 Intervallumhalmaz típus ábrázolása
INFOÉRA 2006 Intervallumhalmaz típus ábrázolása Eleme(a,IH): e:=1; u:=IH.db; k:=(e+u)/2 Ciklus amíg e≤u és (a<IH.kezd[k] vagy b>IH.vég[k]) Ha a<IH.kezd[k] akkor u:=k különben e:=k k:=(e+u)/2 Ciklus vége Eleme:=e≤u Függvény vége. Logaritmikus keresés elve. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 103

104 Intervallumhalmaz típus ábrázolása
INFOÉRA 2006 Intervallumhalmaz típus ábrázolása Metszet(IH,JH): i:=1; j:=1; k:=0 Ciklus amíg i≤IH.db és j≤JH.db Elágazás IH.vég[i]<JH.kezd[j] esetén i:=i JH.vég[j]<IH.kezd[i] esetén j:=j egyéb esetben k:=k KH.kezd[k]:=max(IH.kezd[i],JH.kezd[j]) KH.vég[k]:=min(IH.vég[i],JH.vég[j]) Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 104

105 Intervallumhalmaz típus ábrázolása
INFOÉRA 2006 Intervallumhalmaz típus ábrázolása Elágazás IH.vég[i]<JH.vég[j] esetén i:=i IH.vég[i]>JH.vég[j] esetén j:=j egyéb esetben i:=i+1; j:=j Elágazás vége Ciklus vége KH.db:=k metszet:=KH Függvény vége. Összefutattás elve. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 105

106 Intervallumhalmaz típus ábrázolása
INFOÉRA 2006 Intervallumhalmaz típus ábrázolása Unió(IH,JH): i:=1; j:=1; k:=1; Végükre őrző elem KH.kezd[k]:=min(IH.kezd[i],JH.kezd[j]) Ciklus amíg i≤IH.db+1 és j≤JH.db Elágazás IH.vég[i]<JH.kezd[j] esetén KH.vég[k]:=IH.vég[i]; i:=i+1; k:=k KH.kezd[k]:=min(IH.kezd[i],JH.kezd[j]) JH.vég[j]<IH.kezd[i] esetén KH.vég[k]:=JH.vég[j]; j:=j+1; k:=k KH.kezd[k]:=min(IH.kezd[i],JH.kezd[j]) Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 106

107 Intervallumhalmaz típus ábrázolása
INFOÉRA 2006 Intervallumhalmaz típus ábrázolása IH.vég[i]<JH.vég[j] esetén i:=i IH.vég[i]>JH.vég[j] esetén j:=j egyéb esetben KH.vég[k]:=JH.vég[j]; j:=j+1; i:=i+1; k:=k KH.kezd[k]:=min(IH.kezd[i],JH.kezd[j]) Elágazás vége Ciklus vége KH.db:=k-1 Unió:=KH Függvény vége. Összefutattás elve. Zsakó László: Halmazok :23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 107

108 Programozási alapismeretek
Halmazok 2008/2009.


Letölteni ppt "INFOÉRA 2006 2006.11.18 Halmazok Juhász István-Zsakó László: Informatikai képzések a ELTE-n."

Hasonló előadás


Google Hirdetések