Esercizio - Impronta di stringhe con un primo casuale e comunicazione
Testo. Alice e Bob hanno due stringhe di bit, viste come interi e . Alice sceglie un primo uniformemente fra i primi e invia ; Bob dichiara «uguali» se .
- Con , , e scelto uniformemente in , calcolare esattamente la probabilità di errore. Ripetere con .
- Dimostrare che l'errore è . Calcolarlo per , ().
- Quale garantisce con questo bound un errore per ? Quanti bit si comunicano rispetto a ?
- Migliorando il bound (il prodotto dei primi più piccoli supera ), che errore si ottiene con ? E quante prove indipendenti con servono per scendere sotto usando il bound semplice?
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 5); 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 →.
Soluzione
Punto 1. Se il test è sempre giusto. Qui e Bob sbaglia se .
- : l'unico primo divisore è . I resti sono e per : coincidono solo per . Errore .
- : coincidono per (resti : ; : ) e non per ( contro ). Errore .
Punto 2. Sia , con . Se avesse primi divisori distinti, tutti , sarebbe , e da segue , cioè . Scegliendo uniforme fra i primi, cade fra quei con probabilità . Con e : .
Punto 3. Serve . Il milionesimo primo è , quindi ; con si ha e errore . Alice comunica (circa bit) e il resto (altri bit): circa bit invece di .
Punto 4. Il prodotto dei primi più piccoli è maggiore di (la somma dei dei primi vale , quella dei primi vale ): un ha al più divisori primi distinti, quindi errore . Con il bound semplice e prove con primi indipendenti: dà , quindi (con : , perché e non bastano).
Risultati: e ; errore ( con il bound fine); , bit; .
def primi(M):
s = bytearray([1]) * (M + 1); s[0] = s[1] = 0
for i in range(2, int(M**0.5) + 1):
if s[i]: s[i * i::i] = bytearray(len(s[i * i::i]))
return [i for i in range(M + 1) if s[i]]
q = [2, 3, 5, 7, 11, 13]
for b in (165, 151):
print(b, [p for p in q if 181 % p == b % p])
P = primi(10**6)
print(len(P), 1000 / len(P), 129 / len(P))
import math
print(sum(math.log2(p) for p in P[:129]), sum(math.log2(p) for p in P[:130]))
print(len(primi(16 * 10**6)), 1000 / len(primi(16 * 10**6)))Versione ripasso
- Protocollo: primo casuale , si invia ; errore solo se (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 →).
- Esempio piccolo: contro (): errore (solo ). Contro (): ().
- Bound: ha al più primi divisori distinti, errore . , : ; fine (129 primi): .
- Per : , (); circa bit contro .
- Prove per con : bound semplice , fine .
- Errori tipici: scegliere non primo; usare lo stesso nelle prove; dimenticare che l'errore è solo quando .