【发布时间】:2010-04-07 01:29:58
【问题描述】:
我在磁盘上有大量元组序列,格式为 (t1, k1) (t2, k2) ... (tn, kn)
ti 是一个单调递增的时间戳,ki 是一个键(如果需要,假设一个固定长度的字符串)。 ti 和 ki 都不能保证是唯一的。然而,独特的 tis 和 kis 的数量是巨大的(数百万)。 n 本身非常大(1 亿+),而 k 的大小(大约 500 字节)使得无法将所有内容存储在内存中。
我想找出这个序列中键的周期性出现。
例如,如果我有序列 (一,一) (2, b) (3, c) (4, b) (5、一) (6, b) (7, d) (8, b) (9, 一) (10, b)
算法应该发出 (a, 4) 和 (b, 2)。即 a 出现周期为 4,b 出现周期为 2。
如果我构建所有键的哈希并存储每个键的连续时间戳之间的差异的平均值和相同的标准偏差,我可能能够通过,并且只报告那些具有可接受的标准偏差(理想情况下为 0)。但是,每个唯一键需要一个桶,而在实践中,我可能很少有真正的周期性模式。还有更好的方法吗?
【问题讨论】:
-
如果 ti 单调递增,它们不是唯一的吗?
-
单调递增函数是非递减的。在这种情况下,这意味着 t(i)
标签: algorithm