Esercizio - Famiglia universale mod p mod m - verifica esaustiva e controesempio
Teoria: Hashing randomizzato - famiglie universali, filtri di Bloom e fingerprintHashing con catene e costo atteso 1+alfa; famiglie universali (probabilità di collisione al più 1/m) e costruzione h(x)=((ax+b) mod p) mod m con dimostrazione; hashing perfetto a due livelli (spazio lineare, ricerca O(1) nel caso peggiore); filtri di Bloom: falsi positivi (1-e^(-kn/m))^k e k ottimo (m/n) ln 2; fingerprint di stringhe e numero di bit necessari.Hashing randomizzato - famiglie universali, filtri di Bloom e fingerprint → (famiglie universali e la costruzione ), Tabelle hashTabella hash per implementare una mappa: funzione hash = hash code + compression function, bucket array, separate chaining; hash code per numeri e stringhe (polynomial, cyclic shift), division e MAD; load factor, complessità al caso pessimo Theta(n) e medio O(1+lambda), rehashing; esempio svolto con inserimenti e collisioni.Tabelle hash →.
Testo. Sia , e con , , , chiavi .
- Quante funzioni ha ? Elencare quelle che fanno collidere le chiavi e e calcolare .
- Contare esattamente le collisioni per ogni coppia di chiavi e verificare . Spiegare il valore osservato con il conteggio delle coppie , , .
- Se si ammette anche (così , funzioni) la famiglia resta universale?
- Per la variante con (senza ) e , verificare che per ogni la coppia è uniforme sulle coppie.
Soluzione
1. Funzioni e collisioni di . . Si ha e . Le coppie che le fanno coincidere sono cioè . Controlli a mano: : ; . : ; . : ; . : ; . Dunque .
2. Tutte le coppie e il conteggio. L'enumerazione esaustiva sulle coppie dà esattamente collisioni per ogni coppia. Spiegazione: la mappa è una biiezione tra le funzioni e le coppie ordinate con (dimostrazione nella teoria). Si ha collisione se . I resti in modulo formano le classi , , di taglia : le coppie ordinate , , nella stessa classe sono . Il limite generale è coppie, cioè : qui è largo perché le classi non sono tutte di taglia .
3. Con non è più universale. Per la funzione è costante in : fa collidere ogni coppia. Sono funzioni in più, quindi le collisioni di passano da a su funzioni: . La famiglia non è universale (la differenza è piccola ma basta a violare la definizione, e per piccolo rispetto a può essere grande). Per questo nella costruzione si impone . Il caso di senza , invece, è compatibile con la pairwise independence (punto 4).
4. Pairwise independence senza . Per e ogni la mappa da in sé è biiettiva: il sistema ha determinante invertibile mod . Quindi ognuna delle coppie compare esattamente una volta e per ogni . L'enumerazione conferma, per tutte le coppie ordinate di chiavi distinte. Questa è una famiglia a coppie indipendente, più forte della universale; il finale poi riduce il campo ma non garantisce uniformità esatta (se non è multiplo di le classi hanno taglie diverse).
Codice di verifica
from collections import Counter
p, m = 7, 3
def h(a, b, x): return ((a * x + b) % p) % m
print([(a, b) for a in range(1, p) for b in range(p) if h(a, b, 1) == h(a, b, 2)])
cont = Counter(sum(h(a, b, x) == h(a, b, y) for a in range(1, p) for b in range(p))
for x in range(p) for y in range(x + 1, p))
print(cont) # tutte le 21 coppie: 10 collisioni su 42
print(sum(h(a, b, 5) == h(a, b, 6) for a in range(p) for b in range(p)), "su", p * p) # con a = 0
q = 5 # variante senza mod m
ok = all(Counter(((a * x + b) % q, (a * y + b) % q) for a in range(q) for b in range(q)).most_common(1)[0][1] == 1
for x in range(q) for y in range(q) if x != y)
print(ok)Risultato: la lista delle coppie, Counter({10: 21}), 17 su 49, True.
Versione ripasso
- Famiglia. , , : funzioni. Collisione per : (Hashing randomizzato - famiglie universali, filtri di Bloom e fingerprintHashing con catene e costo atteso 1+alfa; famiglie universali (probabilità di collisione al più 1/m) e costruzione h(x)=((ax+b) mod p) mod m con dimostrazione; hashing perfetto a due livelli (spazio lineare, ricerca O(1) nel caso peggiore); filtri di Bloom: falsi positivi (1-e^(-kn/m))^k e k ottimo (m/n) ln 2; fingerprint di stringhe e numero di bit necessari.Hashing randomizzato - famiglie universali, filtri di Bloom e fingerprint →).
- Tutte le coppie. Ogni coppia di chiavi collide in funzioni su . Perché: , , biiezione; classi mod di di taglie : coppie ordinate con . Limite generale , .
- Con . Le funzioni costanti fanno collidere ogni coppia: , la famiglia non è più universale; per questo .
- Variante senza (, ): biiezione (determinante ), ogni coppia ha probabilità : indipendente a coppie.
- Errori tipici. Includere ; credere che il limite sia sempre stretto; scambiare universale (solo collisioni) con a coppie indipendente (distribuzione congiunta uniforme).