¿Cuál es el algoritmo más preciso (sin usar un software) para predecir el número 21 basado en 20 números anteriores?

Marcas Neal tiene razón en que no hay un algoritmo exacto garantizado para predecir el siguiente número porque cualquier algoritmo excluiría secuencias aleatorias. Pero un algoritmo que probablemente estará lo suficientemente cerca es el método de diferencias finitas.

Supongamos que tiene una secuencia [matemática] S = (s_0, s_1, s_2, \ dots, s_ {19}, \ dots) [/ math], y desea poder predecir el valor de [math] s_20 , s_21, \ dots [/ math] lo mejor posible.

Primero, cree la secuencia [math] \ Delta S = (s_1-s_0, s_2-s_1, \ dots, s_ {n + 1} -s_n, \ dots) [/ math], la primera diferencia finita de [math] S [/mates]. Está claro que si conoce tanto [matemática] \ Delta S [/ matemática] como [matemática] s_0 [/ matemática], puede calcular [matemática] S [/ matemática]. Afortunadamente, [math] \ Delta S [/ math] es a menudo más simple que [/ math] S [/ math]. Por ejemplo, si la secuencia es [matemática] S = (0,1,3,6,10,15, \ puntos) [/ matemática] (la secuencia de números triangulares), entonces [matemática] \ Delta S = (1 , 2,3,4,5, \ dots) [/ math], y es fácil predecir los siguientes valores de [math] \ Delta S [/ math].

A veces eso no es lo suficientemente fácil. Por ejemplo, la secuencia de números tetraédricos es [matemática] S = (1,4,10,20,35,56,84, \ puntos) [/ matemática] y [matemática] \ Delta S = (3,6, 10,15,21,28) [/ math], que aún es difícil de ver con un patrón. Pero al encontrar la segunda diferencia finita, [matemática] \ Delta \ Delta S = (\ Delta s_1- \ Delta s_0, \ dots) = (3, 4, 5, 6, 7, \ dots) [/ math] lo hace fácil para ver un patrón Puede adivinar que el siguiente valor en [matemáticas] \ Delta \ Delta S [/ matemáticas] es 8, por lo que el siguiente valor en [matemáticas] \ Delta S [/ matemáticas] es [matemáticas] 28 + 8 = 36 [/ matemáticas ], y el siguiente valor en [math] S [/ math] es [math] 84 + 36 = 120 [/ math].

Se puede demostrar que si una secuencia [matemática] S [/ matemática] está definida por un polinomio si grado [matemática] n [/ matemática], entonces la secuencia [matemática] \ Delta ^ {n + 1} S = (0 , 0, \ puntos) [/ math].

No todas las secuencias funcionarán así. Por ejemplo, la secuencia [matemática] F = (0,1, 1, 2, 3, 5, 8, 13, 21, \ cdots) [/ matemática] tiene una secuencia de diferencia finita de [matemática] \ Delta F = ( 1,0, 1, 2, 3, 5, 8, 13, \ cdots) [/ math]. Nunca convergerá a todos los ceros. Pero no es difícil predecir el siguiente valor en [matemática] \ Delta F [/ matemática], lo que le permite recuperar el siguiente valor en [matemática] F [/ matemática].

La próxima vez que te sorprenda una secuencia, prueba el método de diferencias finitas.

Por definición, no, no puede haber un algoritmo preciso debido a los números que podrían generarse aleatoriamente.

Con un generador de números completamente aleatorio, es teóricamente imposible predecir el siguiente número, y si pudiera, estaría viendo un generador de números aleatorios roto.

Le daré $ 10 a la persona que puede predecir el próximo número en la siguiente secuencia. Después de revelar la secuencia, incluso te daré una pequeña pista mostrándote el código que la generó.

1 3 3 2 4 1 2 1 4 3 4 3 5 3 2 6 3 6 1 4

#include
#include
#include

int main ()
{
int i = 0;

srand (tiempo (0));

para (int i = 0; i <20; i ++)
printf (“% d”, (rand ()% 6) +1);

printf (“\ n”);
}