我想知道是否有可能采用数字列表。
lst = [1, 1, 2, 3, 5, 8, 13, 21, 34]
并创建一种算法来弄清楚模式是什么:F(n) = F(n-1) + F(n-2)一种然后继续进行并添加下一个数字:
F(n) = F(n-1) + F(n-2)
lst.append(x) # x being the next number which is 55
可能是一种可以应用于任何数字列表的算法
简短的答案是:您要的是不可能的。
您正在寻找的是一种通常与曲线拟合有关的算法。对于此特定问题,一种可能的方法是Lagrange多项式。
但是请注意,通常来说,您想要的东西可能没有真正的解决方案。例如,考虑以下简单序列:2, 4, 6, 8, 10, 12, 14。接下来的几个数字是什么?
2, 4, 6, 8, 10, 12, 14
您可能会说答案是16, 18, 20依此类推,因为您使用方程式f(n) = 2*nwhere n是项的位置(从1开始)。
16, 18, 20
f(n) = 2*n
n
请注意,形式的等式是无限的:
f(n) = [(n-1)*(n-2)*(n-3)*(n-4)*(n-5)*(n-6)*(n-7) * g(n)] + 2*n
第二项对产生正确的值,n = 1..7而第一项0仅对的那些值产生a n。因此,您可以为g(n)第一项中的最后一个乘数选择任何函数(具有有限范围),并从n=8开始获取所需的任何值。
n = 1..7
0
g(n)
n=8
例如,对于g(n) = 20*n,
g(n) = 20*n
f(n) = (n-1)*(n-2)*(n-3)*(n-4)*(n-5)*(n-6)*(n-7) * 20 * n + 2*n
将产生一个列表: 2, 4, 6, 8, 10, 12, 14, 806416
2, 4, 6, 8, 10, 12, 14, 806416
因此,您指出的问题是无法解决的。
但是,如果表征算法的形式(或表征要使用的函数族来解决问题),则可以获得最适合数字的函数。例如,您可以说它f(n)是阶数的多项式1(线性方程式),它将减少可能性的数量并给您f(n) = 2 * n。这些方法中的某些方法传统上用于机器学习,尤其是线性回归和逻辑回归。
f(n)
1
f(n) = 2 * n