找到m个时段的所有交叉点n个聚会

时间:2017-09-11 19:13:20

标签: algorithm intervals timeslots

我无法找到解决以下问题的好方法:

对于一项活动,我有n个派对(party_id)参加。每个参与方以availabilitiesstart_date的形式对该活动设置end_date

我想知道的是,每个availabilities只包含一个availability的重叠party_id的所有可能组合。我发现了可以使用的间隔树(https://en.wikipedia.org/wiki/Interval_tree),但正如我所说,我无法理解它。

非常感谢您的任何想法!

1 个答案:

答案 0 :(得分:1)

直截了当的方式是按时间对所有事件(end_date和{{1}}等)进行排序。然后按时间顺序浏览此列表,同时跟踪所有“活动”方(即已启动但未停止的那些方)。

上述方法是一个批处理过程,可以让您轻松找到给定计划的所有可能组合。您提到的区间树在您希望逐步更新您的参与方的情况下非常有用 - 数据结构可以针对特定时间进行单独查询比为每次更新或查询重新运行批处理要便宜得多。