algorithm - 如何处理经常生成的消息?

标签 algorithm data-structures

我有以下系统:

producer --->  proxy ---> consumer
    <good>     10 msg/s

生成消息的生产者 - 10 msg/second。将 bool 值返回给 consumerproxy 取决于生产者生成的消息数量,如果它生成超过 10,代理返回 false

这是时间戳:

0.1 0.2 0.25 0.26 0.27 0.28 0.29 0.30 0.31 0.32 0.33 0.34 2.0 2.1 2.2

出现在 0.1、0.2、0.25 ... 0.32 的消息它们是 good 我们返回 true,0.32 是坏的,因为它是 1 秒内的第 11 条消息,所以我们返回 false

这是一个原型(prototype):

bool shouldProxyAcceptMessage(float timestamp)

如何实现这个算法?

最佳答案

好的,我根据 OP 的评论修改了解决方案。该算法使用两个全局变量,nrMessagesstartTime , 并初始化 startTime到当前时间每当 nrMessage==0 (即当它收到第一条消息时);对于在 1 秒内到达的前 10 个时间戳,它返回 true。一旦收到早于 1 秒的时间戳,它就会重置 nrMessages=0 (因此 startTime 将在下一个时间戳到达时重新初始化)。

我们的隐含假设

long nrMessages = 0; // global variable
long startTime = 0;
boolean shouldProxyAcceptMessage(long timestamp) {
    if (nrMessages++ == 0) {
        startTime = System.currentTimeMillis()();
    }
    timeDiff = timestamp-startTime;
    if (timeDiff > 1000) {
        nrMessages = 0;
        return false;
    } else {
        return nrMessages <= 10;
    }
}

关于algorithm - 如何处理经常生成的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36331085/

相关文章:

python - 查找两个字符串之间的匹配百分比,同时考虑单词的顺序 - Python

java - 从数字列表中找到所有不同总和的算法

java - 哪种数据结构? LinkedList 还是 Java 中的任何其他?

java - Java 中是否有相当于 Android 的 LRUCache 的东西?

c++ - 又一个逻辑

arrays - 从一组属性重建位序列

javascript - 如何检查一个字符串是否完全由相同的子字符串组成?

c++ - φ(n) = (p-1)(q-1) p 和 q 是两个大数找到 e 使得 gcd(e,φ(n)) = 1

data-structures - 哪种数据结构支持最终幻想 ATB 风格的队列? (一个延迟队列)

java - 如何按升序和降序对带分隔符的字符串列表进行排序