Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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_Pattern Matching_Logic_Computation - Fatal编程技术网

Algorithm 发现数字模式的算法

Algorithm 发现数字模式的算法,algorithm,pattern-matching,logic,computation,Algorithm,Pattern Matching,Logic,Computation,嗯,我必须开发一个软件,可以发现数字序列中的模式,例如: 第一种模式: 10,20,30,40,50.. (软件必须了解数字始终为计数+10) 第二种模式: 1,3,5 ... (软件必须理解数字总是奇数) 因此,模式由用户定义,软件必须继续该序列。有没有一些算法是这样提出的 PS:我在考虑I.A技术,比如反向传播或其他,但这是更好的解决方案吗?没有更简单的解决方案吗?我能看到的唯一解决方案是编写一个函数来检查每个可能的模式,然后输出一次返回true的结果。因此,您首先检查添加的值,然后检查下一

嗯,我必须开发一个软件,可以发现数字序列中的模式,例如:

第一种模式: 10,20,30,40,50.. (软件必须了解数字始终为计数+10)

第二种模式: 1,3,5 ... (软件必须理解数字总是奇数)

因此,模式由用户定义,软件必须继续该序列。有没有一些算法是这样提出的


PS:我在考虑I.A技术,比如反向传播或其他,但这是更好的解决方案吗?没有更简单的解决方案吗?

我能看到的唯一解决方案是编写一个函数来检查每个可能的模式,然后输出一次返回true的结果。因此,您首先检查添加的值,然后检查下一个值是否同样大。然后检查其他人是否遵循上述模式。请注意,您的第一个和第二个示例中给出的算法都具有相同类型的模式(新值=最后一个值+常量)

因此,在伪代码中,您的第一个函数如下所示:

  step=value[1]-value[0]
   for (value as i)
      if (value[i]-value[i-1]!=step)
         return false
return true
接下来,您可能想开始寻找一种检测素数的方法,我建议您进行搜索,因为这是一种常见的算法


如果你认为真的会有几乎无限的可能序列,我建议你研究一下。然后使用匹配数作为程序的适应度函数。但是,只有当您有大量可用数据点,甚至可能根本无法工作时,这才有效。另一个问题是,这样您将无法输出正确的答案,而只能预测未来的答案

您建议的两个问题都是线性的,因此都有以下形式的解决方案

y = mx + c
例如,第一个是
m==10,c==10
,第二个是
m==2,c==1

确定这样的线性关系很简单,使用技术来确定更复杂的关系是可以做到的,但是教软件它们的“含义”(例如“奇数”)或多或少是不可能的。例如,要找到关系的“性质”,需要

2, 3, 5, 7, 11, 13

您可能需要编写一个特定的测试,并考虑到这种关系

要使算法能够学习任何东西,您需要一个能将您的搜索空间限制在较小空间内,或使您的算法更喜欢某些假设而不是其他假设的算法

搜索的空间是从整数到整数的所有函数的空间。这个空间太宽了,无法生成实用的算法。你必须选择一个较小的空间


另请参见和。

假设给定了
a0、a1、…、ak
。您可以选择几种模式:

  • 多项式序列,Ansatz
    an=c0+c1*n+c2*n^2+…+ck*n^k
    :。通过
    k+1
    (0,a0)
    (1,a1)
    (k,ak)
    您总是可以拟合次多项式
    k
    。这在一般情况下不是很有趣,但是如果最高阶系数(s)
    ck
    为零,那么最后一个序列号
    ak
    适合于前面序列号定义的多项式。这样你可以找到奇数、方数、三角形数(1、1+2、1+2+3,…)等等

  • 线性递归,Ansatz
    an=c0+c1*a(n-1)+…+cm*a(n-m)
    :对于顺序的线性递归,需要
    m+1
    方程
    m
    。这样,您可以找到像斐波那契数这样的序列(
    an=a(n-1)+a(n-2)
    ),也可以找到几何序列(例如1,2,4,8,…)和像1,11,111。。。(
    an=10*a(n-1)+1
    )。以下是
    m+1
    方程:

    am=c0+c1*a(m-1)+…+cm*a0

    a(m+1)=c0+c1*am+…+cm*a1

    a(2m)=c0+c1*a(2m-1)+…+cm*am


    因此,您可以设置
    m=floor((k-1)/2)
    s.t.
    2m,除非您将自己限制为特定类型的序列,否则这是一个非常困难的问题。所有模式都相同吗?(我的意思是,两个例子都是代数序列,它们可以是其他类型的吗?)不是@elyashiv,模式总是代数序列(数字)。对不起,我指的是算术级数。是吗?给定n个数,你总是可以通过这些点拟合n-1次多项式。然而,这并不总是你所追求的序列。注意-你需要知道所有可能的模式。这是不切实际的,我不能知道所有可能的模式。这是无限的。你希望如何检测你甚至不知道的模式?据我们所知,该算法可能是“用seed 53213生成的随机数”。@user2776409你能列举它们吗?如果不能,你会有一段困难的时间。多项式序列总是适合有限数量的样本点,但它们并不总是能很好地预测。a.I(人工智能技术)怎么样?我在回答中添加了一点关于AI的内容,请注意,这可能不会像您预期的那样有效。这取决于您对AI的定义。机器学习技术可能很有用,但需要训练数据集,并且无法识别训练范围之外的任意关系。