我正在开发类似于Digg的Web应用程序,我需要一种算法,用于按人气来订购帖子。例如:在第一页上,我希望拥有今天最受欢迎的帖子,而且很少有前几天获得足够的投票。我的db目前看起来像这样:
Table | fields
Posts | id | ... | time
Feedback | id | userid | time | upvote
upvote字段是bool。如果是肯定的,则意味着用户点击了向上投票按钮。
我的表可以修改,因为它们是空的。
任何帮助将不胜感激
答案 0 :(得分:5)
如果我理解正确,你希望投票的价值与其年龄成反比。 (投票越早,对人气指数的评价就越小。)
实现这一目标的一种简单方法是将投票转换为人气单位(PU),而不仅仅是简单的投票,而是PU。 PU的构建可以简单到使其等于1 /(投票的年龄,以天或小时为单位)。一天的投票价值1 PU,而2天的投票价值一半。
答案 1 :(得分:2)
我个人喜欢采用更复杂的方法。一般的想法是,cron处理器每5分钟运行一次,根据您提到的标准以及基于用户的standard deviation计算每个实体的受欢迎程度,以消除团结投票的明显反弹,从而提升自己内容社交圈。
看一看劳森的答案,找出一个分析投票年龄的好主意。但是考虑根据声誉,资历等来应用用户自己的权重可能是有用的。
不幸的是,这并不简单。虽然我觉得它比大多数网络编程更有趣,考虑到游戏的所有基本心理学系统可能是一个非常耗时的过程,可能不是你想到的,除非你碰巧为Digg本身工作,或者成为其中的一部分一个严肃的开始。
这是php.net标准偏差:http://php.net/manual/en/function.stats-standard-deviation.php
虽然我认为这个答案更重要:z-Scores(standard deviation and mean) in PHP
代码示例可能不错,但我们需要您的一些数据才能这样做,即便如此,这可能会非常复杂。但它绝对有趣。特别是当您的代码发现人们试图游戏系统时。