我有一个更大(150000)的条目列表,这些条目在开始和结束时都有时间戳。我试图找出最大并发事件数的时间。我喜欢的语言和例子是python
dictionary EVENTS保存数据,tag是事件的id,Start和End是datetime对象,分别是每个实例的开始时间和结束时间,因此:
EVENTS[tag][end][start] = [list of occurrences at that start/end time stamp]
endkey = EVENTS[tag].keys()
endkey.sort()
peak = 0
for end in endkey:
endentrykey = EVENTS[tag].keys()
endentrykey.sort()
for endtime in endentrykey:
if endtime < end: # We can disregard entries that ended before the event
break
startentrykey = EVENTS[tag][item].keys()
startentrykey.sort()
for starttime in startentrykey:
if starttime > end: # ignore events that started after the event ended
break
peak = len(EVENT[tag][endtime][starttime])
我没有尝试过多线程,但我强烈怀疑我是CPU限制
有人能提出一个更好的算法来实现这一点吗
您可以在python评测中查看这个问题的答案question,以帮助您识别瓶颈。有一点排序正在进行,这可能是次优的
如果您的事件数据是按开始时间排序的,那么您应该能够按顺序遍历事件,并向前和向后查看以确定重叠事件的计数
这里有一个例子,我的意思是,我生成150000个随机持续时间的连续开始事件。然后以上面描述的方式遍历事件,并打印最具并发性的前十个事件
代码如下:
如果有需要澄清的地方,请告诉我
相关问题 更多 >
编程相关推荐