Tökéletes Hash függvények keresése Kasler Lóránd-Péter
Bevezetés n Hash függvények (Index függvények) n Tökéletes Hash: u Statikus halmazhoz u Dinamikus halmazhoz
Probléma átfogalmazása (Java megközelítés) n Object alapú. int hashCode(); n Objektumokról -> Számokra térünk át. (Switch vagy Case problémája)
Statikus megoldás 1. SimpleHasher n A SUN Java JRE implementációjában lévő egyszerű és gyors megoldása. int h = x.hashCode(); h += ~(h << 9); h ^= (h >>> 14); h += (h << 4); h ^= (h >>> 10); return h; Megfelelő eredményeket ad, a gyakorlati alkalmazások 99%-ra
Statikus megoldás 2. SzerencseHasher n Backtracking a végtelenig. long h=Utils.getdefaultHashMapCode(o); return Math.abs(((a*h) % p)% s);
Statikus megoldás 3. SplineHasher n Spline 2 szinten: u 1. Függvény: számok -> sorszámok u 2. Függvény: ekvidisztáns pontok (min..max) -> ? getHashCode kérésre a 2. Függvénynek a behelyettesített értékét adjuk, de ezt csak interpolálva tudjuk, az első függvényből.
Dinamikus megoldás. K. módszer n kb jegyű számok n Fa struktúra: u Minden csúcsnak 10 leszármazottja van (0..9 indexekkel) u Gyökérnek, ha van valamilyen leszármazottja, akkor és csaks akkor ilétezik olyan szám, amely azzal a számjeggyel kezdődik. u A többi csúcs is hasonlóan épül fel (a k-dik melységeben a k+1-dik számjegy az index.). n Lényeges műveletek: u Elem hozzáadása: az elem számjegyein végigiterálva lehet lépkedni a fán, szükség esetén létrehozva a hiányzó csúcsokat u Elem törlése: a keresés hasonló, majd ha nincs leszármazottja ki lehet törölni (nincs implementálva jelenleg, mivel nem tartozott a feladathoz) n Teljes értékű struktúraként használható, mivel nem csak egy sorszámot lehet hozzárendelni egy csúcshoz, hanem már eleve az értéket is, így nincs szükség a szokásos tömbre.
Statisztikák
Keretrendszer n Hasher, HasherFactory interface- ek, a HasherManager és Utils osztályok