计算一个序列中子序列的数量,其间有最大允许事件

Count number of subsequences within a sequence with max allowed events in between

给定一个主要事件序列(例如,A->B->A->B->B)、一个子序列(A->B)和中间允许的最大事件数(n),我想计算主序列中子序列的数量(N)。

例如,

N=2 for n=0(第一个 A -> 第一个 B,第二个 A -> 第二个 B)

N=3 for n=1(第一个 A -> 第一个 B,第二个 A -> 第二个 B,第二个 A -> 第三个 B)

N=4 for n=2(第一个 A -> 第一个 B,第二个 A -> 第二个 B,第二个 A -> 第三个 B,第一个 A -> 第二个 B)

N=5 for n=3 (第一个A -> 第一个B,第二个A -> 第二个B,第二个A -> 第三个B,第一个A -> 第二个B,第一个A -> 第三个B)

这个问题有有效的算法吗?我的问题的主序列可能很长,我有很多子序列需要计算。

您可能会使用正则表达式得到一些结果,但这取决于您的事件定义的复杂程度。 或者你可以选择

result = [(first,first+steps+1)
          for steps in range(len(seq)-1) for first in range(len(seq)-steps-1)
          if seq[first]==target[0] and seq[first+steps+1]==target[1]]

>>> result
[(0, 1), (2, 3), (2, 4), (0, 3), (0, 4)]

虽然我不知道它对大型数据集是否足够有效