我有一百万个整数排序顺序,我想找到最长的子序列,其中连续对之间的差异是相等的。比如说
1, 4, 5, 7, 8, 12
有一个子序列
4, 8, 12
我的天真方法是贪婪的,只是检查从每个点扩展子序列的距离。这似乎需要每点 O(n²)的时间。
有没有更快的方法来解决这个问题?
更新。我会尽快测试答案中给出的代码(谢谢)。然而,很明显,使用 n ^ 2内存是行不通的。到目前为止,还没有以 [random.randint(0,100000) for r in xrange(200000)]作为输入结束的代码。
我在我的32位系统上使用以下输入数据进行了测试。
a= [random.randint(0,10000) for r in xrange(20000)]
a.sort()
为了能够测试克鲁耶夫的方法,我重新运行
a= [random.randint(0,40000) for r in xrange(28000)]
a = list(set(a))
a.sort()
制作一个长度大约为 20000的列表
看起来,如果 ZelluX 方法可以成为线性空间,它将是明显的赢家。