gpt4 book ai didi

ruby-on-rails - 实现具有点赞数和时差的帖子排名算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:58:48 33 4
gpt4 key购买 nike

如何在 ruby​​ on rails 中根据点赞数和时差(帖子年龄)对帖子进行排名。这个任务有没有合适的算法。

算法代码如下

@rank = 0.00
s = post.likers(User).count
order = Math.log10([s.abs, 1].max)
if s > 0
sign = 1
elsif s < 0
sign = -1
else
sign = 0
end
td = (Time.now - post.created_at)
td2 = td.days * 86400 + td.seconds + ((1000000*(td.seconds)).to_f)/1000000
seconds = td2 - 1134028003
@rank = (sign * order + seconds / 45000).round(7)
post.update_attributes(popularity: @rank)
post.save!

最佳答案

How Reddit ranking algorithms work .如果帖子只能被点赞,也就是说,如果点赞数始终为正数,您可以通过删除 y 来简化该等式。

更新

链接算法的 ruby​​ 实现

def hot(ups, downs, date)
s = ups - downs
order = Math::log([s.abs, 1].max, 10)
sign = if s > 0 then 1 elsif s < 0 then -1 else 0 end
seconds = date.to_f - 1134028003
(sign * order + seconds / 45000).round(7)
end

注意他在这里没有使用Time.now。在这个实现中,帖子越旧,时间差()越小,因此将其视为奖励(添加)是有意义的。

在您的实现中,seconds 是现在和创建后时间之间的差异,因此您应该将其视为惩罚,方法是减去 seconds/45000 或计算 td as post.created_at - Time.now,没关系。

你不需要td2

此外,如果您想使用 Time.now 的实现,请记住您可能必须不时地运行一个脚本来更新数据库中的所有记录。

关于ruby-on-rails - 实现具有点赞数和时差的帖子排名算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32096588/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com