Php 使用开始和结束日期/时间计算事件数的算法

Php 使用开始和结束日期/时间计算事件数的算法,php,algorithm,count,Php,Algorithm,Count,我有一组事件,有开始和结束时间。我想生成一个时间数组和事件数,在创建图表时,值会发生变化。现在,我正在通过多次迭代开始和结束时间来计算该值。还有别的办法吗 例如 我应该得到一个像这样的数组 Jan 1: 1 Jan 6: 2 Jan 8: 3 Jan 11: 2 Feb 2: 1 Feb 7: 0 如果您将事件作为排序列表(最早日期优先),则 下面是非常糟糕的伪代码 running_count = 0 list_of_end_dates = []; vector_of_date_events_

我有一组事件,有开始和结束时间。我想生成一个时间数组和事件数,在创建图表时,值会发生变化。现在,我正在通过多次迭代开始和结束时间来计算该值。还有别的办法吗

例如

我应该得到一个像这样的数组

Jan 1: 1
Jan 6: 2
Jan 8: 3
Jan 11: 2
Feb 2: 1
Feb 7: 0

如果您将事件作为排序列表(最早日期优先),则
下面是非常糟糕的伪代码

running_count = 0
list_of_end_dates = [];
vector_of_date_events_pairs = [];
For Each item in the events collection { 
    running_count += 1
    while(queue.tail < item.end_date) {
        queue.pop_back()
        running_count -= 1
    }
    vector_of_date_events_pairs.push(item.start_date, running_count)
    list_of_end_dates.push_front(item.end_date)
}
running\u count=0
列出结束日期=[];
日期事件对向量=[];
对于事件集合{
运行计数+=1
while(queue.tail
创建一个包含所有开始和结束时间的数组,以及事件在此日期是开始(1)还是结束(-1)的信息:

[(Jan 1 , 1), (Jan 10, -1), (Jan 6, 1), (Feb 6, -1), (Jan 8, 1), (Feb 1, -1)]
按日期对数组排序:

[(Jan 1 , 1), (Jan 6, 1), (Jan 8, 1), (Jan 10, -1), (Feb 1, -1), (Feb 6, -1)]
遍历数组,保留一个计数器,并根据需要将日期添加到数组中。您可能希望将同一日期的各种事件合并到一个条目中

(这不是O(n²),但我认为目标是比原来的O(n²)更好。)

[(Jan 1 , 1), (Jan 6, 1), (Jan 8, 1), (Jan 10, -1), (Feb 1, -1), (Feb 6, -1)]