给定开始+结束 - 同时有多少“交易”

时间:2009-06-23 11:27:16

标签: algorithm language-agnostic

我有几个数据,包括事务的开始及其以DateTime格式结束。我想弄清楚有多少交易在同一时间运行。有没有算法可以解决我的问题?

1 个答案:

答案 0 :(得分:2)

如果您有“开始”和“结束”的列表,并且您想知道并发打开的连接的最大数量(或者在每个点处打开了多少个连接),我将执行以下操作(在伪代码中) ):

  1. 将“开始”和“结束”中的每一个放入带时间戳的数据结构和另一个字段,其值为开始时为+1,结束时为-1
  2. 将所有这些元素放入数组中,并按时间戳
  3. 对其进行排序
  4. 创建另一个数组,在每个条目中,前一个数组的总和为+ 1s和-1s,直到该索引
  5. 该数组的最大值是您的答案
  6. 示例:

    Input: 
    
    Connection A opened at 1 closed at 3
    Connection B opened at 2 closed at 6
    Connection C opened at 4 closed at 7
    Connection D opened at 5 closed at 8
    
    Create the following structure:
    
    Timestamp:           1  2  3  4  5  6  7  8
    First array sorted: +1 +1 -1 +1 +1 -1 -1 -1 
    Second array:        1  2  1  2  3  2  1  0
    
    Max open connections = 3
    Number of connections open at timestamp 6 = 2
    

    第二个数组计算每个时间戳中并发打开的连接数,计算方法如下(伪代码):

    second_array[i] = sum(first_array[1..i])