random - Predicción de secuencia binaria pseudoaleatoria
binary sequence (6)
Dada una secuencia binaria pseudoaleatoria (p. Ej .: 00101010010101
) de valores finitos, prediga cómo continuará la secuencia. ¿Puede alguien decirme la forma más fácil de hacerlo? O en caso de que sea demasiado difícil para alguien que apenas puede jugar al solitario en su computadora, ¿alguien me puede decir dónde dar mis primeros pasos ... PD: ¿Se puede utilizar esta técnica para predecir el color del próximo número de ruleta electrónica (por ejemplo: asignando 1
y 0
a rojo y negro, respectivamente)?
En lo que debes pensar es en las propiedades de la aleatoriedad, estudia eso. Por ejemplo, "La aleatoriedad se ejecuta en racimos". Compara una secuencia aleatoria con una secuencia predecible: normalmente no encontrarás racimos en la predecible. Para aprovechar los racimos, aguarde el grupo. Y con un poco de suerte, ganarás.
Bueno, para secuencias pseudoaleatorias , la única posibilidad es contar cuántas de cada posibilidad han llegado antes. Si los 1s superan los 0, es más probable que el siguiente sea 0. Cuánto más probable depende de las ocurrencias relativas de cada uno.
Tenga en cuenta que esto no funcionará para la aleatoriedad real ya que los eventos son independientes, a pesar de lo que los estadísticos le digan :-)
Descubrirá eso (dolorosamente) la primera vez que obtiene una serie de 13 rojos en la mesa cuando usa el método de doble pérdida para jugar a la ruleta. En cualquier caso, la casa obtiene su ventaja de 0 (y doble 0 en algunas tablas) que no son rojas ni negras.
Esta es una pregunta decente, pero creo que si "apenas puedes jugar al solitario" podría estar fuera de tu alcance en este momento.
Debes buscar un lenguaje básico, y la mayoría va a decir PHP, pero desconfío de recomendarlo a un principiante (aunque es bastante fácil trabajar, ver: XAMPP). Java es probablemente un lenguaje "fácil de conseguir y trabajar con", pero estoy seguro de que aquí hay mejores hilos sobre qué lenguaje comenzar (Python o algo probablemente gane porque a los programadores experimentados les encanta).
Por cierto, tu inglés está bien (no noté que eras un hablante de inglés no nativo).
Ahora, en cuanto a su pregunta, si está buscando coincidencias de patrones reales. Me inclinaría a convertir esta idea en código:
"CURRENTPOINT" is end of first letter.
LOOP: Pick letter(s) from Start to "CURRENTPOINT"
Break the rest of your binary string into blocks of the same size.
See if these blocks all equal your picked letters.
If not, move "CURRENTPOINT" along and repeat the LOOP until you run out of letters.
If so, you have your "repeating section."
Si solo está adivinando que el generador aleatorio está temporalmente sesgado, y que este sesgo restablecerá una línea de base (0s y 1s equilibrados) a un plazo razonablemente corto, entonces puede comparar el recuento de cada 0s y 1s y decir el otro es más probable que se base en la desviación de su línea base. Sin embargo, tenga cuidado con la falacia de Monte Carlo .
Los generadores de números pseudoaleatorios criptográficamente seguros están diseñados específicamente para hacer que lo que quieres hacer sea imposible. En particular, satisfacen la "próxima prueba de bit": dados k
bits de su salida, no se puede adivinar el bit k+1
con probabilidad mayor que 1/2
.
Los generadores de números pseudoaleatorios simples que no satisfacen la próxima prueba de bits pueden ser atacados y, de hecho, se han descubierto vulnerabilidades de seguridad en los sistemas del mundo real debido a la elección de PRNG. En particular, se sabe que los generadores congruenciales lineales son algo (o completamente) predecibles, y algunas versiones de Unix al azar pueden usar este algoritmo. Sin embargo, este método es bastante intensivo en matemáticas. Si desea ir por este camino, una búsqueda de "predicción de generador congruente lineal" es un buen lugar para comenzar.
Otro ataque si conoce la implementación de PRNG es tratar de determinar la semilla utilizada para generar la secuencia que está analizando. La semilla a veces se basa en información que se puede adivinar, como la hora del día, la identificación del proceso, etc.
Para responder primero al PS: No, porque los giros de la ruleta son eventos independientes, por lo que no hay nada predictivo en la secuencia histórica de resultados.
La pregunta general es difícil e interesante. Este sitio web puede inferir un sorprendente número de secuencias a partir de sus valores iniciales:
http://www.research.att.com/~njas/sequences/
Tenga en cuenta que es para secuencias enteras arbitrarias.
Lo probé en patrones simples como {0,0,1,1,0,0,1,1, ...} y dice lo correcto.
Noté que nadie te habló sobre la periodicidad.
La secuencia pseudoaleatoria siempre funciona en operaciones matemáticas. (hasta que la computadora cuántica ^^)
Una forma habitual de generar uno es dividir dos números primos (no estoy seguro de que sea la palabra correcta, pero lo que sea).
por ejemplo
1/3=1.333333.....
9/7=1,2857142857142857142857142857143
Esos son un número bastante pequeño y ¿qué notamos? Periodicidad.
1/3=1.3 3 3 3 3 3.....
9/7=1,2857 142857 142857 142857 142857 143
Cuanto más grande es el número primo, más la secuencia en ese caso: 3 y 142857 serán grandes
Por lo tanto, si observa una secuencia pseudoaleatoria durante un tiempo prolongado, puede encontrar una periodicidad y poder "adivinar" el siguiente número. Pero eso podría tomar un tiempo.
PD: perdón por mi inglés, estoy un poco oxidado ^^