Noa*_*oza 2 python algorithm math
我想知道是否可以列出一些数字,例如.
lst = [1, 1, 2, 3, 5, 8, 13, 21, 34]
Run Code Online (Sandbox Code Playgroud)
并创建一个算法来确定模式是什么:F(n) = F(n-1) + F(n-2)
一个然后继续并添加下一个数字:
lst.append(x) # x being the next number which is 55
Run Code Online (Sandbox Code Playgroud)
可能是一种可应用于任何数字列表的算法
我想说你想做的事是不可能的。主要是因为有无数个以某些特定元素开头的序列。在这里,您想要找到之后的下一个数字,1, 1, 2, 3, 5, 8, 13, 21, 34
并且您声称它们是55、89、144, ...。大多数人都同意你所说的“啊,这是斐波那契数列”。
但我会告诉你,不,下一个元素可以是55, 91, 149,序列是ceil(e^(n-1)/2))
。
事实上,我可以给你无限数量的具有相同起始元素的序列。不相信我?
这个怎么样F(n) = F(n-1) + F(n-2) + F(n-9)
。编写一个程序,您会发现起始元素是相同的。想要另一件 - 给你F(n) = F(n-1) + F(n-2) - 4 * F(n-9) + F(n - 17)
。
你永远无法说服我或其他任何人你的解决方案是正确的而我的解决方案是错误的。
简短的回答是:你要求的是不可能的.
您正在寻找的是一般与曲线拟合相关的算法.对于这个特殊问题,一种可能的方法是拉格朗日多项式.
但请注意,一般来说,您想要的可能没有真正的解决方案.例如,考虑简单的序列:2, 4, 6, 8, 10, 12, 14
.接下来的几个数字是什么?
您可以说答案是16, 18, 20
等等,因为您使用等式f(n) = 2*n
,其中n
是术语的位置(从1开始).
请注意,表格中存在无限的等式:
f(n) = [(n-1)*(n-2)*(n-3)*(n-4)*(n-5)*(n-6)*(n-7) * g(n)] + 2*n
第二个术语产生正确的值,n = 1..7
而第一个术语0
仅产生一个值n
.因此,您可以为g(n)
第一项中的最后一个乘数选择任何函数(有限范围),并从中获得您想要的任何值n=8
.
例如,有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
因此,您所说的问题是无法解决的.
但是,如果你的描述算法的形式(或表征要使用,解决问题的函数族),你可以得到最适合用于数字功能.例如,你可以说这f(n)
是一个有序的多项式1
(线性方程),这将减少可能性的数量并给你f(n) = 2 * n
.其中一些方法传统上用于机器学习,尤其是线性和逻辑回归.
归档时间: |
|
查看次数: |
1394 次 |
最近记录: |