随着时间的推移衰减价值呈指数级增长

时间:2012-08-07 19:48:04

标签: c# algorithm math datetime

我想创建一个排序算法,该算法获取项目分数(基于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天之后,它将从列表/首页的顶部消失。

2 个答案:

答案 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();