【发布时间】:2014-02-14 17:31:05
【问题描述】:
我有许多包含 500 到 1000 个整数的数组。我想在这些数组中找到某个序列模式的一部分的任何实例。例如,我有一个偏移模式
offset = [-15, -12, -5, -1, 1, 10, 20, 32]
和一个正整数的排序列表
A = [2, 8, 12, 15, 22, ...] # Length ~ 1000
我想找到所有这样的整数 N,使得对于 offset 中的每个 a,N + a 是 A 的一个元素。
但是,理想情况下,我可以为匹配 N 所需的 a 值的数量设置一个阈值。因此,如果我的偏移量为 3,那么可能只有 N - 12、N - 1 和 N + 20 是存在于 A 中的值,我想保留 N。
我可以很容易地编写一个蛮力算法来测试这个条件 - 但是有成千上万个这样的数组来测试几个模式,我想知道是否有更好的方法来解决这个问题。谢谢。
根据要求,这里有一些蛮力算法的伪代码:
# Not perfect because it doesn't take into account possible boundary cutoffs
for a in A:
new_offset = [x + a for x in offset]
count = sum(x in A for x in new_offset)
if count >= threshhold:
# keep a, and work out N
【问题讨论】:
-
如果您至少向我们展示该蛮力算法将是什么,它可能有助于准确地阐明您想要什么。
-
绝对可以使用列表推导来做到这一点。
-
@wnnmaw:对于
offset中的as 中的至少一些,N+a在A中。对于需要匹配的偏移值的数量,我需要一个可变阈值。 @mhlester,我会写一些伪代码 -
@user2852809,是的,当我重新阅读您的帖子时,我注意到了
-
什么是典型的偏移长度,您希望看到的整数范围是多少(例如,数组中的所有整数是否都小于 10,000)? (对于长偏移和小范围,您最好使用快速傅里叶变换)