1

そのようなクラスを作成したい:

public TrackMaxMin(int periodInSec)

// use current system time as time
public Add(decimal value)

// return maximum Value for the last periodInSec
public Max { get {} }

// return minimum Value for the last periodInSec
public Min { get {} }

私はFIFOクエリを使用してPair<DateTime, decimal>を保存できると思いますAdd。呼び出しごとに次のことを行う必要があります。

  • クエリから「古い」値を削除します。必要に応じて、キャッシュされた最大/最小の「更新」を削除する場合
  • 新しい価値を追加します。必要に応じて最大/最小を更新

私の解決策は簡単で簡単です。おそらくあなたはもっと良いものを提案することができますか?

4

3 に答える 3

2

と呼ばれる、と呼ばれる、およびとmax-heap呼ばれるを使用できます。maxmin-heapminqueueq

プロパティと。xを持つ要素になります。x.timex.val

いつAdd呼び出されるか:

  • Create新しい要素x
  • Add xすべてのデータ構造に。

の実行時間はAddですO(lgn)

いつMax呼び出されるか:

  • max.GetMax()

の実行時間はMaxですO(1)

いつMin呼び出されるか:

  • min.GetMin()

の実行時間はMinですO(1)

モデルのメンテナンスについては、次のようにします。

次に出て行く要素の期間が来るたびに起動されるタイマーを1つだけ持ってくださいq

の期間が到来すると、次のようxになります。

  • q.Dequeue()、、max.Delete(x)_min.Delete(x)
于 2012-08-30T09:38:17.847 に答える
1

各ペアをキューに保存できます。データを少なくとも1分間保持してから、Addが呼び出されたら、古いデータを削除する必要があります。

ただし、スタックデータをループしてその場で最大値と最小値を計算する必要があります。そうしないと、データの整合性が失われます。

于 2012-08-30T07:40:36.053 に答える
-1

これは便利です、

System.Diagnostics.Stopwatch s = new System.Diagnostics.Stopwatch();
s.Start();
s.Stop();
long elapsedms = s.ElapsedMilliseconds;
于 2012-08-30T07:39:20.080 に答える