我正在开发一个系统,该系统必须根据排名实时返回 HitTest 门的“文章”。该文章的点击率。
我的第一个想法是为每篇文章存储编号。点击率与时间的关系。然后我会规范化这个函数,并计算它的一阶导数,它会返回增长率。然后通过二阶导数,我可以知道它增长了多少,以及它是否达到了某个阈值 -> 将其标记为趋势。
问题是:例如,我可以在一天结束时“离线”执行此操作,但我不知道如何连续执行...
我知道存在诸如 Storm 之类的东西,但我正在寻找像这样具体的东西(用伪代码编写的算法或解决这个问题而不是通用问题的文章)。
最佳答案
跟踪 HitTest 门文章的一种简单方法是使用 LRU 缓存。这有效地跟踪其最近访问的元素。频繁访问的文章会将热点文章保留在 LRU 中,而不经常访问的文章会被丢弃。如果您想优化排名,您可以修改 LRU 以跟踪文章收到的点击次数。
当然,还有更复杂的方法,但这很容易实现,具有良好的计算特性,并且可能会提供类似的响应。
您也可以尝试使用 circular buffer对于每篇文章。一旦缓冲区填满,对文章的每次访问都可以用于更新一个变量,该变量指示对文章的最旧点击。由于您知道最新和最旧的命中,因此您可以估计每个时间单位的命中。缺点:大量内存占用,经常访问的文章统计不准确。
同样,您可以将每篇文章与包含 <Time,Count>
的链表相关联对。每次命中发生时,如果自 Time
以来不到一秒(或你有什么),则添加到链表顶部的计数。 .如果时间过长,请在列表的前面添加一对新的。然后,您可以将链表视为用于计算导数的数据系列。在遍历列表时减少太旧的元素。
关于algorithm - 实时趋势算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33024947/