Esercizio - Union bound e inclusione-esclusione, due dadi e collisioni di una funzione hash
Testo.
- Si lanciano due dadi equi. : il primo dà ; : il secondo dà ; : la somma è . Calcolare con l'inclusione-esclusione e confrontarla con la somma delle probabilità e con la somma meno le coppie.
- Si inseriscono chiavi in una tabella con celle, ogni chiave in una cella uniforme e indipendente. Con l'union bound, qual è il massimo per cui ? Quanto vale la probabilità vera per quell' e qual è il massimo per il valore vero?
- Quante celle servono per chiavi e probabilità di collisione ?
Teoria: Union bound e verifica randomizzata - identità polinomiali e prodotti di matriciSpazi discreti richiamati; inclusione-esclusione (con le troncate di Bonferroni) e union bound Pr[unione] ≤ somma, valido senza indipendenza e stretto quando gli eventi sono rari (collisioni: C(n,2)/m). Principio delle decisioni differite: si fissa tutto tranne una scelta casuale e si limita la probabilità su quella. Lemma di Schwartz-Zippel: un polinomio non nullo di grado totale d, valutato in un punto di S^n scelto uniformemente, si annulla con prob ≤ d/|S| (induzione sul numero di variabili); test di identità polinomiale con errore unilaterale, ripetuto (d/|S|)^k. Freivalds: per verificare AB=C si controlla A(Br)=Cr con r in {0,1}^n in tempo O(n^2), errore ≤ 1/2 (stretto), 2^-k con k prove. Fingerprint: due stringhe di n bit si confrontano con a mod p per un primo casuale p ≤ M, errore ≤ n/π(M).Union bound e verifica randomizzata - identità polinomiali e prodotti di matrici → (sezione 1); 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 →.
Soluzione
Punto 1. Spazio: coppie equiprobabili. : per gli esiti sono , sei su .
- : .
- : ; : .
- : .
Inclusione-esclusione: Conteggio diretto: la somma delle probabilità è un maggiorante (union bound); somma meno le coppie è un minorante; il valore vero sta in mezzo (disuguaglianze di Bonferroni).
Punto 2. Per ogni coppia di chiavi l'evento «stessa cella» ha probabilità . L'union bound sulle coppie dà . Si vuole , cioè . Con : ; con : . Quindi (bound ).
- Probabilità vera per : , praticamente uguale al bound (eventi rari).
- Il valore vero rimane fino a () e supera per : il massimo vero è , uno in più del bound.
Punto 3. dà : (bound , valore vero ). La minima per il valore vero è , appena in meno ( celle su ): qui l'union bound è quasi esatto.
Risultati: (con e come maggiorante e minorante); (vero ); .
from fractions import Fraction as F
from math import comb
import itertools
S = list(itertools.product(range(1, 7), repeat=2))
P = lambda f: F(sum(1 for o in S if f(o)), 36)
A = lambda o: o[0] == 6; B = lambda o: o[1] == 6; C = lambda o: o[0] + o[1] >= 10
print(P(lambda o: A(o) or B(o) or C(o)), P(A) + P(B) + P(C), P(A) + P(B) + P(C) - F(7, 36)) # 1/3 1/2 11/36
def vero(n, m):
q = 1.0
for i in range(n): q *= (m - i) / m
return 1 - q
print(comb(141, 2) / 1e6, vero(141, 10**6), vero(142, 10**6), vero(143, 10**6))
print(comb(1000, 2) / 5e8, vero(1000, 5 * 10**8))Versione ripasso
- Dadi: ; , , . Unione ; maggiorante , minorante (Bonferroni).
- Union bound hash: , perché ogni coppia collide con probabilità (Union bound e verifica randomizzata - identità polinomiali e prodotti di matriciSpazi discreti richiamati; inclusione-esclusione (con le troncate di Bonferroni) e union bound Pr[unione] ≤ somma, valido senza indipendenza e stretto quando gli eventi sono rari (collisioni: C(n,2)/m). Principio delle decisioni differite: si fissa tutto tranne una scelta casuale e si limita la probabilità su quella. Lemma di Schwartz-Zippel: un polinomio non nullo di grado totale d, valutato in un punto di S^n scelto uniformemente, si annulla con prob ≤ d/|S| (induzione sul numero di variabili); test di identità polinomiale con errore unilaterale, ripetuto (d/|S|)^k. Freivalds: per verificare AB=C si controlla A(Br)=Cr con r in {0,1}^n in tempo O(n^2), errore ≤ 1/2 (stretto), 2^-k con k prove. Fingerprint: due stringhe di n bit si confrontano con a mod p per un primo casuale p ≤ M, errore ≤ n/π(M).Union bound e verifica randomizzata - identità polinomiali e prodotti di matrici →).
- , : (bound , vero ); il vero arriva a ().
- , : , scelto (vero ; minimo vero ).
- Errori tipici: sommare le probabilità senza dire che è un maggiorante; scordare l'intersezione tripla; contare invece di .