我目前正在寻找合适的C数据结构来对日历进行建模,在该日历中我可以有类似Google日历的周期性事件。
我已经建模了一些东西,我想问一下您在想什么,是否有更好的方法(及时?在太空?)。
这是我的问题的说明(比Google日历简单):
- 一个事件是一个间隔[time1,time2]
- 一个事件可以是周期性的,也可以不是周期性的。在某些特定的日子里会定期发生周期性事件。
- 可以删除定期事件的发生而无需更改其他发生(例如,对于2018年10月31日,2018-11-01和2018-11-02年发生的事件,我只能删除发生在2018-11-01)
我的第一个想法是将日期保存在AVL树中,其中每个节点(即每天)都包含事件列表(时间间隔)。
id
有了这个,我认为我感兴趣的操作的复杂性如下:
- 插入非定期事件:在树中寻找合适的日期,并将事件添加到事件列表的开头。如果日期不存在,请添加日期和当天的事件。最坏情况下的成本为O(log(n))。
- 插入定期事件:查找每个发生的日期并添加事件。费用为O(mlog(n)),m为重复次数
- 删除定期事件的发生。查找相应的日期,浏览事件列表并删除事件:O(log(n)+ m),m是一天中的最大事件数
- 显示给定日期的事件。寻找一天,浏览事件:我认为O(log(n)+ m)是O(m)
提前感谢您的宝贵意见。
Ps。 请不要限制我的主张,您可以提出一些完全不同的建议 。