相关疑难解决方法(0)

执行"最后[秒/分钟/小时]"数据结构的命中

我认为这是一个相当常见的问题,但我似乎无法通过谷歌搜索找到答案(也许有一个更准确的名称,我不知道的问题?)

您需要使用"hit()"方法实现一个结构,该方法用于报告命中和hitsInLastSecond | Minute | Hour方法.你有一个具有纳秒准确度的计时器.你如何有效地实现这一目标?

我的想法是这样的(在psuedo-C++中)

class HitCounter {
  void hit() {
    hits_at[now()] = ++last_count;
  }

  int hitsInLastSecond() {
    auto before_count = hits_at.lower_bound(now() - 1 * second)
    if (before_count == hits_at.end()) { return last_count; }
    return last_count - before_count->second;
  }

  // etc for Minute, Hour

  map<time_point, int> hits_at;
  int last_count = 0;
};
Run Code Online (Sandbox Code Playgroud)

这有用吗?好吗?有更好的东西吗?

更新:添加修剪并根据评论切换到双端队列:

class HitCounter {
  void hit() {
    hits.push_back(make_pair(now(), ++last_count));
  }

  int hitsInLastSecond() {
    auto before = lower_bound(hits.begin(), hits.end(), make_pair(now() - 1 * second, -1));
    if …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm data-structures

11
推荐指数
1
解决办法
3058
查看次数

随时间推移的滑动窗口 - 数据结构和垃圾收集

我试图实现移动平均线的某些东西.

在该系统中,不保证每个时间段的整数数量.我需要计算每个时期的平均值.因此,我不能简单地按数量滑过整数列表,因为这与时间无关.

我可以记录每个值及其相关时间.我们将通过系统运行大量数据,因此"垃圾收集"旧数据非常重要.

值得注意的是,我需要在每个周期结束后将平均值保存到磁盘.但是,在将数据保存到磁盘和引入新时段的数据之间可能会有一些重叠.

我可以使用哪些高效的数据结构来存储,滑动和垃圾收集这类数据?

algorithm jvm sliding-window data-structures

9
推荐指数
1
解决办法
5855
查看次数

标签 统计

algorithm ×2

data-structures ×2

c++ ×1

jvm ×1

sliding-window ×1