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].
- ¿Cómo debo hacer para que una matriz de objetos Bullet pueda colisionar con una matriz de objetos Zombie?
- ¿Cuáles son los algoritmos necesarios para resolver div2 500 y div2 1000 fácilmente en topcoder?
- Cómo desarrollar un algoritmo para detectar rangos de negociación horizontales / patrones de consolidación
- ¿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'?
- ¿Cuáles son los errores en el libro Data Structures and Algorithms Made Easy by Narsimha Karumanchi?
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.