首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何实施自定义评等系统(日期相关性下降)

如何实施自定义评等系统(日期相关性下降)
EN

Stack Overflow用户
提问于 2008-12-15 13:35:18
回答 3查看 383关注 0票数 2

我正在一个类似digg的网站上工作,用户可以提交“故事”。

我记录了每一项得到多少“选票”和“相似的添加”。相似的添加定义为两个用户添加相同的“链接”。

下面是算法的一部分(本质上是最重要的):

代码语言:javascript
复制
y = day number 
sy = number of adds on day y

∑ y[1:10]  sy / y

因此,基本上计算指定一天的“相似添加”的数量,除以内容发布后的秒数。在过去的10天里这样做(举个例子)。

但是,我不知道如何实现这一点,以便它能够很好地执行。我能想到的每一种方法都会很慢。

我唯一能想到的实现这一点的方法是,通过计算过去10天内提交的每一项的添加数,将花费很长时间。(因此,在过去的10天中,一个带有组日期的sql命令执行了10次--很明显,这个方法很糟糕)。

即使我保留了一个每天更新一次的表(并在后台运行上面的sql ),但一旦数据库变大,这仍然会非常缓慢。此外,评级将“过时”,因为它不是现场直播(例如,突发新闻“项目”永远不会到达顶端)。

有没有人有做这件事的经验?

EN

回答 3

Stack Overflow用户

发布于 2008-12-15 14:40:59

试试这个:每个人都有一票。你投的票坚持你投的最后一票。时间问题将来自于用户的行为。

票数 2
EN

Stack Overflow用户

发布于 2010-05-18 15:55:44

有一个对数加权平均值,你可以做。这样做的好处是,您只需要存储“当前值”和加权平均值。在您的例子中,“当前值”可以是当天的票数,并且您可以每天重新计算加权平均数。

代码语言:javascript
复制
const float WeightFactor = 0.70; //for example
float PreviousAverage = GetPreviousAverage();
float CurrentValue = GetVoteCountToday();

float NewAverage = (WeightFactor * CurrentValue) + ( (1-WeightFactor) * PreviousAverage);

只有当你有一个在设定频率上发生的新值时,这才能真正发挥作用。如果你想在任何时候重新计算你的选票,那么这是行不通的。

票数 1
EN

Stack Overflow用户

发布于 2008-12-15 14:21:49

不需要执行SQL 10次才能得到结果,您可以在一次执行中得到这样的结果:

代码语言:javascript
复制
select sum(dayval)
from
( select count(*) / (current_date-day+1) dayval
  from votes
  where story_id = 123
  and day >= current_date - 9
  group by (current_date-day+1)
)

(实际代码因所使用的DBMS而异)。

不过,我并不认为这会有好成绩!

也许是一种折衷方案:计算并将“开始一天”的值存储在每天的批处理过程中,然后为当天收到的每一次投票增加1的存储值?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/368369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档