算法计算频率和最近的一个实体

本文关键字:一个 实体 计算 频率 最近 算法 | 更新日期: 2023-09-27 18:08:03

我有一个由各种用户打开的实体列表。我通过存储访问日期和时间来跟踪任何实体的每次访问,如下所示:

public class Entity
{
  public int Id { get; set; }
  public virtual ICollection<AccessInfo> Accesses { get; set; } 
    = new HashSet<AccessInfo>();
}
public class AccessInfo
{
  public int Id { get; set; }
  public AccessInfoType Type { get; set; }
  public User User { get; set; }
  public DateTime DateTime { get; set; }
}
public enum AccessInfoType
{
  Create,
  Read,
  Update,
  Delete,
}

现在我正在尝试制作一种算法,根据两个因素来过滤最想要的联系人:最近和频率。

我希望昨天被访问5次的联系人优先于一周前被访问30次的联系人。但另一方面,今天只访问过一次的用户就不那么重要了。

这个有正式的名称吗?我敢肯定以前有人做过这样的频率计算,在我花时间编码之前,我想读一下这个。

我想过计算最近一个月访问日期的总和并进行排序,但我仍然不确定这是正确的方法,我想向专家学习。

return Entities
  .OrderBy(c =>
    c.Accesses
      .Where(a => a.Employee.UserName == UserName)
      .Where(a => a.DateTime > lastMonth)
      .Select(a => a.DateTime.Ticks)
      .Sum());

算法计算频率和最近的一个实体

指数衰减就是你要找的。请看这个链接:

http://www.evanmiller.org/rank-hotness-with-newtons-law-of-cooling.html

我将使用启发式方法,为实体分配访问点,并在这些点上使用某种衰减。

例如,您可以在每次访问一个实体时给它1点,并且每天将所有点乘以0.8倍