# Tempo medio di uscita di una stringa
## Definizione

Nella teoria delle probabilità il tempo medio di uscita di una stringa è il calcolo della previsione di uscita di una stringa prefissata di $k$ caratteri estraendo casualmente le lettere da un insieme finito di caratteri, dato dalla formula $\mathbf {E} [U]=\sum _{h\in H}m^{h}$, dove:
* $m$ è il numero totale di caratteri dell'alfabeto di riferimento
* $H$ è un insieme di indici che contiene i valori
** la posizione del primo carattere, pari a ${\text{1}}$
** la posizione dell'ultimo carattere, pari alla lunghezza $k$ della stringa
** le posizioni di ogni sotto-stringa ripetuta all'interno della stringa
* $U$ è una variabile aleatoria che definisce il tempo di uscita della stringa
Per calcolare la previsione è necessario anche conoscere la probabilità di uscita di un carattere dall'insieme totale dei caratteri, dato da $P\{X_{n}=i\}$, dove $X_{n}$ è una variabile aleatoria che può assumere i valori di un carattere dell'alfabeto, mentre l'evento $\{X_{n}=i\}$ definisce l'uscita del carattere $i$ alla $n$-esima estrazione.

### Esempio

Si calcola la previsione del tempo medio di uscita della parola ABRACADABRA utilizzando l'alfabeto inglese composto da ventisei lettere.
Utilizzando la definizione si ha che ${\begin{cases}m=26\\k=11\\H=\{1,4,11\}\\P\{X_{n}=i\}={\frac {1}{26}}\end{cases}}$
Si osserva che $H$ contiene le posizioni del primo e dell'ultimo carattere, oltre alla posizione dell'ultimo carattere della sotto-stringa ABRA ripetuta.
Da ciò ne deriva che $\mathbf {E} [U]=26^{1}+26^{4}+26^{11}\simeq 3.67\times 10^{15}$, ossia il tempo medio di uscita della parola ABRACADABRA è dopo aver effettuato circa $3670$ miliardi di digitazioni casuali su una tastiera di $26$ caratteri.

### Passaggio al limite

Si può facilmente vedere che la previsione del tempo medio di uscita di una stringa è una funzione divergente all'aumentare del numero di caratteri da estrarre. Pertanto, il limite della previsione per un numero di caratteri che tende all'infinito è pari a infinito, ossia $\lim _{k\rightarrow \infty }(\sum _{h\in H}m^{h})=\infty ,\forall {m>1}$.
Intuitivamente si può calcolare il limite, considerando l'ipotesi che non esistano sotto-stringhe ripetute. Se questo limite tende a infinito a maggior ragione il limite nel caso di ripetizioni tende ad infinito. Si può non tenere conto dell'indice iniziale, pari sempre a uno, in quanto nel calcolo del limite sarebbe una costante. In base a queste considerazioni si osserva che $m^{k}\leqslant \sum _{h\in H}m^{h},\forall {m>1}$ e se il limite di $m^{k}$ per $k$ che tende a infinito è pari a infinito, allora anche il limite $\sum _{h\in H}m^{h}$ sarà pari a infinito. Per ogni $m>1\in \mathbb {N}$ la funzione $m^{k}$ è divergente, quindi $\lim _{k\rightarrow \infty }m^{k}=\infty$.

## Enunciato

Sia $C=\{1,2,\ldots ,m\}$ un insieme di $m$ caratteri, con $m\in \mathbb {N} \smallsetminus \{0\}$. Si può definire una stringa prefissata $(a_{j})_{1\leqslant j\leqslant k}$ di lunghezza $k$ caratteri tale che $a_{j}\in C,\forall {j=1,\ldots ,k}$.
Sia $(\Omega ,{\mathcal {A}},P)$ uno spazio di probabilità, tale che $\Omega =\{1,\ldots ,m\}$, ${\mathcal {A}}$ è una $\sigma$-algebra di $\Omega$ e $P$ una misura di probabilità sullo spazio $(\Omega ,{\mathcal {A}})$. Su questo spazio si può costruire una successione di variabili aleatorie $(X_{n})_{n>0}$ tali che $P\{X_{n}=i\}={\frac {1}{m}}=p,\forall {n>0,i\in C}$.
Sia $T=\inf\{n:X_{n+j}=a_{j},\forall {j=1,\ldots ,k}\}$ il tempo più piccolo entro il quale al tempo $n+j+k$ la successione $(X_{n})_{n}$ realizza la stringa $(a_{j})_{j}$. Si definisce $U=T+k$ il tempo di uscita della stringa.
Si prova che $\mathbf {E} [U]=\sum _{h\in H}m^{h}$, con $H=\{h:1\leqslant h\leqslant k,a_{k-h+j}=a_{j},\forall {j=1,\ldots ,k}\}$.

### Dimostrazione

Sia $F=(F_{n})_{n}$ una filtrazione tale che $F_{0}=\{\varnothing ,\Omega \}$ e $F_{n}=\sigma (X_{1},X_{2},\ldots ,X_{n})$, ossia la $\sigma$-algebra generata dalla successione di variabili aleatorie al tempo $n$.

#### Osservazione 1

$T$ e $U$ sono dei tempi di arresto rispetto a $F$
Per il paradosso di Borel $P\{X_{n+1}=a_{1},X_{n+2}=a_{2},\ldots ,X_{n+k}=a_{k}\}=1$, ossia la probabilità di ottenere la sequenza $(a_{j})_{j}$ digitando casualmente le lettere di una tastiera è quasi certa. Da ciò deriva che $P\{T<\infty \}=1$. Anche $U$ è un tempo di arresto rispetto a $F$ in quanto, essendo $k$ una costante,$P\{T+k<\infty \}=P\{U<\infty \}=1$

#### Osservazione 2

$P\{T+k>n\}=\sum _{h\in H}{\Bigl\prod _{j=1}^{h}{\frac {1}{p}}{\Bigr )}P\{T+k=n+h\}$
Si definisce una successione di variabili aleatorie indipendenti, per ogni $n$ fissato, $(Y_{j}^{(n)})_{j>0}$ tale che $Y_{j}^{(n)}={\frac {1}{p}}\mathrm {I} _{\{X_{n+j}=a_{j}\}},\forall {j=1,\ldots ,k}$. La successione è indipendente in quanto è funzione della successione $(X_{n})_{n}$, anch'essa indipendente.
Per ogni $j$ si osserva che la previsione di $Y_{j}^{(n)}$ è pari a uno. Infatti $\mathbf {E} [Y_{j}^{(n)}]={\frac {1}{p}}p=1$
Si pone $M_{j}^{(n)}={\begin{cases}1{\text{ se }}0\leqslant j\leqslant n\\\prod _{j=1}^{h}Y_{j}^{(n)}{\text{ se }}j=n+h,{\text{ con }}1\leqslant h\leqslant k\\M_{n+k}^{(n)}{\text{ se }}j>n+h\end{cases}}$
La successione $(M_{j}^{(n)})_{j}$ è una $F$-martingala.

##### Osservazione 2.1

$T=\inf\{n:M_{n+k}^{(n)}\neq 0\}$

##### Osservazione 2.2

$\mathrm {I} _{\{T>n\}}M_{n+k}^{(n)}=0$
Si pone $L^{(n)}=M^{(n)|U}=(M_{U\land j})_{j}$, che per la trasformazione secondo Burkholder è anch'essa una $F$-martingala.
Si trova il valore di $L_{n+k}^{(n)}$quando $T>n$.
$\mathrm {I} _{\{T>n\}}L_{n+k}^{(n)}=\mathrm {I} _{\{T>n\}}M_{U\land n+k}^{(n)}=\mathrm {I} _{\{T>n\}}M_{T+k\land n+k}^{(n)}$
Dato che stiamo considerando il caso che $T>n$, il valore più piccolo tra $T+k$ e $n+k$ è proprio $n+k$
$\mathrm {I} _{\{T>n\}}M_{T+k\land n+k}^{(n)}=\mathrm {I} _{\{T>n\}}M_{n+k}^{(n)}=\mathrm {I} _{\{T>n\}}\prod _{j=1}^{k}Y_{j}=\mathrm {I} _{\{T>n\}}\prod _{j=1}^{k}{\frac {1}{p}}\mathrm {I} _{\{X_{j}=a_{j}\}}$
Per definizione di $T$, ossia il più piccolo $n$ tale che la stringa si realizzi, si ha $M_{n+k}^{(n)}=0$ in quanto esiste almeno un carattere $j$ compreso tra $1$ e $k$ dove $X_{j}\neq a_{j}$. Come conseguenza si ha che $\mathrm {I} _{\{X_{n+j}=a_{j}\}}=0$ e quindi $\mathrm {I} _{\{T>n\}}\prod _{j=1}^{k}{\frac {1}{p}}\mathrm {I} _{\{X_{j}=a_{j}\}}=0$

##### Osservazione 2.3

$\mathrm {I} _{\{T+k=n+h\}}M_{n+h}^{(n)}={\begin{cases}\mathrm {I} _{\{T+k=n+h\}}{\Bigl{\frac {1}{p}}{\Bigr )}^{h},{\text{ se }}h\in H\\0{\text{ se }}h\not \in H\end{cases}}$
Si trova il valore di $M_{n+h}^{(n)}$ quando $T+k=n+h$.
$\mathrm {I} _{\{T+k=n+h\}}M_{n+h}^{(n)}=\mathrm {I} _{\{T+k=n+h\}}\prod _{j=1}^{h}Y_{j}^{(n)}$
$\mathrm {I} _{\{T+k=n+h\}}\prod _{j=1}^{h}Y_{j}^{(n)}=\mathrm {I} _{\{T+k=n+h\}}\prod _{j=1}^{h}{\frac {1}{p}}\mathrm {I} _{\{X_{n+j}=a_{j}\}}$
$\mathrm {I} _{\{T+k=n+h\}}\prod _{j=1}^{h}{\frac {1}{p}}\mathrm {I} _{\{X_{n+j}=a_{j}\}}=\mathrm {I} _{\{T+k=n+h\}}\prod _{j=1}^{h}{\frac {1}{p}}\mathrm {I} _{\{X_{T+k-h+j}=a_{j}\}}$
Ne segue che
$\mathrm {I} _{\{T+k=n+h\}}M_{n+h}^{(n)}={\begin{cases}\mathrm {I} _{\{T+k=n+h\}}\prod _{j=1}^{h}{\frac {1}{p}}=\mathrm {I} _{\{T+k=n+h\}}{\Bigl{\frac {1}{p}}{\Bigr )}^{h},{\text{ se }}h\in H\\0{\text{ se }}h\not \in H\end{cases}}$
In base all'osservazione 2.3 si ha che $\mathrm {I} _{\{T+k>n\}}M_{n}^{(n)}=\sum _{h\in H}\mathrm {I} _{\{T+k=n+h\}}{\Bigl{\frac {1}{p}}{\Bigr )}^{h}$
Considerando che $M_{n}^{(n)}=1$ per definizione si ha che $P\{\mathrm {I} _{\{T+k>n\}}1\}=P\{{\begin{matrix}\sum _{h\in H}\mathrm {I} _{\{T+k=n+h\}}{\Bigl{\frac {1}{p}}{\Bigr )}^{h}\end{matrix}}\}$
Dato che la probabilità di una funzione indicatrice corrisponde all'evento stesso si ha che $P\{T+k>n\}=\sum _{h\in H}{\Bigl{\frac {1}{p}}{\Bigr )}^{h}P\{T+k=n+h\}$

#### Conclusione

$\mathbf {E} [U]=\sum _{n}P\{U>n\}=\sum _{n}P\{T+k>n\}$
Per l'osservazione 2 si ha che $\sum _{n}P\{T+k>n\}=\sum _{n}\sum _{h\in H}{\Bigl{\frac {1}{p}}{\Bigr )}^{h}P\{T+k=n+h\}$
Fissando $h$ e facendo variare $n$ si ottiene che$\sum _{n}\sum _{h\in H}{\Bigl{\frac {1}{p}}{\Bigr )}^{h}P\{T+k=n+h\}=\sum _{h\in H}{\Bigl{\frac {1}{p}}{\Bigr )}^{h}\sum _{n}P\{T+k=n+h\}$
La somma per ogni $n$ della probabilità che il tempo di arresto $T$ sia uguale a $n+h-k$ equivale a calcolare la probabilità che $T$ sia finito, pari a $1$ per l'osservazione 1.
Pertanto si dimostra la tesi ottenendo che $\mathbf {E} [U]=\sum _{h\in H}{\Bigl{\frac {1}{p}}{\Bigr )}^{h}\sum _{n}P\{T+k=n+h\}=\sum _{h\in H}{\Bigl{\frac {1}{p}}{\Bigr )}^{h}$

## Verifiche sperimentali

Si può dimostrare sperimentalmente il tempo medio di uscita di una stringa implementando un algoritmo che simula l'estrazione casuale dei caratteri e campionando il numero di estrazioni necessarie a comporre una determinata parola. L'algoritmo può essere implementato attraverso un simulatore, oppure utilizzando un linguaggio di programmazione fornito di una libreria che implementi un generatore di numeri pseudo casuale. Di seguito si descrive un semplice algoritmo di esempio, scritto con il linguaggio ANSI C, che permette di campionare i tempi di uscita di una stringa. Successivamente si descrive come avviene il campionamento dei dati e si fa vedere che i dati tendono alla previsione matematica.

### Algoritmo di campionamento

Per effettuare un campionamento del tempo di uscita di una stringa è necessario implementare un algoritmo che effettui la stessa estrazione un certo numero di volte, solitamente maggiore di trenta. L'alfabeto di riferimento è quello inglese composto da ventisei lettere.
Per compilare il codice è necessario salvarlo in un file (es. gen.c) e creare l'eseguibile attraverso un compilatore C. Di seguito si riporta il comando per compilare il sorgente con il compilatore gcc per il sistema operativo linux.

### Verifica ipotesi mediante test di Student

Il test di verifica ipotesi di Student permette di stabilire se la media campionaria ${\bar {x}}$ si discosti in modo significativo alla media matematica $\mathbf {E} [U]$. Per effettuare il test si formulano le ipotesi $H_{0}:{\bar {x}}=E[U]$ e $H_{1}:{\bar {x}}\neq E[U]$. Nel caso in cui viene verificata l'ipotesi $H_{0}$ si stabilisce che le due previsioni sono attinenti con una certa probabilità di errore. Nel caso in cui viene verificata l'ipotesi $H_{1}$ si stabilisce che le due previsioni non sono attinenti con una certa probabilità di errore. Per effettuare il test di verifica è necessario ottenere i seguenti dati:
* $n\in \mathbb {N_{+}}$ è la numerosità del campione, ossia il numero di volte in cui si è registrato il tempo di uscita della parola "ciao"
* $(x_{1},x_{2},\ldots ,x_{n})\in \mathbb {N} ^{n}$ è il campione da verificare, dove $\forall {i=1,\ldots ,n},x_{i}$ rappresenta il numero di estrazioni occorse prima di comporre la parola "ciao"
* ${\bar {x}}={\frac {1}{n}}\sum _{i=1}^{n}{x_{i}}$ è la media campionaria
* ${\bar {\sigma }}^{2}={\frac {1}{n-1}}\sum _{i=1}^{n}(x_{i}-{\bar {x}})^{2}$ è la varianza campionaria
* $\mathbf {E} [U]=\sum _{h\in H}m^{h}$ è la media matematica
* $Z={\frac {({\bar {x}}-\mathbf {E[U]} )}{\sqrt {\sigma ^{2}}}}{\sqrt {n}}$ è la statistica che ha legge di Student con $(n-1)$ gradi di libertà
* $\alpha \in \mathbb {R} ,{\text{ t.c. }}0<\alpha <1$ è l'errore tollerabile nella conferma dell'ipotesi
* $q_{(n-1,\alpha )}\in \mathbb {R_{+}}$ è il quantile della legge di Student con $(n-1)$ gradi di libertà associato alla tolleranza $\alpha$
Il test si esegue comparando il valore della statistica con il relativo quantile. Nel caso in cui $Z<q_{(n-1,\alpha )}$ si verifica l'ipotesi $H_{0}$ con una probabilità pari a $1-\alpha$. Nel caso in cui, invece, $Z\geq q_{(n-1,\alpha )}$ si respinge l'ipotesi $H_{0}$ e si conferma l'ipotesi $H_{1}$ con una probabilità di errore pari ad $\alpha$.

### Esempio

Si procede ad un esempio concreto per verificare mediante il test di Student le ipotesi $H_{0}$ e $H_{1}$.
Per prima cosa si procede al campionamento dei dati utilizzando l'algoritmo descritto nella sezione precedente con il comando
dove:
* ciao è la stringa da estrarre
* 100 è la numerosità del campionamento
* campionamento è il nome del file dove verranno salvati i risultati delle estrazioni
* 1492875030 è il seme per inizializzare il generatore pseudo casuale
Non appena il programma termina l'esecuzione è possibile procedere con il test di Student per stabilire se il numero di estrazioni necessarie per ottenere la stringa "ciao" è attinente alla previsione matematica. Si calcolano i parametri necessari a fare il test:
* $n=100$ è la numerosità del campione
* ${\bar {x}}=493329,65$ è la media campionaria
* ${\bar {\sigma }}^{2}=253288754254,291$ è la varianza campionaria
* $\mathbf {E[U]} =456976$ è la media matematica
* $Z=0,7224$ è la statistica con legge di Student
* si pone $\alpha =0,05$ come errore tollerabile nel caso di verifica di $H_{1}$
* il quantile associato è $q_{(n-1,\alpha )}=1,660$
Essendo $Z<q_{(n-1,\alpha )}$ si conferma l'ipotesi $H_{0}$ e pertanto la media campionaria conferma la media matematica. Analizzando il grafico sottostante con l'andamento delle previsioni parziali al variare della numerosità si vede chiaramente come ${\bar {x}}{\xrightarrow[{n\rightarrow \infty }]}\mathbf {E[U]}$.