Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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
C 数组中具有相同顺序的序列-标识序列_C_Arrays_Algorithm_Sequence - Fatal编程技术网

C 数组中具有相同顺序的序列-标识序列

C 数组中具有相同顺序的序列-标识序列,c,arrays,algorithm,sequence,C,Arrays,Algorithm,Sequence,我正在寻找解决问题的方法: 假设有一个数组,其中一些数字按升序排列,一些数字按降序排列,例如[1,2,5,9,6,3,2,4,7,8]有序列asc[1,2,5,9],desc[(9),6,3,2],asc[(2),4,7,8] 现在这不是问题,我可以简单地循环一个数组并将它们添加到某个数据结构中,当方向改变时,我将这个结构存储到某个位置,然后开始填充下一个结构 我发现棘手的是,如果我想有某种阈值。例如:[0,50100,99,98,97105160] 因此,降序序列[(100),99,98,97

我正在寻找解决问题的方法: 假设有一个数组,其中一些数字按升序排列,一些数字按降序排列,例如[1,2,5,9,6,3,2,4,7,8]有序列asc[1,2,5,9],desc[(9),6,3,2],asc[(2),4,7,8]

现在这不是问题,我可以简单地循环一个数组并将它们添加到某个数据结构中,当方向改变时,我将这个结构存储到某个位置,然后开始填充下一个结构

我发现棘手的是,如果我想有某种阈值。例如:[0,50100,99,98,97105160] 因此,降序序列[(100),99,98,97]可以忽略,因为总体变化为-3,而序列的增加幅度更大(+100),因此,算法只识别一个升序序列

我尝试了与上面相同的方法,只需在数据结构中添加所有序列,然后比较两个consequentive项的值的变化:(100 vs-3表示可以忽略-3)。但问题是,如果我说这种情况:

(仅在从序列开始到结束的值变化中示例)

[100,-3,+1,-50] 在这种情况下,我不能忽略下降运动,因为数字开始下降,然后略微上升,然后再次显著下降

这样的事情会让人很困惑: [100,-3,+3,-3,+3,-50]

这是我试图实现的目标的速写: 黑线表示数组中的初始数据,红色细线表示所需的结果输出

谁能给我指出正确的方向吗?我将如何处理这种情况?一次比较多个序列缓慢地将序列组合在一起?也许我需要多次检查序列?
我不确定我是否遇到过这样的问题,也不知道工作算法。这是我在分析一些数据时遇到的一个问题。

如果我理解正确,你会认为你的曲线是一系列交替递增和递减的序列,带有一些附加的噪声

消除噪声的通常方法是过滤数据。有数百万种方法可以做到这一点,其中大多数需要频率分析,但在你的情况下,你可能会得到足够好的结果与一些简单的

主要的一点是,相关变量不是数组中的值,而是它们的变化

给定n个值,考虑n-1个元素的数组,它们保持两个连续值之间的差异。 [0,50100,99,98,97105160]->50100,-1,-1,6,45

现在消除绝对值低于给定阈值的所有值(例如10)

->50100,0,0,0,0,45

然后,您可以通过查看所有正值或空值的条纹来检测上升序列(考虑到零值或负值,递减序列也是如此)


对于所有过滤过程,您必须为阈值找到一个最佳点。太低,它将无法消除不重要的变化,太高,它将消除显著的斜率反转。

我不知道我是否正确理解您的问题,但我以前曾多次进行过这种降维,因此我编写了一个小型javascript库来实现这一点。它使用

在该算法中,您可以定义三个连续点之间距离的自定义度量(以测量单个点在熵中增加的量)

。它的工作原理类似于堆,在堆中删除对总熵贡献不大的点:

for(var i=0; i<data.length; i++)
    heap.add(data[i]); 
    while(heap.minValue() < threshold)
        heap.removeMin();

for(var i=0;i什么是背景?这些数字代表什么?听起来像是NuMa问题。你似乎在寻找一种平滑算法:它听起来有点像是用分段线性函数来近似数据,可能还有一个额外的约束,即“条数”应该是有限的。另外,对前面的评论+1。一些背景可能会有所帮助。这个问题似乎与总变异有关;因此,小变异序列可以被视为噪声,但长序列的小变异可以累积成大变异