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调用时我应该:

  • 从查询中删除“过时”的值。如果需要,删除“更新”缓存的 Max/Min 时
  • 添加新的价值。如果需要,更新 Max/Min

我的解决方案简单明了。也许您可以提出更好的建议?

4

3 回答 3

2

您可以使用max-heap被叫maxmin-heap被叫minqueue被叫q

x成为具有属性x.time和的元素x.val

何时Add调用:

  • Create一个新元素x
  • Add x到所有的数据结构。

的运行时间AddO(lgn)

何时Max调用:

  • max.GetMax()

的运行时间MaxO(1)

何时Min调用:

  • min.GetMin()

的运行时间MinO(1)

对于模型的维护,请执行以下操作:

每次下一个退出元素的周期q到期时,只有一个计时器被触发。

当期限x到期时:

  • q.Dequeue(), max.Delete(x),min.Delete(x)
于 2012-08-30T09:38:17.847 回答
1

您可以将每对存储在一个队列中。您应该将数据保留至少一分钟,然后在调用 Add 时删除过时的数据。

但是,您应该通过循环遍历堆栈数据来动态计算 Max 和 Min,否则您将失去数据完整性。

于 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 回答