【问题标题】:Count number of subsequences within a sequence with max allowed events in between计算序列中的子序列数,其间有最大允许事件
【发布时间】:2021-06-29 10:22:48
【问题描述】:

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

例如,

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)

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

【问题讨论】:

  • 在一般情况下,你不能做得比线性(w.r.t. 的主序列长度)更好。 OTOH,滑动窗口是线性解决方案。

标签: python algorithm sequence


【解决方案1】:

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

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)]

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

【讨论】:

    猜你喜欢
    • 2011-12-20
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多