Salta al contenuto
Note per Studenti Union bound e verifica randomizzata - identità polinomiali e prodotti di matrici

Union bound e verifica randomizzata - identità polinomiali e prodotti di matrici

In questa pagina 6

Modello e classi (Monte Carlo a errore unilaterale, amplificazione): Algoritmi randomizzati - Monte Carlo, Las Vegas e amplificazioneUn algoritmo randomizzato usa bit casuali indipendenti; la probabilità è sulle scelte dell'algoritmo, mai sull'input (garanzia per ogni input). Las Vegas: sempre corretto, tempo aleatorio (conta il tempo atteso). Monte Carlo: tempo fisso, risposta sbagliata con probabilità limitata; errore unilaterale (RP: accetta solo se x sta nel linguaggio, accetta con prob almeno 1/2) o bilaterale (BPP: giusto con prob almeno 2/3). ZPP = RP ∩ co-RP = Las Vegas con tempo atteso polinomiale. Amplificazione: unilaterale, k ripetizioni indipendenti, errore (1-p)^k ≤ e^(-pk), serve k ≥ ln(1/ε)/p; bilaterale, voto di maggioranza su k esecuzioni, errore binomiale esatto, esponenziale in k (Chernoff, e^(-k/18) per p=2/3) mentre Chebyshev dà solo 8/k. Las Vegas -> Monte Carlo: interrompere a c volte il tempo atteso (Markov, errore ≤ 1/c). Monte Carlo -> Las Vegas: solo se la risposta si verifica in fretta. Esempio: Miller-Rabin, errore ≤ 1/4 per esecuzione.Algoritmi randomizzati - Monte Carlo, Las Vegas e amplificazione →. Base: Spazi di probabilità discreti e uniformiIn uno spazio discreto la probabilità è determinata dalla densità discreta p(ω) = P({ω}), con somma 1, e P(A) è la somma di p(ω) sugli esiti di A; negli spazi uniformi (esiti equiprobabili) P(A) = |A| / |Ω|, casi favorevoli su casi possibili.Spazi di probabilità discreti e uniformi →, Misura di probabilità e sue proprietàUna misura di probabilità è una funzione P: F → [0,1] con P(Ω) = 1 e σ-additiva; ne seguono P(Aᶜ) = 1 − P(A), P(∅) = 0, monotonia, P(A ∪ B) = P(A) + P(B) − P(A ∩ B) e la formula di inclusione-esclusione.Misura di probabilità e sue proprietà →, Indipendenza di eventiA e B sono indipendenti se P(A ∩ B) = P(A) P(B), cioè se sapere che uno si è verificato non cambia la probabilità dell'altro; l'indipendenza passa ai complementari, non va confusa con l'incompatibilità, e per più eventi va richiesta su ogni sottofamiglia.Indipendenza di eventi →.

1. Spazi discreti, inclusione-esclusione e union bound

Uno spazio discreto è un insieme finito o numerabile Ω\Omega con pesi Pr⁡(ω)≥0\Pr(\omega)\ge0 di somma 11; un evento è A⊆ΩA\subseteq\Omega e Pr⁡(A)=∑ω∈APr⁡(ω)\Pr(A)=\sum_{\omega\in A}\Pr(\omega). Valgono monotonia (A⊆B⇒Pr⁡(A)≤Pr⁡(B)A\subseteq B\Rightarrow\Pr(A)\le\Pr(B)), complemento Pr⁡(A‾)=1−Pr⁡(A)\Pr(\overline A)=1-\Pr(A) e, per eventi disgiunti, Pr⁡(⋃Ai)=∑Pr⁡(Ai)\Pr(\bigcup A_i)=\sum\Pr(A_i).

Inclusione-esclusione. Per tre eventi Pr⁡(A∪B∪C)=∑Pr⁡(Ai)−∑i<jPr⁡(Ai∩Aj)+Pr⁡(A∩B∩C),\Pr(A\cup B\cup C)=\sum\Pr(A_i)-\sum_{i<j}\Pr(A_i\cap A_j)+\Pr(A\cap B\cap C), e in generale la somma alternata sulle intersezioni di 1,2,3,…1,2,3,\dots eventi. Fermarsi dopo un numero dispari di termini dà un maggiorante, dopo un numero pari un minorante (disuguaglianze di Bonferroni).

Esempio. Si lanciano due dadi. AA: il primo dà 66; BB: il secondo dà 66; CC: la somma è ≥10\ge10. Allora Pr⁡(A)=Pr⁡(B)=Pr⁡(C)=16\Pr(A)=\Pr(B)=\Pr(C)=\frac16, Pr⁡(A∩B)=136\Pr(A\cap B)=\frac1{36}, Pr⁡(A∩C)=Pr⁡(B∩C)=112\Pr(A\cap C)=\Pr(B\cap C)=\frac1{12} (per A∩CA\cap C servono (6,4),(6,5),(6,6)(6,4),(6,5),(6,6)), Pr⁡(A∩B∩C)=136\Pr(A\cap B\cap C)=\frac1{36}. Quindi Pr⁡(A∪B∪C)=12−736+136=1236=13.\Pr(A\cup B\cup C)=\tfrac12-\tfrac7{36}+\tfrac1{36}=\tfrac{12}{36}=\tfrac13 . La somma sola 12\frac12 è un maggiorante, la somma meno le coppie 1136\frac{11}{36} un minorante, e il valore vero 1236\frac{12}{36} sta in mezzo.

Teorema (union bound). Per eventi A1,A2,…A_1,A_2,\dots qualunque (finiti o numerabili) Pr⁡(⋃iAi)≤∑iPr⁡(Ai).\Pr\Big(\bigcup_i A_i\Big)\le\sum_i\Pr(A_i).

Dimostrazione. Si pone Bi=Ai∖⋃j<iAjB_i=A_i\setminus\bigcup_{j<i}A_j. Gli BiB_i sono disgiunti, Bi⊆AiB_i\subseteq A_i e ⋃Bi=⋃Ai\bigcup B_i=\bigcup A_i. Quindi Pr⁡(⋃Ai)=∑Pr⁡(Bi)≤∑Pr⁡(Ai)\Pr(\bigcup A_i)=\sum\Pr(B_i)\le\sum\Pr(A_i) per monotonia. □\square

Non richiede nessuna indipendenza: è lo strumento per dire «nessun evento cattivo accade», sommando le probabilità di ciascuno. È stretto quando gli eventi sono rari e quasi disgiunti, largo quando si sovrappongono molto.

Collisioni in una tabella hash. Si inseriscono nn chiavi in mm celle, ciascuna scelta uniformemente e in modo indipendente (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 →). Per ogni coppia {i,j}\{i,j\} l'evento EijE_{ij} «le chiavi ii e jj cadono nella stessa cella» ha probabilità 1/m1/m (data la cella di ii, jj deve coincidere). Le coppie sono (n2)\binom n2, quindi Pr⁡[c’eˋ una collisione]≤(n2)1m.\Pr[\text{c'è una collisione}]\le\binom n2\frac1m . Con n=141n=141, m=106m=10^6: bound 0,009870{,}00987, valore esatto 1−∏i<n(1−i/m)=0,009821-\prod_{i<n}(1-i/m)=0{,}00982 (quasi uguali: le collisioni sono rare). Con n=23n=23, m=365m=365: bound 0,6930{,}693, esatto 0,5070{,}507 (largo, perché molte collisioni coincidono; vedi Palline e urne - compleanno, carico massimo e approssimazione di PoissonModello palline e urne (m palline, n urne, scelte indipendenti e uniformi): paradosso del compleanno con soglia sqrt(2 n ln 2), urne vuote attese n e^(-m/n), carico massimo ln n / ln ln n con dimostrazione (first moment e union bound), approssimazione di Poisson con il fattore e sqrt(m), potere delle due scelte (ln ln n / ln 2).Palline e urne - compleanno, carico massimo e approssimazione di Poisson →).

2. Principio delle decisioni differite

Se le scelte casuali r1,…,rnr_1,\dots,r_n sono indipendenti, si può immaginare di fissare tutte tranne una e di estrarre l'ultima soltanto alla fine. Formalmente, per ogni evento EE Pr⁡[E]=∑r−jPr⁡[r−j]⋅Pr⁡[E∣r−j],\Pr[E]=\sum_{r_{-j}}\Pr[r_{-j}]\cdot\Pr[E\mid r_{-j}] , con r−jr_{-j} le scelte diverse da rjr_j (Formula delle probabilità totali e formula di BayesSe (A_i) è una partizione di Ω, P(B) = Σ P(B ∣ A_i) P(A_i) (probabilità totali); la formula di Bayes inverte il condizionamento: P(A_k ∣ B) = P(B ∣ A_k) P(A_k) / P(B).Formula delle probabilità totali e formula di Bayes →). Se per ogni valore fissato di r−jr_{-j} si prova Pr⁡[E∣r−j]≤q\Pr[E\mid r_{-j}]\le q, allora Pr⁡[E]≤q\Pr[E]\le q. È la tecnica di tutte le dimostrazioni di questa nota.

3. Lemma di Schwartz-Zippel e identità polinomiali

Teorema (Schwartz-Zippel). Sia P(x1,…,xn)P(x_1,\dots,x_n) un polinomio non nullo di grado totale dd su un campo F\mathbb F (CampiUn campo è un insieme di numeri con somma e prodotto che rispettano le regole usuali (associativa, commutativa, neutri, opposti, inversi, distributiva): è ciò che serve per risolvere le equazioni di primo grado. Esempi: Q, R, C e i campi finiti.Campi →) e sia S⊆FS\subseteq\mathbb F finito. Se r1,…,rnr_1,\dots,r_n sono scelti uniformemente e indipendentemente in SS, allora Pr⁡[P(r1,…,rn)=0]≤d∣S∣.\Pr[P(r_1,\dots,r_n)=0]\le\frac d{|S|}.

Dimostrazione. Per induzione sul numero nn di variabili.

  • n=1n=1. Un polinomio non nullo di grado dd in un campo ha al più dd radici, quindi si annulla in al più dd punti di SS: probabilità ≤d/∣S∣\le d/|S|.
  • Passo. Si scrive P=∑i=0kx1 iPi(x2,…,xn)P=\sum_{i=0}^{k}x_1^{\,i}P_i(x_2,\dots,x_n), con kk la massima potenza di x1x_1 presente, cioè Pk≢0P_k\not\equiv0. Il grado totale di PkP_k è ≤d−k\le d-k. Sia E1E_1 l'evento Pk(r2,…,rn)=0P_k(r_2,\dots,r_n)=0: per ipotesi induttiva Pr⁡[E1]≤(d−k)/∣S∣\Pr[E_1]\le(d-k)/|S|. Se E1E_1 non accade, il polinomio in una variabile Q(x1)=P(x1,r2,…,rn)Q(x_1)=P(x_1,r_2,\dots,r_n) ha coefficiente direttivo Pk(r2,…,rn)≠0P_k(r_2,\dots,r_n)\ne0: è non nullo di grado kk. Per decisioni differite, r1r_1 è indipendente da r2,…,rnr_2,\dots,r_n, quindi Pr⁡[Q(r1)=0∣E1‾]≤k/∣S∣\Pr[Q(r_1)=0\mid\overline{E_1}]\le k/|S|. Allora Pr⁡[P(r)=0]≤Pr⁡[E1]+Pr⁡[P(r)=0∣E1‾]≤d−k∣S∣+k∣S∣=d∣S∣. □\Pr[P(r)=0]\le\Pr[E_1]+\Pr[P(r)=0\mid\overline{E_1}]\le\frac{d-k}{|S|}+\frac k{|S|}=\frac d{|S|}.\ \square (Se k=0k=0 la variabile x1x_1 non compare e basta l'ipotesi induttiva.)

Il bound è ottimo: P=∏i=1d(x−si)P=\prod_{i=1}^d(x-s_i) con si∈Ss_i\in S distinti si annulla in dd punti di SS, probabilità esatta d/∣S∣d/|S|.

Test di identità polinomiale

Dato PP come «scatola nera» (o come formula/circuito, magari di grado esponenziale se espanso), si vuole sapere se P≡0P\equiv0. Algoritmo: scegliere r∈Snr\in S^n a caso, calcolare P(r)P(r); se P(r)≠0P(r)\ne0 rispondere NON NULLO (certo), altrimenti rispondere NULLO. L'errore è unilaterale: sbaglia solo se P≢0P\not\equiv0 e P(r)=0P(r)=0, con probabilità ≤d/∣S∣\le d/|S|. Con ∣S∣≥2d|S|\ge2d l'errore è ≤1/2\le1/2; con kk prove indipendenti ≤(d/∣S∣)k\le(d/|S|)^k (Algoritmi randomizzati - Monte Carlo, Las Vegas e amplificazioneUn algoritmo randomizzato usa bit casuali indipendenti; la probabilità è sulle scelte dell'algoritmo, mai sull'input (garanzia per ogni input). Las Vegas: sempre corretto, tempo aleatorio (conta il tempo atteso). Monte Carlo: tempo fisso, risposta sbagliata con probabilità limitata; errore unilaterale (RP: accetta solo se x sta nel linguaggio, accetta con prob almeno 1/2) o bilaterale (BPP: giusto con prob almeno 2/3). ZPP = RP ∩ co-RP = Las Vegas con tempo atteso polinomiale. Amplificazione: unilaterale, k ripetizioni indipendenti, errore (1-p)^k ≤ e^(-pk), serve k ≥ ln(1/ε)/p; bilaterale, voto di maggioranza su k esecuzioni, errore binomiale esatto, esponenziale in k (Chernoff, e^(-k/18) per p=2/3) mentre Chebyshev dà solo 8/k. Las Vegas -> Monte Carlo: interrompere a c volte il tempo atteso (Markov, errore ≤ 1/c). Monte Carlo -> Las Vegas: solo se la risposta si verifica in fretta. Esempio: Miller-Rabin, errore ≤ 1/4 per esecuzione.Algoritmi randomizzati - Monte Carlo, Las Vegas e amplificazione →).

Esempio. Si lavora in F101\mathbb F_{101} (numeri modulo 101101, primo) con S=F101S=\mathbb F_{101} e il punto (x,y)=(37,58)(x,y)=(37,58).

  • Identità vera: (x+y)3=x3+3x2y+3xy2+y3(x+y)^3=x^3+3x^2y+3xy^2+y^3. Il lato sinistro è 953≡8795^3\equiv87 e il destro è 8787: coincidono (per ogni punto, perché la differenza è il polinomio nullo).
  • Identità falsa: (x+y)3=x3+y3(x+y)^3=x^3+y^3. La differenza è 3xy(x+y)3xy(x+y), di grado 33. In (37,58)(37,58) si ha x3+y3≡32≠87x^3+y^3\equiv32\ne87: il test la smaschera. Gli zeri della differenza in F1012\mathbb F_{101}^2 sono i punti con x=0x=0, y=0y=0 oppure x+y≡0x+y\equiv0: 3⋅101−2=3013\cdot101-2=301 su 1012=10201101^2=10201, cioè 0,02950{,}0295, quasi uguale al bound 3/101=0,02973/101=0{,}0297.

Applicazione: accoppiamento perfetto. Dato un grafo bipartito con n+nn+n vertici (Grafi - definizioni e proprietàGrafo G=(V,E) diretto e non diretto, grafo semplice e pesato; incidenza, adiacenza, grado; cammini, cicli, sottografi, grafi connessi e componenti connesse; alberi liberi, foreste, spanning tree e spanning forest; proprietà con dimostrazioni (somma dei gradi = 2m, m <= n(n-1)/2, alberi m = n-1, connessi m >= n-1, foreste m <= n-1).Grafi - definizioni e proprietà →), si costruisce la matrice MM n×nn\times n con Mij=xijM_{ij}=x_{ij} (variabile) se ii-jj è un arco e 00 altrimenti. Il determinante (Permutazioni e definizione di determinanteIl determinante di una matrice quadrata è la somma, su tutte le n! permutazioni, dei prodotti di n elementi presi uno per riga e uno per colonna, con segno + o − secondo la parità della permutazione; per 2×2 è ad − bc, per 3×3 c'è la regola di Sarrus, per le triangolari è il prodotto della diagonale.Permutazioni e definizione di determinante →) è la somma, con segni, dei prodotti delle permutazioni, e ogni accoppiamento perfetto dà un monomio diverso: det⁡M≢0\det M\not\equiv0 se e solo se esiste un accoppiamento perfetto. det⁡M\det M ha grado nn: si valuta in un punto casuale modulo un primo grande con l'eliminazione di Gauss (Eliminazione di GaussCon tre operazioni elementari sulle righe (scambio, moltiplicazione per uno scalare non nullo, somma di un multiplo di un'altra riga) ogni matrice si riduce a scala senza cambiare il rango; serve a calcolare ranghi, risolvere sistemi, trovare relazioni di dipendenza e matrici che riducono a scala.Eliminazione di Gauss →), in O(n3)O(n^3). Per n=2n=2: archi 1-1,1-2,2-21\text{-}1,1\text{-}2,2\text{-}2 danno det⁡(x11x120x22)=x11x22≠0\det\begin{pmatrix}x_{11}&x_{12}\\0&x_{22}\end{pmatrix}=x_{11}x_{22}\ne0 (accoppiamento {11,22}\{11,22\}); archi 1-1,2-11\text{-}1,2\text{-}1 danno det⁡(x110x210)=0\det\begin{pmatrix}x_{11}&0\\x_{21}&0\end{pmatrix}=0 (nessun accoppiamento).

python
import random

P = 101                                           # campo F_101

def vero(x, y):  return pow(x + y, 3, P) == (x**3 + 3*x*x*y + 3*x*y*y + y**3) % P
def falso(x, y): return pow(x + y, 3, P) == (x**3 + y**3) % P

def pit(identita, prove=1):                       # True = "identita' valida" (errore unilaterale)
    return all(identita(random.randrange(P), random.randrange(P)) for _ in range(prove))

print(pit(vero, 10), pit(falso, 10))              # True False (il secondo sbaglia con prob <= (3/101)^10)

4. Algoritmo di Freivalds: verificare un prodotto di matrici

Problema. Date A,B,CA,B,C matrici n×nn\times n, è vero che AB=CAB=C (Operazioni tra matriciLe matrici m×n formano uno spazio vettoriale (somma e prodotto per scalare elemento per elemento); il prodotto righe per colonne corrisponde alla composizione di funzioni lineari, è associativo ma non commutativo; la trasposta scambia righe e colonne e (AB)^T = B^T A^T.Operazioni tra matrici →)? Calcolare ABAB costa O(n3)O(n^3) con l'algoritmo ovvio (e circa n2,37n^{2{,}37} con i migliori noti, Prodotto di matrici - algoritmo iterativo e ricorsivo a blocchimodello di costo sulle matrici n x n (operazioni tra scalari, taglia n oppure N = n^2); somma in n^2 operazioni (ottima); prodotto righe per colonne iterativo con costo esatto 2n^3 - n^2; proprietà frattale del prodotto a blocchi dimostrata sugli indici; algoritmo ricorsivo RMUL con T(n) = 8T(n/2) + n^2, Theta(n^3) e soluzione esatta 2n^3 - n^2 per induzione e per srotolamento: fa le stesse operazioni dell'iterativo.Prodotto di matrici - algoritmo iterativo e ricorsivo a blocchi →). Freivalds lo verifica in O(n2)O(n^2).

Algoritmo (Freivalds). Si sceglie r∈{0,1}nr\in\{0,1\}^n uniformemente (ogni componente 00 o 11 con probabilità 1/21/2, indipendenti). Si calcola y=A(Br)y=A(Br) (due prodotti matrice-vettore, 2n22n^2 operazioni) e z=Crz=Cr (n2n^2). Si risponde AB=CAB=C se y=zy=z, altrimenti AB≠CAB\ne C.

Teorema. Se AB=CAB=C risponde sempre giusto. Se AB≠CAB\ne C risponde AB=CAB=C (errore) con probabilità ≤1/2\le1/2.

Dimostrazione. Se AB=CAB=C allora A(Br)=(AB)r=CrA(Br)=(AB)r=Cr per ogni rr. Se AB≠CAB\ne C la matrice D=AB−CD=AB-C ha un elemento Dij≠0D_{ij}\ne0. L'algoritmo sbaglia solo se Dr=0Dr=0, e in particolare solo se (Dr)i=∑lDilrl=0(Dr)_i=\sum_lD_{il}r_l=0. Per decisioni differite si fissano tutte le componenti rlr_l con l≠jl\ne j: la somma diventa Dijrj+cD_{ij}r_j+c con cc numero fisso. Poiché rj∈{0,1}r_j\in\{0,1\}, i due valori cc e c+Dijc+D_{ij} sono diversi, quindi al più uno annulla la somma: Pr⁡[(Dr)i=0∣r−j]≤1/2\Pr[(Dr)_i=0\mid r_{-j}]\le1/2 per ogni r−jr_{-j}, e perciò Pr⁡[Dr=0]≤1/2\Pr[Dr=0]\le1/2. □\square

È un caso particolare di Schwartz-Zippel con S={0,1}S=\{0,1\} e grado 11. Il bound 1/21/2 è stretto: se DD ha un solo elemento non nullo DijD_{ij}, Dr=0Dr=0 equivale a rj=0r_j=0, probabilità esatta 1/21/2. Con kk prove indipendenti l'errore è ≤2−k\le2^{-k} e il costo O(kn2)O(kn^2); usando r∈Snr\in S^n con ∣S∣|S| elementi l'errore scende a 1/∣S∣1/|S|.

A mano, n=3n=3. Siano A=(120312011), B=(201110132), AB=(421977242),A=\begin{pmatrix}1&2&0\\3&1&2\\0&1&1\end{pmatrix},\ B=\begin{pmatrix}2&0&1\\1&1&0\\1&3&2\end{pmatrix},\ AB=\begin{pmatrix}4&2&1\\9&7&7\\2&4&2\end{pmatrix}, e sia CC uguale a ABAB tranne C12=3C_{12}=3 (invece di 22), quindi D12=−1D_{12}=-1. Si provano tutti gli 88 vettori rr (colonna BrBr, poi A(Br)A(Br) confrontato con CrCr):

rr BrBr A(Br)A(Br) CrCr esito
(0,0,0)(0,0,0) (0,0,0)(0,0,0) (0,0,0)(0,0,0) (0,0,0)(0,0,0) passa (errore)
(0,0,1)(0,0,1) (1,0,2)(1,0,2) (1,7,2)(1,7,2) (1,7,2)(1,7,2) passa (errore)
(0,1,0)(0,1,0) (0,1,3)(0,1,3) (2,7,4)(2,7,4) (3,7,4)(3,7,4) scoperto
(0,1,1)(0,1,1) (1,1,5)(1,1,5) (3,14,6)(3,14,6) (4,14,6)(4,14,6) scoperto
(1,0,0)(1,0,0) (2,1,1)(2,1,1) (4,9,2)(4,9,2) (4,9,2)(4,9,2) passa (errore)
(1,0,1)(1,0,1) (3,1,3)(3,1,3) (5,16,4)(5,16,4) (5,16,4)(5,16,4) passa (errore)
(1,1,0)(1,1,0) (2,2,4)(2,2,4) (6,16,6)(6,16,6) (7,16,6)(7,16,6) scoperto
(1,1,1)(1,1,1) (3,2,6)(3,2,6) (7,23,8)(7,23,8) (8,23,8)(8,23,8) scoperto

L'errore avviene per i 44 vettori con r2=0r_2=0: probabilità esatta 4/8=1/24/8=1/2, come previsto dal caso a un solo elemento sbagliato.

python
import random

def freivalds(A, B, C, k=20):                     # False => AB != C (certo); True => AB == C con errore <= 2^-k
    n = len(A)
    mv = lambda M, v: [sum(M[i][j] * v[j] for j in range(n)) for i in range(n)]
    for _ in range(k):
        r = [random.randint(0, 1) for _ in range(n)]
        if mv(A, mv(B, r)) != mv(C, r):
            return False
    return True

A = [[1, 2, 0], [3, 1, 2], [0, 1, 1]]; B = [[2, 0, 1], [1, 1, 0], [1, 3, 2]]
AB = [[4, 2, 1], [9, 7, 7], [2, 4, 2]]; C = [row[:] for row in AB]; C[0][1] = 3
print(freivalds(A, B, AB), freivalds(A, B, C))   # True False

5. Fingerprint: confrontare stringhe con poca comunicazione

Alice ha una stringa aa di nn bit, Bob una stringa bb; vogliono sapere se a=ba=b scambiando pochi bit. Deterministicamente servono nn bit. Con la randomizzazione: Alice sceglie un primo casuale p≤Mp\le M e manda (p, a mod p)(p,\ a\bmod p), interpretando aa come intero; Bob risponde che sono uguali se a mod p=b mod pa\bmod p=b\bmod p.

Teorema. Se a=ba=b l'esito è sempre giusto. Se a≠ba\ne b l'errore ha probabilità ≤n/π(M)\le n/\pi(M), dove π(M)≈M/ln⁡M\pi(M)\approx M/\ln M è il numero di primi ≤M\le M.

Dimostrazione. L'errore avviene se pp divide d=∣a−b∣d=|a-b|, con 1≤d<2n1\le d<2^n. Ogni primo divisore è ≥2\ge2, quindi dd ha al più nn divisori primi distinti (il loro prodotto è ≤d<2n\le d<2^n). Scegliendo pp uniforme tra i π(M)\pi(M) primi, la probabilità di cadere in uno di quegli ≤n\le n è ≤n/π(M)\le n/\pi(M). □\square

Numeri. Con n=1000n=1000 bit e M=106M=10^6: π(M)=78498\pi(M)=78498, errore ≤1000/78498=0,0127\le1000/78498=0{,}0127 (più finemente: il prodotto dei 130130 primi più piccoli supera già 210002^{1000}, quindi dd ha al più 129129 divisori primi e l'errore è ≤129/78498=0,0016\le129/78498=0{,}0016). Si comunicano circa 2log⁡2M≈402\log_2M\approx40 bit invece di 10001000. Con M=n2M=n^2 l'errore è circa 2ln⁡n/n2\ln n/n e tende a 00. Un tipico uso è il confronto di una finestra di testo con un pattern (Rabin-Karp): si confrontano le impronte e solo in caso di uguaglianza si verifica carattere per carattere. Altre impronte (famiglie universali, Bloom): 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 →.

Esempio piccolo. a=181=101101012a=181=10110101_2, b=165=101001012b=165=10100101_2, d=16=24d=16=2^4 (unico primo: 22). Con pp scelto tra {2,3,5,7,11,13}\{2,3,5,7,11,13\} i resti di aa sono 1,1,1,6,5,121,1,1,6,5,12 e quelli di bb sono 1,0,0,4,0,91,0,0,4,0,9: coincidono solo per p=2p=2, errore 1/61/6. Con b′=151b'=151, d=30=2⋅3⋅5d=30=2\cdot3\cdot5: coincidono per p=2,3,5p=2,3,5, errore 3/63/6.

Domande d'esame

  1. Dimostra l'union bound. Si disgiunge: Bi=Ai∖⋃j<iAjB_i=A_i\setminus\bigcup_{j<i}A_j, ⋃Bi=⋃Ai\bigcup B_i=\bigcup A_i, Pr⁡(Bi)≤Pr⁡(Ai)\Pr(B_i)\le\Pr(A_i).
  2. Enuncia Schwartz-Zippel e dimostra il caso n=1n=1. Vedi la sezione 3: un polinomio non nullo di grado dd ha al più dd radici, probabilità ≤d/∣S∣\le d/|S|.
  3. Perché Freivalds ha errore ≤1/2\le1/2? Con D=AB−C≠0D=AB-C\ne0 e Dij≠0D_{ij}\ne0 si fissano le rlr_l, l≠jl\ne j: i due valori di rjr_j danno due valori diversi di (Dr)i(Dr)_i, e al più uno è 00.
  4. Quanti primi casuali ≤106\le10^6 servono per far scendere l'errore del fingerprint di stringhe da 10001000 bit sotto 10−610^{-6}? Una prova ha errore ≤0,0127\le0{,}0127; con kk prove indipendenti 0,0127k≤10−60{,}0127^k\le10^{-6} dà k=4k=4 (con il bound più fine 0,00160{,}0016 ne bastano 33).

Versione ripasso

  • Spazi discreti: Pr⁡(A)=∑ω∈APr⁡(ω)\Pr(A)=\sum_{\omega\in A}\Pr(\omega); monotonia, complemento, somma per disgiunti (Misura di probabilità e sue proprietàUna misura di probabilità è una funzione P: F → [0,1] con P(Ω) = 1 e σ-additiva; ne seguono P(Aᶜ) = 1 − P(A), P(∅) = 0, monotonia, P(A ∪ B) = P(A) + P(B) − P(A ∩ B) e la formula di inclusione-esclusione.Misura di probabilità e sue proprietà →). Inclusione-esclusione per tre eventi: somme alternate; fermarsi a un numero dispari di termini dà un maggiorante, pari un minorante. Dadi con A,B,CA,B,C sopra: 12−736+136=13\frac12-\frac7{36}+\frac1{36}=\frac13, minorante 1136\frac{11}{36}.
  • Union bound: Pr⁡(⋃Ai)≤∑Pr⁡(Ai)\Pr(\bigcup A_i)\le\sum\Pr(A_i), senza indipendenza. Prova: Bi=Ai∖⋃j<iAjB_i=A_i\setminus\bigcup_{j<i}A_j disgiunti, Bi⊆AiB_i\subseteq A_i. Collisioni: (n2)/m\binom n2/m; n=141n=141, m=106m=10^6: 0,009870{,}00987 contro esatto 0,009820{,}00982; n=23n=23, m=365m=365: 0,6930{,}693 contro 0,5070{,}507.
  • Decisioni differite: fissare tutte le scelte tranne una e limitare la probabilità condizionata su quella; se vale ≤q\le q per ogni valore fissato, vale ≤q\le q in totale (Formula delle probabilità totali e formula di BayesSe (A_i) è una partizione di Ω, P(B) = Σ P(B ∣ A_i) P(A_i) (probabilità totali); la formula di Bayes inverte il condizionamento: P(A_k ∣ B) = P(B ∣ A_k) P(A_k) / P(B).Formula delle probabilità totali e formula di Bayes →).
  • Schwartz-Zippel: P≢0P\not\equiv0 di grado totale dd, r∈Snr\in S^n uniforme: Pr⁡[P(r)=0]≤d/∣S∣\Pr[P(r)=0]\le d/|S|. Prova per induzione su nn: P=∑x1iPiP=\sum x_1^iP_i, Pk≢0P_k\not\equiv0 con deg⁡Pk≤d−k\deg P_k\le d-k; Pr⁡[Pk(r2..rn)=0]≤(d−k)/∣S∣\Pr[P_k(r_2..r_n)=0]\le(d-k)/|S|, altrimenti polinomio in x1x_1 di grado kk con ≤k\le k radici; somma d/∣S∣d/|S|. Ottimo per ∏(x−si)\prod(x-s_i).
  • Test di identità: valutare in un punto casuale, errore unilaterale ≤d/∣S∣\le d/|S|, con kk prove (d/∣S∣)k(d/|S|)^k. Esempio in F101\mathbb F_{101}: (x+y)3−(x3+y3)=3xy(x+y)(x+y)^3-(x^3+y^3)=3xy(x+y) ha 301/10201=0,0295301/10201=0{,}0295 zeri contro il bound 3/1013/101. Accoppiamento perfetto: det⁡\det della matrice di Edmonds ≢0\not\equiv0 sse esiste, grado nn, O(n3)O(n^3) modulo un primo.
  • Freivalds: r∈{0,1}nr\in\{0,1\}^n, confrontare A(Br)A(Br) con CrCr in O(n2)O(n^2); se AB≠CAB\ne C errore ≤1/2\le1/2 (prova con Dij≠0D_{ij}\ne0 e decisioni differite, stretto con un solo elemento sbagliato), 2−k2^{-k} con kk prove. Esempio 3×33\times3 con C12=3C_{12}=3: errore per i 44 vettori con r2=0r_2=0 su 88.
  • Fingerprint: a mod pa\bmod p con p≤Mp\le M primo casuale, errore ≤n/π(M)\le n/\pi(M) (ogni d<2nd<2^n ha ≤n\le n primi divisori). n=1000n=1000, M=106M=10^6: 0,01270{,}0127 (più fine 0,00160{,}0016), circa 4040 bit comunicati.
  • Dadi, dettaglio: Pr⁡(A∩C)=Pr⁡(B∩C)=3/36\Pr(A\cap C)=\Pr(B\cap C)=3/36 (per A∩CA\cap C: (6,4),(6,5),(6,6)(6,4),(6,5),(6,6)), Pr⁡(A∩B∩C)=1/36\Pr(A\cap B\cap C)=1/36.
  • Collisioni: Pr⁡[Eij]=1/m\Pr[E_{ij}]=1/m perché, data la cella di ii, la cella di jj deve coincidere; le coppie sono (n2)\binom n2.
  • Esempio F101\mathbb F_{101}, punto (37,58)(37,58): (x+y)3≡87(x+y)^3\equiv87 coincide con lo sviluppo, mentre x3+y3≡32≠87x^3+y^3\equiv32\ne87 smaschera l'identità falsa; zeri della differenza: x=0x=0, y=0y=0 o x+y≡0x+y\equiv0, cioè 3⋅101−2=3013\cdot101-2=301 punti.
  • Edmonds, n=2n=2: archi 1-1,1-2,2-21\text{-}1,1\text{-}2,2\text{-}2 danno det⁡=x11x22≠0\det=x_{11}x_{22}\ne0 (accoppiamento); archi 1-1,2-11\text{-}1,2\text{-}1 danno det⁡=0\det=0 (nessun accoppiamento).
  • Freivalds, 3×33\times3: con C12=3C_{12}=3 invece di 22 (quindi D12=−1D_{12}=-1) si scoprono gli rr con r2=1r_2=1: (0,1,0)(0,1,0) dà A(Br)=(2,7,4)≠Cr=(3,7,4)A(Br)=(2,7,4)\ne Cr=(3,7,4); (1,0,1)(1,0,1) non scopre nulla, A(Br)=Cr=(5,16,4)A(Br)=Cr=(5,16,4). Costo di una prova: 33 prodotti matrice-vettore, O(n2)O(n^2), contro O(n3)O(n^3) del prodotto.
  • Fingerprint, esempio piccolo: a=181a=181, b=165b=165, d=16=24d=16=2^4: con primi in {2,3,5,7,11,13}\{2,3,5,7,11,13\} i resti coincidono solo per p=2p=2 (errore 1/61/6); con b′=151b'=151, d=30=2⋅3⋅5d=30=2\cdot3\cdot5, coincidono per p=2,3,5p=2,3,5 (3/63/6). Con kk prove indipendenti sotto 10−610^{-6} da 0,01270{,}0127: k=4k=4.
  • Errori tipici: usare l'union bound con ripetizioni e dimenticare che è solo un maggiorante; confondere grado totale e grado in una variabile; scegliere SS troppo piccolo (∣S∣<d|S|<d il bound è vuoto); usare lo stesso rr per tutte le prove di Freivalds; scrivere Pr⁡[A∪B]=Pr⁡[A]+Pr⁡[B]\Pr[A\cup B]=\Pr[A]+\Pr[B] senza disgiunzione.

Esercizi su questo argomento

Teoria collegata