【发布时间】:2015-02-22 14:50:18
【问题描述】:
我正在寻找解决问题的提示: 假设有一个数组,其中一些数字按升序排列,一些数字按降序排列,例如 [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,50,100,99,98,97,105,160] 因此,降序排列的序列 [(100), 99, 98, 97] 可以忽略,因为整体变化是 -3,而序列增加的幅度更大(+100),因此算法只识别出一个按升序排列。
我已经尝试过与上面相同的方法,只是将数据结构中的所有序列相加,然后比较两个后续项的值变化:(100 vs -3 表示 -3 可以忽略)。但是问题是如果我说这种情况:
(仅在序列开始到结束时改变值的示例)
[+100, -3, +1, -50] 在这种情况下,我不能忽视下降运动,因为数字开始下降,然后略微上升,然后又显着下降。
而且它会被这样的东西弄糊涂: [+100, -3, +3, -3, +3, -50]
这是我想要实现的目标的快速草图: 黑线表示数组中的初始数据,红色细线是所需的结果输出
有人能指出我正确的方向吗?我将如何处理这种情况?一次比较多个序列,慢慢将序列组合在一起?也许我需要多次浏览序列? 我不确定我是否遇到过这样的问题并且不知道工作算法。这是我在尝试分析一些数据时遇到的问题。
【问题讨论】:
-
背景是什么?这些数字代表什么?听起来像一个 NuMa 问题。您似乎正在寻找一种平滑算法:terpconnect.umd.edu/~toh/spectrum/Smoothing.html
-
这听起来有点像用分段线性函数来逼近数据,可能还有额外的限制,即“件”的数量应该受到限制。另外,对上一条评论+1。一些背景知识可能会有所帮助。
标签: c arrays algorithm sequence