我有一个很大的数字向量,比如 500 个数字。我想要一个程序来根据以下规则检测此类向量中的模式(在这种情况下再次出现):
一个数字序列是一个模式,如果:
序列的大小在 3 到 20 个数字之间。
序列中数字的相对位置在向量中至少重复一次。所以假设我有一个序列 (1,4,3),然后 (3,6,5) 在向量中的其他位置,那么 (1,4,3) 是一个模式。(以及(2,5,4),(3,6,5)等)
序列不能相交。因此,向量 (1,2,3,4,5) 不包含模式 (1,2,3) 和 (3,4,5)(我们不能对两个序列使用相同的数字)。但是, (1,2,3,3,4,5) 确实包含模式 (1,2,3) (或 (3,4,5))
仅当 A 出现在 B 之外的其他位置时,模式 B 的子集 A 才是模式。因此,向量 (1,2,3,4,7,8,9,2,3,4,5) 将包含模式 ( 1,2,3,4) 和 (1,2,3),因为 (1,2,3,4) 重复(以 (2,3,4,5) 的形式)和 (1,2, 3) 重复(以 (7,8,9) 的形式)。但是,如果向量是 (1,2,3,4,2,3,4,5),则唯一的模式将是 (1,2,3,4),因为 (1,2,3) 仅出现在上下文中(1,2,3,4)。
我想知道几件事:
首先,我希望规则不会相互冲突。我自己做的,所以可能会在我没有注意到的地方发生冲突,如果你注意到了,请告诉我。
其次,如何以最有效的方式实施这样的系统?也许有人可以指出一些关于这个主题的特定文献?我可以从搜索所有 3 的子集的序列重复开始,然后是 4,5,直到 20。但这似乎不是很有效。非常欢迎指导。
先感谢您!