各レコードにタイムスタンプがある 100,000 を超えるレコードを含むデータセットがあります。
このデータセットは、それぞれが一連の子ノードからデータを収集するいくつかの「コントローラー」ノードから集約されています。各コントローラーはこれらのレコードを定期的に収集し (たとえば、5 分ごとまたは 10 分ごとに 1 回)、レコードにタイムスタンプを適用するの はコントローラーです。
例えば:
コントローラ 1 には、その時点でタイムスタンプが付けられた 20 のレコード、その時点でタイムスタンプが付けられたt
23 のレコード、その時点t + 5 minutes
で 33 のレコードがあるとしt + 10 minutes
ます。
コントローラ 2 には、 time にタイムスタンプが付けられた 30 のレコード、 time にタイムスタンプが付けられた(t + 2 minutes) + 10 minutes
32 のレコード、 time(t + 2 minutes) + 20 minutes
にタイムスタンプが付けられた 41 のレコードなどがあり(t + 2 minutes) + 30 minutes
ます。
ここで、すべてのタイムスタンプのセットと、各タイムスタンプに表示されたレコード数のカウントだけが情報であると仮定します。つまりi)
、どのコントローラーによってどのレコード セットが作成されたか、ii)
各コントローラーの収集間隔、またはコントローラーii)
の総数がわからないということです。すべてのタイムスタンプのセットを個々のサブセットに分解して、特定の各サブセットの連続する (順序付けられた) 要素間の差異が 0 に非常に近くなるようなアルゴリズムはありますか? あるサブセットi
から別のサブセットに要素を追加すると、j
これが増加します。分散?このデータセットでは、CPU のタイミングやネットワークの遅延などにより、1 つのコントローラーの「周期性」が +/- 数秒変動する可能性があることに注意してください。
ここでの最終的な目的は、a)
コントローラーの数b)
と各コントローラーのサンプリング間隔を確立することです。これまでのところ、周期関数の観点から問題について考えてきたので、おそらくその領域から有用な分解方法がいくつかあるでしょう。
もう 1 つのポイントは、各レコードがどのコントローラーからのものであるかを知る必要はなく、各コントローラーのサンプリング間隔を知る必要があるということです。たとえば、2 つのコントローラが両方とも timeu
にサンプリングを開始し、一方が 5 分間隔でサンプリングされ、もう一方が 50 分間隔でサンプリングされた場合、5 は因数であるため、50 分マークで 2 つを分離することは困難です。これらの時折のオーバーラップにもかかわらず、各コントローラーの間隔を計算するのに十分な情報を収集できる限り、これは問題ではありません。