我有很多netflow数据(i.e src_ip, dest_ip, beg_time, end_time, data_size, etc)
,其中一些定期发生,我想知道。
考虑我有 n netflow(可能大约10 ^ 6), m 周期性。我怎么能找到哪些是周期性的?
我可以编写一个代码,但它至少会是O(n ^ 3 logn),这将在10 ^ 4 netflow之后永远占用。
我搜索过它但找不到任何东西。
注意:您可以考虑根据开始时间对数据进行排序,并且开始时间为32位无符号整数int(cint中的uint32)
更正:src_ip
是唯一的,dest_ip
不是唯一的,time for periodicity
未知。可能是5分钟,也可能是5天。您可以忘记src_ip, dest_ip, end_time, data_size
和流的其他属性。 我只是在寻找开始时间是周期性的事件,你可以考虑,我已经发现了不同的事件,就像不同的src_ip一样,等等......
任何帮助将不胜感激,
由于
答案 0 :(得分:0)
我尝试对与您的数据相对应的信号计算FFT。
例如,我将块beg_time
= 1,end_time
= 5,data_size
= 100转换为1到5个单位时间的方波脉冲振幅100。
如果你想要一起分析所有东西,你可以叠加你已经拥有的所有脉冲。
如果将所有内容放在一起没有意义,则只叠加来自同一src_ip
或同一对src_ip
和dst_ip
的脉冲。
然后对通过叠加获得的信号运行FFT,看看频域是否有明显的峰值,或者看起来都是随机的,没有突出的峰值。
FFT在O(n * log(n))时间运行,其中n
是信号样本的数量。
我确信必须有更好的方法来做到这一点,但值得一试。