Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
OZD: Hašování RNDr. Michal Žemlička
2
Přímý přístup do paměti
Hodnotu atributu můžeme přímo využít pro určení pozice záznamu: Hodnota udává logické číslo záznamu Hodnota udává přesnou adresu Hodnota je algoritmicky transformována na přesnou adresu Hodnota je algoritmicky transformována na logické číslo záznamu
3
Základy hašování Předpokládá adresový prostor Addr s M adresovými buňkami Obecně rekurzivní funkce h:Dom(k)→Addr Ideál: každému klíči jednoznačně přiřazena právě jedna adresa, která není přiřazena žádnému jinému klíči Realita: Více klíčům přiřazena tatáž adresa – kolize → nutno ošetřit
4
Jednoduché hašování Nechť h(k) = k mod M, kde M je počet buněk paměti
Kolize mohou být řešeny: seznamy prvků na jednotlivých adresách vložením prvku na jiné volné místo v tabulce První volná pozice za určenou Další hašování
5
Hašování - příklad h(k) = k mod 7 Insert: 3,5,12, … 1 2 3 4 5 6 I(3): 3 1 2 3 4 5 6 I(5): 3 5 1 2 3 4 5 6 I(12): 3 5 Kolize!
6
Hašování - příklad h(k) = k mod 7 Insert: 3, 5, 12, … 1 2 3 4 5 6 I(3): 3 1 2 3 4 5 6 I(5): 3 5 1 2 3 4 5 6 I(12): 3 5 12 Při kolizi vkládáme na první volné místo za danou pozici
7
Hašování – první odhady
Asymptotická i konkrétní varianta popsány přibližně ve stejnou dobu Asymptotická varianta – Knuth Konkrétní rozsah a naplnění – Král Naplnění … Očekávaný počet přístupů k nalezení prvku s daným klíčem … 1/ je-li tabulka z poloviny zaplněna, potřebuji v průměru dva přístupy
8
Hašování – potřebné přístupy
10 5 25 50 75 naplnění
9
Hašování do stránek Hašovací funkce může místo logických čísel záznamů vracet čísla stránek Vejde-li se do stránky více záznamů, kolize do úrovně kapacity stránky nevadí
10
Řešení kolizí Najdeme prostou hašovací funkci (velmi obtížné)
Najdeme první volné místo za kolizní pozicí Použijeme sekundární hašovací funkci Požijeme (složené) perfektní hašování
11
Perfektní hašování využívá složitějších hašovacích funkcí
přístup k záznamu v konstantním čase přidání dalších prvků může vyvolat změnu hašovací funkce vhodné pro úložiště, kde se hodně hledá, kam se tu a tam přidá (do určitého rozsahu), a kde mazání záznamů může být omezeno použitou metodou
12
Perfektní hašování (Cormack)
Hašování dvoufázové: do adresáře do primárního souboru adresář obsahuje informace o kolidujících prvcích (počet, umístění v primárním souboru, rozlišující hašovací funkce)
13
Perfektní hašování Cormacka
h(k,s) … primární hašovací funkce sekundární hašovací funkce hi(k,r) k… klíč s … velikost adresáře p i r adresář p…ukazuje na oblast v prim. souboru i …určuje sekundární hašovací funkci r… počet kolidujících prvků/rozsah pro hi primární soubor
14
Perf. hašování Cormacka
je vhodné, aby velikost adresáře přibližně odpovídala očekávanému počtu záznamů (větší šance, že nebudou kolidovat velké skupiny záznamů) Při insertu se vždy hledá nové místo pro celou kolidující skupinu Primární soubor je možné reorganizovat tak, aby data byla uložena souvisle
15
Cormack - závěr Vyhledání záznamu vyžaduje 2 (případně jen 1) přístup na disk Někdy je možné reorganizovat primární soubor tak, aby v něm nebyla volná místa Při mnoha kolizích do jedné položky adresáře je možné nechat sekundární hašovací funkci rozdělovat k prvků do více pozic, čímž se zvýší šance na rychlé nalezení příslušné sekundární haš. fce.
16
Perfektní hašování Larsona a Kalji
Data umístěna do M stránek Přístup ke stránkám řízen speciálním hašováním Využívá dvě sady hašovacích funkcí: hi(k) – udávají adresu stránky (0..M-1) si(k) – udávají signaturu záznamu (0..2d-2) Ke každé stránce je separátor – d-bitová hodnota, omezující velikost signatury záznamů ve stránce
17
Larson, Kalja – hledání záznamu
Postupně se pro zvyšující se i funkcemi hi a si generují adresa a signatura tak dlouho, až se nalezne stránka s danou adresou a se separátorem nižším, než je adrese odpovídající signatura. Buď se v dané stránce nachází, nebo není v celé databázi
18
Larson, Kalja - vkládání
Najdeme stránku, kde by se měl záznam nacházet Pokusíme se záznam vložit Vejde-li se, ok Nevejde-li se, setřídíme záznamy dle signatur Záznamy s největší signaturou z bloku vyjmeme Separátor bloku nastavíme na signaturu vytlačených záznamů Vyjmuté záznamy vložíme zpět do db
19
Larson, Kalja – výhody a nevýhody
Signatury jsou velmi malé, je možné je udržovat v paměti téměř vždy – pro získání dat stačí jediný přístup na médium Vkládání jediného prvku může vyvolat celou kaskádu vkládání prvků Může dojít k situaci, kdy separátory stránek budou nastaveny na příliš nízké hodnoty, a tak dojde ke zbytečné blokaci velké části adresového prostoru
20
Perfektní hašování - shrnutí
Obě uvedené metody perfektního hašování (Cormacka i Larsona a Kalji) dovolují velmi rychle přistupovat k uloženým záznamům, vkládání nových prvků však může být dosti zdlouhavé. Úspěšné nasazení se dá očekávat v případě kolekcí, kde se k záznamům přistupuje výhradně podle klíče a kde se data mění (ve srovnání s množstvím přístupů) jen minimálně
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.