0

我有一个会话开始和停止时间的列表,格式如下:

23/11/09 15:18:32, 23/11/09 15:18:40
23/11/09 15:20:02, 23/11/09 15:20:32
23/11/09 15:20:10, 23/11/09 15:20:40

目前这是在 excel 中,在一列中开始日期时间,在另一列中结束日期时间。

基本上我想做的是对这些数据进行一些后处理。我还不确定要使用什么,是开发自己的应用程序,还是只使用 excel,这是我希望获得帮助的地方。

基本上我想做的就是说,在一个时间段 x 内,为简单起见,说是 15:00 - 16:00 小时。根据这些会话,我想计算出在那一小时内有多少并发连接。

任何想法建议,如何,使用什么?擅长?VS2008?

我想将它保存在 excel 中的一件好事是我可以轻松地生成图表等......

4

2 回答 2

2

我相信这根本不是一个容易的问题。让我重新陈述您的问题:您可以将每个连接视为一条线上的一段,具有起始值和结束值。您要查找的是具有非空交点的最大段子集;该子集中的元素数是并发连接数。如果你能解决这个问题,找到有限时间跨度的答案应该是微不足道的(只需“截断”每个连接,以便如果起始值在周期开始之前,则连接在周期开始时开始)。
现在我认为这很困难的原因是,如果你采取三个部分,比如 1:00 到 2:00、1:00 到 1:15 和 1:45 到 2:00,所有 3 个重叠,但你只有2个并发连接。因此,仅检查每个连接有多少其他连接重叠是不够的,您必须实际考虑重叠如何重叠,可以这么说。
大多数事情都可以在 Excel 中完成,至少如果你使用 VBA,所以我认为这不是你的问题——问题在于算法本身。
编辑:我做了一些快速挖掘,似乎Marzullo 的算法接近你想要做的。我会再挖掘一些,但这可能会给你一个起点。
编辑 2获得一个体面的答案/近似值的一种“便宜”方法是将您正在考虑的时间段分解为小的连续间隔(例如:在 5 分钟的片段中休息一小时),并为每个片段计算重叠的连接。这应该比显式尝试识别大多数段相交的段要快得多!

于 2009-12-01T05:30:01.213 回答
0

我想一个非常低效的方法是逐步检查呼叫开始值,检查每个呼叫结束值是否更大,如果它更大则增加计数器(同时调用)

然后在特定时间我可以说他们有多少同时连接......

如果我想说 14:00 到 15:00 之间同时有多少人的话,我觉得这对我没有多大帮助

于 2009-12-01T02:10:41.350 回答