给定事件的主序列(例如,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)
这个问题有一个有效的算法吗?我的问题的主要顺序可以是长的,我有许多子序列可计数。
发布于 2021-06-29 13:51:35
您可能会得到一些正则表达式的结果,但这取决于您的事件定义有多复杂。或者,你也可以选择这样的方式
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)]虽然我不知道它对大型数据集是否有效
https://stackoverflow.com/questions/68176871
复制相似问题