|
|
1
2
你要的是 在线算法 即可以为每个新的输入时间增量计算一组新会话的会话。
关于选择
数据结构
对于当前会话集,可以使用平衡二进制搜索树。每个会话由一对表示
这里有一些用于插入的伪代码。为了方便记法,我们假装
这个
这个算法将花费时间o(n log m),其中m是会话的最大数目,您说这是非常小的。
当然,根据编程语言的不同,实现平衡的二进制搜索树并不容易。这里的关键是您必须根据一个键来拆分树,而不是每个现成的库都支持该操作。对于Java,我将使用
|
|
|
2
3
最大延迟
做排序
壁球和征服
如果您的日志文件具有您的问题所建议的“时间位置”,那么单次传递就应该减少数据以允许“完整”排序。 [ 编辑 [这个网站] 1 演示了“插入排序完成的优化快速排序”,这对几乎排序的数据非常好。这家伙也一样,std::sort |
|
|
3
1
我不知道您的问题的名称或您找到的解决方案的名称。但你的解决方案(或多或少)是我提出的解决方案。我认为这是解决那种问题的最好办法。 如果您的数据至少有点有序,那么考虑到这种排序,您可能会找到更好的解决方案。例如,您的数据可以按日期而不是按时间排序。然后,将各个日期分开。 |
|
|
4
1
使用间隔搜索树的解决方案似乎足够有效。 您不必说您提供的数据是否(仅由时间戳组成,没有 日期 )是您正在处理的实际数据。如果是这样,考虑每天只有24*60=1440分钟。因为这是一个相对较小的值,所以创建一个位向量(打包或不打包——并不重要)就好像它可以提供一个既高效又简单的解决方案。 位向量(一旦填充)将能够:
我要注意的是,通过使用保守的加法,您不会将自己限制为30分钟的会话间隔:实际上,您可以随时在线更改此值,因为结构不推断任何信息,而只是存储/查看状态记录的一种实用方法。 |