2

我想创建一个排序算法,该算法采用项目分数(基于赞成/反对票)并根据考虑时间衰减的不可见基础分数对它们进行排序。

从分析哲学的角度来看,我的数学算法并不总是最好的。在以下示例中,解决 InverseTimeRelationship(currentItem.CreationDate) 的简单优雅方法是什么:

class Item()
{
  int upvotes;
  int downvotes;
  int SortScore;
  DateTime CreationDate;
}

var currentItem = GetSomeSpecificItemMethod();
int Score = currentItem.upvotes - currentItem.downvotes;
currentItem.SortScore = Score * InverseTimeRelationship(currentItem.CreationDate);
SortItemsBySortScore(Item[]);

InverseTimeRelationship(DateTime CreationDate)
{
  //Code To Write
}

希望一天之后,SortScore 会稍微低一点,但是说 2-3 天之后,无论它有多少票,它都会从列表/首页的顶部消失。

4

2 回答 2

2

你可以看看reddit 使用的算法。这似乎是你想要的。

于 2012-08-07T19:50:22.380 回答
2

也许:

e^-x (= 1/e^x)

看到这张图片(来自维基百科)。

这是代码:

double InverseTimeRelationship(DateTime CreationDate)
{
    double HowFast = 0.1;
    return Math.Exp(-DateTime.Now.Subtract(CreationDate).Days * HowFast);
}

你可以试试:

Text = InverseTimeRelationship(DateTime.Today.AddDays(-3)).ToString();
于 2012-08-07T19:57:21.730 回答