Un juego de 64 discos de Tower of Hanoi es jugado por un programa que realiza movimientos a una velocidad creciente. Comienza a 1000 movimientos por segundo. ¿Cuánto tiempo tomará?

Para facilitar las cosas, divida el tiempo en bloques de 500 segundos y etiquételos [math] b_1, b_2, .. [/ math]

[matemática] b_1 [/ matemática] es el bloque correspondiente a 1 a 500º segundo, ambos inclusive (movimientos realizados durante este tiempo = [matemática] 500 \ cdot 1000 [/ matemática]), [matemática] b_2 [/ matemática] corresponde a 501 a 1000 segundos (movimientos realizados durante este tiempo = [matemáticas] 500 \ cdot (1000 + 0.05) [/ matemáticas]) y así sucesivamente. En general, el número de movimientos que se pueden realizar durante un bloque arbitrario [math] b_i [/ ​​math] viene dado por:

[matemáticas] m (b_i) = 5 \ cdot 10 ^ 5 + (i-1) 0.05 [/ matemáticas]

Suponga que se necesitan [matemática] n [/ matemática] bloques de tiempo para completar [matemática] 2 ^ {64} –1 [/ matemática] movimientos. Los movimientos acumulativos realizados al final de un bloque [math] b_n es: [/ math]

[matemáticas] M (n) = \ sum_ {i = 1} ^ {n} m (b_i) [/ matemáticas]

Establecer la suma anterior para que sea igual a [math] 2 ^ {64} -1 [/ math] y simplificar le dará un resultado cuadrático:

[matemáticas] 2 ^ {64} -1 = \ sum_ {i = 1} ^ {n} 5 \ cdot 10 ^ 5 + \ sum_ {i = 1} ^ {n} (i-1) 0.05 [/ matemáticas]

[matemáticas] 2 ^ {64} -1 = 5 n \ cdot 10 ^ 5 -0.05 n +0.05 (n + 1) \ frac {n} {2} [/ matemáticas]

Resolviendo que puede obtener [matemáticas] n = 2 \ cdot 10 ^ {10} [/ matemáticas] (utilicé Wolfram Alpha debido a la magnitud de los números involucrados). Entonces, la respuesta final es [matemáticas] 500 \ cdot 2 \ cdot 10 ^ {10} [/ matemática] [matemática] = 10 ^ {13} [/ matemática] segundos.

El número de movimientos necesarios como mínimo es 2 ^ 64 – 1. 1000 se puede aproximar a 2 ^ 10, por lo que tomaría aproximadamente 2 ^ 54 segundos. Eso es aproximadamente 16 x 10 ^ 15 segundosz

Ninguno de los pasos necesarios para resolver el problema de la torre de brahma con un número de disco igual a 64 es 2 ^ 64-1 si su computadora está resolviendo el problema a 1 movimiento por segundo, tardará 590000000000 años o 59 × 10 ^ 10 años desde que se está resolviendo a una velocidad de 1000 movimientos por segundo, entonces tomará (59 × 10 ^ 10) / 10 ^ 3 años, que es 59 × 10 ^ 7 años, que es 590000000 años.

Soy demasiado vago para hacer los cálculos reales. Pero el aumento de velocidad es solo aditivo. 0.5 movimientos por cada 500 movimientos es un aumento simple y aditivo de la velocidad. Por lo tanto, el resultado final del tiempo requerido no será mucho menor que el real. Déjame x el tiempo total que se tarda sin aumentar la velocidad. Con el aumento de velocidad, al máximo, obtendrá una reducción de x * 0.5 / 500 pasos.

Para cualquier disminución significativa en el tiempo requerido, necesita un aumento multiplicativo de la velocidad (cada 500 movimientos, aumento de la velocidad en un 105% de la velocidad actual) o aumento exponencial (la velocidad se convierte en el doble de la velocidad actual).

More Interesting

¿Cómo se usan las matemáticas discretas en el aprendizaje automático?

¿Qué temas en matemáticas debo aprender para la programación competitiva?

¿Es posible crear un lenguaje completo de Turing con solo un puntero de instrucción modificable, una operación de intercambio y un incremento por una operación?

¿Cuál es la forma más sencilla de explicar el problema P = NP?

¿La teoría de números todavía parece ser central o el área más importante de las matemáticas?

¿Qué es el método de posición falsa y dónde se usa en tiempo real?

¿Cuáles son los fundamentos matemáticos de la inteligencia artificial?

¿Cuáles son algunas formas interesantes de usar tecnologías no convencionales en la programación?

¿Cuál es la diferencia entre funciones y acciones en QTP?

Cómo abordar problemas de cobertura de conjuntos en la programación de enteros

Si no disfruto de las matemáticas / aprender sobre matemáticas, ¿debo abandonar una carrera profesional que implica codificación (programación / desarrollo web / etc.)?

Cómo solucionar problemas y resolver problemas de capa 1

Cómo detectar si el siguiente cuerpo de cierta longitud y altura que gira en un punto de anclaje toca una posición particular

¿Cuáles son algunos proyectos simples de C ++ que puedo emprender que me ayudarán a comprender los vectores?

Big data, seguridad informática y matemática financiera; ¿Cuál de estos campos es el mejor para emprender como carrera si eres de antecedentes matemáticos?