09.05.2013 Views

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

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.

20.5. Anexo: algoritmos probabilistas 469<br />

function NumAciertos(numPuntos: integer): integer;<br />

{Dev. el número de lanzami<strong>en</strong>tos que ca<strong>en</strong> d<strong>en</strong>tro del círculo}<br />

var<br />

i, total: integer;<br />

begin<br />

total:= 0;<br />

for i:= 1 to numPuntos do begin<br />

G<strong>en</strong>erarPunto(px, py); {del intervalo [−1, 1] 2 , uniformem<strong>en</strong>te}<br />

if (px, py) ∈ círculo de radio 1 th<strong>en</strong><br />

total:= total + 1<br />

<strong>en</strong>d; {for}<br />

NumAciertos:= total<br />

<strong>en</strong>d; {NumAciertos}<br />

Según la ley de los grandes números, si númPuntos es muy grande la proporción<br />

de aciertos t<strong>en</strong>derá a la proporción del área del círculo:<br />

numAciertos π<br />

→<br />

numEnsayos 4<br />

De hecho, este algoritmo suele pres<strong>en</strong>tarse como un modo de estimar π:<br />

π 4 ∗ numAciertos<br />

numEnsayos<br />

20.5.2 Búsqueda de una solución probablem<strong>en</strong>te correcta<br />

Se desea averiguar si un <strong>en</strong>tero n es o no primo. Supuesto n impar, 9 el<br />

método conv<strong>en</strong>cional consiste <strong>en</strong> tantear los divisores 3, 5, . . . , Trunc( √ n). Los<br />

Trunc( √ n)<br />

2 −1 tanteos que requiere el peor caso, hac<strong>en</strong> este método inviable cuando<br />

se trata de un n grande.<br />

Una alternativa es la sigui<strong>en</strong>te: supongamos que se ti<strong>en</strong>e un test 10<br />

function Test(n: integer): boolean;<br />

que funciona aleatoriam<strong>en</strong>te como sigue: aplicado a un número primo, resulta<br />

ser siempre True; por el contrario, aplicado a un número compuesto lo descubre<br />

(resultando ser False) con probabilidad p (por ejemplo, 1<br />

2 ). Por lo tanto, existe<br />

peligro de error sólo cuando su resultado es True, y ese resultado es erróneo con<br />

una probabilidad q = 1 − p.<br />

9 De lo contrario el problema ya está resuelto.<br />

10 La naturaleza del test no importa <strong>en</strong> este mom<strong>en</strong>to. Bást<strong>en</strong>os con saber que, efectivam<strong>en</strong>te,<br />

exist<strong>en</strong> pruebas efici<strong>en</strong>tes de esta clase.

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

Saved successfully!

Ooh no, something went wrong!