24.04.2013 Views

3.- Generación de números aleatorios

3.- Generación de números aleatorios

3.- Generación de números aleatorios

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

x = x + c)<br />

mod m<br />

1<br />

( 0<br />

x = x + c)<br />

mod m = (( x + c)<br />

mod m)<br />

mod m = ( x + 2c)<br />

mod m<br />

2<br />

( 1<br />

0<br />

0<br />

x = x + 3c)<br />

mod<br />

3<br />

( 0<br />

m<br />

<strong>Generación</strong> <strong>de</strong> <strong>números</strong> <strong>aleatorios</strong><br />

y así para todos los términos. Vamos obteniendo que un término es siempre la semilla más un múltiplo<br />

<strong>de</strong> c y todo módulo m, y esta serie no es aleatoria.<br />

Pue<strong>de</strong> interesarnos dotar <strong>de</strong> más in<strong>de</strong>pen<strong>de</strong>ncia a los valores obtenidos. Esto lo po<strong>de</strong>mos<br />

conseguir no obteniendo todos los valores consecutivos <strong>de</strong> una serie sino obteniendo valores <strong>de</strong> k en k<br />

posiciones, es <strong>de</strong>cir a partir <strong>de</strong> un elemento xn no obtenemos el elemento xn+1 sino el elemento xn+k.<br />

Para ello tendremos que elegir:<br />

x0 ’ =x0<br />

a ’ =a k<br />

k<br />

a −1<br />

c'=<br />

c<br />

a −1<br />

m’=m<br />

Demostración: tenemos que xn + 1 = ( ax n + c)<br />

mod m , obteniendo nuevos<br />

2<br />

términos: ( ax + c)<br />

mod m = (( a(<br />

ax + c)<br />

mod m)<br />

+ c)<br />

mod m = ( a x + ac + c)<br />

mod m<br />

x<br />

n+<br />

3<br />

= ( a<br />

= ( axn+<br />

3<br />

x<br />

n<br />

xn+ 2 = n+<br />

1<br />

n<br />

n<br />

+ a<br />

En general<br />

2<br />

2<br />

+ c)<br />

mod m = (( a(<br />

a(<br />

ax + c)<br />

mod m)<br />

+ c)<br />

mod m)<br />

+ c)<br />

mod m =<br />

x<br />

n<br />

+ ac + c)<br />

mod m<br />

n<br />

k<br />

k k−1<br />

k−<br />

2<br />

k a − 1<br />

xn+<br />

k = ( a xn<br />

+ a c + a c + L + ac + c)<br />

mod m , operando queda: xn<br />

+ k = ( a xn<br />

+ c)<br />

mod m ,<br />

a − 1<br />

Esto también se pue<strong>de</strong> utilizar para paralelizar la obtención <strong>de</strong> los términos. Si tenemos un<br />

or<strong>de</strong>nador con procesamiento paralelo, po<strong>de</strong>mos, partiendo <strong>de</strong> la semilla asignar a cada procesador la<br />

generación <strong>de</strong> una subsecuencia <strong>de</strong> términos. Por ejemplo con tres procesadores se irían generando los<br />

términos <strong>de</strong> la siguiente forma:<br />

x 0<br />

x 1 x 2 x 3<br />

x 4 x 5 x 6<br />

.........................<br />

55

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!