Un generatore di Fibonacci ritardato (LFG, dall'inglese Lagged Fibonacci Generator) è un algoritmo per la generazione di numeri pseudo-casuali basato su una generalizzazione della successione di Fibonacci. Dalla definizione della successione di Fibonacci:
![{\displaystyle F_{n}=F_{n-1}+F_{n-2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/4fa6d281e7a54e08aeffeef7458ddc0884333686)
Similmente, il generatore è definito come
![{\displaystyle F_{n}=F_{n-j}\star F_{n-k}{\pmod {m}},\quad 0<j<k\,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/93d26b941d188b5b9f12086c6aefe35aad701b25)
dove
è l'
-esimo termine della successione di numeri generati
e
sono due qualunque termini precedenti della successione
è una qualsiasi operazione binaria. Può essere addizione, sottrazione, moltiplicazione, divisione, ma anche un operatore logico
indica il resto della divisione tra
e ![{\displaystyle (m)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/e53c5b69039ea2c5c14825a837766dc2fc4dd84e)
Se l'operatore usato è l'addizione, il generatore sarà di tipo additivo, se l'operatore è la moltiplicazione si avrà un generatore di Fibonacci ritardato di tipo moltiplicativo.
Proprietà
Come tutti i generatori di numeri pseudo-casuali, il generatore di Fibonacci ritardato è una funzione periodica. Il periodo massimo varia a seconda dell'operatore usato. Nel caso di somma o sottrazione, il generatore ha periodo
tale che
![{\displaystyle p\leq (2^{k}-1)\cdot 2^{m-1}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/50275a8d2f70ce1516e5feb7dbd4195958a38af5)
In caso di moltiplicazione invece
![{\displaystyle p\leq (2^{k}-1)\cdot 2^{m-3}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b748f67201bc1052ca0f0a3e2fd98abfb4f8f8ca)
Da notare che il periodo della moltiplicazione è un quarto di quello della somma.
Come dimostrato di seguito, l'operatore addizione genera una sequenza numerica con periodo molto maggiore dell'operatore moltiplicazione.
dimostriamo che
![{\displaystyle (2^{k}-1)\cdot 2^{m-1}=4\cdot \left[(2^{k}-1)\cdot 2^{m-3}\right]\,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/beae5899a550aba7a116f9d560c0a78f920843b8)
dividendo entrambi i membri per una stessa quantità
![{\displaystyle {\frac {(2^{k}-1)\cdot 2^{m-1}}{2^{m-1}}}={\frac {4\cdot \left[(2^{k}-1)\cdot 2^{m-3}\right]}{2^{m-1}}}\,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/4c783edb684761ce7e39b91cd39a9fa9c35f9967)
Nel primo membro si semplifica, nel secondo si divide
per
, ricordando che per le potenze vale che
![{\displaystyle (2^{k}-1)=4\cdot (2^{k}-1)\cdot 2^{m-3-m+1}\,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/c518656c3870f5428294d26eb8eda7ddb1f32ccb)
semplificando
![{\displaystyle (2^{k}-1)=4\cdot (2^{k}-1)\cdot 2^{-2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/cf08d199805de8e58b01265c026a80c8dd0847c7)
infine
![{\displaystyle (2^{k}-1)=(2^{k}-1)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7e4469f82b0582f80870bdce6ba583751ebdc6fd)
Q.E.D.
Voci correlate
Collegamenti esterni