确定阵列是增加还是减少的最佳方法

Rom*_*dgz 1 arrays algorithm

给定一组值,我想确定它是一个增加还是减少的数组.当然,如果我们只想检测Monotone Increase/Decreasing,这是微不足道的.但是如果我们有这样的数组:

3,3.2,3.4,3.3,3.4,3.7,4.2,4.8

它确实是一个增加的数组,但不是单调的,因为对于i = 3,我们有3.3 <3.4

另外,对我来说,第一个和最后一个索引之间的单一检查不是一个选项,因为我可能正在处理角度,而且我可以完成多个圆圈:

270º,290º,315º,345º,5º

我会说顺时针方向也在增加,尽管5º<270º

另外,如果我定义从0到180然后-180到0而不是0到360的角度,这又是一个问题:

170º,175º,180º,-175º,-170º对我来说再次增加.

我想为C++编写这个,但对我来说重要的是要使用的算法.任何的想法?

Kar*_*ath 6

使用线性回归.根据产生的斜率,您可以决定它是增加还是减少.

来自维基百科的线性回归示例

至于循环情况:我只需移动列表前面的"负"元素然后进行测试......

注意:对于像5 4 3 2 1 1000这样的特殊情况仍会告诉你它正在增加,但很难给出你的问题的确切答案,因为"增加"的定义非常模糊.(你可能想过滤掉一些疯狂的价值?)

另一个简单的方法是计算相邻元素之间的增加和减少的数量,但在这种情况下10 11 12 13 14 0 1 2 3 4会明显增加(这可能是正确的答案,很难说......)

如果不了解你想要实现的目标,就很难给出一个好的答案.