Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 查找序列中下一个数字的算法_Algorithm_Numbers_Sequence - Fatal编程技术网

Algorithm 查找序列中下一个数字的算法

Algorithm 查找序列中下一个数字的算法,algorithm,numbers,sequence,Algorithm,Numbers,Sequence,自从我开始编程以来,这一直是我好奇的事情。但对我来说似乎太复杂了,我甚至无法尝试 我很想看到一个解决办法 1, 2, 3, 4, 5 // returns 6 (n + 1) 10, 20, 30, 40, 50 //returns 60 (n + 10) 10, 17, 31, 59, 115 //returns 227 ((n * 2) - 3) 很抱歉让您失望,但这不太可能(通常),因为对于任何给定的k值,都有无限多的序列。也许有一些限制 你可以看看这篇文章,它指向。我喜欢这

自从我开始编程以来,这一直是我好奇的事情。但对我来说似乎太复杂了,我甚至无法尝试

我很想看到一个解决办法

1, 2, 3, 4, 5    // returns 6 (n + 1)
10, 20, 30, 40, 50   //returns 60 (n + 10)
10, 17, 31, 59, 115  //returns 227 ((n * 2) - 3)

很抱歉让您失望,但这不太可能(通常),因为对于任何给定的
k
值,都有无限多的序列。也许有一些限制


你可以看看这篇文章,它指向。

我喜欢这个想法,序列一和序列二在我看来是可能的,但是你不能概括,因为序列可能会完全偏离基准。答案可能是你不能概括,你能做的是写一个算法来执行一个特定的序列,知道(n+1)或(2n+2)等等

你可以做的一件事是在元素i和元素i+1以及元素i+2之间取一个差

例如,在第三个示例中:

10 17 31 59 115
17和10之间的差值为7,31和17之间的差值为14,59和31之间的差值为28,115和59之间的差值为56

你注意到它变成了元素i+1=i+(7*2^n)

So 17=10+(7*2^0)

和31=17+(7*2^1)

等等…

您可以尝试使用。它将帮助您找到描述给定序列的公式


对不起,我不能告诉你更多了,因为我的数学教育发生在很久以前。但是你应该在好书中找到更多的信息。

你想做的就是多项式插值。有很多方法(请参阅),但必须有多项式次数的上界U和至少U+1值

如果有顺序值,那么有一个简单的算法

给定一个序列x1,x2,x3,…,设δ(x)为差序列x2-x1,x3-x2,x4-x3。如果有n次多项式的连续值,那么Delta的第n次迭代是一个常量序列

例如,多项式n^3:

1, 8, 27, 64, 125, 216, ...
7, 19, 37, 61, 91, ...
12, 18, 24, 30, ...
6, 6, 6, ...
要获得下一个值,请填写另一个6,然后反向计算

6, 6, 6, 6 = 6, ...
12, 18, 24, 30, 36 = 30 + 6, ...
7, 19, 37, 61, 91, 127 = 91 + 36, ...
1, 8, 27, 64, 125, 216, 343 = 216 + 127, ...

对上述数值数量的限制确保了在执行差异时,您的序列永远不会变为空。

这种数字序列通常是“智能测试”的一部分,这让我想到这样一种算法是通过(至少是)一个,这是很难做到的。

正式地说,部分序列没有唯一的下一个值。通常理解的问题可以清楚地表述为:

假设显示的部分序列仅足以约束某些生成规则,推导出最简单的可能规则并显示生成的下一个值

这个问题涉及到“最简单”的含义,因此对于算法解决方案来说并不是很好。如果您将问题限制在生成规则的某一类函数形式上,则可以这样做,但细节取决于您愿意接受的形式。

这本书有很多页真正实用的算法来做这类事情。这很值得一读

前两种情况很简单:

>>> seq1 = [1, 2, 3, 4, 5]
>>> seq2 = [10, 20, 30, 40, 50]
>>> def next(seq):
...   m = (seq[1] - seq[0])/(1-0)
...   b = seq[0] - m * 0
...   return m*len(seq) + b
>>> next(seq1)
6
>>> next(seq2)
60

第三种情况需要求解非线性函数。

对于任意函数,这是不可能的,但是对于每个例子中的线性函数,这就足够简单了

您有
f(n+1)=a*f(n)+b
,问题相当于查找
a
b

给定序列中至少三个项,您可以这样做(您需要三个项,因为您有三个未知项——起点、
a
b
)。例如,假设您有
f(0)
f(1)
f(2)

我们可以解方程:

f(1) = a*f(0) + b
f(2) = a*f(1) + b
解决方案是:

a = (f(2)-f(1))/(f(1)-f(0))
b = f(1) - f(0)*(f(2)-f(1))/(f(1)-f(0))
(您需要分别解决
f(0)=f(1)
的情况,以避免被零除。)

一旦有了
a
b
,就可以对起始值重复应用公式以生成序列中的任何项

也可以编写一个更通用的程序,在序列中给定任意三个点(例如第4、第7、第23或其他任何点)时,该程序可以工作。这只是一个简单的例子

不过,我们必须再次对解决方案的形式做出一些假设。在本例中,将其视为线性,如您的示例所示。例如,我们可以将其视为更一般的多项式,但在这种情况下,根据多项式的阶数,需要更多的序列项才能找到解。

另请参见本书中的“寻找序列从何而来”一章道格拉斯·霍夫斯塔特的《流体概念和创造性类比:思维基本机制的计算机模型》


前两行很简单,但如何推广?我认为第二行返回60…是的,谢谢Maurizio。没有注意到:在第三个例子中,看到这个:有无限多的函数;谁说下一个数字真的是6?是的,可能有很多种可能性,但是你不能找到一个对f有效的吗或者给定的数组并使用它?它不一定要涵盖所有的可能性。这有意义吗?问题是下一个数字可以是任何东西,你可以找出一个模式/多项式来拟合这个新模式。例如,有一个模式适合,1,2,3,4,5,6,但也适合1,2,3,4,5,5,5..那就是也就是说,“带有某些约束”的语句不是一次性的,如果您有某些约束(假设您将它们限制为多项式阶数2,
ax^2+bx+c
),您可能会想出一些东西。但一般来说,它不是。1、2、3、4、5//返回0(n%6)另一方面,几年前,我写了一个有趣的“序列”在线测试,看看你有多像一个“数学极客”,知道你在做什么