投票加权算法

时间:2012-01-18 23:01:41

标签: php algorithm statistics theory

我正在开发类似于Digg的Web应用程序,我需要一种算法,用于按人气来订购帖子。例如:在第一页上,我希望拥有今天最受欢迎的帖子,而且很少有前几天获得足够的投票。我的db目前看起来像这样:

Table | fields
Posts | id | ... | time
Feedback | id | userid | time | upvote

upvote字段是bool。如果是肯定的,则意味着用户点击了向上投票按钮。

我的表可以修改,因为它们是空的。

任何帮助将不胜感激

2 个答案:

答案 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

代码示例可能不错,但我们需要您的一些数据才能这样做,即便如此,这可能会非常复杂。但它绝对有趣。特别是当您的代码发现人们试图游戏系统时。