将时间戳集合分解为具有偶数时间间隔的子集的算法

时间:2013-02-14 03:55:01

标签: algorithm

我有一个包含>的数据集100,000条记录,其中每条记录都有一个时间戳。

此数据集已从多个“控制器”节点聚合,每个节点从一组子节点收集数据。每个控制器定期收集这些记录(例如,每5分钟一次或每10分钟一次),并且控制器将时间戳应用于记录。


例如:

Controller One可能有20个时间戳记的时间戳记t,23个记录时间戳t + 5 minutes,33个记录的时间t + 10 minutes

控制器2可能有30个记录时间戳(t + 2 minutes) + 10 minutes,32个记录时间戳(t + 2 minutes) + 20 minutes,41个记录时间戳(t + 2 minutes) + 30 minutes等等。


现在假设您拥有的唯一信息是所有时间戳的集合以及每个时间戳记中出现的记录数。也就是说,您不知道i)哪个控制器生成哪些记录集,ii)每个控制器的收集间隔或ii)控制器总数。是否存在可以将所有时间戳的集合分解为单个子集的算法,使得每个给定子集的连续(有序)元素之间的差异的方差非常接近0,同时将来自一个子集i的任何元素添加到另一个子集j会增加这种差异吗?请记住,对于此数据集,由于CPU时序/网络延迟等原因,单个控制器的“周期性”可能会波动+/-几秒钟。

我的最终目标是建立a)有多少个控制器,b)每个控制器的采样间隔。到目前为止,我一直在考虑周期函数方面的问题,所以也许有一些区域的分解方法可能有用。

要做的另一点是我不需要知道每个记录来自哪个控制器,我只需要知道每个控制器的采样间隔。所以例如如果有两个控制器都在时间u开始采样,一个以5分钟的间隔采样,另一个以50分钟的间隔采样,那么在50分钟时很难将两者分开,因为5这是无关紧要的。只要我能获得足够的信息来计算每个控制器的间隔,尽管偶尔会有重叠,这也无关紧要。

1 个答案:

答案 0 :(得分:1)

一种基本方法是对数据集执行FFT分解(或者,如果您感觉很奇特,则使用周期图)并在结果光谱中查找峰值。这将为您提供控制器周期的粗略近似值,甚至可以估计它们的数量(通过查看峰值的高度,它可以告诉您记录了多少记录)。