如何实现的一个推荐状算法?
-
09-06-2019 - |
题
如何实现网站有一项建议,系统类似于计算器/推荐/签交易?即, 用户提交的内容和网站需要计算出某种"辣"如何根据流行的项目。该流程如下:
- 用户提交的内容
- 其他用户查看和表决的内容(假定90%的用户只景内容和10%的选民积极向上或向下的内容)
- 新内容是连续的提交
我怎么实现了一种算法,计算出"热"的一种提交项目,最好是在现实的时间?是否有任何最佳做法或设计的模式?
我会假设算法考虑以下因素:
- 当一个项目是提交
- 当每个投票铸
- 当该项目被视
E.g。一个项目,获取一定的涓流的选民将留有些"热"不断,而一个项目,收到了突发的选民时,它首先提交会跳到顶部的"辣"名单,但然后掉下来作为选民停止进来。
(I am使用MySQL+PHP,但我感兴趣的一般设计图案)。
解决方案
你可以使用类似的东西 签交易的算法 -的基本原则,这是你计算的价值为根据的时间被张贴和分。什么是整齐约的签交易的算法是,你只需要重新计算价值时,这是你的一个员额的变化。当你想显示你的前面,你只是获得顶n员额从数据库的基础上,分。随着时间的推移分数自然会增加,所以你不需要做任何特殊处理,以去除的项目从前页。
其他提示
在我自己的网站,我给每个条目的一个独特的整数单调增加的系列(新职位获得更高的数字)。每个最多票数增加一个,每个下投降低它由一个(你可以调整这些价值观,当然)。然后,简单地排序的数量显示最热'项目。
我开发了一个书签社会网站, 网站的个最喜欢的是, 和使用的一个复杂的算法:
- 第一,选民是有限的,一个用户只有数量有限的选民和投票的数量取决于用户点。赚点每个用户都必须添加链接,以获得积极投票。
- 然后,用户可以投票-3,-2,-1,1,2或3选民对每个链接。作为选民为限,每个用户将投票只在那些链接,他们喜欢。
- 防止用户投票的唯一的联系对于相同的用户,创建支持团体,每个投票增加了链接取决于一个racio之间的总的选民和选民的联系的所有者的投票的链接。如果你总是投票相同用户的链接,你的选民将失去价值。
- 选民失去价值与时间。
- 新的链接,用户不必要点(新用户)将有一个起0分。新的联系从旧的用户将有点根据自己的观点。从+3-无限的。链接,用户与负分将负起始点,链接,从用户的积极点,将有积极的起点。
用户将获得随意点时,他们的链接投了反对票。积极的选民得到积极点,负选民负点。
我实现了一个SQL版本的签交易中的排名算法进行视频聚合器像这样:
SELECT id, title
FROM videos
ORDER BY
LOG10(ABS(cached_votes_total) + 1) * SIGN(cached_votes_total)
+ (UNIX_TIMESTAMP(created_at) / 300000) DESC
LIMIT 50
*cached_votes_total*更新的通过触发器每当一个新的投票是演员。它运行足够快的我们当前的网站,但是我计划增加一名值列和更新相同的触发作*cached_votes_total*柱。在这之后的最优化,它应当足够快,对于大多数的任何尺寸的网站。