同时连接,擅长

时间:2009-12-01 00:08:02

标签: visual-studio-2008 algorithm excel intersection

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

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。基于这些会话,我想知道在那个小时内有多少同时连接。

任何想法建议,如何使用,使用什么? Excel中? VS2008?

我想将它保存在excel中的一个好处就是我可以很容易地生成图表等等...而且我一直在努力使用vs中的datetime对象。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

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

如果我想说出14:00到15:00之间同时发生的事情,请不要认为这对我有多大帮助