我有一个伪随机二进制{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.