如何解决计算序列中子序列的数量,中间允许的最大事件数
给定事件的主序列(例如,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),4),(0,4)]
虽然我不知道它对于大型数据集是否足够有效
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。