algorithm - 实时趋势算法

标签 algorithm trend

我正在开发一个系统,该系统必须根据排名实时返回 HitTest 门的“文章”。该文章的点击率。

我的第一个想法是为每篇文章存储编号。点击率与时间的关系。然后我会规范化这个函数,并计算它的一阶导数,它会返回增长率。然后通过二阶导数,我可以知道它增长了多少,以及它是否达到了某个阈值 -> 将其标记为趋势。

问题是:例如,我可以在一天结束时“离线”执行此操作,但我不知道如何连续执行...

我知道存在诸如 Storm 之类的东西,但我正在寻找像这样具体的东西(用伪代码编写的算法或解决这个问题而不是通用问题的文章)。

最佳答案

跟踪 HitTest 门文章的一种简单方法是使用 LRU 缓存。这有效地跟踪其最近访问的元素。频繁访问的文章会将热点文章保留在 LRU 中,而不经常访问的文章会被丢弃。如果您想优化排名,您可以修改 LRU 以跟踪文章收到的点击次数。

当然,还有更复杂的方法,但这很容易实现,具有良好的计算特性,并且可能会提供类似的响应。

您也可以尝试使用 circular buffer对于每篇文章。一旦缓冲区填满,对文章的每次访问都可以用于更新一个变量,该变量指示对文章的最旧点击。由于您知道最新和最旧的命中,因此您可以估计每个时间单位的命中。缺点:大量内存占用,经常访问的文章统计不准确。

同样,您可以将每篇文章与包含 <Time,Count> 的链表相关联对。每次命中发生时,如果自 Time 以来不到一秒(或你有什么),则添加到链表顶部的计数。 .如果时间过长,请在列表的前面添加一对新的。然后,您可以将链表视为用于计算导数的数据系列。在遍历列表时减少太旧的元素。

关于algorithm - 实时趋势算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33024947/

相关文章:

excel - 如果日期时间单元格是 "AM"或 PM,如何查找并返回不同列中的值?

具有重复字符的 Python 长排列

javascript - 时间序列数据的线性回归

php - 使用 php/mysql 的 Twitter 风格趋势

ruby - 什么算法可用于警告异常趋势?

mysql - 如何编写足球排名系统算法

algorithm - 人工神经元的输出

algorithm - 对于树的每个节点,找到最近的祖先节点,使得 val[node] 与 val[ancestor] 互质

java - Eratosthenes算法的并行筛寻找素数