子串搜索以从随机二进制序列中获得近似匹配

时间:2018-08-02 09:56:58

标签: python algorithm search alignment substring

我有一个伪随机二进制{0,1}序列(X)和一个X的不连续子序列(Y)。如何在Y与X一致且匹配最大的情况下进行匹配,或者找出对齐方式从Y到X。 鉴于: 1. Y不连续。 2. Y是错误的。

由于使用了子字符串算法(例如KMP,Rabin-Karp和Boyer Moore Horspool算法)来查找精确匹配项,因此无法使用。

我已经使用自相关实现了上述方法,但是算法的时间复杂度是O(n * m)n-序列长度和m-长度。

伪代码:(自相关): 假设我有Y的每个元素到Y的第一个元素的距离。      d = [Y的每个元素到y的第一个元素的距离列表]

for index=0 to index=len(X)
  X1=extract list of d distance elements from X
  for index2=0 to index2=len(Y)
      if(Y[index2]^X1[index2])
          cost=cost+1
 find index with max cost

还有其他可用于此的字符串匹配算法吗?

编辑:

添加问题示例。
问题陈述:
    长度为1百万的{0,1}的X随机序列
    X的Y子集(随机,选择了X的1000个元素)。
Y是错误的。
每个元素相对于Y的第一个元素的相对索引都是已知的。
Y的第一个元素不一定是X的第0个元素。
找到索引Y的起始位置,即找到Y与X对齐的位置。

 Example:
 X=[0,0,1,0,1,1,0,1,1,1,0]
 y=[1,1,0,0]
 d=[0,3,4,8]

 alignment of Y w.r.t to X is 2nd index of X.

0 个答案:

没有答案