algorithm - 临时组成员统计 - 有什么聪明的方法吗?

标签 algorithm data-structures grouping approximation temporal-database

我正在建立一个网站。它有用户可以加入的组。

此组与“普通”组的区别在于成员资格是 临时 - 当用户加入一个组时,他决定成员资格的长度:5 天,一个 周、2 周等(选择是预先定义的)。或者可能全部 成员(member)资格可以设置为相同的长度——比如一周——如果 这让事情变得更简单。

我想统计每个成员的数量 团体。这个数字不需要精确到最后一秒。 但它也不能过时——比如说,应该更新一次 一天。

计算成员数量的“明显”方法似乎是 运行一个 cron 作业,比如每天,然后遍历每个成员 一组一组。如果成员(member)资格已过期,请删除该成员(member) 从组中取出,并将组的成员数减 1。

这种方法似乎效率很低,而且可扩展性不强。与 大量的组,这可能需要很长时间。

你能想出更好的方法吗?成员(member)人数 不需要精确到最新的秒数。可以是近似的 并且(稍微)过时了。如果这一切都有所不同 成员资格可以设置为相同的长度,比如一周。

最佳答案

存储每个组中当前有多少人的列表。还存储天数列表。每天都会包含一个组列表,以及当天要从该组中减去的人数。

当一个人加入一个群组时,群组总数加 1,并在他/她的成员资格到期当天为该群组减去的人数加 1。

如果一个人的到期日期发生变化,则从旧的到期日期(对于该组)中减去 1,并将新的到期日期加 1。

最后,当然,每天一次从当天的每组中减去正确的数量。

关于algorithm - 临时组成员统计 - 有什么聪明的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3259274/

相关文章:

algorithm - 是否可以在没有锁的情况下创建线程安全的集合?

grouping - CKAN 中的组织和团体有什么区别?

c++ - Bank Kattis 问题的算法正确性

Golang LinkedList 删除第一个元素

c - 最容易在C中实现在线排序数据结构

arrays - 找到其和可被 K 整除的最长子数组

sql - 如何在数学上做 "GROUP BY"?

c# - 使用 LINQ 创建数据间隔

C# 相当于使用 python 切片操作旋转列表

algorithm - 有没有更快的算法来找到 log(n) 的近似值,它的时间复杂度是多少?