Perfektni hashovani od Cormacka

Odeslat odpověď

Smajlíci
:D :) :( :o :shock: :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode je zapnutý
[img] je zapnutý
[flash] je vypnutý
[url] je zapnuté
Smajlíci jsou zapnutí

Přehled tématu
   

Rozšířit náhled Přehled tématu: Perfektni hashovani od Cormacka

Re: Perfektni hashovani od Cormacka

od Him » 30. 8. 2010 11:45

http://wiki.matfyz.cz/wiki/DBI007_probr ... Cormack.29 - toto by nepomohlo? (Cormacka jsem se ucil na zkousku v ramci OZD I, ne II)

Re: Perfektni hashovani od Cormacka

od Germoe » 30. 8. 2010 02:11

No, pokusím se...

Hašování je dvoufázové, tj. máme primární soubor, adresář, funkci, která hashuje do adresáře a skupinu funkcí, která pak z adresáře hašuje do primárního souboru.
První funkce závisí na klíči a na počtu řádků adresáře (např. h(k,s)=k mod s).
skupina funkcí je skupina funkcí dvou proměnných (např. hi(k,r)= (k>>i) mod r, pokud r je mocnina dvou; (k XOR i) mod r jinak).
V adresáři je na každém řádku trojice p (tj. počátek oblasti v primárním souboru), i (tj. kterou funkci použít) a r (tj. počet prvků v této oblasti).

Vyhledávání: Vezmeš klíč a proženeš ho funkcí h, pak koukneš na příslušný řádek do tabulky a získaná data proženeš funkcí hi; označme j=h(k,s), podíváme se na adresu pj + hi_j(k,rj) zda tam něco je a zda odpovídá klíč, pokud ne, pak požadovaný záznam neexistuje.

Vkládání: Vezmeš klič a proženeš ho funkcí h, tím zjistíš, do jakého bloku patří. Koukneš, zda je za oním blokem volné místo, pokud není, najdeš nejbližší volný blok délky r+1 a změníš v adresáři p příslušným způsobem. Zvětšíš r na r+1. Hledáš nejnižší i takové, že v bloku nenastane kolize, aktualizujeme v adresáři hodnotu i a přerovnáme prvky bloku dle výsledků funkce hi. Pokud se nepodaří rozmístit prvky, opět zvýšíme r o jedna (může znovu vzniknout potřeba přemístit blok)... mohou v souboru vznikat díry, je tedy vhodné ho občas "setřást".

Perfektni hashovani od Cormacka

od Almer » 29. 8. 2010 17:44

Vysvetli mi to nekdo trosku polopatisticky? Tedy lidsky?

Nahoru