Esercizio - Algoritmo di Freivalds su matrici 3x3 con elementi sbagliati
Testo. Siano Uno studente propone il prodotto e un altro .
- Calcolare e dire quali elementi di e sono sbagliati.
- Eseguire l'algoritmo di Freivalds con e con su . Ripetere su con .
- Per tutti gli vettori , contare quelli per cui l'algoritmo non scopre l'errore, per e per . Confrontare con il bound .
- Costo per con prove, e probabilità di errore.
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 4); 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 →.
Soluzione
Punto 1. Riga per colonna: ha un solo elemento sbagliato: (dovrebbe essere ), quindi ha solo . ne ha due, nella prima riga: invece di e invece di , quindi la prima riga di è .
Punto 2.
- , : , , . Uguali: errore non scoperto.
- , : , , . Diversi: errore scoperto (prima riga).
- , : , , . Uguali: non scoperto perché ha prima componente .
Punto 3. L'algoritmo sbaglia se e solo se .
- : equivale a , cioè : i vettori , su , probabilità . Il bound è raggiunto (stretto), perché ha un solo elemento non nullo.
- : equivale a , cioè : , su , ancora .
In entrambi i casi la probabilità è , come dimostra il teorema (si fissano le altre componenti e al più uno dei due valori di annulla la somma).
Punto 4. Una prova costa prodotti matrice-vettore, circa operazioni; prove , contro il prodotto diretto . L'errore (matrice sbagliata dichiarata giusta) è ; una corretta è sempre accettata.
Risultati: ; sfuggono per e per ; errore con prove .
import itertools
A = [[1, 2, 0], [3, 1, 2], [0, 1, 1]]; B = [[2, 0, 1], [1, 1, 0], [1, 3, 2]]
mv = lambda M, v: [sum(M[i][j] * v[j] for j in range(3)) for i in range(3)]
AB = [[sum(A[i][k] * B[k][j] for k in range(3)) for j in range(3)] for i in range(3)]
C = [[4, 3, 1], [9, 7, 7], [2, 4, 2]]; C1 = [[5, 1, 1], [9, 7, 7], [2, 4, 2]]
print(AB)
for nome, M in (("C", C), ("C'", C1)):
sfuggono = [r for r in itertools.product((0, 1), repeat=3) if mv(A, mv(B, r)) == mv(M, r)]
print(nome, len(sfuggono), sfuggono)Versione ripasso
- Algoritmo: uniforme, confrontare con in ; se sbaglia 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 →).
- Prodotto: . ha (invece di ); ha , .
- Prove: , : non scoperto; : scoperto. , : uguali, non scoperto.
- Conteggio su vettori: : sfuggono quelli con , ; : quelli con , . Bound stretto.
- Costo: prove, operazioni per contro ; errore .
- Errori tipici: calcolare (cioè il prodotto) invece di ; riusare lo stesso nelle prove; credere che sia scartato (è un vettore possibile ma non scopre nulla).