Generador de números aleatorios basado en un hash de la época -- python campo con python-3.x campo con random campo con reinventing-the-wheel camp codereview Relacionados El problema

Random number generator based on a hash of the time


3
vote

problema

Español
  HtmlAgilityPack0  

Pregunto qué está mal porque parece tan simple y estúpido. Esto es algo que acabo de pensar en un día y reunirme en 5 minutos, pero parece generar resultados uniformes e impredecibles. He hecho un par de pruebas simples, como generar muchos números y mirar la varianza entre la cantidad de veces que se genera cada número, y usarlo para crear una pequeña cuadrícula que tiene azulejos que son de color negro o blanco con igual probabilidad. , en el que no vi patrones claros. Esperemos que alguien que sepa una o dos cosas sobre esto pueda educarme.

Original en ingles
from time import time  def baseRandom():     return hash(str(time()))  def randFromZero(maximum):     return baseRandom() % maximum  def randRange(minimum, maximum):     return randFromZero(maximum - minimum) + minimum 

I ask what's wrong because it seems so simple and stupid. This is something I just thought up one day and put together in 5 minutes, but it seems to generate even and unpredictable results. I've done a couple of simple tests like generating a lot of numbers and looking at the variance between the amount of times each number is generated, and using it to create a little grid which has tiles that are either black or white with equal probability, in which I saw no clear patterns. Hopefully someone who knows a thing or two about this can educate me.

           
       
       

Lista de respuestas

8
 
vote
vote
La mejor respuesta
 

Parece que está confiando en la ejecución de esto en un sistema donde la granularidad de la función () es más pequeña que la cantidad de tiempo que se tarda en ejecutar el baserandom (), haga lo que quiera con los resultados y venga Volver a Llamar a Baserandom () de nuevo. Si no, obtendrá números más repetidos de lo que debería. También está confiando en el resultado de la función de hash () para ser suficientemente pseudorandoma, dada la entrada que le está alimentando.

Detectar un patrón obvio depende de cómo lo busques. Creo que Knuth le dio un ejemplo de un RNG que se veía bien cuando trazó pares de números en un avión XY, pero si tomaste tres números seguidos cuando XYZ coordina, y mira el cubo resultante de la dirección correcta, puedes claramente Vea un número finito de aviones donde se encuentran todos los resultados. En otras palabras, solo porque intentaste un par de cosas y no vi un patrón no significa que un patrón no aleatorio no esté allí.

Hay quince pruebas para la aleatoriedad enumerada aquí, si está interesado: http: // csrc.nist.gov/groups/st/toolkit/rng/stats_tests.html

 

It looks like you're relying on running this on a system where the granularity of the time() function is smaller than the amount of time it takes to execute baseRandom(), do what you want with the results, and come back to call baseRandom() again. If not, you'll get more repeating numbers than you should. You're also relying on the result of the hash() function to be sufficiently pseudorandom given the input you're feeding to it.

Detecting an obvious pattern depends on how you look for it. I think Knuth gave an example of a RNG that looked OK when you plotted pairs of numbers on an x-y plane, but if you took three numbers in a row as x-y-z coordinates, and look at the resulting cube from the right direction, you can clearly see a finite number of planes where all the outcomes lie. In other words, just because you tried a couple of things and didn't see a pattern doesn't mean a non-random pattern isn't there.

There are fifteen tests for randomness listed here, if you're interested: http://csrc.nist.gov/groups/ST/toolkit/rng/stats_tests.html

 
 

Relacionados problema

3  Implementando de forma libre, crecer y encogerse en una tabla de hash  ( Implementing cleartable grow and shrink on a hash table ) 
He pasado por preguntas anteriores sobre la implementación de tablas de hash en Python, pero tengo algo más específico. Estoy manejando colisiones con sondeo ...

5  Método de cálculo del día del año  ( Day of year calculation method ) 
El ejercicio que quería resolver es de aquí . Copiando desde esa página: public static int dayOfYear(int month, int dayOfMonth, int year) { if (month...

9  Comandos de Linux en Python  ( Linux commands in python ) 
He decidido escribir algunos comandos de Linux en Python. A continuación se muestra una lista, junto con algunas restricciones (si no está familiarizado con L...

0  Producto cartesiano de dos tuplas - Python  ( Cartesian product of two tuples python ) 
Estoy resolviendo el ejercicio 4 de Discusión 3 de CS 61A (2012) de Berkley (2012) (consulte la página 4): Rellene la definición de cartesian_product . ...

2  Fusionar la implementación de Sort Java  ( Merge sort java implementation ) 
¿Puede alguien revisar mi implementación de tipo de fusión en Java? ¿Es bueno / malo y puede mejorarse más? public class MyMergeSort { private int [] d...

4  Iniciar sesión en la base de datos con el núcleo ASP.NET  ( Logging into database with asp net core ) 
En el Container9 de mi aplicación ASP.NET Core Quiero configurar el 99887766655443330 para que inicie sesión en la base de datos. Por lo tanto, creo despu...

12  Autenticación simple en ASP.NET MVC 5  ( Simple authentication in asp net mvc 5 ) 
Estoy construyendo una aplicación ASP.NET MVC 5 y, por razones que son irrelevantes en este punto, estoy intentando construir mi propio medio para autenticar ...

5  Implementar el análisis de STRTOD  ( Implement strtod parsing ) 
en este comentario la OP escribió, Soy un novato, así que me gustaría saber ¿Cómo me gustaría analizar los números / argumentos de Negetive? en Esta ...

11  Yaai (otro de otra implementación)  ( Yaai yet another any implementation ) 
Soy un desarrollador de juegos de C # actualmente aprendiendo C ++ y este es mi proyecto de segundo Big-ish (el primero es un Implementación vectorial ). E...

6  C Getline () Implementación  ( C getline implementation ) 
Estoy practicando mi codificación C y quería implementar mi propia versión del getline Función en C para fines de aprendizaje. Me gustaría una revisión sobr...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos