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

Slides:



Advertisements
Hasonló előadás
GRIN: Gráf alapú RDF index
Advertisements

Koordináták, függvények
Nevezetes algoritmusok
Adatelemzés számítógéppel
Programozási tételek, és „négyzetes” rendezések
Függvények Egyenlőre csak valós-valós függvényekkel foglalkozunk.
Matematika és Tánc Felkészítő tanár: Komáromi Annamária
Illés Tibor – Hálózati folyamok
INFOÉRA Kombinatorikai algoritmusok (Horváth Gyula és Szlávi Péter előadásai felhasználásával) Juhász István-Zsakó László: Informatikai.
INFOÉRA 2006 Kombinatorika
INFOÉRA Dinamikus programozás (Horváth Gyula és Szlávi Péter előadásai felhasználásával) Juhász István-Zsakó László: Informatikai képzések.
Copyright, 2009 © Szlávi Péter A kupac és a prioritási sor típuskonstrukciók Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
Minimális költségű feszítőfák
4. VÉGES HALMAZOK 4.1 Alaptulajdonságok
Programozási alapismeretek 10. előadás
Programozási alapismeretek 8. előadás. ELTE 2/  További programozási tételek További programozási tételek 
1 Hash-elés. 2 Mi a hash-elés? Gyorsan teszi lehetővé a keresést, törlést, beszúrást, módosítást Nem szükséges az elemek rendezettsége Nincsenek rendezéshez.
Halmazok, relációk, függvények
Készítette: Pető László
Adatbázis-kezelés ACCESS program:
OPERÁCIÓKUTATÁS Kalmár János, 2012 Tartalom A nulla-egy LP megoldása Hátizsák feladat.
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ő:
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
Fák, bináris fák INFOÉRA Ez így 60 perc.
ELTE Szlávi-Zsakó: Programozási alapismeretek 8.1/ Kiválogatás Specifikáció:  Bemenet: N:Egész, X:Tömb[1..N:Valami]
„Országos” feladat. Feladat: Egy tetszőleges, színes országokat tartalmazó térképen akar eljutni egy kommandós csapat egy országból egy másikba. Viszont.
Microsoft Excel Függvények VII..
ELTE Adatokkal kapcsolatos fogalmak  Konstans: az az adat, amely a műveletvégzés során nem változtat(hat)ja meg értékét, mindvégig ugyanabban az „állapotban”
Összetett adattípusok
Alapsokaság (populáció)
Fák.
Programozási alapismeretek 11. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 11.2/ Tartalom  Rendezési.
Készítette: Hanics Anikó. Az algoritmus elve: Kezdetben legyen n db kék fa, azaz a gráf minden csúcsa egy-egy (egy pontból álló) kék fa, és legyen minden.
– SQL 3: SELECT - 1. – Tarcsi Ádám, január 31. Adatbázis gyakorlat.
1. MATEMATIKA ELŐADÁS Halmazok, Függvények.
Algoritmizálás, adatmodellezés tanítása 8. előadás.
Algoritmizálás, adatmodellezés tanítása 2. előadás.
Feladatok (értékadás)
Gráfok ábrázolása teljesen láncoltan
Valószínűségszámítás II.
Adatbáziskezelés. Adat és információ Információ –Új ismeret Adat –Az információ formai oldala –Jelsorozat.
Programozási alapismeretek 8. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 8.2/  További programozási.
Programozási alapismeretek 10. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 10.2/  Kiválogatás + összegzés.
Algoritmusok és adatszerkezetek
Memóriakezelés feladatok Feladat: 12 bites címtartomány. 0 ~ 2047 legyen mindig.
Fájlszervezés Adatbázisok tervezése, megvalósítása és menedzselése.
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
INFOÉRA Gráfok, gráfalgoritmusok II. (Horváth Gyula és Szlávi Péter előadásai felhasználásával) Juhász István-Zsakó László: Informatikai.
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Alapvető programozási tételek megvalósítása Czigléczky Gábor 2009.
Nevezetes algoritmusok
Mediánok és rendezett minták
INFOÉRA Gráfok, gráfalgoritmusok II. (Horváth Gyula és Szlávi Péter előadásai felhasználásával) IDE KELL: prioritási sor kupaccal. Juhász.
Halmazműveletek.
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ó.
INFOÉRA Gráfok, gráfalgoritmusok III. (Horváth Gyula és Szlávi Péter előadásai felhasználásával) Juhász István-Zsakó László: Informatikai.
Adatbázis-kezelés 2. Relációs adatbázisok.
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.
Quine-McCluskey Módszer
Programozási tételek.
2-3-fák A 2-3-fa egy gyökeres fa az alábbi tulajdonságokkal:
Algoritmusok és Adatszerkezetek I.
Algoritmus készítés.
Programozási tételek.
INFOÉRA 2006 Szövegfeldolgozás III.
Szövegfeldolgozás II. INFOÉRA perc kell még hozzá
Előadás másolata:

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

Zsakó László: Halmazok INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 2

Zsakó László: Halmazok INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 3

Zsakó László: Halmazok INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 4

Zsakó László: Halmazok INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 5

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 6

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 7

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 8

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 9

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 10

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 11

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 12

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 13

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 14

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 15

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 16

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 17

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 18

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 19

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 20

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 21

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 22

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 23

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 24

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 25

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 26

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 27

Halmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 28

Halmazból a K. legnagyobb eltávolítása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 29

Halmazból a K. legnagyobb eltávolítása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 30

Halmazból a K. legnagyobb eltávolítása INFOÉRA 2006 2006.11.18 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)-1 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 31

Halmazból a K. legnagyobb eltávolítása INFOÉRA 2006 2006.11.18 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)/2 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 32

Halmazból a K. legnagyobb eltávolítása INFOÉRA 2006 2006.11.18 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)/2 É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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 33

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

Diszjunkt halmazfelbontás INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 35

Diszjunkt halmazfelbontás INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 36

Diszjunkt halmazfelbontás INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 37

Diszjunkt halmazfelbontás INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 38

Diszjunkt halmazfelbontás INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 39

Diszjunkt halmazfelbontás INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 40

Diszjunkt halmazfelbontás INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 41

Diszjunkt halmazfelbontás INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 42

Zsakó László: Halmazok INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 43

Zsakó László: Halmazok INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 44

Zsakó László: Halmazok INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 45

Zsakó László: Halmazok INFOÉRA 2006 2006.11.18 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,999 999 884, , azaz „kémikusul mondva” 6 kilences pontossággal biztos esemény!) Zsakó László: Halmazok 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 46

Zsakó László: Halmazok INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 47

Zsakó László: Halmazok INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 48

Zsakó László: Halmazok INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 49

Zsakó László: Halmazok INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 50

Táblázat típus: lineárisan szétszórt altáblák módszere INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 51

Táblázat típus: lineárisan szétszórt altáblák módszere INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 52

Táblázat típus: lineárisan szétszórt altáblák módszere INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 53

Táblázat típus: lineárisan szétszórt altáblák módszere INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 54

Táblázat típus: lineárisan szétszórt altáblák módszere INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 55

Táblázat típus: lineárisan szétszórt altáblák módszere INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 56

Táblázat típus: lineárisan szétszórt altáblák módszere INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 57

Táblázat típus kiterjesztése INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 58

Zsakó László: Halmazok INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 59

Zsakó László: Halmazok INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 60

Zsakó László: Halmazok INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 61

Zsakó László: Halmazok INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 62

Zsakó László: Halmazok INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 63

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 64

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 65

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 66

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 67

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 68

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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-1 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 69

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 70

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 71

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 72

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 73

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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+1 Ciklus vége ... Zsakó László: Halmazok 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 74

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 Multihalmaz típus ábrázolása ... Ha j>a.db akkor c.db:=c.db+1 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 75

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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+1 Ciklus vége ... Zsakó László: Halmazok 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 76

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 Multihalmaz típus ábrázolása ... Ha j>a.db akkor c.db:=c.db+1 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 77

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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+1 Ciklus vége ... Zsakó László: Halmazok 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 78

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 79

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 80

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 81

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 82

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 83

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 84

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 85

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 86

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 87

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 88

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 89

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 90

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 91

Multihalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 92

Intervallumhalmaz nem diszjunkt intervallumokkal INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 93

Intervallumhalmaz nem diszjunkt intervallumokkal INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 94

Intervallumhalmaz nem diszjunkt intervallumokkal INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 95

Intervallumhalmaz nem diszjunkt intervallumokkal INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 96

Intervallumhalmaz nem diszjunkt intervallumokkal INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 97

Intervallumhalmaz nem diszjunkt intervallumokkal INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 98

Intervallumhalmaz nem diszjunkt intervallumokkal INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 99

Intervallumhalmaz nem diszjunkt intervallumokkal INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 100

Intervallumhalmaz nem diszjunkt intervallumokkal INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 101

Intervallumhalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 102

Intervallumhalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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-1 különben e:=k+1 k:=(e+u)/2 Ciklus vége Eleme:=e≤u Függvény vége. Logaritmikus keresés elve. Zsakó László: Halmazok 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 103

Intervallumhalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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+1 JH.vég[j]<IH.kezd[i] esetén j:=j+1 egyéb esetben k:=k+1 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 104

Intervallumhalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 Intervallumhalmaz típus ábrázolása ... Elágazás IH.vég[i]<JH.vég[j] esetén i:=i+1 IH.vég[i]>JH.vég[j] esetén j:=j+1 egyéb esetben i:=i+1; j:=j+1 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 105

Intervallumhalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 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+1 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+1 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+1 KH.kezd[k]:=min(IH.kezd[i],JH.kezd[j]) ... Zsakó László: Halmazok 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 106

Intervallumhalmaz típus ábrázolása INFOÉRA 2006 2006.11.18 Intervallumhalmaz típus ábrázolása ... IH.vég[i]<JH.vég[j] esetén i:=i+1 IH.vég[i]>JH.vég[j] esetén j:=j+1 egyéb esetben KH.vég[k]:=JH.vég[j]; j:=j+1; i:=i+1; k:=k+1 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 2018.12.24. 21:23 Juhász István-Zsakó László: Informatikai képzések a ELTE-n 107

Programozási alapismeretek 2006.11.18 Halmazok 2008/2009.