我正在开发一个类似于Digg的web应用程序,我需要一个算法来按受欢迎程度对帖子进行排序。例如:在第一页,我想要有今天最受欢迎的帖子,以及几天前几天达到足够票数的帖子。我的数据库现在看起来是这样的:
Table | fields
Posts | id | ... | time
Feedback | id | userid | time | upvote向上投票字段为bool。如果是肯定的,则表示用户点击了向上投票按钮。
我的表可以修改,因为它们是空的。
任何帮助我们都将不胜感激。
发布于 2012-01-19 07:33:01
就我个人而言,我喜欢采取更复杂的方法。一般的想法是,cron处理器每5分钟运行一次,根据你提到的标准计算每个实体的受欢迎程度,以及基于用户的standard deviation,以消除明显的帮派投票集会,以提高他们自己的社交圈内的内容。
看看Lawson关于考虑投票年龄的好主意的答案。但考虑到基于声誉、资历等应用用户自己的权重可能是有用的。
不幸的是,这并不简单。虽然我发现它比大多数网络编程更有趣,但考虑到游戏系统的所有基本心理因素可能是一个非常耗时的过程,而且可能不是你所想的,除非你碰巧为Digg工作,或者是一个严肃的初创公司的一部分。
这是php.net标准差:http://php.net/manual/en/function.stats-standard-deviation.php
尽管我认为这个答案更切中要害:z-Scores(standard deviation and mean) in PHP
代码样本可能很好,但我们需要一些您的数据来做到这一点,即使这样,这可能会变得相当复杂。但这绝对是很有趣的。尤其是当您的代码发现有人试图玩弄系统时。
发布于 2012-01-19 07:19:25
如果我没理解错的话,你希望一张选票的价值与它的年龄成反比。(投票时间越长,它对你的人气指数的影响就越小。)
要实现这一点,一种简单的方法是将选票转换为人气单位(PU),并且不仅对简单的选票求和,而且对PU求和。PU的构造可以像使其等于1/(投票的年龄,以天或小时为单位)一样简单。一天前的投票将价值1PU,而两天前的投票将价值的一半。
https://stackoverflow.com/questions/8918793
复制相似问题