计算实体频率和新近度的算法?

时间:2015-08-14 15:06:57

标签: c# algorithm frequency frequency-analysis

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

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

2 个答案:

答案 0 :(得分:1)

我会使用启发式方法为实体分配点以进行访问,并对这些点使用某种衰减。

例如,您可以在每次访问时为实体提供1点,并且每天一次将所有点乘以0.8因子

答案 1 :(得分:1)

指数衰减是您正在寻找的东西。看到这个链接:

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