Algoritmo de cuadrados medios

https://app.box.com/s/jzpqqkqxg166uv7mi54pqa15iopxxawi

Es un algoritmo no congruencial que fue propuesto en los años cuarenta del siglo XX por Von Neumann y Metrópolis. Este algoritmo necesita un número entero detonador también llamado “Semilla” con D dígitos, el cual es elevado al cuadrado para seleccionar del resultado los D dígitos del centro; el primer número ri, es determinado anteponiendo el “0” a estos dígitos. El segundo ri se obtiene con el mismo procedimiento, solo que en este se elevan al cuadrado los D dígitos del centro que se seleccionaron para obtener el primer ri. Este método se repite hasta obtener n número ri.

Pasos para generar números con el algoritmo de cuadrados medios:

1.- Seleccionar una semilla (X0) con D dígitos (D>3).

2.- Sea X0 = resultado de elevar X0 al cuadrado; sea X1 = los D dígitos del centro, y sea ri =0, D dígitos del centro.

3.- Sea Yi = resultado de elevar Xi al cuadrado; sea Xi+1 = los D dígitos del centro, y sea ri =0, d dígitos del centro para toda i=1, 2, 3,…, n.

4.- Repetir el paso 3 hasta obtener los n números ri deseados.



Si no es posible obtener los D dígitos del centro del número Yi, agregar ceros a la izquierda del número Yi.

Números pseudoaletarios vs números genuinamente aleatorios

Un número pseudo aleatorio es un número que cumple las funciones de un número aleatorio pero es generado a través de un algoritmo matemático. Si conocemos el algoritmo que se utilizó para generar una secuencia de números pseudo aleatorios, así como algunos valores iniciales, se puede predecir toda la secuencia de números que se van a generar.  Por  el contrario, es imposible predecir el valor siguiente de una secuencia de números genuinamente aleatorios. (Turquía, 2013).

Algoritmos para la generación de números pseudo aleatorios

Existen varios algoritmos, entre los que se cuentan: Algoritmo de cuadrados medios, algoritmos de productos medios, algoritmo de multiplicador constante, algoritmo lineal, algoritmo congruencia multiplicativo, algoritmo congruencia aditivo, algoritmos congruencia les no lineales.
En el presente artículo se analizará el algoritmo de cuadrados medios y se implementará en el lenguaje de programación Java.

Algoritmo de cuadrados medios

  1. Se elige como valor semilla un número de más de 3 dígitos (t=cantidad de dígitos del valor semilla)
  2. Se eleva ese número al cuadrado.
  3. Al valor que resultó, seleccione los t dígitos de en medio (si se requiere, utilice un 0 como primer dígito).
  4. Repetir desde el paso número 2 tomando éste nuevo número.

Implementación Java


Explicación del programa

Variables

El programa utiliza las siguientes variables:
  • entrada: Para poder leer datos de el teclado
  • semilla: Un valor de tipo cadena de caracteres que almacenará el valor semilla, es decir un número de más de 4 dígitos para  iniciar el algoritmo.
  • snumero2: el valor semilla elevado al cuadrado, en formato de cadena de caracteres.
  • snumero3: los n dígitos de en medio, en formato de cadena de caracteres.
  • numero1: el valor semilla, pero en formato numérico entero.
  • numero2: el valor semilla elevado al cuadrado en formato numérico entero
  • tam1: La longitud (o número  de dígitos ) del valor semilla
  • tam2: La longitud (o número de dígitos del valor elevado al cuadrado.

Explicación

  • tam1 = semilla.length(); Extrae la cantidad de dígitos del valor semilla
  • numero1 = Integer.parseInt(semilla);  Convierte el valor semilla a formato numérico entero
  • for (i=1; i<=10; i++){    Para producir 10 números pseudo aleatorios.
  • numero2 = (long)Math.pow(numero1,2);  eleva el valor semilla al cuadrado
  • snumero2 = Long.toString(numero2); Convierte el valor que está elevado al cuadrado, en cadena de caracteres.
  • tam2 = snumero2.length(); Cuenta la cantidad de dígitos que tiene el valor elevado al cuadrado
  • primerc = (tam2-tam1) / 2;  Calcula cuál será el primer carácter a extraer.
  • snumero3 = snumero2.substring(primerc,primerc+tam1); Extrae n caracteres (según halla sido la cantidad de dígitos que tenía el valor semilla)
  • numero1 = Integer.parseInt(snumero3); Convierte el valor extraído en número para hacer de nuevo el proceso.

Ejecución del programa

algoritmo de cuadrados medios
Algoritmo de cuadrados medios implementado en Java
Si deseas que aparezcan en formato decimal entre 0 y 1, puedes utilizar estas instrucciones:
numeror = Double.parseDouble(“.”+snumero3);
System.out.println(i + “. ” + snumero3 + “(” + numeror + “)”);

Este algoritmo nos muestra una forma de generar números pseudo aleatorios en Java. Los números pseudo aleatorios son una parte importante en la elaboración de modelos de simulación.


cuadrados-medios

Comentarios

Entradas populares