¿Hay algún equivalente a lanzar la moneda en informática?

Aquí hay dos cuestiones separadas a las que Joshua alude en su respuesta.

  1. ¿Cómo se modelan teóricamente los lanzamientos de monedas en informática?
  2. ¿Cómo se implementan los lanzamientos de monedas en las computadoras en la práctica?

La respuesta de Joshua Engel aborda bien ambos problemas. Solo tengo algo más que decir sobre el n. ° 1, ya que me parece mucho más interesante que el n. ° 2 y creo que hay preguntas interesantes en esta área que la mayoría de las personas probablemente ni siquiera conocen.

Para el número 1, los informáticos suponen que tienen algún tipo de generador de números aleatorios. En su forma más pura, es simplemente una función de caja negra que escupe un 0 o 1, cada uno con probabilidad 1/2. Cuando se trata de modelos teóricos que usan aleatoriedad, como las máquinas probabilísticas de Turing, simplemente asumimos que la máquina “lanza una moneda” de manera abstracta en cada paso, lo que significa que hace una consulta a esta función aleatoria de caja negra.

Para cualquier algoritmo, generalmente nos importa cuánto tiempo y espacio requiere. Otro recurso que es interesante de medir es la cantidad de aleatoriedad que utiliza un algoritmo. La forma estándar de medir la aleatoriedad es el número de lanzamientos de monedas utilizados por el algoritmo o, más precisamente, el número de bits aleatorios. Por ejemplo, un algoritmo determinista usa aleatoriedad cero. Una máquina de Turing probabilística de tiempo polinómico utiliza como máximo aleatoriedad polinómica, ya que lanza como máximo una moneda en cada paso de tiempo, y se ejecuta por un número polinómico de pasos de tiempo.

¿Por qué preocuparse por medir la aleatoriedad? Es posible que haya oído hablar de las clases de complejidad P y BPP . La clase P es todos los lenguajes decidibles por un TM determinista en tiempo polinómico, y se supone que encapsula nuestra noción de “problemas que se pueden resolver de manera eficiente”. Sin embargo, BPP , la clase de lenguajes decidible por un TM probabilístico en tiempo polinómico, es posiblemente un sustituto más razonable para este propósito, ya que en la práctica incluso los algoritmos aleatorios son lo suficientemente buenos.

Obviamente, P está contenido en BPP , ya que uno siempre puede ignorar los lanzamientos de monedas. Intuitivamente, es de esperar que haya problemas que se puedan resolver de manera eficiente utilizando la aleatoriedad, pero no así con algoritmos deterministas. Por ejemplo, la gente solía creer que la prueba de primalidad era un problema. Sin embargo, ahora hay ciertas conjeturas plausibles y ampliamente creídas en la teoría de la complejidad que, de ser ciertas, implicarían P = BPP .

No voy a entrar en los detalles de estas conjeturas, pero permítanme ilustrar una forma realmente ingenua que uno podría aleatorizar BPP . Para mayor precisión, definiré formalmente la clase: BPP es el conjunto de problemas de decisión con una TM probabilística de tiempo polinomial de tal manera que en cada instancia de SÍ, la TM acepta con probabilidad al menos 2/3 (sobre los lanzamientos internos de monedas utilizados en el máquina, no sobre las entradas), y en cada instancia de NO, el TM acepta con probabilidad como máximo 1/3. Ahora, como mencioné anteriormente, tal máquina usa como máximo un número polinómico de lanzamientos de monedas. Suponga que podría mostrar que solo necesita usar O (log n) lanzamientos de monedas. Esto implicaría P = BPP . ¿Cómo es eso? Bueno, si solo usó O (log n) bits aleatorios, podría enumerar todos los 2 ^ O (log n) = n ^ O (1) posibles resultados y contar si acepta al menos 2/3 de los ramas o como mucho 1/3 de ellas!

Seguro. Hay equivalentes físicos y teóricos.

El equivalente físico es … bueno, prácticamente solo una implementación física de un lanzamiento de moneda. Puede conectar una lámpara de lava a una cámara, o simplemente escuchar el ruido en un puerto de audio desconectado. Si realmente le importan los números aleatorios *, conecte un dispositivo especializado para hacer monedas cuánticas (por ejemplo, Quantis USB).

La informática estudia ampliamente los números aleatorios. Existe un modelo teórico de una máquina probabilística de Turing que elige transiciones al azar, y un conjunto separado de clases de complejidad para algoritmos aleatorios (por ejemplo, RP (complejidad)).

————————
– La generación de números aleatorios es demasiado importante para dejarla al azar. Robert R. Coveyou

No. No hay un equivalente real de lanzar una moneda en informática.
Cada generador de números aleatorios utiliza un algoritmo para generar números aleatorios y, por lo tanto, se denominan generadores de números pseudoaleatorios.
Estos generadores pseudoaleatorios están muy cerca de la aleatoriedad generada al lanzar una moneda.
Al final del día, son impulsados ​​por un algoritmo.

No me importaría decir que los números aleatorios basados ​​en el tiempo son igual de buenos que lanzar una moneda. En cualquier instante, el microsegundo será único a menos que su unidad de medida sea un nanosegundo o menos, lo que no es muy útil en la vida diaria.

No soy experto en algoritmos. Creo que combinar dos o más generadores de números aleatorios para desencadenar un evento específico (como leer un valor de bit en la ubicación de memoria de un número aleatorio dado / tiempo de microsegundos) puede traer resultados puramente aleatorios.

Además, lanzar una moneda, creo que es un proceso, que puede ser influenciado por una persona experta en una situación dada.

More Interesting

¿Existe un algoritmo para contar el número de subcadenas cuya suma es divisible por 3?

¿Por qué la gente encuentra divertida la programación / codificación, pero no las matemáticas?

¿Existe un vínculo entre el procesamiento de señales y la teoría de grafos?

¿Cuál es la correlación entre las matemáticas y la informática? ¿Por qué es necesario?

¿En qué formalismo matemático se basa la programación orientada a objetos (OOP)? ¿Se desarrolló algún formalismo después de que la POO se generalizó?

¿Por qué este bucle, usado para agregar caracteres adyacentes en un vector, produce una salida extraña?

¿Cuáles son las aplicaciones de la relación en matemáticas discretas?

¿Cómo ha influido la teoría de conjuntos en el desarrollo de las estructuras de datos?

¿Cómo ayuda una base sólida en matemáticas discretas en la programación de computadoras?

¿Es posible escribir un programa para tabular la cantidad de tiempo que llevaría ver todos los programas en la lista instantánea de Netflix?

Cómo resolver este problema particular de programación dinámica ACM-ICPC

Cómo explicar intuitivamente por qué [matemáticas] \ frac {n!} {(N + 1)!} [/ Matemáticas] [matemáticas] = \ frac {1} {n + 1} [/ matemáticas]

¿Qué es una explicación intuitiva de los teoremas de jerarquía y sus pruebas en la teoría de la complejidad computacional?

¿Qué debe incluirse en cualquier programa que use la función matemática?

Cómo resolver sumas consecutivas de UVa 12355