Salta al contenuto
Note per Studenti Esercizio - Ripetizioni di un Monte Carlo a errore unilaterale per un errore prefissato

Esercizio - Ripetizioni di un Monte Carlo a errore unilaterale per un errore prefissato

Testo. Un algoritmo randomizzato per un problema di decisione non sbaglia mai quando risponde SI, e quando la risposta giusta è SI risponde SI con probabilità p=0,3p=0{,}3 (errore unilaterale). Le esecuzioni usano bit casuali indipendenti e ciascuna costa n2n^2 operazioni.

  1. Qual è la probabilità di errore ripetendo l'algoritmo k=10k=10 volte e rispondendo SI se almeno una esecuzione dice SI?
  2. Quante ripetizioni servono per un errore ≤10−6\le10^{-6}? Calcolare il valore esatto e quello che dà la formula k≥ln⁡(1/ε)/pk\ge\ln(1/\varepsilon)/p.
  3. Se invece fosse p=1/2p=1/2, quante ripetizioni per un errore ≤2−20\le2^{-20}?
  4. Qual è il costo totale in operazioni per n=1000n=1000 nel caso 2?

Teoria: 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 → (sezione sull'amplificazione).

Soluzione

Punto 1. Se la risposta giusta è NO l'algoritmo non dice mai SI: errore 00. Se è SI, l'algoritmo risponde NO solo se tutte le 1010 esecuzioni indipendenti sbagliano: ognuna con probabilità 1−p=0,71-p=0{,}7. Quindi Pr⁡[errore]=0,710=0,02825.\Pr[\text{errore}]=0{,}7^{10}=0{,}02825 .

Punto 2. Serve 0,7k≤10−60{,}7^k\le10^{-6}, cioè kln⁡0,7≤ln⁡10−6k\ln0{,}7\le\ln10^{-6}, ovvero (dividendo per ln⁡0,7<0\ln0{,}7<0 si inverte il verso) k≥ln⁡10−6ln⁡0,7=−13,8155−0,35667=38,73.k\ge\frac{\ln10^{-6}}{\ln0{,}7}=\frac{-13{,}8155}{-0{,}35667}=38{,}73 . Risultato: k=39k=39 ripetizioni. Controllo: 0,739=9,1⋅10−7≤10−60{,}7^{39}=9{,}1\cdot10^{-7}\le10^{-6} e 0,738=1,3⋅10−6>10−60{,}7^{38}=1{,}3\cdot10^{-6}>10^{-6}. La formula semplificata, che usa 1−p≤e−p1-p\le e^{-p} e quindi (1−p)k≤e−pk(1-p)^k\le e^{-pk}, dà k≥ln⁡(106)/0,3=46,05k\ge\ln(10^6)/0{,}3=46{,}05, cioè 4747 ripetizioni: valida ma più larga di 88.

Punto 3. (1/2)k≤2−20(1/2)^k\le2^{-20} dà esattamente k=20k=20; la formula con ee darebbe ⌈20ln⁡2/0,5⌉=⌈27,7⌉=28\lceil20\ln2/0{,}5\rceil=\lceil27{,}7\rceil=28.

Punto 4. Con k=39k=39 esecuzioni da n2=106n^2=10^6 operazioni: 39⋅106=3,9⋅10739\cdot10^6=3{,}9\cdot10^7 operazioni, cioè il costo cresce di un fattore 3939 (lineare in kk) mentre l'errore scende da 0,70{,}7 a 10−610^{-6} (esponenziale in kk).

python
import math, random
p, eps = 0.3, 1e-6
print(0.7**10, math.ceil(math.log(eps)/math.log(1-p)), math.ceil(math.log(1/eps)/p), 0.7**39, 0.7**38)
N = 10**6                                              # simulazione dell'errore con k = 10
err = sum(all(random.random() >= p for _ in range(10)) for _ in range(N)) / N
print(err)                                             # circa 0.0282

Risultati verificati: 0,028250{,}02825; 38,7338{,}73 e 46,0546{,}05; simulazione ≈0,0282\approx0{,}0282.

Versione ripasso

Teoria collegata