4

一連の数字が増加または減少傾向にあるかどうかを確認する最良の方法は何ですか?

シーケンスの最初と最後の値を選択して、それらの違いをチェックできることはわかっていますが、もう少し堅牢なチェックが必要です。これは、ほとんどが減少するシーケンス内で少数の値が増加することを許容できるようにしたいことを意味し、その逆も同様です。

より具体的には、数値は次のように格納されます。

vector<int> mySequence;

私が扱っている数列についての詳細:

  • シーケンス内のすべての数値は、同じ桁数です。これは、[45 38 320 22 12 6] のようなシーケンスが表示されないことを意味します。
  • 下降傾向とは、シーケンス内のほとんどまたはすべての数値が前の数値よりも小さいことを意味します。(逆は上昇トレンドに適用されます)。結果として、次のシーケンスは降順と見なされます: [ 45 42 38 32 28 34 26 20 12 8 48]
4

6 に答える 6

9

増加数と減少数を累積すると、全体的な傾向が増加または減少しているかどうかがわかります。

于 2013-12-02T13:41:04.680 に答える
3

おそらく、傾向の推定と、線形回帰のようなある種の回帰を調べることができます。

もちろん、特定のアプリケーションに依存しますが、一般的には適切な問題のように思えます。

于 2013-12-02T13:47:19.153 に答える
1

シーケンスの中央値を簡単に計算して、最初の値より大きいかどうかを確認できると思います。
これは一つの方法であり、THE 方法ではありません。

別の方法として、常に平均的な媒体を考慮して、シーケンス内の昇順および降順の値の数を確認できます。

int trend = 0;
int avg = mySequence[0]; 
int size = mySequence.size();
for (int i=0; i < size - 1; ++i) {
  if(i > 0) { 
   avg = (avg + mySequence[i]) / 2; 
  }
  (mySequence[i+1] - avg) > 0 ? ++trend; --trend;    
}
于 2013-12-02T13:41:13.637 に答える
0

離散整数シーケンスに適用される数学的分析 (積分および微分計算など) の方法を使用することをお勧めします。

1 つの方法は、ローリング平均を計算し、それらの平均が増減するかどうかを確認することです。自然で簡単 ;)

于 2015-11-21T09:19:33.543 に答える
0

1 つの可能性は、シーケンス内の昇順および降順の値の数を数えることです。

int trend = 0;
for (int i=0;i<mySequence.size()-1;++i)
{
    diff = mySequence[i+1] - mySequence[i];
    if (diff > 0)
    {
       trend++;
    }
    else if (diff < 0)
    {
       trend--;
    }
}

例で指定したシーケンスは、trend-6で終了します

于 2013-12-02T13:46:42.663 に答える