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

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

最佳答案

指数衰减正是您所寻找的。请参阅此链接:

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

关于c# - 计算实体的频率和新近度的算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32013198/

相关文章:

c# - 在具有开放泛型类型的 Controller 上创建操作方法

c# - 数据库宕机时如何防止 "503 Service Unavailable"

java - 算法——求循环缓冲区中数字的平均值?

java - 在Java中查找负数的最大乘积

Python降序字数

iPhone SDK 通过 iPhone 麦克风测量频率

c# - Azure部署更新-正在运行的服务的证书与上传的sdk包中的证书不匹配

c# - WinForms 拼写检查器推荐

Javascript 基数排序

R:计算多个(!)列中字符串的多次出现