我想创建一个排序算法,该算法获取项目分数(基于upvotes / downvotes),并根据需要时间衰减的隐形基础分数对它们进行排序。
从分析哲学方面来说,我的数学算法并不总是最好的。在以下示例中,解决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天之后,它将从列表/首页的顶部消失。
答案 0 :(得分:2)
您可以查看the algorithm reddit uses。这似乎是你想要的。
答案 1 :(得分:2)
也许:
e ^ -x(= 1 / e ^ x)
请参阅this image(来自Wikipedia)。
这是代码:
double InverseTimeRelationship(DateTime CreationDate)
{
double HowFast = 0.1;
return Math.Exp(-DateTime.Now.Subtract(CreationDate).Days * HowFast);
}
你可以试试:
Text = InverseTimeRelationship(DateTime.Today.AddDays(-3)).ToString();