¿Hay números irracionales de distribución uniforme no repetitivos para los cuales el dígito n puede calcularse en O (1) tiempo?

La respuesta de Dave Buchfuhrer es correcta, bajo el supuesto de que puede acceder a un bit arbitrario en la representación de [math] n [/ math] en tiempo constante. Esta es una suposición razonable: los detalles de acceso a la representación bit a bit de la entrada generalmente se suprimen en el tiempo de ejecución asintótico de un algoritmo, y estamos imaginando (de manera algo fantasiosa) una máquina que opera con números enteros de precisión arbitraria en tiempo constante.

Pero estrictamente hablando, esto no se puede hacer. Su algoritmo recibe un número [math] n [/ math] como entrada, por lo que necesita al menos [math] \ log (n) [/ math] pasos solo para leer lo que le da. Si solo se permiten operaciones de nivel de bit [math] O (1) [/ math], nunca podría producir más de [math] 2 ^ {O (1)} [/ math] salidas diferentes, por lo que solo puede producir secuencias repetitivas

Si permite las operaciones [math] \ log (n) [/ math], hay una miríada de cosas que puede hacer para codificar los dígitos de la entrada en algo suave. La sugerencia de Dave de tomar el segundo dígito más significativo está bien en el sentido de que es estadísticamente uniforme a nivel de un solo bit y no se repite. Pero definitivamente no pasará pruebas de aleatoriedad más fuertes, ya que produce una secuencia altamente estructurada:

01010011000011110000000011111111…

Si necesita algo más suave, básicamente está buscando un solo bit (o dígito) de una función hash fuerte que opera en tiempo lineal en el tamaño de su entrada (que es el número de bits, a saber, [math] \ log ( n) [/ matemáticas]). El objetivo de las funciones hash criptográficas es que procesan una entrada de longitud arbitraria y producen un valor de longitud fija que tiene varias propiedades de suavidad. Esa es solo tu pregunta.

Por las razones que mencioné, no puede esperar que una función de hash funcione en tiempo constante. Debe permitir el tiempo de ejecución logarítmico, es decir, el tiempo lineal en términos de la longitud de la cadena, que es la representación en bits de [math] n [/ math]. Con eso en mente, cualquier función hash fuerte funcionaría; hoy, probablemente importaría la biblioteca BLAKE y la usaría.

Claro, tome el número donde el dígito [matemático] n [/ matemático] es el segundo dígito más a la izquierda de [matemático] n [/ matemático]. Entonces, el décimo dígito es 0, el 11 es 1, el 12 es 2, el 100 es 0, el 101 es 0, el 102 es 0, y así sucesivamente. Realmente no importa cuáles son los primeros 9 dígitos. Puede generar los dígitos de dicho número en tiempo constante, suponiendo que tenga acceso en tiempo constante a los dígitos de [math] n [/ math] en la base que le interesa.

Este número no se repite porque en la base [matemática] b [/ matemática] no ve [matemática] b ^ k [/ matemática] ceros seguidos hasta que [matemática] b ^ {k + 1} [/ matemáticas] th dígito. No estoy seguro exactamente cómo se define un número de distribución uniforme para los dígitos de un número, pero para cada [matemática] k [/ matemática] esto tiene un número aproximadamente igual de ocurrencias de cada dígito en la primera [matemática] b ^ k [/ math] dígitos.

More Interesting

Cómo implementar la generación de números aleatorios a nivel de hardware

¿Qué necesitamos antes de comenzar las estructuras de datos?

¿En qué situación no debemos usar la tabla Hash?

¿Puedo obtener una breve descripción general del documento 'Generación precisa de hologramas utilizando el método basado en capas y el algoritmo de transformación de Fourier iterativo'?

¿Debería un algoritmo de aprendizaje automático estar completo?

¿Cuál crees que es el algoritmo de aprendizaje automático más inteligente?

¿Cómo afecta el subprocesamiento múltiple al rendimiento de diferentes algoritmos de clasificación?

Cómo comparar dos algoritmos de recomendación en términos de problema de cola larga

¿Por qué el cifrado de la función Algoritmo de hash no puede transformar el texto cifrado en texto sin formato?

¿Cuáles son las aplicaciones del algoritmo de la Torre de Hanoi?

Cómo fusionar dos arreglos ordenados

Dado un gran diccionario de N frases cortas (1 o 2 términos) y una gran porción de texto, ¿puedo encontrar de manera eficiente las coincidencias para esas frases en el texto en tiempo sub-N, mientras perdono * los pequeños errores?

Actualmente estoy en USACO Gold, pero apenas puedo resolver nada. ¿Qué debo hacer para ser más competente? ¿Dominar el oro es solo una cuestión de aprender toneladas de algoritmos, o necesita más que eso?

¿Qué es un algoritmo para darme sistemáticamente todas las combinaciones de elementos r de una matriz de elementos K?

¿Es esta una función de clasificación de burbujas válida? Si es así, ¿entonces cómo?