Esercizio - Stima degli elementi distinti con il k-esimo minimo
Teoria: Algoritmi di streaming - campionamento di riserva e conteggio degli elementi distintiModello a flusso (un passaggio, memoria molto minore di n); campionamento di riserva (reservoir sampling) con dimostrazione per induzione; contatore di Morris (stima non distorta 2^X-1, varianza n(n-1)/2); elementi distinti: idea di Flajolet-Martin e stima del k-esimo minimo (k-1)/v_k; Count-Min sketch con garanzia (epsilon, delta) e dimensionamento w=e/epsilon, d=ln(1/delta).Algoritmi di streaming - campionamento di riserva e conteggio degli elementi distinti → (elementi distinti, -esimo minimo), Momenti e deviazioni - Markov, Chebyshev e mediana randomizzataVar(ΣX_i) = ΣVar + 2ΣCov, e basta l'indipendenza a coppie perché la varianza si sommi. Chebyshev dà code polinomiali (collezionista: P(T ≥ nH_n + cn) ≤ π²/(6c²)); il metodo del secondo momento dà P(X=0) ≤ Var(X)/E[X]². Algoritmo della mediana: campione di n^(3/4) elementi, due estremi d e u a ±√n, ordinamento dei soli elementi tra d e u; fallisce con probabilità ≤ n^(-1/4) ed è Las Vegas con 2n + o(n) confronti.Momenti e deviazioni - Markov, Chebyshev e mediana randomizzata →.
Testo. Un flusso contiene valori distinti (con ripetizioni). Una funzione hash casuale manda ogni valore in un punto uniforme e indipendente di e l'algoritmo tiene i valori hash distinti più piccoli; con il -esimo, la stima è .
- Dimostrare che il minimo di punti uniformi ha e . Verificare numericamente con .
- Con e dimostrare a mano che , cioè che è non distorto.
- Perché () è una cattiva stima? Dare i quantili per .
- Quale garantisce uno scarto relativo ? Quanta memoria serve rispetto a un insieme esatto di identificatori da byte?
- Con stimare con una simulazione la probabilità di essere entro il e il del valore vero per e .
Soluzione
1. Minimo. Il minimo supera se tutti i punti superano : per . Allora Per : ; la simulazione ( prove) dà . Intuizione: punti dividono in intervalli, in media di lunghezza , e il minimo è il primo.
2. Non distorsione per , . è il secondo più piccolo di punti. Densità: si sceglie quale dei punti sta in ( modi), quale dei restanti sta sotto ( modi) e l'altro sta sopra: (controllo: ). Quindi e . Simulazione ( prove): media di pari a .
3. Il caso . La densità di vicino a vale , quindi : la media non esiste, la varianza non esiste, e una singola stima può essere enorme. Per i percentili , , di valgono , , (vero: ): l'errore va da un fattore in meno a un fattore in più. Con la media esiste e lo scarto relativo è circa .
4. Scelta di . Si vuole , cioè . Memoria: valori hash da byte byte, indipendenti da , contro byte per l'insieme esatto: volte meno. Per Chebyshev, con lo scarto relativo è e la stima è entro con probabilità ; per una confidenza più alta si usa la mediana di copie indipendenti.
5. Simulazione (, prove).
| media | scarto relativo | entro | entro | |
|---|---|---|---|---|
Gli scarti e coincidono con la formula ( e ). Con la frazione entro è , il valore di una gaussiana a una deviazione standard: lo scarto relativo è proprio la deviazione standard di , non un limite sul caso peggiore.
Codice di verifica
import numpy as np
rng = np.random.default_rng(13)
d = 50
minimi = rng.random((200_000, d)).min(axis=1)
print(minimi.mean(), 1 / (d + 1), np.percentile(1 / minimi - 1, [5, 50, 95]))
v2 = np.sort(rng.random((100_000, 3)), axis=1)[:, 1] # secondo più piccolo di 3 punti
print((1 / v2).mean()) # vicino a 3
D = 10 ** 5
for k in (100, 402):
stime = np.array([(k - 1) / np.partition(rng.random(D), k - 1)[k - 1] for _ in range(2000)])
print(k, stime.mean(), stime.std() / D, np.mean(abs(stime - D) <= 0.1 * D), np.mean(abs(stime - D) <= 0.05 * D))Risultato: 0.01965 0.01961 [16.2 71.3 977.7], poi 3.015, poi le due righe della tabella: 100 100221.9 0.1020 0.6835 0.369 e 402 99760.2 0.0500 0.956 0.6875.
Versione ripasso
- Minimo. , ; : (simulato ) (Algoritmi di streaming - campionamento di riserva e conteggio degli elementi distintiModello a flusso (un passaggio, memoria molto minore di n); campionamento di riserva (reservoir sampling) con dimostrazione per induzione; contatore di Morris (stima non distorta 2^X-1, varianza n(n-1)/2); elementi distinti: idea di Flajolet-Martin e stima del k-esimo minimo (k-1)/v_k; Count-Min sketch con garanzia (epsilon, delta) e dimensionamento w=e/epsilon, d=ln(1/delta).Algoritmi di streaming - campionamento di riserva e conteggio degli elementi distinti →).
- Non distorsione, , . Densità di : ; , quindi (simulato ).
- . ; per i percentili di sono , , contro il vero .
- Scelta di . Scarto relativo (deviazione standard di ): ; memoria byte contro dell'insieme esatto (indipendente da e dal flusso) (Momenti e deviazioni - Markov, Chebyshev e mediana randomizzataVar(ΣX_i) = ΣVar + 2ΣCov, e basta l'indipendenza a coppie perché la varianza si sommi. Chebyshev dà code polinomiali (collezionista: P(T ≥ nH_n + cn) ≤ π²/(6c²)); il metodo del secondo momento dà P(X=0) ≤ Var(X)/E[X]². Algoritmo della mediana: campione di n^(3/4) elementi, due estremi d e u a ±√n, ordinamento dei soli elementi tra d e u; fallisce con probabilità ≤ n^(-1/4) ed è Las Vegas con 2n + o(n) confronti.Momenti e deviazioni - Markov, Chebyshev e mediana randomizzata →).
- Simulazione (). : media , scarto , entro , entro . : media , scarto , entro , entro .
- Errori tipici. Stimare con invece di (distorta); contare due volte i duplicati; leggere lo scarto relativo come garanzia sul caso peggiore.