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ő:

Slides:



Advertisements
Hasonló előadás
Koordináták, függvények
Advertisements

Készítette: Kosztyán Zsolt Tibor
Elemi algoritmusok Páll Boglárka.
Természetes számok 0, 1, 2, 3, ..., 24, 25, ..., 1231, 1232, ..., n, ...  = {0, 1, 2, 3, ..., n,...} a természetes számok halmaza Műveletek: összeadás.
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ő:
C++ programozási nyelv Gyakorlat hét
Adatszerkezetek Az adatokat két fő csoportra oszthatjuk: egyszerű és összetett adatok.  Az egyszerű adatot egy érték jellemez, tovább nem bontható. (szám,
Műveletek logaritmussal
Lapcsere stratégiák FIFO, LRU, OPT, SC
Rekurzió (Horváth Gyula és Szlávi Péter előadásai felhasználásával)
Prímtesztelés Témavezető: Kátai Imre Komputeralgebra Tanszék Nagy Gábor:
Euklidészi gyűrűk Definíció.
Nyílt címzéses Hashelés Nyílt címzéssel, h(k)=k mod(11) hash-függvénnyel hash-eljük a következő sorozatot: 18,28,36,17,62,48,50 Rajzoljuk le a keletkezett.
Csoport részcsoport invariáns faktorcsoport részcsoport
Hatékony gyorsítótár használata legrövidebb utak kereséséhez Bodnár István, Fodor Krisztián, Gyimesi Gábor Jeppe Rishede Thomsen, Man Lung Yiu, Christian.
Programozási alapismeretek 8. előadás. ELTE 2/  További programozási tételek További programozási tételek 
Turbo Pascal Változók.
A tételek eljuttatása az iskolákba
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.
Adatbázis-kezelés.
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
Mutatók, tömbök, függvények
Matematika: Számelmélet
Készítette: Pető László
az MSAccess programmal
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ő:
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ő:
1 Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat 1. Bevezetés Miskolc, 2004.
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ő:
AVL fák.
Integrálszámítás Mire fogjuk használni az integrálszámítást a matematikában, hova szeretnénk eljutni? Hol használható és mire az integrálszámítás? (már.
Valós számok Def. Egy algebrai struktúra rendezett test, ha test és rendezett integritási tartomány. Def. Egy (T; +,  ;  ) rendezett test felső határ.
6. SZÁMELMÉLET 6.1. Oszthatóság
1.3 Relációk Def. (rendezett pár) (a1 , a2 ) := {{a1} , {a1 , a2 }} .
Leszámoló rendezés Készítette: Várkonyi Tibor Zoltán VATNABI.ELTE
2 tárolós egyszerű logikai gép vázlata („feltételes elágazás”)
H A S H E L É S M Ű V E L E T E I N Y Í L T C Í M Z É S S E L S L I D E 01 HASHELÉS MŰVELETEI NYÍLT CÍMZÉSSEL Készítette Juhász Zoltán Gyakorlatvezető.
Tökéletes Hash függvények keresése Kasler Lóránd-Péter.
Programozás I. Egymásba ágyazott szelekciók, többágú szelekció
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ő:
Matematikai alapok és valószínűségszámítás
Struktúra nélküli adatszerkezetek
Adatszerkezetek 1. előadás
Készítette: Horváth Zoltán (2012)
Rendezések és szövegkezelő függvények
Alapsokaság (populáció)
Adatbázisok tervezése, megvalósítása és menedzselése
1. Melyik jármű haladhat tovább elsőként az ábrán látható forgalmi helyzetben? a) A "V" jelű villamos. b) Az "M" jelű munkagép. c) Az "R" jelű rendőrségi.
Dodekaéder Hamilton köre
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.
C Programozási alapok.
Programozási alapismeretek 8. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 8.2/  További programozási.
Írja fel a tizes számrendszerbeli
előadások, konzultációk
Algoritmizálás, adatmodellezés
Diszjunkt halmazok adatszerkezete A diszjunkt halmaz adatszerkezet diszjunkt dinamikus halmazok S={S 1,…,S n } halmaza. Egy halmazt egy képviselője azonosít.
Memóriakezelés feladatok Feladat: 12 bites címtartomány. 0 ~ 2047 legyen mindig.
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Alapvető programozási tételek megvalósítása Czigléczky Gábor 2009.
Integrálszámítás.
Algoritmusok és Adatszerkezetek I.
Informatikai gyakorlatok 11. évfolyam
2-3-fák A 2-3-fa egy gyökeres fa az alábbi tulajdonságokkal:
Cache példák 2019 (IMSC).
Előadás másolata:

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ő: Imre Mihály, műszaki informatikus hallgató

Hash (K-Key, A-Address), hashing – tördelő, az argumentum felvagdalására utal. Alapvetően új, egyszerű, gazdaságos, de vannak hátrányai is. Kulcs  tömbindex : kulcstranszformáció Nehézség: a lehetséges kulcsértékek halmaza általában jóval nagyobb, mint a rendelkezésre álló tárolási címek halmaza. Pl.:26 betűs ABC, maximum 10 betűs kulcs, 1000 ember  10 3 ; a H így nyilvánvalóan nem egyértelmű függvény, bizonyos kulcsokhoz azonos címet rendel. 2 és utána ellenőriz, hogy

Hash függvények A H függvény megválasztásának szempontjai: - a kulcsokat egyenletesen szórja szét az indextartományon, - gyorsan lehessen kiszámítani. 1. Osztásos módszer: Ha az ord(k) megadja a k kulcs sorszámát az összes lehetséges kulcsból álló halmazon, és az i tömbindex tartománya a [0..N-1] egész számok intervalluma: 3 Ez egyenletesen terít, gyakran alkalmazzák. Gyors, ha N kettő hatványa, de a kevés karakterben különböző szavak nagyobb valószínűséggel kapnak azonos indexet, nem egyenletes.

Hash függvények Tanácsosabb N-nek prímszámot választani: pl. 4 vagy A [0, 1) intervallumon a fgv. alapja egyenletes eloszlású (Knuth). (Rendes osztást kell végezni!) 2. Középnégyzet módszer: k 2 mindkét végéről törlünk kellő számú számjegyet, pl. N=100, {00, …, 99} k k2k H(k)729399

Hash függvények 3. Hajtogatásos módszer: a kulcsot k 1, k 2, k 3, … részre osztjuk, az értékeket összeadjuk, az elejét ha kell levágjuk; hossza a cím hossza, a páros sorszámú elem jegyeit megcserélhetjük: H(3205)=32+05= =82 H(7148)=71+48= =55 H(2345)=23+45= =77 4. Logikai műveletre alapozott tördelő függvény: A 4 byte-os részstringeket logikai XOR-ral összeadjuk, az eredményt számként értelmezzük -> i és H(s) = i mod N. 5

Hash függvények 5. Tökéletes (perfect) hashing A H(k) függyvény egy-egy típusú leképezést valósít meg, azaz az előforduló kulcsokat egy kezelhető egész tartományra képezi le. Az H függvény a K-ra akkor és csak akkor tökéletes, ha ∀ j, k ∈ K H(j) = H(k) → j = k 6. Univerzális hashing Egy rosszindulatú ellenség mindíg tud olyan kulcsokat választani, hogy azok mindegyike ugyanarra a helyre képeződjék le, ami O(N) keresési időhöz vezet. Az univerzális hashing (Cormen) egy hash függvény- készletből véletlenszerűen választ. 6

Hash függvények 7. Lineáris (sorrend megőrző) hash Olyan H függvény, amely megtartja az input kulcsok sorrendjét, miközben megváltoztatja térközét: k1, k2 ∈ K ∧ k1 > k2 → H(k1) > H(k2) 8. Dinamikus hash A hash tábla növekszik, hogy egyre több elemet tudjon kezelni, miközben a hash függvénynek is változnia kell. Bizonyos sémák esetén a törléseket követően a tábla mérete csökkenhet is. (Speciális esete a bővíthető hash.) 7

Hash függvények 9. Kakukk (cuckoo) hash Két hash táblát: T 1,T 2 és két hash függvényt: H 1,H 2 használ. Az egyes k kulcsok bármely táblában lehetnek: T 1 [H 1 (k)] vagy T 2 [H 2 (k)]. A k új kulcsot a T 1 [H 1 (k)] helyre tesszük. Ha ezt egy I kulcs már foglalja, akkor azt a T 2 [H 2 (l)] helyre tesszük és így tovább, míg üres helyet találunk, vagy elértünk egy korlátot. Ekkor új hash függvényt választunk és újraszámoljuk a táblát. 8

Hash függvények 10. Minimális tökéletes (perfect) hash Minden különböző kulcsot különböző egészre képez le és a lehetséges egészek száma ugyanaz, mint a kulcsoké. A H függvény akkor és csak akkor minimális tökéletes hash függvény a K kulcshalmazra nézve, ha ∀ j, k ∈ K H(j) = H(k) → j = k a H(k) értékkészlete 1.. |K| Speciális esete a sorrend megőrző minimális tökéletes (perfect) hash. 9

Hashing alkalmazása - Compiler így tartja nyilván a deklarált változókat a szimbólum táblában. A hashing ideális mivel a fordításhoz csak a beszúrás és a keresés műveletek szükségesek. - Gráfok csúcspontjai nevének keresése. - Játékok. - Helyesírás (online) ellenőrzése. (Ha nem kell névsorban adni a hibákat.) - Adatbáziskezelés, indexfájlok. - Digitális aláírás. 10

Hash: ütközés kezelése Ütközés: a hash tábla adott indexű eleme (slot, rés) már foglalt. Ütközés kezelése 1. Nyílt hash tábla Az ugyanazon elsődleges indexhez tartozó elemeket felfűzzük egy láncolt listára (lista tömb). Közvetlen láncolás, ha a hash tábla csak címeket tartalmaz. A plusz tároló helyeket túlcsordulási területnek nevezzük (overflow area). A kétszeresen láncolt lista hatékonyabb. Előnye: "korlátlan" számú elem és ütközés kezelhető. Hátránya: a láncolt listával kapcsolatos többletmunka. 11

Hash: ütközés kezelése 2. Fix túlcsordulási terület A hash táblát elsődleges és túlcsordulási területre osztjuk és indexláncot képezünk. Probléma: a két terület arányának optimális megválasztása. Előnye: gyors hozzáférés, az ütközések nem használják az elsődleges területet. Nehézség: a tábla felosztási arányának előzetes meghatározása. Továbbfejlesztés: többszörös túlcsordulási területek alkalmazása. 12

Hash: ütközés kezelése 3. Nyílt címzés (open addressing) Magában a hash táblában keres még nem foglalt helyet. h:= H(k) ; i:= 0; repeat IF T[h].kulcs = k THEN a tétel szerepel ELSE IF T[h].kulcs = szabad THEN a tétel nem szerepel ELSE begin ütközés i:= i+1; h:= H(k)+ G(i) end; until szerepel, nincs a táblában (vagy tele a tábla); 13

Hash: ütközés kezelése 3.a. Lineáris pótvizsgálat (Morris) 14 i = 1,..., N-1 pl.: {89,18,49,58,69} (N=10, nem prímszám) Üres

Hash: ütközés kezelése 3.b. Négyzetes pótvizsgálat (Morris) 15 i > 0 pl.: {89,18,49,58,69} Üres

Hash négyzetes pótvizsgálat Előfordulhat, hogy nem derít fel minden szabad helyet a táblában, de ha N prímszám, akkor mindíg használni tudja legalább a tábla felét. Tegyük fel, hogy egy i-edik és egy j-edik pótvizsgálat a tábla ugyanazon helyéhez vezet: 16 Mivel,, ezért i és j közül legalább az egyik nagyobb N/2-nél, hiszen csak így teljesülhet valamilyen C természetes számra.

Hash négyzetes pótvizsgálat A hash függvény számításának gyorsítására a négyzetre emelés helyett: h i = i 2 ; d i = 2i+1i = 1;h 1 = 1; d 1 = 3; h i+1 =h i + d i h 2 = 4; d 2 = 5; d i+1 =d i + 2 (i > 0)h 3 = 9; d 3 = 7; 17

Hash: ütközés kezelése Bokrosodás (clustering) A lineáris pótvizsgálat a bokrosodás jelenségétől szenved: az egy helyről induló újrahash-elések egy blokkot foglalnak el és a többi kulcsoknak megfelelő helyek felé nőnek. Ez fokozza az ütközésveszélyt és egyre több újrahash-elést eredményez. A négyzetes pótvizsgálatnál a másodlagos bokrosodás kevésbé súlyos probléma, mint a lineárisnál. A hash tábla telítettségével a többszörös ütközések egyre valószínűbbek. 18

Dupla hashing G(i) = i H 2 (k); H 2 –t is jól kell megválasztani, nem adhat zérust. A bokrosodás esélye minimális. Pl. H 2 (k)=R-(k mod R) R < N prímszám 19 Üres Pl.: R=7 H 2 (49) =7-0=7 H 2 (58) =7-2=5 H 2 (69) =7-6=1

Rehashing Ha a tábla túlságosan telített, a futási idő egyre nő és a beszúrás nem sikerül. Megoldás: felépítünk egy kétszer akkora táblát, az eredetiből átvisszük a még érvényes bejegyzéseket. Pl.: {13, 15, 24, 6}; N=7; H(k)=k mod 7, lineáris pótvizsgálat Az új tábla mérete: 17 (a következő kétszeres prímszám). Rehashing, ha pl. a tábla félig telt; vagy a beszúrás nem sikerült, vagy fáradságos; vagy a tábla valamilyen %-ig telt (telítettségi tényező).

Bővíthető hashing Az egész tábla nem fér a központi memóriába, így lényeges a disk hozzásférések (műveletek) száma. A nyílt vagy a zárt hashing esetén számos blokkot meg kell vizsgálni. A bővíthető (extendible) hashing lehetővé teszi, hogy a keresés 2 diszk művelettel megoldható legyen. Pl. M= (2) (2) (2) (2)

Bővíthető hashing Az beszúrásához, a 3. tele van, ezért kettévágjuk és az első 3 bit lesz a meghatározó, a directory mérete 3 lesz, a teljes directory-t átírjuk (2) (2) (3) (3) Előfordul, hogy nagyobbat kell ugrani, pl. 2-ről 4-re: Pl.: D=2; , , beszúrása után már csak az első 4 bit tud különbséget tenni. Nem lehet M -nél több azonos kulcs. (2)

Hashing: törlés Legcélszerűbb megoldás: a törölni szándékozott elem bejegyzését nem töröljük, csak törlésre jelöljük, így a keresés, beszúrás változatlan módon folytatható. 23